123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- package com.simuwang.manage.service.impl;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.exceptions.ExceptionUtil;
- import com.simuwang.base.common.conts.DateConst;
- import com.simuwang.base.common.support.MybatisPage;
- import com.simuwang.base.common.util.StringUtil;
- import com.simuwang.base.mapper.*;
- import com.simuwang.base.pojo.dos.*;
- import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
- import com.simuwang.base.pojo.vo.FundAliasVO;
- import com.simuwang.base.pojo.vo.IdListVO;
- import com.simuwang.manage.service.EmailFundAssetService;
- import com.simuwang.manage.service.EmailFundNavService;
- import com.simuwang.manage.service.EmailFundInfoService;
- import com.simuwang.manage.service.FundAliasService;
- import com.simuwang.shiro.utils.UserUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * FileName: FunAliasServiceImpl
- * Author: chenjianhua
- * Date: 2024/9/14 16:18
- * Description: ${DESCRIPTION}
- */
- @Service
- public class FundAliasServiceImpl implements FundAliasService {
- private static final Logger log = LoggerFactory.getLogger(FundAliasServiceImpl.class);
- @Autowired
- private FundAliasMapper fundAliasMapper;
- @Autowired
- private EmailFundNavMapper emailFundNavMapper;
- @Autowired
- private EmailFundAssetMapper emailFundAssetMapper;
- @Autowired
- private CompanyInformationMapper companyInformationMapper;
- @Autowired
- private EmailFundInfoService emailFundInfoService;
- @Autowired
- private EmailFundNavService emailFileNavService;
- @Autowired
- private EmailFundAssetService emailFundAssetService;
- @Autowired
- private NavMapper navMapper;
- @Autowired
- private AssetMapper assetMapper;
- @Override
- public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery) {
- List<FundAliasDO> fundAliasDOList = fundAliasMapper.searchFundAlias(fundAliasPageQuery);
- List<FundAliasVO> fundAliasVOList = fundAliasDOList.stream().map(FundAliasDO::toVo).collect(Collectors.toList());
- for(FundAliasVO vo : fundAliasVOList){
- //异常净值数量
- Integer navTotal = emailFundNavMapper.countNoStoreNav(vo.getSourceFundName(),vo.getSourceRegisterNumber());
- vo.setNavTotal(navTotal);
- //异常净值数量
- Integer assetTotal = emailFundAssetMapper.countNoStoreAsset(vo.getSourceFundName(),vo.getSourceRegisterNumber());
- vo.setAssetTotal(assetTotal);
- //最新净值日期
- vo.setPriceDate(emailFundNavMapper.getMaxPriceDate(vo.getSourceFundName()));
- }
- long total = fundAliasMapper.countFundAlias(fundAliasPageQuery);
- return MybatisPage.of(total,fundAliasVOList);
- }
- @Override
- public FundAliasVO searchFundAliasById(Integer id) {
- FundAliasDO fundAliasDO = fundAliasMapper.searchFundAliasById(id);
- if(StringUtil.isNull(fundAliasDO)){
- return null;
- }
- return fundAliasDO.toVo();
- }
- @Override
- public void saveFundAlias(FundAliasVO fundAliasVO) {
- FundAliasDO fundAliasDO = new FundAliasDO();
- fundAliasDO.setSourceFundName(fundAliasVO.getSourceFundName());
- fundAliasDO.setTargetFundId(fundAliasVO.getTargetFundId());
- fundAliasDO.setSourceRegisterNumber(fundAliasVO.getSourceRegisterNumber());
- fundAliasDO.setTargetFundName(fundAliasVO.getTargetFundName());
- fundAliasDO.setTargetRegisterNumber(fundAliasVO.getTargetRegisterNumber());
- fundAliasDO.setId(fundAliasVO.getId());
- fundAliasDO.setIsvalid(1);
- fundAliasDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
- fundAliasDO.setCreatorId(UserUtils.getLoginUser().getUserId());
- fundAliasDO.setUpdateTime(new Date());
- FundAliasDO oldFundAliasDO = fundAliasMapper.searchFundAliasById(fundAliasVO.getId());
- String oldFundId = oldFundAliasDO.getTargetFundId();
- fundAliasMapper.saveFundAlias(fundAliasDO);
- //将采集的净值数据匹配之后重新入库
- emailFileNavService.reparseFileNav(fundAliasVO.getSourceFundName(),fundAliasVO.getSourceRegisterNumber(),fundAliasVO.getTargetFundId(),oldFundId);
- //将采集的规模数据匹配之后重新入库
- emailFundAssetService.reparseFileAsset(fundAliasVO.getSourceFundName(),fundAliasVO.getSourceRegisterNumber(),fundAliasVO.getTargetFundId(),oldFundId);
- //处理采集数据,将采集的数据入库
- emailFundInfoService.reparseValuationFile(fundAliasVO.getSourceFundName(),fundAliasVO.getSourceRegisterNumber());
- }
- @Override
- public void deleteFundAlias(IdListVO idListVO) {
- List<Integer> idList = idListVO.getIdList();
- Integer userId = UserUtils.getLoginUser().getUserId();
- if(idList.size() > 0){
- fundAliasMapper.batchDelete(idList,userId);
- }
- }
- @Override
- public void updateFundNavAndAsset(String date) {
- // 获取别名管理表信息fund_alias
- List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryByLatestDate(date);
- if (CollUtil.isEmpty(fundAliasDOList)) {
- return;
- }
- // 查询基金名称和备案编码对应的邮件净值表email_fund_nav(异常情况为未匹配基金ID && is_stored=0未入库)
- for (FundAliasDO fundAliasDO : fundAliasDOList) {
- String fundId = fundAliasDO.getTargetFundId();
- String fundName = fundAliasDO.getSourceFundName();
- String registerNumber = fundAliasDO.getSourceRegisterNumber();
- try {
- long startTime = System.currentTimeMillis();
- // 1.更新净值nav
- updateFundNav(fundId, fundName, registerNumber);
- // 2.更新资产净值asset
- updateFundAsset(fundId, fundName, registerNumber);
- log.info("更新基金nav和asset完成 -> fundId:{}, cost:{}ms", fundId, (System.currentTimeMillis()-startTime));
- } catch (Exception e) {
- log.error("更新基金nav和asset异常 fundId:{}, fundName:{}, registerNumber:{} -> 堆栈信息:{}", fundId, fundName, registerNumber, ExceptionUtil.stacktraceToString(e));
- }
- }
- }
- private void updateFundAsset(String fundId, String fundName, String registerNumber) {
- List<EmailFundAssetDO> emailFundAssetDOList = emailFundAssetMapper.queryByNameAndReg(fundName, registerNumber);
- if (CollUtil.isEmpty(emailFundAssetDOList)) {
- return;
- }
- List<String> priceDateList = emailFundAssetDOList.stream().filter(e -> e.getPriceDate() != null)
- .map(e -> cn.hutool.core.date.DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD)).distinct().toList();
- if (CollUtil.isEmpty(priceDateList)) {
- return;
- }
- // 不处理基金本身已存在的净值日期
- List<String> dateList = assetMapper.queryFundNavByDate(fundId, priceDateList);
- emailFundAssetDOList = emailFundAssetDOList.stream().filter(e -> !dateList.contains(cn.hutool.core.date.DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).toList();
- List<AssetDO> assetDOList = emailFundAssetDOList.stream().map(e -> {
- AssetDO assetDO = BeanUtil.copyProperties(e, AssetDO.class);
- assetDO.setId(null);
- assetDO.setFundId(fundId);
- assetDO.setCreateTime(new Date());
- assetDO.setUpdateTime(new Date());
- return assetDO;
- }).toList();
- if (CollUtil.isNotEmpty(assetDOList)) {
- assetMapper.batchInsert(assetDOList);
- }
- List<Integer> emailFundAssetIdList = emailFundAssetDOList.stream().map(EmailFundAssetDO::getId).toList();
- emailFundAssetMapper.updateFundIdByIds(fundId, emailFundAssetIdList);
- }
- private void updateFundNav(String fundId, String fundName, String registerNumber) {
- List<EmailFundNavDO> emailFundNavDOList = emailFundNavMapper.queryByNameAndReg(fundName, registerNumber);
- if (CollUtil.isEmpty(emailFundNavDOList)) {
- return;
- }
- // 1.将数据插入到nav表 -> 更新email_fund_nav的fund_id字段
- List<String> priceDateList = emailFundNavDOList.stream().filter(e -> e.getPriceDate() != null).map(e -> cn.hutool.core.date.DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD)).distinct().toList();
- if (CollUtil.isEmpty(priceDateList)) {
- return;
- }
- // 不处理基金本身已存在的净值日期
- List<String> dateList = navMapper.queryFundNavByDate(fundId, priceDateList);
- emailFundNavDOList = emailFundNavDOList.stream().filter(e -> !dateList.contains(cn.hutool.core.date.DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).toList();
- List<NavDO> navDOList = emailFundNavDOList.stream().map(e -> {
- NavDO navDO = BeanUtil.copyProperties(e, NavDO.class);
- navDO.setId(null);
- navDO.setFundId(fundId);
- navDO.setCreateTime(new Date());
- navDO.setUpdateTime(new Date());
- return navDO;
- }).toList();
- if (CollUtil.isNotEmpty(navDOList)) {
- navMapper.batchInsert(navDOList);
- }
- List<Integer> emailFundNavIdList = emailFundNavDOList.stream().map(EmailFundNavDO::getId).toList();
- emailFundNavMapper.updateFundIdByIds(fundId, emailFundNavIdList);
- }
- }
|