|
@@ -2,15 +2,20 @@ package com.simuwang.manage.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.map.MapUtil;
|
|
|
import com.simuwang.base.common.conts.DateConst;
|
|
|
+import com.simuwang.base.mapper.AssetMapper;
|
|
|
import com.simuwang.base.mapper.FundInfoMapper;
|
|
|
import com.simuwang.base.mapper.NavMapper;
|
|
|
+import com.simuwang.base.pojo.dos.AssetDO;
|
|
|
import com.simuwang.base.pojo.dos.FundInfoDO;
|
|
|
import com.simuwang.base.pojo.dos.NavDO;
|
|
|
import com.simuwang.base.pojo.dto.FundNavDataDTO;
|
|
|
import com.simuwang.manage.service.FundNavService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.Comparator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -21,10 +26,12 @@ public class FundNavServiceImpl implements FundNavService {
|
|
|
|
|
|
private final NavMapper navMapper;
|
|
|
private final FundInfoMapper fundInfoMapper;
|
|
|
+ private final AssetMapper assetMapper;
|
|
|
|
|
|
- public FundNavServiceImpl(NavMapper navMapper, FundInfoMapper fundInfoMapper) {
|
|
|
+ public FundNavServiceImpl(NavMapper navMapper, FundInfoMapper fundInfoMapper, AssetMapper assetMapper) {
|
|
|
this.navMapper = navMapper;
|
|
|
this.fundInfoMapper = fundInfoMapper;
|
|
|
+ this.assetMapper = assetMapper;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -38,27 +45,39 @@ public class FundNavServiceImpl implements FundNavService {
|
|
|
List<FundInfoDO> fundInfoDOList = fundInfoMapper.queryFundInfoByFundId(fundIdList);
|
|
|
Map<String, FundInfoDO> fundIdInfoMap = fundInfoDOList.stream().collect(Collectors.toMap(FundInfoDO::getFundId, v -> v, (oldValue, newValue) -> oldValue));
|
|
|
|
|
|
+ List<AssetDO> assetDOList = assetMapper.queryAssetByFundId(fundIdList);
|
|
|
+ Map<String, List<AssetDO>> fundIdAssetMap = MapUtil.newHashMap();
|
|
|
+ if (CollUtil.isNotEmpty(assetDOList)) {
|
|
|
+ fundIdAssetMap = assetDOList.stream().collect(Collectors.groupingBy(AssetDO::getFundId));
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, List<NavDO>> fundIdNavMap = navDOList.stream().collect(Collectors.groupingBy(NavDO::getFundId));
|
|
|
for (Map.Entry<String, List<NavDO>> fundIdNavEntry : fundIdNavMap.entrySet()) {
|
|
|
String fundId = fundIdNavEntry.getKey();
|
|
|
List<NavDO> fundNavDoList = fundIdNavEntry.getValue();
|
|
|
+ List<AssetDO> fundAssetDoList = fundIdAssetMap.get(fundId);
|
|
|
FundInfoDO fundInfoDO = fundIdInfoMap.get(fundId);
|
|
|
- List<FundNavDataDTO> fundNavDataDTOList = buildFundNavDataDTO(fundInfoDO, fundNavDoList);
|
|
|
+ List<FundNavDataDTO> fundNavDataDTOList = buildFundNavDataDTO(fundInfoDO, fundNavDoList, fundAssetDoList);
|
|
|
navDataDTOList.addAll(fundNavDataDTOList);
|
|
|
}
|
|
|
return navDataDTOList;
|
|
|
}
|
|
|
|
|
|
- private List<FundNavDataDTO> buildFundNavDataDTO(FundInfoDO fundInfoDO, List<NavDO> fundNavDoList) {
|
|
|
+ private List<FundNavDataDTO> buildFundNavDataDTO(FundInfoDO fundInfoDO, List<NavDO> fundNavDoList, List<AssetDO> fundAssetDoList) {
|
|
|
String fundName = fundInfoDO.getFundName();
|
|
|
String registerNumber = fundInfoDO.getRegisterNumber();
|
|
|
+ Map<String, BigDecimal> priceDateAssetMap = fundAssetDoList.stream()
|
|
|
+ .collect(Collectors.toMap(k -> DateUtil.format(k.getPriceDate(), DateConst.YYYY_MM_DD), AssetDO::getAssetNet));
|
|
|
return fundNavDoList.stream().map(e -> {
|
|
|
FundNavDataDTO fundNavDataDTO = new FundNavDataDTO();
|
|
|
fundNavDataDTO.setFundName(fundName);
|
|
|
fundNavDataDTO.setRegisterNumber(registerNumber);
|
|
|
- fundNavDataDTO.setPriceDate(e.getPriceDate() != null ? DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD) : null);
|
|
|
+ String priceDate = e.getPriceDate() != null ? DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD) : null;
|
|
|
+ fundNavDataDTO.setPriceDate(priceDate);
|
|
|
fundNavDataDTO.setNav(e.getNav() != null ? String.valueOf(e.getNav()) : null);
|
|
|
fundNavDataDTO.setCumulativeNavWithdrawal(e.getCumulativeNavWithdrawal() != null ? String.valueOf(e.getCumulativeNavWithdrawal()) : null);
|
|
|
+ BigDecimal asset = priceDateAssetMap.get(priceDate) != null ? priceDateAssetMap.get(priceDate).setScale(2, RoundingMode.HALF_UP) : null;
|
|
|
+ fundNavDataDTO.setAsset(asset != null ? String.valueOf(asset) : null);
|
|
|
return fundNavDataDTO;
|
|
|
}).sorted(Comparator.comparing(FundNavDataDTO::getPriceDate)).toList();
|
|
|
}
|