|
@@ -461,4 +461,83 @@ public class FundInfoService {
|
|
|
result.put(benchmarkId, valueBenchmarkMap);
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ public List<ManualFundManagerInfoVO> managerList(ManualFundManagerParams params) {
|
|
|
+ String refId = params.getRefId();
|
|
|
+ String benchmarkId = params.getBenchmarkId();
|
|
|
+ List<ManualFundManagerInfoVO> resultList = ListUtil.list(true);
|
|
|
+ //1.先获取基金下的现任基金经理基本信息
|
|
|
+ List<PersonnelInformationDo> managerInfoList = this.baseInfoService.getFundPresentManagerInfo(refId);
|
|
|
+ if(CollUtil.isEmpty(managerInfoList)){
|
|
|
+ return resultList;
|
|
|
+ }
|
|
|
+ List<String> managerIdList = managerInfoList.stream().map(PersonnelInformationDo::getPersonnelId).collect(Collectors.toList());
|
|
|
+ //2.获取现任基金经理管理的产品
|
|
|
+ List<MfManagerFundNumDo> mfManagerFundNumList = this.baseInfoService.listMfManagerFundNumByManagerId(managerIdList);
|
|
|
+ Map<String, List<MfManagerFundNumDo>> listMap = mfManagerFundNumList.stream().collect(Collectors.groupingBy(MfManagerFundNumDo::getManagerId));
|
|
|
+ //3.不改变以前的处理逻辑,将PersonnelInformationDo转化为ManualFundManagerInfoDo
|
|
|
+ List<ManualFundManagerInfoDo> dataList = managerInfoList.stream().map(e -> {
|
|
|
+ ManualFundManagerInfoDo manualFundManagerInfoDo = new ManualFundManagerInfoDo();
|
|
|
+ String managerId = e.getPersonnelId();
|
|
|
+ manualFundManagerInfoDo.setManagerId(managerId);
|
|
|
+ manualFundManagerInfoDo.setManagerName(e.getPersonnelName());
|
|
|
+ manualFundManagerInfoDo.setAvatar(e.getAvatar());
|
|
|
+ manualFundManagerInfoDo.setAvatar2(e.getAvatar2());
|
|
|
+ List<MfManagerFundNumDo> mfManagerFundNumDos = listMap.get(managerId);
|
|
|
+ if (CollUtil.isNotEmpty(mfManagerFundNumDos)) {
|
|
|
+ MfManagerFundNumDo mfManagerFundNumDo = mfManagerFundNumDos.stream().filter(k -> refId.equals(k.getFundId())).findFirst().orElse(null);
|
|
|
+ if (manualFundManagerInfoDo != null) {
|
|
|
+ manualFundManagerInfoDo.setStartDate(mfManagerFundNumDo.getStartDate());
|
|
|
+ }
|
|
|
+ long publicProductNumAll = mfManagerFundNumDos.stream().filter(v -> v.getFundId().startsWith("MF")).count();
|
|
|
+ long publicProductNumRunning = mfManagerFundNumDos.stream().filter(w -> Objects.equals(2, w.getStatus()) && w.getEndDate()==null).count();
|
|
|
+ manualFundManagerInfoDo.setPublicProductNumAll(String.valueOf(publicProductNumAll));
|
|
|
+ manualFundManagerInfoDo.setPublicProductNumRunning(String.valueOf(publicProductNumRunning));
|
|
|
+ }
|
|
|
+ return manualFundManagerInfoDo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ dataList = dataList.stream().filter(e -> e.getStartDate() != null).collect(Collectors.toList());
|
|
|
+ // 按基金经理分组每个经理只取一条数据
|
|
|
+ Map<String, ManualFundManagerInfoDo> managerInfoMap = MapUtil.newHashMap();
|
|
|
+ Map<String, List<ManualFundManagerInfoDo>> collect = dataList.stream().collect(Collectors.groupingBy(ManualFundManagerInfoDo::getManagerId, Collectors.toList()));
|
|
|
+ collect.forEach((k ,v) -> {
|
|
|
+ ManualFundManagerInfoDo temp = v.stream().findFirst().orElse(null);
|
|
|
+ managerInfoMap.put(k, temp);
|
|
|
+ });
|
|
|
+ List<Indicator> indicatorList = ListUtil.of(Indicator.IntervalReturn, Indicator.AnnualReturn, Indicator.SharpeRatio);
|
|
|
+ managerInfoMap.forEach((k, data) -> {
|
|
|
+ ManualFundManagerInfoVO vo = new ManualFundManagerInfoVO();
|
|
|
+ vo.setManagerId(data.getManagerId());
|
|
|
+ vo.setManagerName(data.getManagerName());
|
|
|
+ vo.setAvatar(data.getAvatar());
|
|
|
+ vo.setAvatar2(data.getAvatar2());
|
|
|
+ vo.setGender(data.getGenderValue());
|
|
|
+ vo.setFundNum(data.getPublicProductNumAll());
|
|
|
+ vo.setRunningNum(data.getPublicProductNumRunning());
|
|
|
+ // 取经理的所有在管基金的最新资产值并求和
|
|
|
+ List<ManualFundAssetSizeDo> tempList = this.baseInfoService.getAssetSizeList(data.getManagerId());
|
|
|
+ if (CollUtil.isNotEmpty(tempList)) {
|
|
|
+ List<String> fundIds = tempList.stream().map(ManualFundAssetSizeDo::getFundId).distinct().collect(Collectors.toList());
|
|
|
+ Double total = 0d;
|
|
|
+ for (String fundId : fundIds) {
|
|
|
+ Double aDouble = tempList.stream().filter(e -> e.getFundId().equals(fundId)).max(Comparator.comparing(ManualFundAssetSizeDo::getDate))
|
|
|
+ .map(ManualFundAssetSizeDo::getFundAssetSize).orElse(0d);
|
|
|
+ total += aDouble;
|
|
|
+ }
|
|
|
+ vo.setRunningScale(String.valueOf(total));
|
|
|
+ }
|
|
|
+ // 指标计算结果处理
|
|
|
+ Map<String, Map<String, String>> indicatorValue = this.getIndicatorValue(refId, benchmarkId, data.getStartDate(), data.getEndDate(), indicatorList);
|
|
|
+ if (indicatorValue.get(refId) != null) {
|
|
|
+ vo.setNavChange(indicatorValue.get(refId).get(Indicator.IntervalReturn.name()));
|
|
|
+ vo.setAnnualRet(indicatorValue.get(refId).get(Indicator.AnnualReturn.name()));
|
|
|
+ vo.setSharpe(indicatorValue.get(refId).get(Indicator.SharpeRatio.name()));
|
|
|
+ }
|
|
|
+ if (indicatorValue.get(benchmarkId) != null) {
|
|
|
+ vo.setBenchmarkRet(indicatorValue.get(benchmarkId).get(Indicator.IntervalReturn.name()));
|
|
|
+ }
|
|
|
+ resultList.add(vo);
|
|
|
+ });
|
|
|
+ return resultList;
|
|
|
+ }
|
|
|
}
|