|
@@ -0,0 +1,160 @@
|
|
|
+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<String,Long> 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<NavDO> navDOList = navMapper.selectNavListById(minId,maxId,startDate, endDate);
|
|
|
+ saveSrcNavList(navDOList);
|
|
|
+ startIdx = endIdx;
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<NavDO> navDOList = navMapper.selectNavListByTime(startDate, endDate);
|
|
|
+ saveSrcNavList(navDOList);
|
|
|
+ //更新分红
|
|
|
+ List<DistributionDO> distributionDOList = distributionMapper.selectDistributeListByTime(startDate, endDate);
|
|
|
+ saveDistribute(distributionDOList);
|
|
|
+ //更新最后任务时间
|
|
|
+ updateConfig(endDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveDistribute(List<DistributionDO> distributionDOList) {
|
|
|
+ List<CoreDistributionDO> 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<NavDO> navDOList){
|
|
|
+ List<SrcNavDO> 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();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|