package com.simuwang.manage.task; import cn.hutool.core.date.DateUtil; import com.simuwang.base.common.util.DateUtils; import com.simuwang.base.common.util.StringUtil; import com.simuwang.base.mapper.core.CoreDistributionMapper; import com.simuwang.base.mapper.core.SrcNavMapper; import com.simuwang.base.mapper.daq.DistributionMapper; import com.simuwang.base.mapper.daq.NavMapper; import com.simuwang.base.mapper.daq.system.SysConfigMapper; import com.simuwang.base.pojo.dos.DistributionDO; import com.simuwang.base.pojo.dos.NavDO; import com.simuwang.base.pojo.dos.SysConfigDO; import com.simuwang.base.pojo.dos.core.CoreDistributionDO; import com.simuwang.base.pojo.dos.core.SrcNavDO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 数据同步 * Author: chenjianhua * Date: 2024/10/25 13:59 * Description: ${DESCRIPTION} */ @Component public class DataSynchronizationTask { @Autowired private NavMapper navMapper; @Autowired private SrcNavMapper srcNavMapper; @Autowired private SysConfigMapper sysConfigMapper; @Autowired private DistributionMapper distributionMapper; @Autowired private CoreDistributionMapper coreDistributionMapper; private static final Integer maxNum = 100000; public void synchronization() { String startDate = sysConfigMapper.selectConfigByKey("last_data_synchronization_time"); if (StringUtil.isNull(startDate)) { //沒有配置就新增一个 saveConfig(); } String endDate = DateUtil.now(); long total = navMapper.countNavByTime(startDate, endDate); if (total > maxNum) { Map idMap = navMapper.selectMaxMinId(startDate, endDate); Long minId = idMap.get("minId"); Long maxId = idMap.get("maxId"); long times = (maxId-minId)%maxNum==0?(maxId-minId)/maxNum:(maxId-minId)/maxNum+1; long startIdx = minId; for(int idx=1;idx <= times;idx++){ long endIdx = startIdx+idx*maxNum; if(endIdx >= maxId){ endIdx = maxId; } List navDOList = navMapper.selectNavListById(minId,maxId,startDate, endDate); saveSrcNavList(navDOList); startIdx = endIdx; } return; } List navDOList = navMapper.selectNavListByTime(startDate, endDate); saveSrcNavList(navDOList); //更新分红 List distributionDOList = distributionMapper.selectDistributeListByTime(startDate, endDate); saveDistribute(distributionDOList); //更新最后任务时间 updateConfig(endDate); } private void saveDistribute(List distributionDOList) { List coreDistributionDOList = new ArrayList<>(); for(DistributionDO distribution : distributionDOList){ CoreDistributionDO coreDistributionDO = new CoreDistributionDO(); coreDistributionDO.setDistribution(distribution.getDistribution()); coreDistributionDO.setDistributeDate(distribution.getDistributeDate()); coreDistributionDO.setDistributeType(distribution.getDistributeType()); coreDistributionDO.setFundId(distribution.getFundId()); coreDistributionDO.setCreateTime(distribution.getCreateTime()); coreDistributionDO.setUpdaterId(distribution.getUpdaterId()); coreDistributionDO.setCreatorId(distribution.getCreatorId()); coreDistributionDO.setUpdateTime(distribution.getUpdateTime()); coreDistributionDO.setIsvalid(distribution.getIsvalid()); coreDistributionDOList.add(coreDistributionDO); if(coreDistributionDOList.size() >= 500){ coreDistributionMapper.saveCoreDistribution(coreDistributionDOList); coreDistributionDOList.clear(); } } if(coreDistributionDOList.size() > 0){ coreDistributionMapper.saveCoreDistribution(coreDistributionDOList); coreDistributionDOList.clear(); } } private void updateConfig(String endDate) { SysConfigDO sysConfigDO = new SysConfigDO(); sysConfigDO.setConfigKey("last_data_synchronization_time"); sysConfigDO.setConfigName("数据同步最后时间"); sysConfigDO.setConfigValue(endDate); sysConfigMapper.updateConfigByKey(sysConfigDO); } private void saveConfig() { SysConfigDO sysConfigDO = new SysConfigDO(); sysConfigDO.setIsvalid(1); sysConfigDO.setCreateTime(DateUtils.getNowDate()); sysConfigDO.setUpdateTime(DateUtils.getNowDate()); sysConfigDO.setConfigType("1"); sysConfigDO.setConfigKey("last_data_synchronization_time"); sysConfigDO.setConfigName("数据同步最后时间"); sysConfigDO.setConfigValue(DateUtil.now()); sysConfigDO.setRemark("数据同步最后时间"); sysConfigDO.setCreatorId(1); sysConfigDO.setUpdaterId(1); sysConfigMapper.insertConfig(sysConfigDO); } public void saveSrcNavList(List navDOList){ List srcNavDOList = new ArrayList<>(); for (NavDO navDO : navDOList) { SrcNavDO srcNavDO = new SrcNavDO(); // srcNavDO.setId(navDO.getId()); srcNavDO.setPriceDate(navDO.getPriceDate()); srcNavDO.setFundId(navDO.getFundId()); srcNavDO.setNav(navDO.getNav()); srcNavDO.setCumulativeNavCrawl(navDO.getCumulativeNavWithdrawal()); srcNavDO.setAppType(1); srcNavDO.setNavSource(1); srcNavDO.setCreateTime(navDO.getCreateTime()); srcNavDO.setUpdateTime(navDO.getUpdateTime()); srcNavDO.setCreatorId(navDO.getCreatorId()); srcNavDO.setUpdaterId(navDO.getUpdaterId()); srcNavDO.setIsvisible(1); srcNavDO.setSourceId(1); srcNavDO.setIsvalid(navDO.getIsvalid()); srcNavDO.setNavMark(null); srcNavDOList.add(srcNavDO); if(srcNavDOList.size() >= 500){ srcNavMapper.saveSrcNav(srcNavDOList); srcNavDOList.clear(); } } if(srcNavDOList.size() > 0){ srcNavMapper.saveSrcNav(srcNavDOList); srcNavDOList.clear(); } } }