|
@@ -1,12 +1,12 @@
|
|
package com.simuwang.manage.service.impl;
|
|
package com.simuwang.manage.service.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import com.simuwang.base.common.conts.DateConst;
|
|
import com.simuwang.base.common.support.MybatisPage;
|
|
import com.simuwang.base.common.support.MybatisPage;
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
-import com.simuwang.base.mapper.CompanyInformationMapper;
|
|
|
|
-import com.simuwang.base.mapper.EmailFundAssetMapper;
|
|
|
|
-import com.simuwang.base.mapper.EmailFundNavMapper;
|
|
|
|
-import com.simuwang.base.mapper.FundAliasMapper;
|
|
|
|
-import com.simuwang.base.pojo.dos.FundAliasDO;
|
|
|
|
|
|
+import com.simuwang.base.mapper.*;
|
|
|
|
+import com.simuwang.base.pojo.dos.*;
|
|
import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
|
|
import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
|
|
import com.simuwang.base.pojo.vo.FundAliasVO;
|
|
import com.simuwang.base.pojo.vo.FundAliasVO;
|
|
import com.simuwang.base.pojo.vo.IdListVO;
|
|
import com.simuwang.base.pojo.vo.IdListVO;
|
|
@@ -15,6 +15,8 @@ import com.simuwang.manage.service.EmailFundNavService;
|
|
import com.simuwang.manage.service.EmailFundInfoService;
|
|
import com.simuwang.manage.service.EmailFundInfoService;
|
|
import com.simuwang.manage.service.FundAliasService;
|
|
import com.simuwang.manage.service.FundAliasService;
|
|
import com.simuwang.shiro.utils.UserUtils;
|
|
import com.simuwang.shiro.utils.UserUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -31,6 +33,8 @@ import java.util.stream.Collectors;
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
public class FundAliasServiceImpl implements FundAliasService {
|
|
public class FundAliasServiceImpl implements FundAliasService {
|
|
|
|
+
|
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(FundAliasServiceImpl.class);
|
|
@Autowired
|
|
@Autowired
|
|
private FundAliasMapper fundAliasMapper;
|
|
private FundAliasMapper fundAliasMapper;
|
|
|
|
|
|
@@ -52,6 +56,12 @@ public class FundAliasServiceImpl implements FundAliasService {
|
|
@Autowired
|
|
@Autowired
|
|
private EmailFundAssetService emailFundAssetService;
|
|
private EmailFundAssetService emailFundAssetService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private NavMapper navMapper;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private AssetMapper assetMapper;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery) {
|
|
public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery) {
|
|
List<FundAliasDO> fundAliasDOList = fundAliasMapper.searchFundAlias(fundAliasPageQuery);
|
|
List<FundAliasDO> fundAliasDOList = fundAliasMapper.searchFundAlias(fundAliasPageQuery);
|
|
@@ -112,4 +122,89 @@ public class FundAliasServiceImpl implements FundAliasService {
|
|
fundAliasMapper.batchDelete(idList,userId);
|
|
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);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
}
|
|
}
|