瀏覽代碼

表头和统一设置完成

wangzaijun 1 年之前
父節點
當前提交
00f643e493
共有 98 個文件被更改,包括 2744 次插入1111 次删除
  1. 1 0
      readme.md
  2. 1 1
      src/main/java/com/smppw/analysis/application/dto/info/HeadInfoReq.java
  3. 17 26
      src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java
  4. 3 2
      src/main/java/com/smppw/analysis/application/service/info/GlobalService.java
  5. 0 1
      src/main/java/com/smppw/analysis/application/service/style/StyleService.java
  6. 31 0
      src/main/java/com/smppw/analysis/domain/dao/CompanyInformationDao.java
  7. 32 8
      src/main/java/com/smppw/analysis/domain/dao/FundInformationDao.java
  8. 31 0
      src/main/java/com/smppw/analysis/domain/dao/PersonnelInformationDao.java
  9. 4 0
      src/main/java/com/smppw/analysis/domain/dao/info/package-info.java
  10. 73 0
      src/main/java/com/smppw/analysis/domain/dao/nav/AbstractNavDao.java
  11. 20 13
      src/main/java/com/smppw/analysis/domain/dao/CompanyNavDao.java
  12. 20 13
      src/main/java/com/smppw/analysis/domain/dao/ManagerNavDao.java
  13. 18 12
      src/main/java/com/smppw/analysis/domain/dao/MarketIndexDao.java
  14. 19 0
      src/main/java/com/smppw/analysis/domain/dao/nav/NavConstants.java
  15. 69 0
      src/main/java/com/smppw/analysis/domain/dao/nav/NavDao.java
  16. 33 0
      src/main/java/com/smppw/analysis/domain/dao/nav/NavFactory.java
  17. 18 9
      src/main/java/com/smppw/analysis/domain/dao/PrivatelyOfferedFundNavDao.java
  18. 18 9
      src/main/java/com/smppw/analysis/domain/dao/PubliclyOfferedFundNavDao.java
  19. 19 8
      src/main/java/com/smppw/analysis/domain/dao/RiskOfFreeNavDao.java
  20. 23 8
      src/main/java/com/smppw/analysis/domain/dao/RongzhiIndexNavDao.java
  21. 0 6
      src/main/java/com/smppw/analysis/domain/dao/rank/RankToBDao.java
  22. 0 77
      src/main/java/com/smppw/analysis/domain/dataobject/CompanyFittedCurveDo.java
  23. 0 92
      src/main/java/com/smppw/analysis/domain/dataobject/CompanyFittedCurveWeeklyDo.java
  24. 338 0
      src/main/java/com/smppw/analysis/domain/dataobject/CompanyInformationDo.java
  25. 0 54
      src/main/java/com/smppw/analysis/domain/dataobject/DepositNavDo.java
  26. 0 72
      src/main/java/com/smppw/analysis/domain/dataobject/FundManagerFittedCurveDo.java
  27. 0 87
      src/main/java/com/smppw/analysis/domain/dataobject/FundManagerFittedCurveWeeklyDo.java
  28. 0 112
      src/main/java/com/smppw/analysis/domain/dataobject/IndexesRzIndexDo.java
  29. 0 119
      src/main/java/com/smppw/analysis/domain/dataobject/MarketIndexesDo.java
  30. 0 74
      src/main/java/com/smppw/analysis/domain/dataobject/NavDo.java
  31. 179 9
      src/main/java/com/smppw/analysis/domain/dataobject/PersonnelInformationDo.java
  32. 0 77
      src/main/java/com/smppw/analysis/domain/dataobject/PublicNavDo.java
  33. 38 0
      src/main/java/com/smppw/analysis/domain/dataobject/info/BaseInfoDO.java
  34. 92 0
      src/main/java/com/smppw/analysis/domain/dataobject/info/FundInfoDO.java
  35. 44 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/BaseNavDO.java
  36. 99 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyFittedCurveDo.java
  37. 115 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyFittedCurveWeeklyDo.java
  38. 82 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/DepositNavDo.java
  39. 94 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerFittedCurveDo.java
  40. 110 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerFittedCurveWeeklyDo.java
  41. 141 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/IndexesRzIndexDo.java
  42. 147 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/MarketIndexesDo.java
  43. 87 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/NavDo.java
  44. 90 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/PublicNavDo.java
  45. 23 12
      src/main/java/com/smppw/analysis/domain/dto/info/FundHeadInfoVO.java
  46. 4 0
      src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoParams.java
  47. 0 4
      src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoVO.java
  48. 1 12
      src/main/java/com/smppw/analysis/domain/dto/info/PrivatelyFundHeadInfoVO.java
  49. 0 12
      src/main/java/com/smppw/analysis/domain/dto/info/PubliclyFundHeadInfoVO.java
  50. 3 0
      src/main/java/com/smppw/analysis/domain/gateway/CacheGateway.java
  51. 130 21
      src/main/java/com/smppw/analysis/domain/manager/info/AbstractFundHeadInfo.java
  52. 20 0
      src/main/java/com/smppw/analysis/domain/manager/info/AbstractHeadInfo.java
  53. 19 23
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyFundHeadInfo.java
  54. 37 24
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyFundHeadInfo.java
  55. 4 3
      src/main/java/com/smppw/analysis/domain/manager/position/AbstractAnalysisBizHandler.java
  56. 3 37
      src/main/java/com/smppw/analysis/domain/manager/position/AbstractBizHandler.java
  57. 25 0
      src/main/java/com/smppw/analysis/domain/manager/position/PositionLoadConstants.java
  58. 4 4
      src/main/java/com/smppw/analysis/domain/manager/position/PositionLoadFactory.java
  59. 1 1
      src/main/java/com/smppw/analysis/domain/manager/position/PrivatePositionLoad.java
  60. 1 1
      src/main/java/com/smppw/analysis/domain/manager/position/PrivatelyFundPositionLoad.java
  61. 2 2
      src/main/java/com/smppw/analysis/domain/manager/position/PubliclyFundPositionLoad.java
  62. 7 6
      src/main/java/com/smppw/analysis/domain/manager/position/stock/StockPerformanceAttributionBizHandler.java
  63. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFittedCurveDoMapper.java
  64. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFittedCurveWeeklyDoMapper.java
  65. 15 0
      src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFundScaleRangeHistoryMapper.java
  66. 18 0
      src/main/java/com/smppw/analysis/domain/mapper/core/CompanyInformationDoMapper.java
  67. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/DepositNavDoMapper.java
  68. 8 1
      src/main/java/com/smppw/analysis/domain/mapper/core/FundAssetSizeMapper.java
  69. 3 0
      src/main/java/com/smppw/analysis/domain/mapper/core/FundInformationDoMapper.java
  70. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/FundManagerFittedCurveDoMapper.java
  71. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/FundManagerFittedCurveWeeklyDoMapper.java
  72. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/IndexesRzIndexDoMapper.java
  73. 1 1
      src/main/java/com/smppw/analysis/domain/mapper/core/MarketIndexesDoMapper.java
  74. 2 1
      src/main/java/com/smppw/analysis/domain/mapper/core/NavDoMapper.java
  75. 7 1
      src/main/java/com/smppw/analysis/domain/mapper/core/PersonnelInformationMapper.java
  76. 3 1
      src/main/java/com/smppw/analysis/domain/mapper/core/PublicNavDoMapper.java
  77. 0 8
      src/main/java/com/smppw/analysis/domain/mapper/core/RankToBMapper.java
  78. 18 3
      src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java
  79. 1 1
      src/main/java/com/smppw/analysis/domain/service/impl/NavServiceImpl.java
  80. 16 2
      src/main/java/com/smppw/analysis/infrastructure/gatewayimpl/InMemoryCacheGateway.java
  81. 5 0
      src/main/java/com/smppw/analysis/infrastructure/gatewayimpl/RedisCacheGateway.java
  82. 47 0
      src/main/java/com/smppw/analysis/infrastructure/utils/CommonUtils.java
  83. 0 20
      src/main/java/com/smppw/analysis/infrastructure/utils/StringUtil.java
  84. 1 1
      src/main/resources/mapping/core/CompanyFittedCurveDoMapper.xml
  85. 1 1
      src/main/resources/mapping/core/CompanyFittedCurveWeeklyDoMapper.xml
  86. 10 0
      src/main/resources/mapping/core/CompanyFundScaleRangeHistoryMapper.xml
  87. 81 0
      src/main/resources/mapping/core/CompanyInformationDoMapper.xml
  88. 1 1
      src/main/resources/mapping/core/DepositNavDoMapper.xml
  89. 6 0
      src/main/resources/mapping/core/FundAssetSizeMapper.xml
  90. 26 0
      src/main/resources/mapping/core/FundInformationDoMapper.xml
  91. 1 1
      src/main/resources/mapping/core/FundManagerFittedCurveDoMapper.xml
  92. 1 1
      src/main/resources/mapping/core/FundManagerFittedCurveWeeklyDoMapper.xml
  93. 1 1
      src/main/resources/mapping/core/IndexesRzIndexDoMapper.xml
  94. 2 2
      src/main/resources/mapping/core/MarketIndexesDoMapper.xml
  95. 11 2
      src/main/resources/mapping/core/NavDoMapper.xml
  96. 51 0
      src/main/resources/mapping/core/PersonnelInformationMapper.xml
  97. 11 1
      src/main/resources/mapping/core/PublicNavDoMapper.xml
  98. 0 4
      src/main/resources/mapping/core/RankToBMapper.xml

+ 1 - 0
readme.md

@@ -15,6 +15,7 @@ springboot3+redis+mybatis的一个标的详情页通用服务
 - jakarta api迁移,springboot3.0以上的版本要求所有的Java EE api都要迁移到Jakarta。比如javax.servlet.Filter需要替换为jakarta.servlet.Filter
 - spring.factories 文件废弃,自动配置包位置有变化
 - 支持多数据源,目前是springboot+mybatis支持的非动态数据源
+- 获取净值的功能拆分(策略模式区分标的来获取)
 
 
 ### 项目分包说明

+ 1 - 1
src/main/java/com/smppw/analysis/application/dto/info/HeadInfoReq.java

@@ -15,6 +15,6 @@ public class HeadInfoReq extends BaseReq<HeadInfoParams> {
 
     @Override
     public HeadInfoParams convert() {
-        return new HeadInfoParams(this.getSecId());
+        return new HeadInfoParams(this.getSecId(), null);
     }
 }

+ 17 - 26
src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java

@@ -14,11 +14,9 @@ import com.smppw.analysis.application.dto.info.ManualFundManagerParams;
 import com.smppw.analysis.application.dto.info.ManualFundNoticeReq;
 import com.smppw.analysis.domain.dataobject.*;
 import com.smppw.analysis.domain.dto.info.*;
-import com.smppw.analysis.domain.manager.performance.PerformanceFactory;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.NavService;
-import com.smppw.analysis.infrastructure.utils.StringUtil;
 import com.smppw.common.pojo.IStrategy;
 import com.smppw.common.pojo.NewSubStrategy;
 import com.smppw.common.pojo.ValueLabelVO;
@@ -72,15 +70,12 @@ public class FundInfoService {
     }
 
     private final NavService navService;
