package com.simuwang.manage.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.simuwang.base.common.util.DateUtils; import com.simuwang.base.common.util.StringUtil; import com.simuwang.base.mapper.EmailFundNavMapper; import com.simuwang.base.mapper.NavMapper; import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO; import com.simuwang.base.pojo.dos.EmailFundNavDO; import com.simuwang.base.pojo.dos.NavDO; import com.simuwang.daq.service.EmailParseService; import com.simuwang.manage.service.EmailFundNavService; 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.Map; import java.util.stream.Collectors; /** * FileName: EmailFileNavServiceImpl * Author: chenjianhua * Date: 2024/9/15 11:25 * Description: ${DESCRIPTION} */ @Service public class EmailFundNavServiceImpl implements EmailFundNavService { @Autowired private EmailFundNavMapper emailFundNavMapper; @Autowired private EmailParseService emailParseService; @Autowired private NavMapper navMapper; @Override public void reparseFileNav(String sourceFundName,String registerNumber, String targetFundId,String sourceFundId) { List fundNavDOList = emailFundNavMapper.selectNotMappingNav(sourceFundName,registerNumber); Map> fundNavDOGroup = fundNavDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD))); List dataList = new ArrayList<>(); //去重 for(String priceDate : fundNavDOGroup.keySet()){ List doList = fundNavDOGroup.get(priceDate); dataList.add(doList.get(0)); } if(fundNavDOList.size() > 0){ //修改采集库的数据 for(EmailFundNavDO fundNavDO : fundNavDOList){ fundNavDO.setFundId(targetFundId); fundNavDO.setExceptionStatus(1); fundNavDO.setIsStored(1); fundNavDO.setUpdateTime(new Date()); } emailFundNavMapper.batchUpdate(fundNavDOList); //净值入库 List navDOList = dataList.stream().filter(e -> StrUtil.isNotBlank(e.getFundId())) .map(e -> BeanUtil.copyProperties(e, NavDO.class)).collect(Collectors.toList()); navDOList.forEach(e -> e.setUpdateTime(DateUtils.getNowDate())); emailParseService.saveNavDo(navDOList); //还原历史基金的净值数据 if(StringUtil.isNotEmpty(sourceFundId)){ List priceDateList = new ArrayList<>(); for(EmailFundNavDO fundNavDO : fundNavDOList){ priceDateList.add(DateUtils.format(fundNavDO.getPriceDate(),DateUtils.YYYY_MM_DD)); } //将匹配错的数据删除 navMapper.batchDeleteNav(sourceFundId,priceDateList); //从解析库把原来的净值数据重新写入到sourceFundId对应的基金上 List sourceNavList = emailFundNavMapper.selectNavByFundId(sourceFundId); List sourcenavDOList = sourceNavList.stream().filter(e -> StrUtil.isNotBlank(e.getFundId())) .map(e -> BeanUtil.copyProperties(e, NavDO.class)).collect(Collectors.toList()); sourcenavDOList.forEach(e -> e.setUpdateTime(DateUtils.getNowDate())); emailParseService.saveNavDo(sourcenavDOList); } } } @Override public Integer countNoStoreNav(String fundName, String registerNumber) { return emailFundNavMapper.countNoStoreNav(fundName,registerNumber); } }