|
@@ -0,0 +1,66 @@
|
|
|
+package com.simuwang.manage.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.simuwang.base.common.conts.DateConst;
|
|
|
+import com.simuwang.base.mapper.FundInfoMapper;
|
|
|
+import com.simuwang.base.mapper.NavMapper;
|
|
|
+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.util.Comparator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class FundNavServiceImpl implements FundNavService {
|
|
|
+
|
|
|
+ private final NavMapper navMapper;
|
|
|
+ private final FundInfoMapper fundInfoMapper;
|
|
|
+
|
|
|
+ public FundNavServiceImpl(NavMapper navMapper, FundInfoMapper fundInfoMapper) {
|
|
|
+ this.navMapper = navMapper;
|
|
|
+ this.fundInfoMapper = fundInfoMapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<FundNavDataDTO> getFungNavData() {
|
|
|
+ List<FundNavDataDTO> navDataDTOList = CollUtil.newArrayList();
|
|
|
+ List<NavDO> navDOList = navMapper.queryAllNav();
|
|
|
+ if (CollUtil.isEmpty(navDOList)) {
|
|
|
+ return navDataDTOList;
|
|
|
+ }
|
|
|
+ List<String> fundIdList = navDOList.stream().map(NavDO::getFundId).distinct().toList();
|
|
|
+ List<FundInfoDO> fundInfoDOList = fundInfoMapper.queryFundInfoByFundId(fundIdList);
|
|
|
+ Map<String, FundInfoDO> fundIdInfoMap = fundInfoDOList.stream().collect(Collectors.toMap(FundInfoDO::getFundId, v -> v, (oldValue, newValue) -> oldValue));
|
|
|
+
|
|
|
+ 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();
|
|
|
+ FundInfoDO fundInfoDO = fundIdInfoMap.get(fundId);
|
|
|
+ List<FundNavDataDTO> fundNavDataDTOList = buildFundNavDataDTO(fundInfoDO, fundNavDoList);
|
|
|
+ navDataDTOList.addAll(fundNavDataDTOList);
|
|
|
+ }
|
|
|
+ return navDataDTOList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<FundNavDataDTO> buildFundNavDataDTO(FundInfoDO fundInfoDO, List<NavDO> fundNavDoList) {
|
|
|
+ String fundName = fundInfoDO.getFundName();
|
|
|
+ String registerNumber = fundInfoDO.getRegisterNumber();
|
|
|
+ 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);
|
|
|
+ fundNavDataDTO.setNav(e.getNav() != null ? String.valueOf(e.getNav()) : null);
|
|
|
+ fundNavDataDTO.setCumulativeNavWithdrawal(e.getCumulativeNavWithdrawal() != null ? String.valueOf(e.getCumulativeNavWithdrawal()) : null);
|
|
|
+ return fundNavDataDTO;
|
|
|
+ }).sorted(Comparator.comparing(FundNavDataDTO::getPriceDate)).toList();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|