-    private final PerformanceFactory factory;
     private final BaseInfoService baseInfoService;
     private final BaseIndicatorServiceV2 baseIndicatorServiceV2;
 
     public FundInfoService(NavService navService,
-                           PerformanceFactory factory,
                            BaseInfoService baseInfoService,
                            BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        this.factory = factory;
         this.navService = navService;
         this.baseInfoService = baseInfoService;
         this.baseIndicatorServiceV2 = baseIndicatorServiceV2;
@@ -175,7 +170,6 @@ public class FundInfoService {
             String s = typeMapper.get(params.getType());
             typeList.addAll(StrUtil.split(s, ","));
         }
-        //todo 确认基金公告表所在的库
         List<ManualFundNoticeInfoDO> dataList = this.baseInfoService.queryFundAnnounce(fundId, typeList, title);
         List<ManualFundNoticeInfoVO> resultList = ListUtil.list(true);
         // key value互换
@@ -219,47 +213,46 @@ public class FundInfoService {
     }
 
     private FundFeeDo numberFormat(FundFeeDo fundFees) {
-        FundFeeDo fundFeeDo = fundFees;
         String minInvestmentShare = fundFees.getMinInvestmentShare();
-        fundFeeDo.setMinInvestmentShare(minInvestmentShare != null && StringUtil.isNumeric(minInvestmentShare) ? BigDecimalUtils.toBigDecimal(minInvestmentShare)
+        fundFees.setMinInvestmentShare(NumberUtil.isNumber(minInvestmentShare) ? BigDecimalUtils.toBigDecimal(minInvestmentShare)
                 .setScale(2, RoundingMode.HALF_DOWN) + "万" : minInvestmentShare);
 
         String managementFeeBank = fundFees.getManagementFeeBank();
-        fundFeeDo.setManagementFeeBank(managementFeeBank != null && StringUtil.isNumeric(managementFeeBank) ? BigDecimalUtils.toBigDecimal(managementFeeBank)
+        fundFees.setManagementFeeBank(NumberUtil.isNumber(managementFeeBank) ? BigDecimalUtils.toBigDecimal(managementFeeBank)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : managementFeeBank);
 
         String subscriptionFee = fundFees.getSubscriptionFee();
-        fundFeeDo.setSubscriptionFee(subscriptionFee != null && StringUtil.isNumeric(subscriptionFee) ? BigDecimalUtils.toBigDecimal(subscriptionFee)
+        fundFees.setSubscriptionFee(NumberUtil.isNumber(subscriptionFee) ? BigDecimalUtils.toBigDecimal(subscriptionFee)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : subscriptionFee);
 
         String redemptionFee = fundFees.getRedemptionFee();
-        fundFeeDo.setRedemptionFee(redemptionFee != null && StringUtil.isNumeric(redemptionFee) ? BigDecimalUtils.toBigDecimal(redemptionFee)
+        fundFees.setRedemptionFee(NumberUtil.isNumber(redemptionFee) ? BigDecimalUtils.toBigDecimal(redemptionFee)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : redemptionFee);
 
         String managementFee = fundFees.getManagementFee();
-        fundFeeDo.setManagementFee(managementFee != null && StringUtil.isNumeric(managementFee) ? BigDecimalUtils.toBigDecimal(managementFee)
+        fundFees.setManagementFee(NumberUtil.isNumber(managementFee) ? BigDecimalUtils.toBigDecimal(managementFee)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : managementFee);
 
         String managementFeeConsult = fundFees.getManagementFeeConsult();
-        fundFeeDo.setManagementFeeConsult(managementFeeConsult != null && StringUtil.isNumeric(managementFeeConsult) ? BigDecimalUtils.toBigDecimal(managementFeeConsult)
+        fundFees.setManagementFeeConsult(NumberUtil.isNumber(managementFeeConsult) ? BigDecimalUtils.toBigDecimal(managementFeeConsult)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : managementFeeConsult);
 
         String performanceFee = fundFees.getPerformanceFee();
-        fundFeeDo.setPerformanceFee(performanceFee != null && StringUtil.isNumeric(performanceFee) ? BigDecimalUtils.toBigDecimal(performanceFee)
+        fundFees.setPerformanceFee(NumberUtil.isNumber(performanceFee) ? BigDecimalUtils.toBigDecimal(performanceFee)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : performanceFee);
 
         String guardLine = fundFees.getGuardLine();
-        fundFeeDo.setGuardLine(guardLine != null && StringUtil.isNumeric(guardLine) ? BigDecimalUtils.toBigDecimal(guardLine)
+        fundFees.setGuardLine(NumberUtil.isNumber(guardLine) ? BigDecimalUtils.toBigDecimal(guardLine)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : guardLine);
 
         String subsequentInvestmentShare = fundFees.getSubsequentInvestmentShare();
-        fundFeeDo.setSubsequentInvestmentShare(subsequentInvestmentShare != null && StringUtil.isNumeric(subsequentInvestmentShare) ? BigDecimalUtils.toBigDecimal(subsequentInvestmentShare)
+        fundFees.setSubsequentInvestmentShare(NumberUtil.isNumber(subsequentInvestmentShare) ? BigDecimalUtils.toBigDecimal(subsequentInvestmentShare)
                 .setScale(2, RoundingMode.HALF_DOWN) + "万" : subsequentInvestmentShare);
 
         String stopLossLine = fundFees.getStopLossLine();
-        fundFeeDo.setStopLossLine(stopLossLine != null && StringUtil.isNumeric(stopLossLine) ? BigDecimalUtils.toBigDecimal(stopLossLine)
+        fundFees.setStopLossLine(NumberUtil.isNumber(stopLossLine) ? BigDecimalUtils.toBigDecimal(stopLossLine)
                 .setScale(2, RoundingMode.HALF_DOWN) + "%" : stopLossLine);
-        return fundFeeDo;
+        return fundFees;
     }
 
     public ManualFundFeeInfoVO getMfFundFee(String fundId) {
@@ -466,9 +459,9 @@ public class FundInfoService {
         String refId = params.getRefId();
         String benchmarkId = params.getBenchmarkId();
         List<ManualFundManagerInfoVO> resultList = ListUtil.list(true);
-       //1.先获取基金下的现任基金经理基本信息
+        //1.先获取基金下的现任基金经理基本信息
         List<PersonnelInformationDo> managerInfoList = this.baseInfoService.getFundPresentManagerInfo(refId);
-        if(CollUtil.isEmpty(managerInfoList)){
+        if (CollUtil.isEmpty(managerInfoList)) {
             return resultList;
         }
         List<String> managerIdList = managerInfoList.stream().map(PersonnelInformationDo::getPersonnelId).collect(Collectors.toList());
@@ -485,12 +478,10 @@ public class FundInfoService {
             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());
-                }
+                mfManagerFundNumDos.stream().filter(k -> refId.equals(k.getFundId())).findFirst()
+                        .ifPresent(mfManagerFundNumDo -> 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();
+                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));
             }
@@ -500,7 +491,7 @@ public class FundInfoService {
         // 按基金经理分组每个经理只取一条数据
         Map<String, ManualFundManagerInfoDo> managerInfoMap = MapUtil.newHashMap();
         Map<String, List<ManualFundManagerInfoDo>> collect = dataList.stream().collect(Collectors.groupingBy(ManualFundManagerInfoDo::getManagerId, Collectors.toList()));
-        collect.forEach((k ,v) -> {
+        collect.forEach((k, v) -> {
             ManualFundManagerInfoDo temp = v.stream().findFirst().orElse(null);
             managerInfoMap.put(k, temp);
         });

+ 3 - 2
src/main/java/com/smppw/analysis/application/service/info/GlobalService.java

@@ -50,9 +50,10 @@ public class GlobalService {
     }
 
     public HeadInfoVO headInfo(HeadInfoReq req) {
-        HeadInfoParams params = req.convert();
         String secType = this.baseInfoService.getSecType(req.getSecId());
         String type = HeadInfoConstants.SEC_TYPE_HEAD_MAP.get(secType);
+        HeadInfoParams params = req.convert();
+        params.setSecType(secType);
         return this.headInfoFactory.getInstance(type).get(params);
     }
 
@@ -62,7 +63,7 @@ public class GlobalService {
         String secId = params.getSecId();
         List<Frequency> result = CollectionUtil.newArrayList();
         String type = HeadInfoConstants.SEC_TYPE_HEAD_MAP.get(secType);
-        HeadInfoVO fundHeadInfo = this.headInfoFactory.getInstance(type).get(new HeadInfoParams(secId));
+        HeadInfoVO fundHeadInfo = this.headInfoFactory.getInstance(type).get(new HeadInfoParams(secId, type));
         if (fundHeadInfo == null) {
             throw new APIException("");
         }

+ 0 - 1
src/main/java/com/smppw/analysis/application/service/style/StyleService.java

@@ -93,7 +93,6 @@ public interface StyleService {
 
     /**
      * 融智 风格总览 (融智改排排网)
-     * todo 存储过程转换
      *
      * @param params 请求参数
      * @return /

+ 31 - 0
src/main/java/com/smppw/analysis/domain/dao/CompanyInformationDao.java

@@ -0,0 +1,31 @@
+package com.smppw.analysis.domain.dao;
+
+import com.smppw.analysis.domain.dataobject.CompanyInformationDo;
+import com.smppw.analysis.domain.mapper.core.CompanyInformationDoMapper;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CompanyInformationDao {
+    private final CompanyInformationDoMapper companyInformationDoMapper;
+
+    public CompanyInformationDao(CompanyInformationDoMapper companyInformationDoMapper) {
+        this.companyInformationDoMapper = companyInformationDoMapper;
+    }
+
+    public List<CompanyInformationDo> listCompany(List<String> companyIds) {
+        return this.companyInformationDoMapper.listCompany(companyIds);
+    }
+
+    public Map<String, String> getFundIdNameMap(List<String> companyIdList) {
+        List<CompanyInformationDo> fundInformationDos = companyInformationDoMapper.listCompany(companyIdList);
+        Map<String, String> fundIdNameMap = new HashMap<>();
+        for (CompanyInformationDo fundInformationDo : fundInformationDos) {
+            fundIdNameMap.put(fundInformationDo.getCompanyId(), fundInformationDo.getCompanyShortName());
+        }
+        return fundIdNameMap;
+    }
+}

+ 32 - 8
src/main/java/com/smppw/analysis/domain/dao/FundInformationDao.java

@@ -3,34 +3,50 @@ package com.smppw.analysis.domain.dao;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import com.smppw.analysis.domain.dataobject.*;
-import com.smppw.analysis.domain.mapper.core.FundFrequencyDoMapper;
-import com.smppw.analysis.domain.mapper.core.FundInformationDoMapper;
-import com.smppw.analysis.domain.mapper.core.MonetaryFundProfitMapper;
+import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
+import com.smppw.analysis.domain.mapper.core.*;
+import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.Indicator;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 @Component
 public class FundInformationDao {
+    private final FundAssetSizeMapper fundAssetSizeMapper;
     private final FundFrequencyDoMapper fundFrequencyDoMapper;
     private final FundInformationDoMapper fundInformationDoMapper;
     private final MonetaryFundProfitMapper monetaryFundProfitMapper;
+    private final CompanyFundScaleRangeHistoryMapper companyFundScaleRangeHistoryMapper;
 
-    public FundInformationDao(FundFrequencyDoMapper fundFrequencyDoMapper,
+    public FundInformationDao( FundAssetSizeMapper fundAssetSizeMapper,
+                               FundFrequencyDoMapper fundFrequencyDoMapper,
                               FundInformationDoMapper fundInformationDoMapper,
-                              MonetaryFundProfitMapper monetaryFundProfitMapper) {
+                              MonetaryFundProfitMapper monetaryFundProfitMapper,
+                               CompanyFundScaleRangeHistoryMapper companyFundScaleRangeHistoryMapper) {
+        this.fundAssetSizeMapper = fundAssetSizeMapper;
         this.fundFrequencyDoMapper = fundFrequencyDoMapper;
         this.fundInformationDoMapper = fundInformationDoMapper;
         this.monetaryFundProfitMapper = monetaryFundProfitMapper;
+        this.companyFundScaleRangeHistoryMapper = companyFundScaleRangeHistoryMapper;
     }
 
-    public FundInformationDo getFundInfoById(String fundId) {
-        List<FundInformationDo> dataList = this.fundInformationDoMapper.listFundInfo(ListUtil.toList(fundId));
+    /**
+     * 获取多个基金的基本信息
+     *
+     * @param fundIds /
+     * @return /
+     */
+    public List<FundInfoDO> listFundInfo(List<String> fundIds) {
+        return this.fundInformationDoMapper.queryFundInfoList(fundIds);
+    }
+
+    public FundInfoDO getFundInfoById(String fundId) {
+        List<FundInfoDO> dataList = this.fundInformationDoMapper.queryFundInfoList(ListUtil.toList(fundId));
         return dataList.stream().filter(e -> fundId.equals(e.getFundId())).findFirst().orElse(null);
     }
 
@@ -96,4 +112,12 @@ public class FundInformationDao {
         return this.fundInformationDoMapper.listMfManagerFundNumByManagerId(managerIdList);
     }
 
+    public String getFundLastAssetSize(String fundId) {
+        BigDecimal assetSize = this.fundAssetSizeMapper.getFundLastAssetSize(fundId);
+        return assetSize == null ? null : assetSize.toPlainString();
+    }
+
+    public ValueLabelVO getLastCompanyScale(String companyId) {
+        return this.companyFundScaleRangeHistoryMapper.getLastCompanyScale(companyId);
+    }
 }

+ 31 - 0
src/main/java/com/smppw/analysis/domain/dao/PersonnelInformationDao.java

@@ -0,0 +1,31 @@
+package com.smppw.analysis.domain.dao;
+
+import com.smppw.analysis.domain.dataobject.PersonnelInformationDo;
+import com.smppw.analysis.domain.mapper.core.PersonnelInformationMapper;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class PersonnelInformationDao {
+    private final PersonnelInformationMapper personnelInformationMapper;
+
+    public PersonnelInformationDao(PersonnelInformationMapper personnelInformationMapper) {
+        this.personnelInformationMapper = personnelInformationMapper;
+    }
+
+    public List<PersonnelInformationDo> listPersonnel(List<String> managerIdList) {
+        return this.personnelInformationMapper.listPersonnel(managerIdList);
+    }
+
+    public Map<String, String> getFundIdNameMap(List<String> managerIdList) {
+        List<PersonnelInformationDo> fundInformationDos = personnelInformationMapper.listPersonnel(managerIdList);
+        Map<String, String> fundIdNameMap = new HashMap<>();
+        for (PersonnelInformationDo fundInformationDo : fundInformationDos) {
+            fundIdNameMap.put(fundInformationDo.getPersonnelId(), fundInformationDo.getPersonnelName());
+        }
+        return fundIdNameMap;
+    }
+}

+ 4 - 0
src/main/java/com/smppw/analysis/domain/dao/info/package-info.java

@@ -0,0 +1,4 @@
+package com.smppw.analysis.domain.dao.info;
+/*
+基本信息获取策略策略,区分所有标的
+ */

+ 73 - 0
src/main/java/com/smppw/analysis/domain/dao/nav/AbstractNavDao.java

@@ -0,0 +1,73 @@
+package com.smppw.analysis.domain.dao.nav;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import com.smppw.analysis.domain.dataobject.nav.BaseNavDO;
+import com.smppw.common.pojo.IStrategy;
+import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.CurveType;
+import com.smppw.common.pojo.enums.Frequency;
+import com.smppw.common.pojo.enums.RaiseType;
+import com.smppw.common.pojo.enums.strategy.Strategy;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 10:23
+ * @description 抽象的净值查询接口
+ */
+public abstract class AbstractNavDao<NAV extends BaseNavDO> implements NavDao {
+    @Override
+    public Map<String, List<NavDto>> getNav(List<String> secIds, RaiseType raiseType, IStrategy strategy, Map<String, Frequency> secFrequencyMap) {
+        if (CollUtil.isEmpty(secIds)) {
+            return MapUtil.empty();
+        }
+        if (raiseType == null) {
+            raiseType = RaiseType.Private;
+        }
+        if (strategy == null) {
+            strategy = Strategy.All;
+        }
+        CurveType curveType = CurveType.getCurveType(raiseType, strategy);
+        List<NAV> navList = this.listSecNav(secIds, curveType.getId(), strategy.getStrategyId(), secFrequencyMap);
+        return this.convertToMap(navList);
+    }
+
+    /**
+     * 获取多个标的的净值序列
+     *
+     * @param secIds          标的id集合
+     * @param curveTypeId     策略曲线id(非基金标的)
+     * @param strategyId      策略id(非基金标的)
+     * @param secFrequencyMap 标的频率(非基金标的)
+     * @return /
+     */
+    protected abstract List<NAV> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap);
+
+    /**
+     * 多标的净值序列分组
+     *
+     * @param navList 待分组的净值序列
+     * @return /
+     */
+    private Map<String, List<NavDto>> convertToMap(List<NAV> navList) {
+        if (CollUtil.isEmpty(navList)) {
+            return MapUtil.empty();
+        }
+        Map<String, List<NavDto>> navMap = navList.stream().filter(e -> e.getNavDate() != null).map(e -> {
+            NavDto navDto = new NavDto();
+            navDto.setFundId(e.getRefId());
+            navDto.setPriceDate(e.getNavDate());
+            navDto.setOriginalNav(e.getNav());
+            navDto.setCumulativeNav(e.getCumulativeNav());
+            navDto.setCumulativeNavWithdrawal(e.getCumulativeNavWithdrawal());
+            return navDto;
+        }).collect(Collectors.groupingBy(NavDto::getFundId));
+        navMap.forEach((k, v) -> v.sort(Comparator.comparing(NavDto::getPriceDate)));
+        return navMap;
+    }
+}

+ 20 - 13
src/main/java/com/smppw/analysis/domain/dao/CompanyNavDao.java

@@ -1,7 +1,7 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
-import com.smppw.analysis.domain.dataobject.CompanyFittedCurveDo;
-import com.smppw.analysis.domain.dataobject.CompanyFittedCurveWeeklyDo;
+import com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveDo;
+import com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveWeeklyDo;
 import com.smppw.analysis.domain.mapper.core.CompanyFittedCurveDoMapper;
 import com.smppw.analysis.domain.mapper.core.CompanyFittedCurveWeeklyDoMapper;
 import com.smppw.common.cache.CaffeineLocalCache;
@@ -11,22 +11,27 @@ import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@Repository
-public class CompanyNavDao {
-
+@Component(NavConstants.COMPANY_NAV)
+public class CompanyNavDao extends AbstractNavDao<CompanyFittedCurveDo> {
     @Autowired
     private CompanyFittedCurveDoMapper companyFittedCurveDoMapper;
-
     @Autowired
     private CompanyFittedCurveWeeklyDoMapper companyFittedCurveWeeklyDoMapper;
 
+    @Override
+    protected List<CompanyFittedCurveDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        // todo 关注周频和月频的区别
+        return null;
+    }
+
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> companyIdList, String startDate, String endDate, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap, boolean needUpdateAndCreateTime) {
 
         List<String> monthSecIdList = new ArrayList<>();
@@ -71,9 +76,10 @@ public class CompanyNavDao {
     }
 
     /**
-     *  领域对象集合转为数据传输对象集合
+     * 领域对象集合转为数据传输对象集合
+     *
      * @param navDoList 领域对象集合
-     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
     private Map<String, List<NavDto>> monthNavDoListToNavDtoMap(List<CompanyFittedCurveDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
@@ -112,9 +118,10 @@ public class CompanyNavDao {
     }
 
     /**
-     *  领域对象集合转为数据传输对象集合
+     * 领域对象集合转为数据传输对象集合
+     *
      * @param navDoList 领域对象集合
-     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
     private Map<String, List<NavDto>> weekNavDoListToNavDtoMap(List<CompanyFittedCurveWeeklyDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
@@ -152,5 +159,5 @@ public class CompanyNavDao {
         }
         return fundIdNavDtoListMap;
     }
-    
+
 }

+ 20 - 13
src/main/java/com/smppw/analysis/domain/dao/ManagerNavDao.java

@@ -1,8 +1,8 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
 
-import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveDo;
-import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveWeeklyDo;
+import com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveDo;
+import com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveWeeklyDo;
 import com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveDoMapper;
 import com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveWeeklyDoMapper;
 import com.smppw.common.cache.CaffeineLocalCache;
@@ -12,22 +12,27 @@ import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@Repository
-public class ManagerNavDao {
-
+@Component(NavConstants.MANAGER_NAV)
+public class ManagerNavDao extends AbstractNavDao<FundManagerFittedCurveDo> {
     @Autowired
     private FundManagerFittedCurveDoMapper fundManagerFittedCurveSlave1Mapper;
-
     @Autowired
     private FundManagerFittedCurveWeeklyDoMapper fundManagerFittedCurveWeeklySlave1Mapper;
 
+    @Override
+    protected List<FundManagerFittedCurveDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        // todo 关注周频和月频
+        return null;
+    }
+
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> companyIdList, String startDate, String endDate, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap, boolean needUpdateAndCreateTime) {
 
         List<String> monthSecIdList = new ArrayList<>();
@@ -71,9 +76,10 @@ public class ManagerNavDao {
     }
 
     /**
-     *  领域对象集合转为数据传输对象集合
+     * 领域对象集合转为数据传输对象集合
+     *
      * @param navDoList 领域对象集合
-     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
     private Map<String, List<NavDto>> monthNavDoListToNavDtoMap(List<FundManagerFittedCurveDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
@@ -112,9 +118,10 @@ public class ManagerNavDao {
     }
 
     /**
-     *  领域对象集合转为数据传输对象集合
+     * 领域对象集合转为数据传输对象集合
+     *
      * @param navDoList 领域对象集合
-     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
     private Map<String, List<NavDto>> weekNavDoListToNavDtoMap(List<FundManagerFittedCurveWeeklyDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
@@ -152,5 +159,5 @@ public class ManagerNavDao {
         }
         return fundIdNavDtoListMap;
     }
-    
+
 }

+ 18 - 12
src/main/java/com/smppw/analysis/domain/dao/MarketIndexDao.java

@@ -1,39 +1,45 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
-import com.smppw.analysis.domain.dataobject.MarketIndexesDo;
+import com.smppw.analysis.domain.dataobject.nav.MarketIndexesDo;
 import com.smppw.analysis.domain.mapper.core.MarketIndexesDoMapper;
 import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@Repository
-public class MarketIndexDao {
+@Component(NavConstants.MARKET_INDEX_NAV)
+public class MarketIndexDao extends AbstractNavDao<MarketIndexesDo> {
+    private final MarketIndexesDoMapper marketIndexesDoMapper;
 
-    @Autowired
-    private MarketIndexesDoMapper marketIndexesDoMapper;
+    public MarketIndexDao(MarketIndexesDoMapper marketIndexesDoMapper) {
+        this.marketIndexesDoMapper = marketIndexesDoMapper;
+    }
+
+    @Override
+    protected List<MarketIndexesDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        // todo
+        return null;
+    }
 
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> indexIdList, String startDate, String endDate, boolean needUpdateAndCreateTime) {
         List<MarketIndexesDo> navDoList = marketIndexesDoMapper.listNavByTimeInterval(indexIdList, startDate, endDate, needUpdateAndCreateTime);
         return navDoListToNavDtoMap(navDoList);
     }
 
-    public List<MarketIndexesDo> getIndexNavByPriceDate(String indexId, List<String> priceDateList) {
-        return marketIndexesDoMapper.selectIndexNavByPriceDate(indexId, priceDateList);
-    }
-
     /**
      * 领域对象集合转为数据传输对象集合
      *
      * @param navDoList 领域对象集合
      * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
+    @Deprecated
     private Map<String, List<NavDto>> navDoListToNavDtoMap(List<MarketIndexesDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
 

+ 19 - 0
src/main/java/com/smppw/analysis/domain/dao/nav/NavConstants.java

@@ -0,0 +1,19 @@
+package com.smppw.analysis.domain.dao.nav;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 17:00
+ * @description 获取净值的策略枚举 bean 名称
+ */
+public final class NavConstants {
+    public static final String PUBLICLY_FUND_NAV = "publiclyFundNav";
+    public static final String PRIVATELY_FUND_NAV = "privatelyFundNav";
+    public static final String MARKET_INDEX_NAV = "marketIndexNav";
+    public static final String COMPANY_NAV = "companyNav";
+    public static final String MANAGER_NAV = "managerNav";
+    public static final String RISK_INDEX_NAV = "riskIndexNav";
+    public static final String PPW_INDEX_NAV = "ppwIndexNav";
+
+    private NavConstants() {
+    }
+}

+ 69 - 0
src/main/java/com/smppw/analysis/domain/dao/nav/NavDao.java

@@ -0,0 +1,69 @@
+package com.smppw.analysis.domain.dao.nav;
+
+import cn.hutool.core.map.MapUtil;
+import com.smppw.common.pojo.IStrategy;
+import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
+import com.smppw.common.pojo.enums.RaiseType;
+import com.smppw.common.pojo.enums.strategy.Strategy;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 8:51
+ * @description 批量获取净值的业务,策略模式+工厂模式
+ */
+public interface NavDao {
+    /**
+     * 获取标的最新的净值 (基金)
+     *
+     * @param secIds 标的id集合
+     * @return /
+     */
+    default Map<String, NavDto> getLastNav(List<String> secIds) {
+        return this.getLastNav(secIds, RaiseType.Both, Strategy.All, MapUtil.empty());
+    }
+
+    /**
+     * 获取标的净值 (基金),全部取出来,不要时间段
+     *
+     * @param secIds 标的id集合
+     * @return /
+     */
+    default Map<String, List<NavDto>> getNav(List<String> secIds) {
+        return this.getNav(secIds, RaiseType.Both, Strategy.All, MapUtil.empty());
+    }
+
+    /**
+     * 获取标的最新的净值
+     *
+     * @param secIds          标的id集合
+     * @param raiseType       募集类型,公司或机构生效
+     * @param strategy        策略,公司或机构生效
+     * @param secFrequencyMap 标的净值频率,公司或机构生效
+     * @return /
+     */
+    default Map<String, NavDto> getLastNav(List<String> secIds, RaiseType raiseType, IStrategy strategy, Map<String, Frequency> secFrequencyMap) {
+        Map<String, NavDto> result = MapUtil.newHashMap(false);
+        Map<String, List<NavDto>> navMap = this.getNav(secIds, raiseType, strategy, secFrequencyMap);
+        navMap.forEach((k, v) -> {
+            NavDto navDto = v.stream().max(Comparator.comparing(NavDto::getPriceDate)).orElse(new NavDto());
+            result.put(k, navDto);
+        });
+        return result;
+    }
+
+    /**
+     * 获取标的净值,全部取出来,不要时间段
+     *
+     * @param secIds          标的id集合
+     * @param raiseType       募集类型,公司或机构生效
+     * @param strategy        策略,公司或机构生效
+     * @param secFrequencyMap 标的净值频率,公司或机构生效
+     * @return /
+     */
+    Map<String, List<NavDto>> getNav(List<String> secIds, RaiseType raiseType, IStrategy strategy, Map<String, Frequency> secFrequencyMap);
+}

+ 33 - 0
src/main/java/com/smppw/analysis/domain/dao/nav/NavFactory.java

@@ -0,0 +1,33 @@
+package com.smppw.analysis.domain.dao.nav;
+
+import cn.hutool.core.map.MapUtil;
+import com.smppw.constants.SecType;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class NavFactory {
+    private static final NavDao DEFAULT = (secIds, raiseType, strategy, secFrequencyMap) -> MapUtil.empty();
+    private static final Map<String, String> SEC_NAV_MAP = MapUtil.newHashMap(16);
+    private static final Map<String, NavDao> NAV_MAP = MapUtil.newHashMap(16);
+
+    static {
+        SEC_NAV_MAP.put(SecType.PRIVATELY_OFFERED_FUND, NavConstants.PRIVATELY_FUND_NAV);
+        SEC_NAV_MAP.put(SecType.PUBLICLY_OFFERED_FUNDS, NavConstants.PUBLICLY_FUND_NAV);
+        SEC_NAV_MAP.put(SecType.INDEX_FUND, NavConstants.MARKET_INDEX_NAV);
+        SEC_NAV_MAP.put(SecType.RONGZHI_INDEX, NavConstants.PPW_INDEX_NAV);
+        SEC_NAV_MAP.put(SecType.COMPANY, NavConstants.COMPANY_NAV);
+        SEC_NAV_MAP.put(SecType.MANAGER, NavConstants.MANAGER_NAV);
+        SEC_NAV_MAP.put(SecType.RISK_OF_FREE, NavConstants.RISK_INDEX_NAV);
+    }
+
+    public NavFactory(Map<String, NavDao> component) {
+        NAV_MAP.putAll(component);
+    }
+
+    public NavDao getInstance(String key) {
+        // 先直接获取,如果没获取到用标的类型找key再获取
+        return NAV_MAP.getOrDefault(key, NAV_MAP.getOrDefault(SEC_NAV_MAP.get(key), DEFAULT));
+    }
+}

+ 18 - 9
src/main/java/com/smppw/analysis/domain/dao/PrivatelyOfferedFundNavDao.java

@@ -1,23 +1,31 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
-import com.smppw.analysis.domain.dataobject.NavDo;
-import com.smppw.analysis.infrastructure.consts.NavConst;
+import com.smppw.analysis.domain.dataobject.nav.NavDo;
 import com.smppw.analysis.domain.mapper.core.NavDoMapper;
+import com.smppw.analysis.infrastructure.consts.NavConst;
 import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.NavType;
 import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.*;
 
-@Repository
-public class PrivatelyOfferedFundNavDao {
+@Component(NavConstants.PRIVATELY_FUND_NAV)
+public class PrivatelyOfferedFundNavDao extends AbstractNavDao<NavDo> {
+    private final NavDoMapper navDoMapper;
 
-    @Autowired
-    private NavDoMapper navDoMapper;
+    public PrivatelyOfferedFundNavDao(NavDoMapper navDoMapper) {
+        this.navDoMapper = navDoMapper;
+    }
+
+    @Override
+    protected List<NavDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        return this.navDoMapper.listNav(secIds);
+    }
 
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> fundIdList, String startDate, String endDate, NavType navType, boolean needUpdateAndCreateTime) {
         String navFieldSql = "";
         List<NavDo> navDoList = null;
@@ -41,6 +49,7 @@ public class PrivatelyOfferedFundNavDao {
      * @param navDoList 领域对象集合
      * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
+    @Deprecated
     private Map<String, List<NavDto>> navDoListToNavDtoMap(List<NavDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
 

+ 18 - 9
src/main/java/com/smppw/analysis/domain/dao/PubliclyOfferedFundNavDao.java

@@ -1,26 +1,29 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
-import com.smppw.analysis.domain.dataobject.PublicNavDo;
-import com.smppw.analysis.infrastructure.consts.NavConst;
+import com.smppw.analysis.domain.dataobject.nav.PublicNavDo;
 import com.smppw.analysis.domain.mapper.core.PublicNavDoMapper;
+import com.smppw.analysis.infrastructure.consts.NavConst;
 import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.NavType;
 import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@Repository
-public class PubliclyOfferedFundNavDao {
+@Component(NavConstants.PUBLICLY_FUND_NAV)
+public class PubliclyOfferedFundNavDao extends AbstractNavDao<PublicNavDo> {
+    private final PublicNavDoMapper publicNavDoMapper;
 
-    @Autowired
-    private PublicNavDoMapper publicNavDoMapper;
+    public PubliclyOfferedFundNavDao(PublicNavDoMapper publicNavDoMapper) {
+        this.publicNavDoMapper = publicNavDoMapper;
+    }
 
+    @Deprecated
     public static Map<String, List<NavDto>> convertToMap(List<PublicNavDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
 
@@ -57,6 +60,12 @@ public class PubliclyOfferedFundNavDao {
         return fundIdNavDtoListMap;
     }
 
+    @Override
+    protected List<PublicNavDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        return this.publicNavDoMapper.listNav(secIds);
+    }
+
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> fundIdList, String startDate, String endDate, NavType navType, boolean needUpdateAndCreateTime) {
         String navFieldSql = "";
         List<PublicNavDo> navDoList = null;

+ 19 - 8
src/main/java/com/smppw/analysis/domain/dao/RiskOfFreeNavDao.java

@@ -1,23 +1,27 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
-import com.smppw.analysis.domain.dataobject.DepositNavDo;
+import com.smppw.analysis.domain.dataobject.nav.DepositNavDo;
 import com.smppw.analysis.domain.mapper.core.DepositNavDoMapper;
 import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@Repository
-public class RiskOfFreeNavDao {
-    @Autowired
-    private DepositNavDoMapper depositNavMasterMapper;
+@Component(NavConstants.RISK_INDEX_NAV)
+public class RiskOfFreeNavDao extends AbstractNavDao<DepositNavDo> {
+    private final DepositNavDoMapper depositNavMasterMapper;
 
+    public RiskOfFreeNavDao(DepositNavDoMapper depositNavMasterMapper) {
+        this.depositNavMasterMapper = depositNavMasterMapper;
+    }
+
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> indexIdList, String startDate, String endDate, boolean needUpdateAndCreateTime) {
         List<DepositNavDo> navDoList = depositNavMasterMapper.listNavByTimeInterval(indexIdList, startDate, endDate, needUpdateAndCreateTime);
         return navDoListToNavDtoMap(navDoList);
@@ -29,6 +33,7 @@ public class RiskOfFreeNavDao {
      * @param navDoList 领域对象集合
      * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
+    @Deprecated
     private Map<String, List<NavDto>> navDoListToNavDtoMap(List<DepositNavDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
 
@@ -64,4 +69,10 @@ public class RiskOfFreeNavDao {
         }
         return fundIdNavDtoListMap;
     }
+
+    @Override
+    protected List<DepositNavDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        // todo
+        return null;
+    }
 }

+ 23 - 8
src/main/java/com/smppw/analysis/domain/dao/RongzhiIndexNavDao.java

@@ -1,26 +1,40 @@
-package com.smppw.analysis.domain.dao;
+package com.smppw.analysis.domain.dao.nav;
 
-import com.smppw.analysis.domain.dataobject.IndexesRzIndexDo;
+import com.smppw.analysis.domain.dataobject.nav.IndexesRzIndexDo;
 import com.smppw.analysis.domain.mapper.core.IndexesRzIndexDoMapper;
 import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.constants.DateConst;
 import com.smppw.utils.DateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
 
 import java.util.*;
 
-@Repository
-public class RongzhiIndexNavDao {
+@Component(NavConstants.PPW_INDEX_NAV)
+public class RongzhiIndexNavDao extends AbstractNavDao<IndexesRzIndexDo> {
+    private final IndexesRzIndexDoMapper indexesRzIndexDoMapper;
 
-    @Autowired
-    private IndexesRzIndexDoMapper indexesRzIndexDoMapper;
+    public RongzhiIndexNavDao(IndexesRzIndexDoMapper indexesRzIndexDoMapper) {
+        this.indexesRzIndexDoMapper = indexesRzIndexDoMapper;
+    }
+
+    @Override
+    protected List<IndexesRzIndexDo> listSecNav(List<String> secIds, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        // todo
+        return null;
+    }
 
+    /**
+     * @param indexId /
+     * @return /
+     * @deprecated 这个方法从净值获取里面移除
+     */
     public Boolean isExist(String indexId) {
         Integer exist = this.indexesRzIndexDoMapper.isExist(indexId);
         return Objects.equals(1, exist);
     }
 
+    @Deprecated
     public Map<String, List<NavDto>> getNav(List<String> indexIdList, String startDate, String endDate, boolean needUpdateAndCreateTime) {
         List<IndexesRzIndexDo> navDoList = indexesRzIndexDoMapper.listNavByTimeInterval(indexIdList, startDate, endDate, needUpdateAndCreateTime);
         return navDoListToNavDtoMap(navDoList);
@@ -32,6 +46,7 @@ public class RongzhiIndexNavDao {
      * @param navDoList 领域对象集合
      * @return 数据传输对象集合  key-基金ID  value-数据传输对象集合
      */
+    @Deprecated
     private Map<String, List<NavDto>> navDoListToNavDtoMap(List<IndexesRzIndexDo> navDoList) {
         Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
 

+ 0 - 6
src/main/java/com/smppw/analysis/domain/dao/rank/RankToBDao.java

@@ -15,10 +15,4 @@ public class RankToBDao extends AbstractRankDao {
     public String getRankDate() {
         return this.mapper.getRankDate();
     }
-
-    @Override
-    public String getRankDate(String refId) {
-        String endDate = this.mapper.getRefRankDate(refId);
-        return this.getLastRankDate(endDate);
-    }
 }

+ 0 - 77
src/main/java/com/smppw/analysis/domain/dataobject/CompanyFittedCurveDo.java

@@ -1,77 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 投顾产品拟合净值信息
-    */
-@Data
-public class CompanyFittedCurveDo {
-    /**
-    * ID自增
-    */
-    private Integer id;
-
-    /**
-    * 公司id
-    */
-    private String companyId;
-
-    /**
-    * 募集类型:1-私募 2-公募
-    */
-    private Byte raiseType;
-
-    /**
-    * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
-    */
-    private Integer curveType;
-
-    /**
-    * 策略id
-    */
-    private Integer strategy;
-
-    /**
-    * 拟合后月份
-    */
-    private String endDate;
-
-    /**
-    * 拟合净值
-    */
-    private BigDecimal cumulativeNav;
-
-    /**
-    * 本次入选的基金数量
-    */
-    private Integer fundNum;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 0 - 92
src/main/java/com/smppw/analysis/domain/dataobject/CompanyFittedCurveWeeklyDo.java

@@ -1,92 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 投顾产品周度拟合净值信息
-    */
-@Data
-public class CompanyFittedCurveWeeklyDo {
-    /**
-    * ID自增
-    */
-    private Integer id;
-
-    /**
-    * 公司id
-    */
-    private String companyId;
-
-    /**
-    * 募集类型:1-私募 2-公募
-    */
-    private Byte raiseType;
-
-    /**
-    * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
-    */
-    private Integer curveType;
-
-    /**
-    * 策略id
-    */
-    private Integer strategy;
-
-    /**
-    * 拟合后净值年周
-    */
-    private String yearWeek;
-
-    /**
-    * 拟合后净值所在年
-    */
-    private String endYear;
-
-    /**
-    * 拟合后净值全年所在周
-    */
-    private Byte weekOfYear;
-
-    /**
-    * 净值日期
-    */
-    private Date priceDate;
-
-    /**
-    * 拟合净值
-    */
-    private BigDecimal cumulativeNav;
-
-    /**
-    * 本次入选的基金数量
-    */
-    private Integer fundNum;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

文件差異過大導致無法顯示
+ 338 - 0
src/main/java/com/smppw/analysis/domain/dataobject/CompanyInformationDo.java


+ 0 - 54
src/main/java/com/smppw/analysis/domain/dataobject/DepositNavDo.java

@@ -1,54 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-public class DepositNavDo {
-    /**
-    * id
-    */
-    private Integer id;
-
-    /**
-    * 基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001
-    */
-    private String fundId;
-
-    /**
-    * 净值日期
-    */
-    private Date priceDate;
-
-    /**
-    * 单位净值
-    */
-    private BigDecimal nav;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 0 - 72
src/main/java/com/smppw/analysis/domain/dataobject/FundManagerFittedCurveDo.java

@@ -1,72 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 基金经理产品拟合净值信息
-    */
-@Data
-public class FundManagerFittedCurveDo {
-    /**
-    * ID自增
-    */
-    private Integer id;
-
-    /**
-    * 基金经理id
-    */
-    private String fundManagerId;
-
-    /**
-    * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
-    */
-    private Integer curveType;
-
-    /**
-    * 策略id
-    */
-    private Integer strategy;
-
-    /**
-    * 拟合后净值月份
-    */
-    private String endDate;
-
-    /**
-    * 拟合净值
-    */
-    private BigDecimal cumulativeNav;
-
-    /**
-    * 入选基金数量
-    */
-    private Integer fundNum;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 0 - 87
src/main/java/com/smppw/analysis/domain/dataobject/FundManagerFittedCurveWeeklyDo.java

@@ -1,87 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 基金经理产品周度拟合净值信息
-    */
-@Data
-public class FundManagerFittedCurveWeeklyDo {
-    /**
-    * ID自增
-    */
-    private Integer id;
-
-    /**
-    * 基金经理id
-    */
-    private String fundManagerId;
-
-    /**
-    * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
-    */
-    private Integer curveType;
-
-    /**
-    * 策略id
-    */
-    private Integer strategy;
-
-    /**
-    * 拟合后净值年周
-    */
-    private String yearWeek;
-
-    /**
-    * 拟合后净值所在年
-    */
-    private String endYear;
-
-    /**
-    * 拟合后净值全年所在周
-    */
-    private Byte weekOfYear;
-
-    /**
-    * 净值日期
-    */
-    private Date priceDate;
-
-    /**
-    * 拟合净值
-    */
-    private BigDecimal cumulativeNav;
-
-    /**
-    * 入选基金数量
-    */
-    private Integer fundNum;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 0 - 112
src/main/java/com/smppw/analysis/domain/dataobject/IndexesRzIndexDo.java

@@ -1,112 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 分类周指标信息表
-    */
-@Data
-public class IndexesRzIndexDo {
-    /**
-    * ID自增,没意义
-    */
-    private Integer id;
-
-    /**
-    * 指数ID与index_profile的index_id关联
-    */
-    private String indexId;
-
-    /**
-    * 指数代码来源于indexes_profile
-    */
-    private String indexCode;
-
-    /**
-    * 指数截止月份
-    */
-    private Date endDate;
-
-    /**
-    * 本周属于的年份
-    */
-    private Integer yearofweek;
-
-    /**
-    * 一年中的第N周
-    */
-    private Integer weeks;
-
-    /**
-    * 策略,来源于d_strategy
-    */
-    private Integer strategy;
-
-    /**
-    * 子策略id
-    */
-    private Integer substrategy;
-
-    /**
-    * 三级策略
-    */
-    private Integer thirdStrategy;
-
-    /**
-    * 上一期指数值
-    */
-    private BigDecimal lastIndexValue;
-
-    /**
-    * 本期指数
-    */
-    private BigDecimal indexValue;
-
-    /**
-    * 指数周收益
-    */
-    private BigDecimal ret1w;
-
-    /**
-    * 纳入指数计算基金数量
-    */
-    private Integer inclCalFundCount;
-
-    /**
-    * 基金总数量
-    */
-    private Integer totalFundCount;
-
-    /**
-    * 是否是主策略周指数,0表示是主策略周指数,1表示是子策略周指数
-    */
-    private Integer isstrategy;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 0 - 119
src/main/java/com/smppw/analysis/domain/dataobject/MarketIndexesDo.java

@@ -1,119 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 主要指数表
-    */
-@Data
-public class MarketIndexesDo {
-    private Integer id;
-
-    /**
-    * 指数类别id
-    */
-    private String indexId;
-
-    /**
-    * 指数代码
-    */
-    private String indexCode;
-
-    /**
-    * 日期
-    */
-    private Date priceDate;
-
-    /**
-    * 前收盘价
-    */
-    private BigDecimal preclose;
-
-    /**
-    * 开盘价
-    */
-    private BigDecimal open;
-
-    /**
-    * 最高价
-    */
-    private BigDecimal high;
-
-    /**
-    * 最低价
-    */
-    private BigDecimal low;
-
-    /**
-    * 收盘价
-    */
-    private BigDecimal close;
-
-    /**
-    * 成交量(万股)
-    */
-    private BigDecimal tradeVolumen;
-
-    /**
-    * 成交金额(万元)
-    */
-    private BigDecimal tradeAmount;
-
-    /**
-    * 涨跌
-    */
-    private BigDecimal waveRange;
-
-    /**
-    * 涨跌幅(%)
-    */
-    private BigDecimal dayPriceLimit;
-
-    /**
-    * 久期
-    */
-    private BigDecimal duration;
-
-    /**
-    * 凸性
-    */
-    private BigDecimal convexity;
-
-    /**
-    * 到期收益率(%)
-    */
-    private BigDecimal retFinal;
-
-    /**
-    * 平均票面利率(%)
-    */
-    private BigDecimal avgCouponRate;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Byte isvalid;
-}

+ 0 - 74
src/main/java/com/smppw/analysis/domain/dataobject/NavDo.java

@@ -1,74 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-public class NavDo {
-    /**
-    * id
-    */
-    private Integer id;
-
-    /**
-    * 基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001
-    */
-    private String fundId;
-
-    /**
-    * 净值日期
-    */
-    private Date priceDate;
-
-    /**
-    * 单位净值
-    */
-    private BigDecimal nav;
-
-    /**
-    * 考虑分红再投资的单位累计净值
-    */
-    private BigDecimal cumulativeNav;
-
-    /**
-    * 分红不投资的单位累计净值
-    */
-    private BigDecimal cumulativeNavWithdrawal;
-
-    /**
-    * 净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他
-    */
-    private Integer ishighOrLow;
-
-    /**
-    * 距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值
-    */
-    private BigDecimal tohighNavRatio;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 179 - 9
src/main/java/com/smppw/analysis/domain/dataobject/PersonnelInformationDo.java

@@ -1,49 +1,219 @@
 package com.smppw.analysis.domain.dataobject;
 
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
 
 /**
  * @author mozuwen
  * @date 2023/8/9 15:30
  * @description 人员信息
  */
-@Data
+@Setter
+@Getter
 public class PersonnelInformationDo {
-
     /**
      * 人员id
      */
     private String personnelId;
 
     /**
-     * 人员名称
+     * 姓名
      */
     private String personnelName;
 
     /**
-     * 性别:1-男,2-女
+     * 性别
      */
     private Integer sex;
 
     /**
-     * 人员头像1
+     * 人员头像,93
      */
     private String avatar;
 
     /**
-     * 人员头像2
+     * 人员头像,172
      */
     private String avatar2;
 
     /**
-     * 最高学历
+     * (已废弃)人员类别:1-基金经理 2-投研 3-联系人 4-市场 5-合规风控 6-公司高管 7-公司法人 8-交易 -1-其他
+     */
+    private Integer personnelType;
+
+    /**
+     * 职业背景:1-券商,2-公募,3-其他金融机构,4-媒体,5-海外,6-民间,7-期货,8-实业、9-学者、10-银行、11-信托、12-保险、13-私募、-1-其他
+     */
+    private Byte professionBackground;
+
+    /**
+     * (已废弃)是否为核心人物标志,1-是,0-否,-1-其他
+     */
+    private Integer keyFigure;
+
+    /**
+     * (已废弃)就职公司id
+     */
+    private String companyId;
+
+    /**
+     * (已废弃)当前职位
+     */
+    private String position;
+
+    /**
+     * 从业开始年份
+     */
+    private String careerStartYear;
+
+    /**
+     * 从业年限,<量纲:年>,-1:从业年限不详
+     */
+    private Byte investmentExperience;
+    /**
+     * 出生日期
+     */
+    private String birthday;
+
+    /**
+     * 籍贯-省份
+     */
+    private String provinceId;
+
+    /**
+     * 籍贯-城市
+     */
+    private String cityId;
+
+    /**
+     * 毕业院校
+     */
+    private String graduateschool;
+
+    /**
+     * 毕业院校2
+     */
+    private String graduateschool2;
+
+    /**
+     * 毕业院校3
+     */
+    private String graduateschool3;
+
+    /**
+     * 最高学历:1-小学、2-中学、3-大专、4-本科,5-硕士,6-博士,7-博士后,-1-其他
      */
     private Integer education;
 
     /**
-     * 简介
+     * 主修专业
+     */
+    private String major;
+
+    /**
+     * 主修专业2
+     */
+    private String major2;
+
+    /**
+     * 主修专业3
+     */
+    private String major3;
+
+    /**
+     * 国际电话区号
+     */
+    private String countryCode;
+
+    /**
+     * 手机号码
+     */
+    private String mobile;
+
+    /**
+     * 座机号码
+     */
+    private String phone;
+
+    /**
+     * 邮箱地址
+     */
+    private String email;
+
+    /**
+     * 其他联系方式
+     */
+    private String otherContact;
+
+    /**
+     * 擅长领域
+     */
+    private String expertiseArea;
+
+    /**
+     * 历任最高职位:1-高级经理 2-投资经理 3-研究人员 4-交易人员 5-风控合格 -1-其他
+     */
+    private Byte highestPosition;
+
+    /**
+     * 是否有从业资格:1-是,2-否
+     */
+    private Byte isQualify;
+
+    /**
+     * 资格获取方式:1-考试,2-资格认定
+     */
+    private String getQualifyMethod;
+
+    /**
+     * 证书编号(基金从业资格)
+     */
+    private String certificateNumber;
+
+    /**
+     * 人物简介
      */
     private String profile;
 
+    /**
+     * (已废弃)人物次序
+     */
+    private Integer order;
 
+    /**
+     * (已废弃)是否纳入团队信息
+     */
+    private Integer ifinclude;
+
+    /**
+     * 人物是否在前台可见:1-可见,0-禁止显示
+     */
+    private Integer isvisible;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
 }

+ 0 - 77
src/main/java/com/smppw/analysis/domain/dataobject/PublicNavDo.java

@@ -1,77 +0,0 @@
-package com.smppw.analysis.domain.dataobject;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
-    * 公募净值表
-    */
-@Data
-public class PublicNavDo {
-    /**
-    * id
-    */
-    private Integer id;
-
-    /**
-    * 基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001
-    */
-    private String fundId;
-
-    /**
-    * 净值日期
-    */
-    private Date priceDate;
-
-    /**
-    * 单位净值
-    */
-    private BigDecimal nav;
-
-    /**
-    * 考虑分红再投资的单位累计净值
-    */
-    private BigDecimal cumulativeNav;
-
-    /**
-    * 分红不投资的单位累计净值
-    */
-    private BigDecimal cumulativeNavWithdrawal;
-
-    /**
-    * 净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他
-    */
-    private Integer ishighOrLow;
-
-    /**
-    * 距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值
-    */
-    private BigDecimal tohighNavRatio;
-
-    /**
-    * 创建者Id,默认第一次创建者名称,创建后不变更
-    */
-    private Integer creatorid;
-
-    /**
-    * 创建时间,默认第一次创建的getdate()时间
-    */
-    private Date createtime;
-
-    /**
-    * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
-    */
-    private Integer updaterid;
-
-    /**
-    * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
-    */
-    private Date updatetime;
-
-    /**
-    * 记录的有效性;1-有效;0-无效;
-    */
-    private Integer isvalid;
-}

+ 38 - 0
src/main/java/com/smppw/analysis/domain/dataobject/info/BaseInfoDO.java

@@ -0,0 +1,38 @@
+package com.smppw.analysis.domain.dataobject.info;
+
+import java.util.Date;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 14:52
+ * @description 基本信息数据库实体
+ */
+public abstract class BaseInfoDO {
+    /**
+     * 标的id
+     *
+     * @return 标的id(基金、公司、经理、指数、组合、因子等id)
+     */
+    public abstract String getRefId();
+
+    /**
+     * 标的全称
+     *
+     * @return /
+     */
+    public abstract String getRefName();
+
+    /**
+     * 标的简称
+     *
+     * @return /
+     */
+    public abstract String getRefShortName();
+
+    /**
+     * 标的成立日
+     *
+     * @return /
+     */
+    public abstract Date getInceptionDate();
+}

+ 92 - 0
src/main/java/com/smppw/analysis/domain/dataobject/info/FundInfoDO.java

@@ -0,0 +1,92 @@
+package com.smppw.analysis.domain.dataobject.info;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Setter
+@Getter
+public class FundInfoDO extends BaseInfoDO {
+    /**
+     * 基金id
+     */
+    private String fundId;
+    /**
+     * 基金全称
+     */
+    private String fundName;
+    /**
+     * 基金简称
+     */
+    private String fundShortName;
+    /**
+     * 备案编码
+     */
+    private String registerNumber;
+    /**
+     * 中基协备案编码访问地址
+     */
+    private String amacUrl;
+    /**
+     * 募集类型
+     * 1- 私募,2-公募
+     */
+    private Integer raiseType;
+    /**
+     * 基金成立日
+     */
+    private Date inceptionDate;
+    /**
+     * 基金对应基准id
+     */
+    private String primaryBenchmarkId;
+    /**
+     * 基金管理人
+     */
+    private String trustId;
+    /**
+     * 基金一级策略(中基协)
+     */
+    private Integer strategy;
+    /**
+     * 基金二级策略(中基协)
+     */
+    private Integer substrategy;
+    /**
+     * 基金一级策略(排排网策略)
+     */
+    private Integer firstStrategy;
+    /**
+     * 基金二级策略(排排网策略)
+     */
+    private Integer secondStrategy;
+    /**
+     * 基金三级策略(排排网策略)
+     */
+    private Integer thirdStrategy;
+    /**
+     * 基金状态
+     * 1-募集中、2-开放运行、3-封闭运行(已废弃)、4-提前清算、5-到期清算、6-发行失败、7-投顾协议已终止、 8-延期清算 -1-其他 9-非正常清算 10-已终止 11-已作废
+     */
+    private Integer fundStatus;
+    /**
+     * 基金经理id集合
+     */
+    private String managerIds;
+
+    @Override
+    public String getRefId() {
+        return fundId;
+    }
+
+    @Override
+    public String getRefName() {
+        return fundName;
+    }
+
+    @Override
+    public String getRefShortName() {
+        return fundShortName;
+    }
+}

+ 44 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/BaseNavDO.java

@@ -0,0 +1,44 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 9:47
+ * @description 净值基本信息抽象
+ */
+@Setter
+@Getter
+public abstract class BaseNavDO {
+    /**
+     * 标的id
+     *
+     * @return 标的id(基金、公司、经理、指数、组合、因子等id)
+     */
+    public abstract String getRefId();
+
+    /**
+     * 净值日期
+     *
+     * @return /
+     */
+    public abstract String getNavDate();
+
+    /**
+     * 单位净值
+     */
+    public abstract BigDecimal getNav();
+
+    /**
+     * 考虑分红再投资的单位累计净值
+     */
+    public abstract BigDecimal getCumulativeNav();
+
+    /**
+     * 分红不投资的单位累计净值
+     */
+    public abstract BigDecimal getCumulativeNavWithdrawal();
+}

+ 99 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyFittedCurveDo.java

@@ -0,0 +1,99 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 投顾产品拟合净值信息
+ */
+@Setter
+@Getter
+public class CompanyFittedCurveDo extends BaseNavDO {
+    /**
+     * ID自增
+     */
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    private String companyId;
+
+    /**
+     * 募集类型:1-私募 2-公募
+     */
+    private Byte raiseType;
+
+    /**
+     * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
+     */
+    private Integer curveType;
+
+    /**
+     * 策略id
+     */
+    private Integer strategy;
+
+    /**
+     * 拟合后月份
+     */
+    private String endDate;
+
+    /**
+     * 拟合净值
+     */
+    private BigDecimal cumulativeNav;
+
+    /**
+     * 本次入选的基金数量
+     */
+    private Integer fundNum;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getNavDate() {
+        return this.endDate;
+    }
+
+    @Override
+    public String getRefId() {
+        return this.getCompanyId();
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return cumulativeNav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return cumulativeNav;
+    }
+}

+ 115 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyFittedCurveWeeklyDo.java

@@ -0,0 +1,115 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 投顾产品周度拟合净值信息
+ */
+@Setter
+@Getter
+public class CompanyFittedCurveWeeklyDo extends BaseNavDO {
+    /**
+     * ID自增
+     */
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    private String companyId;
+
+    /**
+     * 募集类型:1-私募 2-公募
+     */
+    private Byte raiseType;
+
+    /**
+     * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
+     */
+    private Integer curveType;
+
+    /**
+     * 策略id
+     */
+    private Integer strategy;
+
+    /**
+     * 拟合后净值年周
+     */
+    private String yearWeek;
+
+    /**
+     * 拟合后净值所在年
+     */
+    private String endYear;
+
+    /**
+     * 拟合后净值全年所在周
+     */
+    private Byte weekOfYear;
+
+    /**
+     * 净值日期
+     */
+    private Date priceDate;
+
+    /**
+     * 拟合净值
+     */
+    private BigDecimal cumulativeNav;
+
+    /**
+     * 本次入选的基金数量
+     */
+    private Integer fundNum;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+
+    @Override
+    public String getRefId() {
+        return this.companyId;
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return cumulativeNav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return cumulativeNav;
+    }
+}

+ 82 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/DepositNavDo.java

@@ -0,0 +1,82 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 10:17
+ * @description 无风险利率的净值
+ */
+@Setter
+@Getter
+public class DepositNavDo extends BaseNavDO {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001
+     */
+    private String fundId;
+
+    /**
+     * 净值日期
+     */
+    private Date priceDate;
+
+    /**
+     * 单位净值
+     */
+    private BigDecimal nav;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+
+    @Override
+    public String getRefId() {
+        return this.fundId;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNav() {
+        return nav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return nav;
+    }
+}

+ 94 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerFittedCurveDo.java

@@ -0,0 +1,94 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 基金经理产品拟合净值信息
+ */
+@Setter
+@Getter
+public class FundManagerFittedCurveDo extends BaseNavDO {
+    /**
+     * ID自增
+     */
+    private Integer id;
+
+    /**
+     * 基金经理id
+     */
+    private String fundManagerId;
+
+    /**
+     * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
+     */
+    private Integer curveType;
+
+    /**
+     * 策略id
+     */
+    private Integer strategy;
+
+    /**
+     * 拟合后净值月份
+     */
+    private String endDate;
+
+    /**
+     * 拟合净值
+     */
+    private BigDecimal cumulativeNav;
+
+    /**
+     * 入选基金数量
+     */
+    private Integer fundNum;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getNavDate() {
+        return this.endDate;
+    }
+
+    @Override
+    public String getRefId() {
+        return this.fundManagerId;
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return cumulativeNav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return cumulativeNav;
+    }
+}

+ 110 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerFittedCurveWeeklyDo.java

@@ -0,0 +1,110 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 基金经理产品周度拟合净值信息
+ */
+@Setter
+@Getter
+public class FundManagerFittedCurveWeeklyDo extends BaseNavDO {
+    /**
+     * ID自增
+     */
+    private Integer id;
+
+    /**
+     * 基金经理id
+     */
+    private String fundManagerId;
+
+    /**
+     * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
+     */
+    private Integer curveType;
+
+    /**
+     * 策略id
+     */
+    private Integer strategy;
+
+    /**
+     * 拟合后净值年周
+     */
+    private String yearWeek;
+
+    /**
+     * 拟合后净值所在年
+     */
+    private String endYear;
+
+    /**
+     * 拟合后净值全年所在周
+     */
+    private Byte weekOfYear;
+
+    /**
+     * 净值日期
+     */
+    private Date priceDate;
+
+    /**
+     * 拟合净值
+     */
+    private BigDecimal cumulativeNav;
+
+    /**
+     * 入选基金数量
+     */
+    private Integer fundNum;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+
+    @Override
+    public String getRefId() {
+        return this.fundManagerId;
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return this.cumulativeNav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return cumulativeNav;
+    }
+}

+ 141 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/IndexesRzIndexDo.java

@@ -0,0 +1,141 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import com.smppw.constants.DateConst;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 分类周指标信息表
+ */
+@Setter
+@Getter
+public class IndexesRzIndexDo extends BaseNavDO {
+    /**
+     * ID自增,没意义
+     */
+    private Integer id;
+
+    /**
+     * 指数ID与index_profile的index_id关联
+     */
+    private String indexId;
+
+    /**
+     * 指数代码来源于indexes_profile
+     */
+    private String indexCode;
+
+    /**
+     * 指数截止月份
+     */
+    private Date endDate;
+
+    /**
+     * 本周属于的年份
+     */
+    private Integer yearofweek;
+
+    /**
+     * 一年中的第N周
+     */
+    private Integer weeks;
+
+    /**
+     * 策略,来源于d_strategy
+     */
+    private Integer strategy;
+
+    /**
+     * 子策略id
+     */
+    private Integer substrategy;
+
+    /**
+     * 三级策略
+     */
+    private Integer thirdStrategy;
+
+    /**
+     * 上一期指数值
+     */
+    private BigDecimal lastIndexValue;
+
+    /**
+     * 本期指数
+     */
+    private BigDecimal indexValue;
+
+    /**
+     * 指数周收益
+     */
+    private BigDecimal ret1w;
+
+    /**
+     * 纳入指数计算基金数量
+     */
+    private Integer inclCalFundCount;
+
+    /**
+     * 基金总数量
+     */
+    private Integer totalFundCount;
+
+    /**
+     * 是否是主策略周指数,0表示是主策略周指数,1表示是子策略周指数
+     */
+    private Integer isstrategy;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getRefId() {
+        return indexId;
+    }
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.format(endDate, DateConst.YYYY_MM);
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return this.indexValue;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNav() {
+        return indexValue;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return indexValue;
+    }
+}

+ 147 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/MarketIndexesDo.java

@@ -0,0 +1,147 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 主要指数表
+ */
+@Setter
+@Getter
+public class MarketIndexesDo extends BaseNavDO {
+    private Integer id;
+
+    /**
+     * 指数类别id
+     */
+    private String indexId;
+
+    /**
+     * 指数代码
+     */
+    private String indexCode;
+
+    /**
+     * 日期
+     */
+    private Date priceDate;
+
+    /**
+     * 前收盘价
+     */
+    private BigDecimal preclose;
+
+    /**
+     * 开盘价
+     */
+    private BigDecimal open;
+
+    /**
+     * 最高价
+     */
+    private BigDecimal high;
+
+    /**
+     * 最低价
+     */
+    private BigDecimal low;
+
+    /**
+     * 收盘价
+     */
+    private BigDecimal close;
+
+    /**
+     * 成交量(万股)
+     */
+    private BigDecimal tradeVolumen;
+
+    /**
+     * 成交金额(万元)
+     */
+    private BigDecimal tradeAmount;
+
+    /**
+     * 涨跌
+     */
+    private BigDecimal waveRange;
+
+    /**
+     * 涨跌幅(%)
+     */
+    private BigDecimal dayPriceLimit;
+
+    /**
+     * 久期
+     */
+    private BigDecimal duration;
+
+    /**
+     * 凸性
+     */
+    private BigDecimal convexity;
+
+    /**
+     * 到期收益率(%)
+     */
+    private BigDecimal retFinal;
+
+    /**
+     * 平均票面利率(%)
+     */
+    private BigDecimal avgCouponRate;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Byte isvalid;
+
+    @Override
+    public String getRefId() {
+        return this.indexId;
+    }
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return this.close;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNav() {
+        return close;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return close;
+    }
+}

+ 87 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/NavDo.java

@@ -0,0 +1,87 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Setter
+@Getter
+public class NavDo extends BaseNavDO {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001
+     */
+    private String fundId;
+
+    /**
+     * 净值日期
+     */
+    private Date priceDate;
+
+    /**
+     * 单位净值
+     */
+    private BigDecimal nav;
+
+    /**
+     * 考虑分红再投资的单位累计净值
+     */
+    private BigDecimal cumulativeNav;
+
+    /**
+     * 分红不投资的单位累计净值
+     */
+    private BigDecimal cumulativeNavWithdrawal;
+
+    /**
+     * 净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他
+     */
+    private Integer ishighOrLow;
+
+    /**
+     * 距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值
+     */
+    private BigDecimal tohighNavRatio;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+
+    @Override
+    public String getRefId() {
+        return this.fundId;
+    }
+}

+ 90 - 0
src/main/java/com/smppw/analysis/domain/dataobject/nav/PublicNavDo.java

@@ -0,0 +1,90 @@
+package com.smppw.analysis.domain.dataobject.nav;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 公募净值表
+ */
+@Setter
+@Getter
+public class PublicNavDo extends BaseNavDO {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001
+     */
+    private String fundId;
+
+    /**
+     * 净值日期
+     */
+    private Date priceDate;
+
+    /**
+     * 单位净值
+     */
+    private BigDecimal nav;
+
+    /**
+     * 考虑分红再投资的单位累计净值
+     */
+    private BigDecimal cumulativeNav;
+
+    /**
+     * 分红不投资的单位累计净值
+     */
+    private BigDecimal cumulativeNavWithdrawal;
+
+    /**
+     * 净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他
+     */
+    private Integer ishighOrLow;
+
+    /**
+     * 距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值
+     */
+    private BigDecimal tohighNavRatio;
+
+    /**
+     * 创建者Id,默认第一次创建者名称,创建后不变更
+     */
+    private Integer creatorid;
+
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createtime;
+
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterid;
+
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updatetime;
+
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+
+    @Override
+    public String getRefId() {
+        return this.fundId;
+    }
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+}

+ 23 - 12
src/main/java/com/smppw/analysis/domain/dto/info/FundHeadInfoVO.java

@@ -25,36 +25,47 @@ public class FundHeadInfoVO extends HeadInfoVO {
      * 基金状态值
      * 1-募集中、2-开放运行、3-封闭运行(已废弃)、4-提前清算、5-到期清算、6-发行失败、7-投顾协议已终止、 8-延期清算 -1-其他 9-非正常清算 10-已终止 11-已作废
      */
-    private String fundStatusValue;
+    private String fundStatus;
     /**
      * 三级策略名称
      */
-    private String thirdStrategyId;
+    private Integer thirdStrategyId;
     /**
      * 三级策略名称
      */
     private String thirdStrategy;
     /**
-     * 基金规模 中基协数据
+     * 基金规模 中基协数据,单位万元
      */
     private String fundScale;
     /**
      * 公司规模
+     * 1:0-5亿 2:5-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上
      */
-    private Byte companyAssetSize;
+    private ValueLabelVO companyAssetSize;
+//    /**
+//     * 是否小于500万
+//     */
+//    private ValueLabelVO lowerThanFiveMillionLabel;
     /**
-     * 是否小于500万
+     * 基准id与名称
      */
-    private ValueLabelVO lowerThanFiveMillionLabel;
+    private String primaryBenchmarkId;
     /**
      * 基准id与名称
      */
-    private String primaryBenchmarkId;
-
     private String primaryBenchmarkName;
 
-    @Override
-    public String getStrategySummaryName() {
-        return super.getStrategySummaryName() + "" + this.getThirdStrategy();
-    }
+    /**
+     * 单位净值
+     */
+    private String originalNav;
+    /**
+     * 复权净值
+     */
+    private String cumulativeNav;
+    /**
+     * 累计净值
+     */
+    private String cumulativeNavWithdrawal;
 }

+ 4 - 0
src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoParams.java

@@ -14,4 +14,8 @@ public class HeadInfoParams {
      * 标的id
      */
     private String secId;
+    /**
+     * 标的类型,获取headInfo实现类时传递
+     */
+    private String secType;
 }

+ 0 - 4
src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoVO.java

@@ -71,8 +71,4 @@ public class HeadInfoVO {
      * 最新净值日期
      */
     private String priceDate;
-
-    public String getStrategySummaryName() {
-        return this.getStrategy() + "" + this.getSubstrategy();
-    }
 }

+ 1 - 12
src/main/java/com/smppw/analysis/domain/dto/info/PrivatelyFundHeadInfoVO.java

@@ -11,16 +11,5 @@ import lombok.Setter;
 @Setter
 @Getter
 public class PrivatelyFundHeadInfoVO extends FundHeadInfoVO {
-    /**
-     * 单位净值
-     */
-    private String originalNav;
-    /**
-     * 复权净值
-     */
-    private String cumulativeNav;
-    /**
-     * 累计净值
-     */
-    private String cumulativeNavWithdrawal;
+
 }

+ 0 - 12
src/main/java/com/smppw/analysis/domain/dto/info/PubliclyFundHeadInfoVO.java

@@ -11,16 +11,4 @@ import lombok.Setter;
 @Setter
 @Getter
 public class PubliclyFundHeadInfoVO extends FundHeadInfoVO {
-    /**
-     * 单位净值
-     */
-    private String originalNav;
-    /**
-     * 复权净值
-     */
-    private String cumulativeNav;
-    /**
-     * 累计净值
-     */
-    private String cumulativeNavWithdrawal;
 }

+ 3 - 0
src/main/java/com/smppw/analysis/domain/gateway/CacheGateway.java

@@ -1,5 +1,6 @@
 package com.smppw.analysis.domain.gateway;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -31,4 +32,6 @@ public interface CacheGateway<V> {
     Map<String, V> hget(String key);
 
     V hget(String key, String item);
+
+    List<V> hget(String key, Collection<String> item);
 }

+ 130 - 21
src/main/java/com/smppw/analysis/domain/manager/info/AbstractFundHeadInfo.java

@@ -1,62 +1,171 @@
 package com.smppw.analysis.domain.manager.info;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dataobject.FundInformationDo;
+import com.smppw.analysis.domain.dao.nav.NavDao;
+import com.smppw.analysis.domain.dao.nav.NavFactory;
+import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
 import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
 import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
+import com.smppw.common.pojo.ValueLabelVO;
+import com.smppw.common.pojo.dto.NavDto;
 import com.smppw.common.pojo.enums.RaiseType;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
-public abstract class AbstractFundHeadInfo<R extends FundHeadInfoVO> implements HeadInfo<R> {
-    protected final BaseInfoService baseInfoService;
+public abstract class AbstractFundHeadInfo<R extends FundHeadInfoVO> extends AbstractHeadInfo<R> {
     protected final FundInformationDao fundInformationDao;
+    protected final BaseInfoService baseInfoService;
 
-    public AbstractFundHeadInfo(BaseInfoService baseInfoService, FundInformationDao fundInformationDao) {
-        this.baseInfoService = baseInfoService;
+    public AbstractFundHeadInfo(NavFactory navFactory, FundInformationDao fundInformationDao, BaseInfoService baseInfoService) {
+        super(navFactory);
         this.fundInformationDao = fundInformationDao;
+        this.baseInfoService = baseInfoService;
     }
 
-    protected abstract Map<String, String> getSecNameMap(FundInformationDo fundInfo);
-
     @Override
     public R get(HeadInfoParams params) {
         FundHeadInfoVO headInfo = new FundHeadInfoVO();
         String fundId = params.getSecId();
-        FundInformationDo fundInfo = this.fundInformationDao.getFundInfoById(fundId);
+        FundInfoDO fundInfo = this.fundInformationDao.getFundInfoById(fundId);
         if (fundInfo == null) {
             throw new APIException("基金不存在");
         }
         if (fundInfo.getRaiseType() == null) {
             throw new APIException("基金的募集类型不能为空");
         }
-
-        String trustId = fundInfo.getTrustId();
-        String primaryBenchmarkId = fundInfo.getPrimaryBenchmarkId();
         Map<String, String> secNameMap = this.getSecNameMap(fundInfo);
         headInfo.setRefId(fundId);
         headInfo.setDetailId(fundId);
+        headInfo.setTrustId(fundInfo.getTrustId());
+        headInfo.setPrimaryBenchmarkId(fundInfo.getPrimaryBenchmarkId());
+        this.handleBaseInfo(headInfo, fundInfo, secNameMap);
+        this.handleManager(headInfo, secNameMap, fundInfo.getManagerIds());
+        this.handleLastNav(headInfo, params.getSecType());
+        R result = this.handleExtInfo(fundInfo, headInfo, secNameMap);
+        this.handleStrategySummaryName(result);
+        return result;
+    }
+
+    public abstract R handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap);
+
+    /**
+     * 获取所有标的的名称映射
+     *
+     * @param fundInfo /
+     * @return /
+     */
+    protected Map<String, String> getSecNameMap(FundInfoDO fundInfo) {
+        List<String> secIds = ListUtil.list(false);
+        secIds.add(fundInfo.getTrustId());
+        secIds.add(fundInfo.getPrimaryBenchmarkId());
+        if (fundInfo.getStrategy() != null) {
+            secIds.add(fundInfo.getStrategy() + "");
+        }
+        if (fundInfo.getSubstrategy() != null) {
+            secIds.add(fundInfo.getSubstrategy() + "");
+        }
+        if (fundInfo.getFirstStrategy() != null) {
+            secIds.add(fundInfo.getFirstStrategy() + "");
+        }
+        if (fundInfo.getSecondStrategy() != null) {
+            secIds.add(fundInfo.getSecondStrategy() + "");
+        }
+        if (fundInfo.getThirdStrategy() != null) {
+            secIds.add(fundInfo.getThirdStrategy() + "");
+        }
+        if (StrUtil.isNotBlank(fundInfo.getManagerIds())) {
+            List<String> tempList = StrUtil.split(fundInfo.getManagerIds(), ",");
+            if (CollUtil.isNotEmpty(tempList)) {
+                secIds.addAll(tempList);
+            }
+        }
+        return this.baseInfoService.querySecName(secIds);
+    }
+
+    /**
+     * 最新的净值数据
+     *
+     * @param headInfo 基本信息
+     * @param secType  标的类型
+     */
+    private void handleLastNav(FundHeadInfoVO headInfo, String secType) {
+        String fundId = headInfo.getRefId();
+        NavDao instance = this.navFactory.getInstance(secType);
+        Map<String, NavDto> navMap = instance.getLastNav(ListUtil.of(fundId));
+        NavDto navDto = navMap.getOrDefault(fundId, new NavDto());
+        headInfo.setPriceDate(navDto.getPriceDate());
+        headInfo.setOriginalNav(StrUtil.toStringOrNull(navDto.getOriginalNav()));
+        headInfo.setCumulativeNav(StrUtil.toStringOrNull(navDto.getCumulativeNav()));
+        headInfo.setCumulativeNavWithdrawal(StrUtil.toStringOrNull(navDto.getCumulativeNavWithdrawal()));
+    }
+
+    /**
+     * 基金经理id和名称
+     *
+     * @param headInfo   /
+     * @param secNameMap /
+     * @param managerIds /
+     */
+    private void handleManager(FundHeadInfoVO headInfo, Map<String, String> secNameMap, String managerIds) {
+        if (StrUtil.isBlank(managerIds)) {
+            return;
+        }
+        List<ValueLabelVO> managers = ListUtil.list(true);
+        List<String> managerList = StrUtil.split(managerIds, ",");
+        for (String managerId : managerList) {
+            managers.add(new ValueLabelVO(managerId, secNameMap.get(managerId)));
+        }
+        headInfo.setManagers(managers);
+    }
+
+    /**
+     * 基本信息填充
+     *
+     * @param headInfo   /
+     * @param fundInfo   /
+     * @param secNameMap /
+     */
+    private void handleBaseInfo(FundHeadInfoVO headInfo, FundInfoDO fundInfo, Map<String, String> secNameMap) {
+        String trustId = headInfo.getTrustId();
         headInfo.setRefShortName(fundInfo.getFundShortName());
         headInfo.setRefName(fundInfo.getFundName());
         headInfo.setRegisterNumber(fundInfo.getRegisterNumber());
         headInfo.setAmacUrl(fundInfo.getAmacUrl());
         headInfo.setRaiseType(fundInfo.getRaiseType() == 1 ? "私募" : "公募");
-        RaiseType raiseType = RaiseType.getRaiseType((int) fundInfo.getRaiseType());
+        RaiseType raiseType = RaiseType.getRaiseType(fundInfo.getRaiseType());
         headInfo.setRaiseTypeValue(raiseType.name());
         headInfo.setInceptionDate(DateUtil.formatDate(fundInfo.getInceptionDate()));
-        headInfo.setTrustId(trustId);
         headInfo.setTrustName(secNameMap.get(trustId));
-        headInfo.setManagers(null);
-        headInfo.setFundStatusValue(null);
-        headInfo.setFundScale(null);
-        headInfo.setCompanyAssetSize(null);
-        headInfo.setPrimaryBenchmarkId(primaryBenchmarkId);
-        headInfo.setPrimaryBenchmarkName(secNameMap.get(primaryBenchmarkId));
-        return this.getFund(params, headInfo);
+        headInfo.setFundStatus(fundInfo.getFundStatus() == null ? null : fundInfo.getFundStatus().toString());
+        headInfo.setCompanyAssetSize(this.fundInformationDao.getLastCompanyScale(trustId)); // 公司规模
+        headInfo.setFundScale(this.fundInformationDao.getFundLastAssetSize(headInfo.getRefId())); // 基金规模
+        headInfo.setPrimaryBenchmarkName(secNameMap.get(headInfo.getPrimaryBenchmarkId()));
     }
 
-    public abstract R getFund(HeadInfoParams params, FundHeadInfoVO headInfo);
+    /**
+     * 策略名称拼接处理
+     *
+     * @param info /
+     */
+    private void handleStrategySummaryName(R info) {
+        Integer thirdStrategyId = info.getThirdStrategyId();
+        if (!Objects.equals(-1, thirdStrategyId)) {
+            info.setThirdStrategyId(null);
+            if (StrUtil.isBlank(info.getSubstrategy())) {
+                info.setStrategySummaryName(info.getStrategy());
+            } else {
+                info.setStrategySummaryName(info.getStrategy() + "/" + info.getSubstrategy());
+            }
+        } else {
+            info.setStrategySummaryName(info.getSubstrategy() + "/" + info.getThirdStrategy());
+        }
+    }
 }

+ 20 - 0
src/main/java/com/smppw/analysis/domain/manager/info/AbstractHeadInfo.java

@@ -0,0 +1,20 @@
+package com.smppw.analysis.domain.manager.info;
+
+import com.smppw.analysis.domain.dao.nav.NavFactory;
+import com.smppw.analysis.domain.dto.info.HeadInfoVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 13:49
+ * @description 所有标的头部信息获取(获取净值已经抽象、获取基本信息可以抽象)
+ */
+public abstract class AbstractHeadInfo<R extends HeadInfoVO> implements HeadInfo<R> {
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+    protected final NavFactory navFactory;
+
+    public AbstractHeadInfo(NavFactory navFactory) {
+        this.navFactory = navFactory;
+    }
+}

+ 19 - 23
src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyFundHeadInfo.java

@@ -1,11 +1,10 @@
 package com.smppw.analysis.domain.manager.info.handler;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.map.MapUtil;
 import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dataobject.FundInformationDo;
+import com.smppw.analysis.domain.dao.nav.NavFactory;
+import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
 import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.dto.info.PrivatelyFundHeadInfoVO;
 import com.smppw.analysis.domain.manager.info.AbstractFundHeadInfo;
 import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
@@ -16,29 +15,26 @@ import java.util.Map;
 
 @Component(HeadInfoConstants.PRIVATELY_FUND)
 public class PrivatelyFundHeadInfo extends AbstractFundHeadInfo<PrivatelyFundHeadInfoVO> {
-    public PrivatelyFundHeadInfo(BaseInfoService baseInfoService, FundInformationDao fundInformationDao) {
-        super(baseInfoService, fundInformationDao);
+    public PrivatelyFundHeadInfo(NavFactory navFactory, FundInformationDao fundInformationDao, BaseInfoService baseInfoService) {
+        super(navFactory, fundInformationDao, baseInfoService);
     }
 
     @Override
-    protected Map<String, String> getSecNameMap(FundInformationDo fundInfo) {
-        return MapUtil.empty();
-    }
-
-    @Override
-    public PrivatelyFundHeadInfoVO getFund(HeadInfoParams params, FundHeadInfoVO headInfo) {
-        PrivatelyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PrivatelyFundHeadInfoVO.class);
-        headInfo.setStrategy(null);
-        headInfo.setStrategyId(null);
-        headInfo.setSubstrategy(null);
-        headInfo.setSubstrategyId(null);
-        headInfo.setThirdStrategyId(null);
-        headInfo.setThirdStrategy(null);
-        result.setPriceDate(null);
-        result.setLowerThanFiveMillionLabel(null);
-        result.setOriginalNav(null);
-        result.setCumulativeNav(null);
-        result.setCumulativeNavWithdrawal(null);
+    public PrivatelyFundHeadInfoVO handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap) {
+        PrivatelyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PrivatelyFundHeadInfoVO.class, "strategy", "substrategy", "thirdStrategy");
+        if (fundInfo.getFirstStrategy() != null) {
+            result.setStrategy(secNameMap.get(fundInfo.getFirstStrategy().toString()));
+            result.setStrategyId(fundInfo.getFirstStrategy());
+        }
+        if (fundInfo.getSecondStrategy() != null) {
+            result.setSubstrategy(secNameMap.get(fundInfo.getSecondStrategy().toString()));
+            result.setSubstrategyId(fundInfo.getSecondStrategy());
+        }
+        if (fundInfo.getThirdStrategy() != null) {
+            result.setThirdStrategy(secNameMap.get(fundInfo.getThirdStrategy().toString()));
+            result.setThirdStrategyId(fundInfo.getThirdStrategy());
+        }
+        result.setFundScale(null);
         return result;
     }
 }

+ 37 - 24
src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyFundHeadInfo.java

@@ -1,47 +1,60 @@
 package com.smppw.analysis.domain.manager.info.handler;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dataobject.FundInformationDo;
+import com.smppw.analysis.domain.dao.nav.NavFactory;
+import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
+import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
 import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.dto.info.PubliclyCurrencyFundHeadInfoVO;
 import com.smppw.analysis.domain.dto.info.PubliclyFundHeadInfoVO;
 import com.smppw.analysis.domain.manager.info.AbstractFundHeadInfo;
 import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
 import com.smppw.analysis.domain.service.BaseInfoService;
+import com.smppw.common.pojo.enums.strategy.Strategy;
+import com.smppw.utils.BigDecimalUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Component(HeadInfoConstants.PUBLICLY_FUND)
 public class PubliclyFundHeadInfo extends AbstractFundHeadInfo<PubliclyFundHeadInfoVO> {
-    public PubliclyFundHeadInfo(BaseInfoService baseInfoService, FundInformationDao fundInformationDao) {
-        super(baseInfoService, fundInformationDao);
+    public PubliclyFundHeadInfo(NavFactory navFactory, FundInformationDao fundInformationDao, BaseInfoService baseInfoService) {
+        super(navFactory, fundInformationDao, baseInfoService);
     }
 
     @Override
-    protected Map<String, String> getSecNameMap(FundInformationDo fundInfo) {
-        return MapUtil.empty();
-    }
-
-    @Override
-    public PubliclyFundHeadInfoVO getFund(HeadInfoParams params, FundHeadInfoVO headInfo) {
+    public PubliclyFundHeadInfoVO handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap) {
         PubliclyCurrencyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PubliclyCurrencyFundHeadInfoVO.class);
-        headInfo.setStrategy(null);
-        headInfo.setStrategyId(null);
-        headInfo.setSubstrategy(null);
-        headInfo.setSubstrategyId(null);
-        result.setPriceDate(null);
-        result.setLowerThanFiveMillionLabel(null);
-        result.setOriginalNav(null);
-        result.setCumulativeNav(null);
-        result.setCumulativeNavWithdrawal(null);
-        result.setIsCurrency(null);
-        result.setProfitSevenDayAnnual(null);
-        result.setRetPerUnit(null);
-        result.setPublicWorthUnit(null);
+        if (fundInfo.getStrategy() != null) {
+            result.setStrategy(secNameMap.get(fundInfo.getStrategy().toString()));
+            result.setStrategyId(fundInfo.getStrategy());
+        }
+        if (fundInfo.getSubstrategy() != null) {
+            result.setSubstrategy(secNameMap.get(fundInfo.getSubstrategy().toString()));
+            result.setSubstrategyId(fundInfo.getSubstrategy());
+        }
+        if (Objects.equals(Strategy.Cash.getStrategyId(), fundInfo.getStrategy())) {
+            result.setIsCurrency(1);
+            List<MonetaryFundProfitDO> tempList = this.fundInformationDao.queryMonetaryFund(fundInfo.getRefId());
+            if (CollectionUtil.isNotEmpty(tempList)) {
+                MonetaryFundProfitDO monetaryFundProfitDO = tempList.get(tempList.size() - 1);
+                result.setProfitSevenDayAnnual(monetaryFundProfitDO.getProfitServenDayAnnual());
+                if ("万份".equals(result.getPublicWorthUnit())) {
+                    result.setRetPerUnit(monetaryFundProfitDO.getProfitPerMillion());
+                } else if ("百万份".equals(result.getPublicWorthUnit())) {
+                    result.setRetPerUnit(BigDecimalUtils.multiply(monetaryFundProfitDO.getProfitPerMillion(), BigDecimalUtils.toBigDecimal("100")));
+                } else if ("百份".equals(result.getPublicWorthUnit())) {
+                    result.setRetPerUnit(BigDecimalUtils.divide(monetaryFundProfitDO.getProfitPerMillion(), BigDecimalUtils.toBigDecimal("100")));
+                }
+                result.setRetPerUnit(monetaryFundProfitDO.getProfitPerMillion());
+            }
+        } else {
+            result.setIsCurrency(0);
+        }
         return result;
     }
 }

+ 4 - 3
src/main/java/com/smppw/analysis/domain/manager/position/AbstractAnalysisBizHandler.java

@@ -14,6 +14,7 @@ import com.smppw.analysis.domain.dao.PositionAnalysisDao;
 import com.smppw.analysis.infrastructure.config.AnalysisProperty;
 import com.smppw.analysis.infrastructure.consts.RedisConst;
 import com.smppw.analysis.infrastructure.exception.APIException;
+import com.smppw.analysis.infrastructure.utils.CommonUtils;
 import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.constants.SecType;
 
@@ -87,7 +88,7 @@ public abstract class AbstractAnalysisBizHandler<P extends BaseAnalysisParams, R
         Object obj = this.cacheGateway.get(key);
         List<SwSecIndustryInfoDO> dataList = ListUtil.list(false);
         if (obj != null) {
-            dataList = this.convertList(obj, SwSecIndustryInfoDO.class);
+            dataList = CommonUtils.convertList(obj, SwSecIndustryInfoDO.class);
         } else {
             List<SwSecIndustryInfoDO> industryInfos = this.analysisService.listSecIndustryInfo();
             if (industryInfos != null) {
@@ -114,7 +115,7 @@ public abstract class AbstractAnalysisBizHandler<P extends BaseAnalysisParams, R
         Map<String, Object> hmget = this.cacheGateway.hget(key);
         hmget.forEach((k, v) -> {
             if (dateList.contains(k)) {
-                List<IndexSecWeightInfoDO> tempList = this.convertList(v, IndexSecWeightInfoDO.class);
+                List<IndexSecWeightInfoDO> tempList = CommonUtils.convertList(v, IndexSecWeightInfoDO.class);
                 indexSecDateWeightMap.put(k, tempList);
             }
         });
@@ -131,7 +132,7 @@ public abstract class AbstractAnalysisBizHandler<P extends BaseAnalysisParams, R
                         t -> this.cacheGateway.hset(key, date, t, RedisConst.POSITION_MONTH_TTL, TimeUnit.SECONDS));
                 this.applicationContext.publishEvent(event);
             } else {
-                indexSecWeightList = this.convertList(hget, IndexSecWeightInfoDO.class);
+                indexSecWeightList = CommonUtils.convertList(hget, IndexSecWeightInfoDO.class);
             }
             indexSecDateWeightMap.putIfAbsent(date, indexSecWeightList);
         }

+ 3 - 37
src/main/java/com/smppw/analysis/domain/manager/position/AbstractBizHandler.java

@@ -1,9 +1,7 @@
 package com.smppw.analysis.domain.manager.position;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.text.CharSequenceUtil;
-import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.smppw.analysis.domain.dto.position.BaseParams;
 import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
@@ -15,6 +13,7 @@ import com.smppw.analysis.domain.gateway.CacheGateway;
 import com.smppw.analysis.infrastructure.config.AnalysisProperty;
 import com.smppw.analysis.infrastructure.consts.RedisConst;
 import com.smppw.analysis.infrastructure.exception.APIException;
+import com.smppw.analysis.infrastructure.utils.CommonUtils;
 import com.smppw.common.pojo.ValueLabelVO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,8 +36,8 @@ public abstract class AbstractBizHandler<P extends BaseParams, R> implements Biz
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
     protected final CacheGateway<Object> cacheGateway;
     protected final PositionLoadFactory factory;
-    protected long current;
     protected ApplicationContext applicationContext;
+    protected long current;
     private long executeTime;
 
     public AbstractBizHandler(AnalysisProperty property, CacheFactory cacheFactory, PositionLoadFactory factory) {
@@ -79,39 +78,6 @@ public abstract class AbstractBizHandler<P extends BaseParams, R> implements Biz
         }
     }
 
-    /**
-     * 一个简单的数据转换,object对象转list
-     *
-     * @param obj   待转换对象
-     * @param clazz 泛型类型
-     * @param <T>   类型参数
-     * @return 对应泛型类型的实体的集合
-     */
-    protected <T> List<T> convertList(Object obj, Class<T> clazz) {
-        try {
-            return JSONUtil.toList(JSONUtil.toJsonStr(obj), clazz);
-        } catch (Exception e) {
-            logger.warn(StrUtil.format("数据转换list失败:{}", e.getMessage()));
-        }
-        return ListUtil.empty();
-    }
-
-    /**
-     * 一个简单的数据转换,object对象转bean
-     *
-     * @param obj   待转换对象
-     * @param clazz 泛型类型
-     * @param <T>   类型参数
-     * @return 对应泛型类型实体
-     */
-    protected <T> T convertBean(Object obj, Class<T> clazz) {
-        try {
-            return JSONUtil.toBean(JSONUtil.toJsonStr(obj), clazz);
-        } catch (Exception e) {
-            logger.warn(StrUtil.format("数据转换实体失败:{}", e.getMessage()));
-        }
-        return null;
-    }
 
     /**
      * 接口业务处理
@@ -178,7 +144,7 @@ public abstract class AbstractBizHandler<P extends BaseParams, R> implements Biz
         String item = params.getFundId();
         Object hget = this.cacheGateway.hget(key, item);
         if (hget != null) {
-            return this.convertList(hget, FundPositionDetail.class);
+            return CommonUtils.convertList(hget, FundPositionDetail.class);
         }
         PositionLoad loadInstance = this.factory.getPositionLoadInstance(params.getFundId());
         List<FundPositionDetail> positionInfoList = loadInstance.loadPositionDetail(params);

+ 25 - 0
src/main/java/com/smppw/analysis/domain/manager/position/PositionLoadConstants.java

@@ -0,0 +1,25 @@
+package com.smppw.analysis.domain.manager.position;
+
+import cn.hutool.core.map.MapUtil;
+import com.smppw.constants.SecType;
+
+import java.util.Map;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/11 8:59
+ * @description 基金持仓分析静态常量 bean名称
+ */
+public final class PositionLoadConstants {
+    public static final String PRIVATELY_FUND = "privatelyFundPosition";
+    public static final String PUBLICLY_FUND = "publiclyFundPosition";
+    public static final Map<String, String> SEC_TYPE_HEAD_MAP = MapUtil.newHashMap(8);
+
+    static {
+        SEC_TYPE_HEAD_MAP.put(SecType.PRIVATELY_OFFERED_FUND, PRIVATELY_FUND);
+        SEC_TYPE_HEAD_MAP.put(SecType.PUBLICLY_OFFERED_FUNDS, PUBLICLY_FUND);
+    }
+
+    private PositionLoadConstants() {
+    }
+}

+ 4 - 4
src/main/java/com/smppw/analysis/domain/manager/position/PositionLoadFactory.java

@@ -6,7 +6,6 @@ import com.smppw.analysis.domain.dto.position.BaseParams;
 import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
 import com.smppw.analysis.domain.dto.position.FundPositionDetail;
 import com.smppw.analysis.domain.service.BaseInfoService;
-import com.smppw.constants.SecType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -38,9 +37,10 @@ public class PositionLoadFactory {
      * @return 数据加载策略
      */
     public PositionLoad getPositionLoadInstance(String fundId) {
-        List<String> supportTypes = ListUtil.of(SecType.PUBLICLY_OFFERED_FUNDS, SecType.PRIVATE_FUND);
+        List<String> supportTypes = ListUtil.of(PositionLoadConstants.PUBLICLY_FUND);
         String secType = this.secTypeService.getSecType(fundId);
-        if (secType == null || !supportTypes.contains(secType)) {
+        String type = PositionLoadConstants.SEC_TYPE_HEAD_MAP.get(secType);
+        if (type == null || !supportTypes.contains(type)) {
             LOGGER.warn(String.format("secType[%s-%s] not find positionLoad strategy.", fundId, secType));
             return new PositionLoad() {
                 @Override
@@ -53,7 +53,7 @@ public class PositionLoadFactory {
                 }
             };
         } else {
-            return LOAD_STRATEGY.get(secType);
+            return LOAD_STRATEGY.get(type);
         }
     }
 }

+ 1 - 1
src/main/java/com/smppw/analysis/domain/manager/position/PrivatePositionLoad.java

@@ -13,7 +13,7 @@
 // * @date 2023/6/7 9:52
 // * @description 私有基金持仓数据获取逻辑,直接继承私募基金处理接口
 // */
-//@Component(SecType.PRIVATE_FUND)
+//@Component(PositionLoadConstants.PRIVATE_FUND)
 //public class PrivatePositionLoad extends PrivatelyFundPositionLoad {
 //    public PrivatePositionLoad(CmFundPositionService cmFundPositionService) {
 //        super(cmFundPositionService);

+ 1 - 1
src/main/java/com/smppw/analysis/domain/manager/position/PrivatelyFundPositionLoad.java

@@ -14,7 +14,7 @@
 // * @date 2023/6/7 9:52
 // * @description 私募基金持仓数据获取逻辑,私募基金的支持会在基础上做自建基金,不直接支持私募基金的持仓分析
 // */
-//@Component(SecType.PRIVATELY_OFFERED_FUND)
+//@Component(PositionLoadConstants.PRIVATELY_OFFERED_FUND)
 //public class PrivatelyFundPositionLoad extends AbstractPositionLoad {
 //    private final CmFundPositionService cmFundPositionService;
 //

+ 2 - 2
src/main/java/com/smppw/analysis/domain/manager/position/PubliclyFundPositionLoad.java

@@ -4,10 +4,10 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
-import com.smppw.analysis.domain.dto.position.*;
 import com.smppw.analysis.domain.dao.PubliclyFundPositionDao;
 import com.smppw.analysis.domain.dataobject.FundPositionBaseInfoDO;
 import com.smppw.analysis.domain.dataobject.FundPositionDetailDO;
+import com.smppw.analysis.domain.dto.position.*;
 import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.constants.SecType;
 import org.springframework.stereotype.Component;
@@ -20,7 +20,7 @@ import java.util.Map;
  * @date 2023/6/7 9:52
  * @description 公募基金持仓数据获取逻辑
  */
-@Component(SecType.PUBLICLY_OFFERED_FUNDS)
+@Component(PositionLoadConstants.PUBLICLY_FUND)
 public class PubliclyFundPositionLoad extends AbstractPositionLoad {
     private static final Map<Integer, AssetCategoryEnum> ASSET_TYPE_MAPPER = MapUtil.newHashMap();
 

+ 7 - 6
src/main/java/com/smppw/analysis/domain/manager/position/stock/StockPerformanceAttributionBizHandler.java

@@ -3,20 +3,21 @@ package com.smppw.analysis.domain.manager.position.stock;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
+import com.smppw.analysis.domain.dao.PositionAnalysisDao;
+import com.smppw.analysis.domain.dataobject.IndexSecWeightInfoDO;
+import com.smppw.analysis.domain.dataobject.SecClosePriceDO;
 import com.smppw.analysis.domain.dto.position.FundPositionDetail;
 import com.smppw.analysis.domain.dto.position.stock.StockPerformanceAttributionParams;
 import com.smppw.analysis.domain.dto.position.stock.StockPerformanceAttributionVO;
+import com.smppw.analysis.domain.event.SaveCacheEvent;
+import com.smppw.analysis.domain.gateway.CacheFactory;
 import com.smppw.analysis.domain.manager.position.AbstractAnalysisBizHandler;
 import com.smppw.analysis.domain.manager.position.BizHandlerConstants;
 import com.smppw.analysis.domain.manager.position.PositionLoadFactory;
-import com.smppw.analysis.domain.dataobject.IndexSecWeightInfoDO;
-import com.smppw.analysis.domain.dataobject.SecClosePriceDO;
-import com.smppw.analysis.domain.event.SaveCacheEvent;
-import com.smppw.analysis.domain.gateway.CacheFactory;
-import com.smppw.analysis.domain.dao.PositionAnalysisDao;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.analysis.infrastructure.config.AnalysisProperty;
 import com.smppw.analysis.infrastructure.consts.RedisConst;
+import com.smppw.analysis.infrastructure.utils.CommonUtils;
 import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.enums.NavType;
@@ -221,7 +222,7 @@ public class StockPerformanceAttributionBizHandler extends AbstractAnalysisBizHa
         String item = firstDate + lastDate;
         Object hget = this.cacheGateway.hget(key, item);
         if (hget != null) {
-            resultList = this.convertList(hget, SecClosePriceDO.class);
+            resultList = CommonUtils.convertList(hget, SecClosePriceDO.class);
         } else {
             resultList = this.analysisService.listSecClosePrice(firstDate, lastDate);
             List<SecClosePriceDO> tempList = this.analysisService.listSciTechSecClosePrice(firstDate, lastDate);

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFittedCurveDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.CompanyFittedCurveDo;
+import com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFittedCurveWeeklyDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.CompanyFittedCurveWeeklyDo;
+import com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveWeeklyDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 

+ 15 - 0
src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFundScaleRangeHistoryMapper.java

@@ -0,0 +1,15 @@
+package com.smppw.analysis.domain.mapper.core;
+
+import com.smppw.common.pojo.ValueLabelVO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CompanyFundScaleRangeHistoryMapper {
+    /**
+     * 获取机构最新的管理规模
+     *
+     * @param companyId 机构id
+     * @return /
+     */
+    ValueLabelVO getLastCompanyScale(String companyId);
+}

+ 18 - 0
src/main/java/com/smppw/analysis/domain/mapper/core/CompanyInformationDoMapper.java

@@ -0,0 +1,18 @@
+package com.smppw.analysis.domain.mapper.core;
+
+import com.smppw.analysis.domain.dataobject.CompanyInformationDo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CompanyInformationDoMapper {
+    /**
+     * 批量获取机构的基本信息
+     *
+     * @param companyIdList /
+     * @return /
+     */
+    List<CompanyInformationDo> listCompany(@Param("companyIdList") List<String> companyIdList);
+}

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/DepositNavDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.DepositNavDo;
+import com.smppw.analysis.domain.dataobject.nav.DepositNavDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 

+ 8 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/FundAssetSizeMapper.java

@@ -1,9 +1,9 @@
 package com.smppw.analysis.domain.mapper.core;
 
 import com.smppw.analysis.domain.dataobject.ManualFundAssetSizeDo;
-import lombok.Data;
 import org.springframework.stereotype.Repository;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -13,6 +13,13 @@ import java.util.List;
  */
 @Repository
 public interface FundAssetSizeMapper {
+    /**
+     * 获取基金最新的管理规模
+     *
+     * @param fundId 基金id(公募基金)
+     * @return /
+     */
+    BigDecimal getFundLastAssetSize(String fundId);
 
     /**
      * 获取基金资产规模

+ 3 - 0
src/main/java/com/smppw/analysis/domain/mapper/core/FundInformationDoMapper.java

@@ -1,6 +1,7 @@
 package com.smppw.analysis.domain.mapper.core;
 
 import com.smppw.analysis.domain.dataobject.*;
+import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -9,6 +10,8 @@ import java.util.Map;
 
 @Repository
 public interface FundInformationDoMapper {
+    List<FundInfoDO> queryFundInfoList(List<String> fundIds);
+
     List<FundInformationDo> listFundInfo(@Param("fundIdList") List<String> fundIdList);
 
     /**

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/FundManagerFittedCurveDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveDo;
+import com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/FundManagerFittedCurveWeeklyDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveWeeklyDo;
+import com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveWeeklyDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/IndexesRzIndexDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.IndexesRzIndexDo;
+import com.smppw.analysis.domain.dataobject.nav.IndexesRzIndexDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 

+ 1 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/MarketIndexesDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.MarketIndexesDo;
+import com.smppw.analysis.domain.dataobject.nav.MarketIndexesDo;
 import com.smppw.common.pojo.dto.NavDto;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;

+ 2 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/NavDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.NavDo;
+import com.smppw.analysis.domain.dataobject.nav.NavDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -9,6 +9,7 @@ import java.util.List;
 
 @Repository
 public interface NavDoMapper {
+    List<NavDo> listNav(@Param("fundIds") List<String> fundIds);
 
     List<NavDo> listNavByTimeInterval(@Param("fundIdList") List<String> fundIdList, @Param("startDate") String startDate, @Param("endDate") String endDate,
                                       @Param("navFieldSql") String navFieldSql, @Param("needUpdateAndCreateTime") boolean needUpdateAndCreateTime);

+ 7 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/PersonnelInformationMapper.java

@@ -1,7 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
 import com.smppw.analysis.domain.dataobject.PersonnelInformationDo;
-
 import com.smppw.analysis.domain.dataobject.PersonnelWorkExperienceDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -15,6 +14,13 @@ import java.util.List;
  */
 @Repository
 public interface PersonnelInformationMapper {
+    /**
+     * 获取人员基本信息
+     *
+     * @param managerIdList /
+     * @return /
+     */
+    List<PersonnelInformationDo> listPersonnel(@Param("managerIdList") List<String> managerIdList);
 
     /**
      * 获取人员基本信息

+ 3 - 1
src/main/java/com/smppw/analysis/domain/mapper/core/PublicNavDoMapper.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper.core;
 
-import com.smppw.analysis.domain.dataobject.PublicNavDo;
+import com.smppw.analysis.domain.dataobject.nav.PublicNavDo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -8,6 +8,8 @@ import java.util.List;
 
 @Repository
 public interface PublicNavDoMapper {
+    List<PublicNavDo> listNav(@Param("fundIds") List<String> fundIds);
+
     List<PublicNavDo> listNavByTimeInterval(@Param("fundIdList") List<String> fundIdList, @Param("startDate") String startDate, @Param("endDate") String endDate,
                                             @Param("navFieldSql") String navFieldSql, @Param("needUpdateAndCreateTime") boolean needUpdateAndCreateTime);
 }

+ 0 - 8
src/main/java/com/smppw/analysis/domain/mapper/core/RankToBMapper.java

@@ -10,12 +10,4 @@ public interface RankToBMapper {
      * @return 最新排名期
      */
     String getRankDate();
-
-    /**
-     * 从 cm_fund_indicator_ranking 获取标的的最新排名期 ? todo
-     *
-     * @param refId 标的id
-     * @return 标的对应
-     */
-    String getRefRankDate(String refId);
 }

+ 18 - 3
src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.dao.*;
+import com.smppw.analysis.domain.dao.nav.RongzhiIndexNavDao;
 import com.smppw.analysis.domain.dao.rank.RankDao;
 import com.smppw.analysis.domain.dao.rank.RankFactory;
 import com.smppw.analysis.domain.dataobject.*;
@@ -25,7 +26,6 @@ import com.smppw.common.pojo.IStrategy;
 import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.Indicator;
-import com.smppw.common.pojo.enums.strategy.Strategy;
 import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import org.slf4j.Logger;
@@ -70,9 +70,14 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
     private final MfChargeRateMapper mfChargeRateMapper;
     private final PersonnelInformationMapper personnelInformationMapper;
     private ApplicationContext applicationContext;
+    private final FundAssetSizeMapper fundAssetSizeMapper;
+
     @Autowired
     private CommonIndexMapper commonIndexMapper;
-    private final FundAssetSizeMapper fundAssetSizeMapper;
+    @Autowired
+    private CompanyInformationDao companyInformationDao;
+    @Autowired
+    private PersonnelInformationDao personnelInformationDao;
 
     public BaseInfoServiceImpl(AnalysisProperty property, CacheFactory factory, RankFactory rankFactory,
                                IndexesProfileDao indexesProfileDao, RongzhiIndexNavDao rongzhiIndexNavDao,
@@ -134,7 +139,8 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
         } else if (secId.startsWith(PO)) {
             return SecType.COMBINATION;
         } else if (StrUtil.isNumeric(secId)) {
-            if (Strategy.isStrategy(secId)) {
+            IStrategy strategy = StrategyHandleUtils.getStrategy(secId);
+            if (strategy != null) {
                 return SecType.STRATEGY;
             }
         } else if (secId.startsWith(IN)) {
@@ -234,6 +240,15 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
             // 市场指数
             List<String> marketIndexIds = ListUtil.of(SecType.INDEX_FUND, SecType.RONGZHI_INDEX, SecType.THIRD_INDEX_FUND);
             this.loadNameMap(secNameMap, typeSecMap, marketIndexIds, this.indexesProfileDao::getFundIdNameMap);
+            // 基金经理
+            List<String> managerIds = ListUtil.of(SecType.MANAGER);
+            this.loadNameMap(secNameMap, typeSecMap, managerIds, this.personnelInformationDao::getFundIdNameMap);
+            // 基金管理人
+            List<String> companyIds = ListUtil.of(SecType.COMPANY);
+            this.loadNameMap(secNameMap, typeSecMap, companyIds, this.companyInformationDao::getFundIdNameMap);
+            // 策略
+            List<String> strategyIds = ListUtil.of(SecType.STRATEGY);
+            this.loadNameMap(secNameMap, typeSecMap, strategyIds, this::getStrategyIdNameMap);
             // 推送事件,存缓存
             SaveCacheEvent<Map<String, Object>> event = new SaveCacheEvent<>(key, secNameMap, t -> {
                 this.cacheGateway.hset(key, t);

+ 1 - 1
src/main/java/com/smppw/analysis/domain/service/impl/NavServiceImpl.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.service.impl;
 
-import com.smppw.analysis.domain.dao.*;
+import com.smppw.analysis.domain.dao.nav.*;
 import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.common.pojo.dto.DateValue;

+ 16 - 2
src/main/java/com/smppw/analysis/infrastructure/gatewayimpl/InMemoryCacheGateway.java

@@ -1,5 +1,6 @@
 package com.smppw.analysis.infrastructure.gatewayimpl;
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.gateway.CacheFactory;
@@ -8,7 +9,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
-import javax.naming.OperationNotSupportedException;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -20,8 +21,8 @@ import java.util.concurrent.TimeUnit;
  */
 @Component(CacheFactory.MEMORY)
 public class InMemoryCacheGateway implements CacheGateway<Object> {
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
     private static final Map<String, Object> CACHE_MAP = MapUtil.newConcurrentHashMap();
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     @Override
     public Boolean hasKey(String key) {
@@ -106,6 +107,19 @@ public class InMemoryCacheGateway implements CacheGateway<Object> {
         return data.get(item);
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public List<Object> hget(String key, Collection<String> item) {
+        Map<String, Object> data = MapUtil.get(CACHE_MAP, key, Map.class);
+        List<Object> resultList = ListUtil.list(true);
+        data.forEach((k, v) -> {
+            if (item.contains(k)) {
+                resultList.add(v);
+            }
+        });
+        return resultList;
+    }
+
     private boolean addable() {
         return CACHE_MAP.size() <= 1 << 5;
     }

+ 5 - 0
src/main/java/com/smppw/analysis/infrastructure/gatewayimpl/RedisCacheGateway.java

@@ -260,6 +260,11 @@ public class RedisCacheGateway implements CacheGateway<Object> {
         return _redisTemplate.<String, Object>opsForHash().entries(key);
     }
 
+    @Override
+    public List<Object> hget(String key, Collection<String> item) {
+        return _hashOperations.multiGet(key, item);
+    }
+
     /**
      * 获取hashKey对应的所有键值
      *

+ 47 - 0
src/main/java/com/smppw/analysis/infrastructure/utils/CommonUtils.java

@@ -0,0 +1,47 @@
+package com.smppw.analysis.infrastructure.utils;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class CommonUtils {
+    private static final Logger logger = LoggerFactory.getLogger(CommonUtils.class);
+
+    /**
+     * 一个简单的数据转换,object对象转list
+     *
+     * @param obj   待转换对象
+     * @param clazz 泛型类型
+     * @param <T>   类型参数
+     * @return 对应泛型类型的实体的集合
+     */
+    public static <T> List<T> convertList(Object obj, Class<T> clazz) {
+        try {
+            return JSONUtil.toList(JSONUtil.toJsonStr(obj), clazz);
+        } catch (Exception e) {
+            logger.warn(StrUtil.format("数据转换list失败:{}", e.getMessage()));
+        }
+        return ListUtil.empty();
+    }
+
+    /**
+     * 一个简单的数据转换,object对象转bean
+     *
+     * @param obj   待转换对象
+     * @param clazz 泛型类型
+     * @param <T>   类型参数
+     * @return 对应泛型类型实体
+     */
+    public static <T> T convertBean(Object obj, Class<T> clazz) {
+        try {
+            return JSONUtil.toBean(JSONUtil.toJsonStr(obj), clazz);
+        } catch (Exception e) {
+            logger.warn(StrUtil.format("数据转换实体失败:{}", e.getMessage()));
+        }
+        return null;
+    }
+}

+ 0 - 20
src/main/java/com/smppw/analysis/infrastructure/utils/StringUtil.java

@@ -1,20 +0,0 @@
-package com.smppw.analysis.infrastructure.utils;
-
-import cn.hutool.core.util.BooleanUtil;
-import cn.hutool.core.util.StrUtil;
-
-public class StringUtil {
-
-    /**
-     * 判断字符串是不是数字型字符串
-     *
-     * @param str 待判断的字符串
-     * @return true or false
-     */
-    public static boolean isNumeric(String str) {
-        if (StrUtil.isBlank(str)) {
-            return false;
-        }
-        return BooleanUtil.isTrue(str.matches("-?[0-9]+.?[0-9]*"));
-    }
-}

+ 1 - 1
src/main/resources/mapping/core/CompanyFittedCurveDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.CompanyFittedCurveDoMapper">
-    <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.CompanyFittedCurveDo">
+    <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveDo">
         <!--@mbg.generated-->
         <!--@Table company_fitted_curve-->
         <id column="id" property="id"/>

+ 1 - 1
src/main/resources/mapping/core/CompanyFittedCurveWeeklyDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.CompanyFittedCurveWeeklyDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.CompanyFittedCurveWeeklyDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveWeeklyDo">
     <!--@mbg.generated-->
     <!--@Table company_fitted_curve_weekly-->
     <id column="id" property="id" />

+ 10 - 0
src/main/resources/mapping/core/CompanyFundScaleRangeHistoryMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smppw.analysis.domain.mapper.core.CompanyFundScaleRangeHistoryMapper">
+    <select id="getLastCompanyScale" resultType="com.smppw.common.pojo.ValueLabelVO">
+        select a.fundscale_range as `value`, a.fundscale_range_desc as `label`
+        from company_fundscale_range_history a
+        where a.company_id = #{companyId}
+        order by a.last_update_date desc limit 1;
+    </select>
+</mapper>

+ 81 - 0
src/main/resources/mapping/core/CompanyInformationDoMapper.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smppw.analysis.domain.mapper.core.CompanyInformationDoMapper">
+    <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.CompanyInformationDo">
+        <!--@mbg.generated-->
+        <!--@Table company_information-->
+        <id column="company_id" property="companyId"/>
+        <result column="p_company_id" property="pCompanyId"/>
+        <result column="company_name" property="companyName"/>
+        <result column="company_short_name" property="companyShortName"/>
+        <result column="amac_company_name" property="amacCompanyName"/>
+        <result column="amac_url" property="amacUrl"/>
+        <result column="company_type" property="companyType"/>
+        <result column="establish_date" property="establishDate"/>
+        <result column="domicile_id" property="domicileId"/>
+        <result column="company_address" property="companyAddress"/>
+        <result column="company_address2" property="companyAddress2"/>
+        <result column="city_id" property="cityId"/>
+        <result column="office_city_id" property="officeCityId"/>
+        <result column="country_code" property="countryCode"/>
+        <result column="contact_phone" property="contactPhone"/>
+        <result column="post_code" property="postCode"/>
+        <result column="fax" property="fax"/>
+        <result column="email" property="email"/>
+        <result column="website" property="website"/>
+        <result column="registered_capital" property="registeredCapital"/>
+        <result column="paid_capital" property="paidCapital"/>
+        <result column="capital_paid_rate" property="capitalPaidRate"/>
+        <result column="employee_cnts" property="employeeCnts"/>
+        <result column="is_member" property="isMember"/>
+        <result column="member_type" property="memberType"/>
+        <result column="member_code" property="memberCode"/>
+        <result column="join_date" property="joinDate"/>
+        <result column="legal_opinion_status" property="legalOpinionStatus"/>
+        <result column="special_tips" property="specialTips"/>
+        <result column="licence" property="licence"/>
+        <result column="company_profile" property="companyProfile"/>
+        <result column="offshore_fund" property="offshoreFund"/>
+        <result column="team_profile" property="teamProfile"/>
+        <result column="philosopy" property="philosopy"/>
+        <result column="company_status" property="companyStatus"/>
+        <result column="base_currency_crc" property="baseCurrencyCrc"/>
+        <result column="nature_business_type" property="natureBusinessType"/>
+        <result column="IsVisible" property="isvisible"/>
+        <result column="creatorid" property="creatorid"/>
+        <result column="createtime" property="createtime"/>
+        <result column="updaterid" property="updaterid"/>
+        <result column="updatetime" property="updatetime"/>
+        <result column="isvalid" property="isvalid"/>
+        <result column="register_number" property="registerNumber"/>
+        <result column="register_number_address" property="registerNumberAddress"/>
+        <result column="logo" property="logo"/>
+        <result column="company_asset_size" property="companyAssetSize"/>
+        <result column="fundscale_date" property="fundscaleDate"/>
+        <result column="register_date" property="registerDate"/>
+        <result column="commitment" property="commitment"/>
+        <result column="fundscale" property="fundscale"/>
+        <result column="company_english_name" property="companyEnglishName"/>
+        <result column="organization_number" property="organizationNumber"/>
+        <result column="business_type" property="businessType"/>
+        <result column="has_consulting_qualification" property="hasConsultingQualification"/>
+        <result column="has_consulting_qualification_not_amac" property="hasConsultingQualificationNotAmac"/>
+        <result column="register_status" property="registerStatus"/>
+        <result column="cancel_date" property="cancelDate"/>
+        <result column="fund_category_ori" property="fundCategoryOri"/>
+        <result column="credit_code" property="creditCode"/>
+        <result column="location" property="location"/>
+        <result column="business_scope" property="businessScope"/>
+        <result column="former_name" property="formerName"/>
+        <result column="revoke_date" property="revokeDate"/>
+        <result column="cancel_type" property="cancelType"/>
+        <result column="is_amac_show" property="isAmacShow"/>
+    </resultMap>
+
+    <select id="listCompany" resultMap="BaseResultMap">
+        select * from company_information where isvalid = 1 AND company_id in
+        <foreach collection="companyIdList" item="companyId" index="index" open="(" separator="," close=")">
+            #{companyId}
+        </foreach>
+    </select>
+</mapper>

+ 1 - 1
src/main/resources/mapping/core/DepositNavDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.DepositNavDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.DepositNavDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.DepositNavDo">
     <!--@mbg.generated-->
     <!--@Table deposit_nav-->
     <id column="id" property="id" />

+ 6 - 0
src/main/resources/mapping/core/FundAssetSizeMapper.xml

@@ -16,4 +16,10 @@
                               and a.raise_type = 2)
     </select>
 
+    <select id="getFundLastAssetSize" resultType="java.math.BigDecimal" parameterType="string">
+        select a.fund_asset_size
+        from fund_asset_size a
+        where a.fund_id = #{fundId}
+        order by a.fund_asset_size_date desc limit 1
+    </select>
 </mapper>

+ 26 - 0
src/main/resources/mapping/core/FundInformationDoMapper.xml

@@ -373,4 +373,30 @@
             </foreach>
     </select>
 
+    <select id="queryFundInfoList" resultType="com.smppw.analysis.domain.dataobject.info.FundInfoDO">
+        select t.fund_id                        as fundId,
+               t.fund_name                      as fundName,
+               t.fund_short_name                as fundShortName,
+               t.register_number                as registerNumber,
+               t.amac_url                       as amacUrl,
+               t.raise_type                     as raiseType,
+               t.inception_date                 as inceptionDate,
+               t.primary_benchmark_id           as primaryBenchmarkId,
+               t.trust_id                       as trustId,
+               fs.strategy                      as strategy,
+               fs.substrategy                   as substrategy,
+               fs.first_strategy                as firstStrategy,
+               fs.second_strategy               as secondStrategy,
+               fs.third_strategy                as thirdStrategy,
+               t2.fund_status                   as fundStatus,
+               group_concat(t3.fund_manager_id) as managerIds
+        from rz_hfdb_core.fund_information t
+                 inner join rz_hfdb_core.fund_strategy fs on t.fund_id = fs.fund_id and fs.isvalid = 1
+                 inner join rz_hfdb_core.fund_status t2 on t.fund_id = t2.fund_id and t2.isvalid = 1
+                 inner join fund_manager_mapping t3 on t.fund_id = t3.fund_id and t3.isvalid = 1 and t3.management_end_date is null
+        where t.isvalid = 1 and t.fund_id in
+        <foreach collection="fundIds" item="fundId" open="(" separator="," close=")">
+            #{fundId}
+        </foreach>
+    </select>
 </mapper>

+ 1 - 1
src/main/resources/mapping/core/FundManagerFittedCurveDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.FundManagerFittedCurveDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveDo">
     <!--@mbg.generated-->
     <!--@Table fund_manager_fitted_curve-->
     <id column="id" property="id" />

+ 1 - 1
src/main/resources/mapping/core/FundManagerFittedCurveWeeklyDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveWeeklyDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.FundManagerFittedCurveWeeklyDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveWeeklyDo">
     <!--@mbg.generated-->
     <!--@Table fund_manager_fitted_curve_weekly-->
     <id column="id" property="id" />

+ 1 - 1
src/main/resources/mapping/core/IndexesRzIndexDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.IndexesRzIndexDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.IndexesRzIndexDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.IndexesRzIndexDo">
     <!--@mbg.generated-->
     <!--@Table indexes_rz_index-->
     <id column="id" property="id" />

+ 2 - 2
src/main/resources/mapping/core/MarketIndexesDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.MarketIndexesDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.MarketIndexesDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.MarketIndexesDo">
     <!--@mbg.generated-->
     <!--@Table market_indexes-->
     <id column="id" property="id" />
@@ -82,7 +82,7 @@
     AND t.price_date = m.price_date
   </select>
 
-  <select id="selectIndexNavByPriceDate" resultType="com.smppw.analysis.domain.dataobject.MarketIndexesDo">
+  <select id="selectIndexNavByPriceDate" resultType="com.smppw.analysis.domain.dataobject.nav.MarketIndexesDo">
     select index_id as indexId, close as close, price_date as priceDate
     from market_indexes
     where index_id = #{indexId} and isvalid=1

+ 11 - 2
src/main/resources/mapping/core/NavDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.NavDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.NavDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.NavDo">
     <!--@mbg.generated-->
     <!--@Table nav-->
     <id column="id" property="id" />
@@ -24,6 +24,15 @@
     tohigh_nav_ratio, creatorid, createtime, updaterid, updatetime, isvalid
   </sql>
 
+  <select id="listNav" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from nav where isvalid = 1 and fund_id in
+    <foreach collection="fundIds" item="fundId" index="index" open="(" separator="," close=")">
+      #{fundId}
+    </foreach>
+  </select>
+
   <select id="listNavByTimeInterval" resultMap="BaseResultMap">
     select fund_id, price_date, ${navFieldSql}
     <if test="needUpdateAndCreateTime">
@@ -42,7 +51,7 @@
     </foreach>
   </select>
 
-  <select id="selectFundIdByStartTime" resultType="com.smppw.analysis.domain.dataobject.NavDo">
+  <select id="selectFundIdByStartTime" resultType="com.smppw.analysis.domain.dataobject.nav.NavDo">
     select fund_id as fundId, updatetime as updatetime
     from nav
     where isvalid = 1

+ 51 - 0
src/main/resources/mapping/core/PersonnelInformationMapper.xml

@@ -1,7 +1,58 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.PersonnelInformationMapper">
+    <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.PersonnelInformationDo">
+        <!--@mbg.generated-->
+        <!--@Table personnel_information-->
+        <id column="personnel_id" property="personnelId"/>
+        <result column="personnel_name" property="personnelName"/>
+        <result column="avatar" property="avatar"/>
+        <result column="avatar2" property="avatar2"/>
+        <result column="personnel_type" property="personnelType"/>
+        <result column="profession_background" property="professionBackground"/>
+        <result column="key_figure" property="keyFigure"/>
+        <result column="company_id" property="companyId"/>
+        <result column="position" property="position"/>
+        <result column="career_start_year" property="careerStartYear"/>
+        <result column="investment_experience" property="investmentExperience"/>
+        <result column="sex" property="sex"/>
+        <result column="birthday" property="birthday"/>
+        <result column="province_id" property="provinceId"/>
+        <result column="city_id" property="cityId"/>
+        <result column="graduateschool" property="graduateschool"/>
+        <result column="graduateschool2" property="graduateschool2"/>
+        <result column="graduateschool3" property="graduateschool3"/>
+        <result column="education" property="education"/>
+        <result column="major" property="major"/>
+        <result column="major2" property="major2"/>
+        <result column="major3" property="major3"/>
+        <result column="country_code" property="countryCode"/>
+        <result column="mobile" property="mobile"/>
+        <result column="phone" property="phone"/>
+        <result column="email" property="email"/>
+        <result column="other_contact" property="otherContact"/>
+        <result column="expertise_area" property="expertiseArea"/>
+        <result column="highest_position" property="highestPosition"/>
+        <result column="is_qualify" property="isQualify"/>
+        <result column="get_qualify_method" property="getQualifyMethod"/>
+        <result column="certificate_number" property="certificateNumber"/>
+        <result column="profile" property="profile"/>
+        <result column="order" property="order"/>
+        <result column="ifinclude" property="ifinclude"/>
+        <result column="IsVisible" property="isvisible"/>
+        <result column="creatorid" property="creatorid"/>
+        <result column="createtime" property="createtime"/>
+        <result column="updaterid" property="updaterid"/>
+        <result column="updatetime" property="updatetime"/>
+        <result column="isvalid" property="isvalid"/>
+    </resultMap>
 
+    <select id="listPersonnel" resultMap="BaseResultMap">
+        select * from personnel_information where isvalid = 1 AND personnel_id in
+        <foreach collection="managerIdList" item="managerId" index="index" open="(" separator="," close=")">
+            #{managerId}
+        </foreach>
+    </select>
 
     <select id="getFundManagerInfo" resultType="com.smppw.analysis.domain.dataobject.PersonnelInformationDo">
         select t1.personnel_id   as personnelId,

+ 11 - 1
src/main/resources/mapping/core/PublicNavDoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smppw.analysis.domain.mapper.core.PublicNavDoMapper">
-  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.PublicNavDo">
+  <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.nav.PublicNavDo">
     <!--@mbg.generated-->
     <!--@Table public_nav-->
     <id column="id" property="id" />
@@ -24,6 +24,16 @@
     tohigh_nav_ratio, creatorid, createtime, updaterid, updatetime, isvalid
   </sql>
 
+  <select id="listNav" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from public_nav where isvalid = 1
+    AND fund_id in
+    <foreach collection="fundIds" item="fundId" index="index" open="(" separator="," close=")">
+      #{fundId}
+    </foreach>
+  </select>
+
   <select id="listNavByTimeInterval" resultMap="BaseResultMap">
     select fund_id, price_date, ${navFieldSql}
     <if test="needUpdateAndCreateTime">

+ 0 - 4
src/main/resources/mapping/core/RankToBMapper.xml

@@ -4,8 +4,4 @@
     <select id="getRankDate" resultType="string">
         select max(end_date) from rank_rat_control where isvalid = 1
     </select>
-
-    <select id="getRefRankDate" resultType="string" parameterType="string">
-        select max(a.end_date) from rz_combination_master.cm_fund_indicator_ranking a where a.fund_id = #{refId} and a.isvalid = 1
-    </select>
 </mapper>