浏览代码

基金经理和机构获取净值迁移

wangzaijun 1 年之前
父节点
当前提交
c0b2b3b98e
共有 32 个文件被更改,包括 1269 次插入156 次删除
  1. 9 6
      src/main/java/com/smppw/analysis/application/service/info/GlobalService.java
  2. 156 0
      src/main/java/com/smppw/analysis/domain/dao/CompanyNavDao.java
  3. 6 0
      src/main/java/com/smppw/analysis/domain/dao/FundInformationDao.java
  4. 156 0
      src/main/java/com/smppw/analysis/domain/dao/ManagerNavDao.java
  5. 2 3
      src/main/java/com/smppw/analysis/domain/dao/MarketIndexNavDao.java
  6. 77 0
      src/main/java/com/smppw/analysis/domain/dataobject/CompanyFittedCurveDo.java
  7. 92 0
      src/main/java/com/smppw/analysis/domain/dataobject/CompanyFittedCurveWeeklyDo.java
  8. 72 0
      src/main/java/com/smppw/analysis/domain/dataobject/FundManagerFittedCurveDo.java
  9. 87 0
      src/main/java/com/smppw/analysis/domain/dataobject/FundManagerFittedCurveWeeklyDo.java
  10. 60 0
      src/main/java/com/smppw/analysis/domain/dto/info/FundHeadInfoVO.java
  11. 0 9
      src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoVO.java
  12. 1 42
      src/main/java/com/smppw/analysis/domain/dto/info/PrivatelyFundHeadInfoVO.java
  13. 0 1
      src/main/java/com/smppw/analysis/domain/dto/info/PubliclyCurrencyFundHeadInfoVO.java
  14. 1 33
      src/main/java/com/smppw/analysis/domain/dto/info/PubliclyFundHeadInfoVO.java
  15. 62 0
      src/main/java/com/smppw/analysis/domain/manager/info/AbstractFundHeadInfo.java
  16. 25 0
      src/main/java/com/smppw/analysis/domain/manager/info/HeadInfoConstants.java
  17. 35 6
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyFundHeadInfo.java
  18. 38 7
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyFundHeadInfo.java
  19. 4 1
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/TrendHandler.java
  20. 15 0
      src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFittedCurveDoMapper.java
  21. 15 0
      src/main/java/com/smppw/analysis/domain/mapper/core/CompanyFittedCurveWeeklyDoMapper.java
  22. 16 0
      src/main/java/com/smppw/analysis/domain/mapper/core/FundManagerFittedCurveDoMapper.java
  23. 15 0
      src/main/java/com/smppw/analysis/domain/mapper/core/FundManagerFittedCurveWeeklyDoMapper.java
  24. 1 9
      src/main/java/com/smppw/analysis/domain/service/BaseIndicatorServiceV2.java
  25. 15 3
      src/main/java/com/smppw/analysis/domain/service/NavService.java
  26. 8 25
      src/main/java/com/smppw/analysis/domain/service/impl/BaseIndicatorServiceV2Impl.java
  27. 14 0
      src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java
  28. 39 11
      src/main/java/com/smppw/analysis/domain/service/impl/NavServiceImpl.java
  29. 82 0
      src/main/resources/mapping/core/CompanyFittedCurveDoMapper.xml
  30. 54 0
      src/main/resources/mapping/core/CompanyFittedCurveWeeklyDoMapper.xml
  31. 63 0
      src/main/resources/mapping/core/FundManagerFittedCurveDoMapper.xml
  32. 49 0
      src/main/resources/mapping/core/FundManagerFittedCurveWeeklyDoMapper.xml

+ 9 - 6
src/main/java/com/smppw/analysis/application/service/info/GlobalService.java

@@ -10,6 +10,7 @@ import com.smppw.analysis.domain.dto.info.HeadInfoVO;
 import com.smppw.analysis.domain.dto.info.PrivatelyFundHeadInfoVO;
 import com.smppw.analysis.domain.dto.info.PubliclyFundHeadInfoVO;
 import com.smppw.analysis.domain.dto.performance.IndicatorParams;
+import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
 import com.smppw.analysis.domain.manager.info.HeadInfoFactory;
 import com.smppw.analysis.domain.manager.performance.Performance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
@@ -51,7 +52,8 @@ public class GlobalService {
     public HeadInfoVO headInfo(HeadInfoReq req) {
         HeadInfoParams params = req.convert();
         String secType = this.baseInfoService.getSecType(req.getSecId());
-        return this.headInfoFactory.getInstance(secType).get(params);
+        String type = HeadInfoConstants.SEC_TYPE_HEAD_MAP.get(secType);
+        return this.headInfoFactory.getInstance(type).get(params);
     }
 
     public CommonInfoVO commonInfo(CommonInfoReq params) {
@@ -59,8 +61,8 @@ public class GlobalService {
         CommonInfoVO res = new CommonInfoVO();
         String secId = params.getSecId();
         List<Frequency> result = CollectionUtil.newArrayList();
-        // 获取频率
-        HeadInfoVO fundHeadInfo = this.headInfoFactory.getInstance(secType).get(new HeadInfoParams(secId));
+        String type = HeadInfoConstants.SEC_TYPE_HEAD_MAP.get(secType);
+        HeadInfoVO fundHeadInfo = this.headInfoFactory.getInstance(type).get(new HeadInfoParams(secId));
         if (fundHeadInfo == null) {
             throw new APIException("");
         }
@@ -82,7 +84,7 @@ public class GlobalService {
         // 获取常用指数
         List<ValueLabelVO> benchmarkList = baseInfoService.getCommonIndexList();
         handleBenchmark(res, secType, benchmarkList, fundHeadInfo);
-        return new CommonInfoVO();
+        return res;
     }
 
     @SuppressWarnings("unchecked")
@@ -159,14 +161,15 @@ public class GlobalService {
                 benchmarkId = fundHeadInfo.getPrimaryBenchmarkId();
                 valueLabelVO = new ValueLabelVO(benchmarkId, fundHeadInfo.getPrimaryBenchmarkName());
             } else {
-                Map<String, String> querySecName = this.baseInfoService.querySecName(ListUtil.of(iStrategy.getBenchmark()));
-                String indexName = querySecName.get(iStrategy.getBenchmark());
+                Map<String, String> querySecName = this.baseInfoService.querySecName(ListUtil.of(benchmarkId));
+                String indexName = querySecName.get(benchmarkId);
                 valueLabelVO = new ValueLabelVO(benchmarkId, indexName);
             }
         } else {
             valueLabelVO = new ValueLabelVO();
         }
         if (CollectionUtil.isNotEmpty(benchmarkList)) {
+            // 如果常用指数里面没有基准,则把基准放在常用指数的第一位
             Optional<ValueLabelVO> contains = benchmarkList.stream().filter(p -> p.getValue().equals(valueLabelVO.getValue())).findFirst();
             if (contains.isEmpty()) {
                 benchmarkList.add(0, valueLabelVO);

+ 156 - 0
src/main/java/com/smppw/analysis/domain/dao/CompanyNavDao.java

@@ -0,0 +1,156 @@
+package com.smppw.analysis.domain.dao;
+
+import com.smppw.analysis.domain.dataobject.CompanyFittedCurveDo;
+import com.smppw.analysis.domain.dataobject.CompanyFittedCurveWeeklyDo;
+import com.smppw.analysis.domain.mapper.core.CompanyFittedCurveDoMapper;
+import com.smppw.analysis.domain.mapper.core.CompanyFittedCurveWeeklyDoMapper;
+import com.smppw.common.cache.CaffeineLocalCache;
+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.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public class CompanyNavDao {
+
+    @Autowired
+    private CompanyFittedCurveDoMapper companyFittedCurveDoMapper;
+
+    @Autowired
+    private CompanyFittedCurveWeeklyDoMapper companyFittedCurveWeeklyDoMapper;
+
+    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<>();
+        List<String> weekSecIdList = new ArrayList<>();
+        for (String companyId : companyIdList) {
+            Frequency frequency = secFrequencyMap.get(companyId);
+            if (Frequency.Weekly == frequency) {
+                weekSecIdList.add(companyId);
+            } else {
+                monthSecIdList.add(companyId);
+            }
+        }
+
+        Map<String, List<NavDto>> secNavDtoMap = new HashMap<>();
+
+        if (monthSecIdList.size() > 0) {
+            String startDateMonth = null;
+            if (StringUtils.isNotEmpty(startDate) && startDate.length() >= 7) {
+                startDateMonth = startDate.substring(0, 7);
+            }
+            List<CompanyFittedCurveDo> navDoList = companyFittedCurveDoMapper.listNavByTimeInterval(monthSecIdList, startDateMonth, endDate, curveTypeId, strategyId, needUpdateAndCreateTime);
+            Map<String, List<NavDto>> secMonthNavDtoMap = monthNavDoListToNavDtoMap(navDoList);
+            secNavDtoMap.putAll(secMonthNavDtoMap);
+        }
+
+        if (weekSecIdList.size() > 0) {
+            String startYearWeek = null;
+            String endYearWeek = null;
+            if (StringUtils.isNotEmpty(startDate)) {
+                startYearWeek = CaffeineLocalCache.getYearWeekByDate(startDate);
+            }
+            if (StringUtils.isNotEmpty(endDate)) {
+                endYearWeek = CaffeineLocalCache.getYearWeekByDate(endDate);
+            }
+
+            List<CompanyFittedCurveWeeklyDo> navDoList = companyFittedCurveWeeklyDoMapper.listNavByTimeInterval(weekSecIdList, startYearWeek, endYearWeek, curveTypeId, strategyId, needUpdateAndCreateTime);
+            Map<String, List<NavDto>> secWeekNavDtoMap = weekNavDoListToNavDtoMap(navDoList);
+            secNavDtoMap.putAll(secWeekNavDtoMap);
+        }
+
+        return secNavDtoMap;
+    }
+
+    /**
+     *  领域对象集合转为数据传输对象集合
+     * @param navDoList 领域对象集合
+     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     */
+    private Map<String, List<NavDto>> monthNavDoListToNavDtoMap(List<CompanyFittedCurveDo> navDoList) {
+        Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
+
+        if (navDoList == null) {
+            return fundIdNavDtoListMap;
+        }
+
+        for (CompanyFittedCurveDo navDo : navDoList) {
+            NavDto navDto = new NavDto();
+            navDto.setFundId(navDo.getCompanyId());
+            if (navDo.getEndDate() == null) {
+                continue;
+            }
+            navDto.setPriceDate(navDo.getEndDate());
+            navDto.setOriginalNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNavWithdrawal(navDo.getCumulativeNav());
+            if (navDo.getUpdatetime() != null) {
+                navDto.setUpdatetime(DateUtil.DateToString(navDo.getUpdatetime(), DateConst.YYYY_MM_DD));
+            }
+            if (navDo.getCreatetime() != null) {
+                navDto.setCreatetime(DateUtil.DateToString(navDo.getCreatetime(), DateConst.YYYY_MM_DD));
+            }
+
+            if (fundIdNavDtoListMap.containsKey(navDo.getCompanyId())) {
+                List<NavDto> navDtoList = fundIdNavDtoListMap.get(navDo.getCompanyId());
+                navDtoList.add(navDto);
+            } else {
+                List<NavDto> navDtoList = new ArrayList<>();
+                navDtoList.add(navDto);
+                fundIdNavDtoListMap.put(navDo.getCompanyId(), navDtoList);
+            }
+        }
+        return fundIdNavDtoListMap;
+    }
+
+    /**
+     *  领域对象集合转为数据传输对象集合
+     * @param navDoList 领域对象集合
+     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     */
+    private Map<String, List<NavDto>> weekNavDoListToNavDtoMap(List<CompanyFittedCurveWeeklyDo> navDoList) {
+        Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
+
+        if (navDoList == null) {
+            return fundIdNavDtoListMap;
+        }
+
+        for (CompanyFittedCurveWeeklyDo navDo : navDoList) {
+            NavDto navDto = new NavDto();
+            navDto.setFundId(navDo.getCompanyId());
+            String priceDate = CaffeineLocalCache.getLastTradeDateByYearWeek(navDo.getYearWeek());
+            if (StringUtils.isEmpty(priceDate)) {
+                continue;
+            }
+            navDto.setPriceDate(priceDate);
+            navDto.setOriginalNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNavWithdrawal(navDo.getCumulativeNav());
+            if (navDo.getUpdatetime() != null) {
+                navDto.setUpdatetime(DateUtil.DateToString(navDo.getUpdatetime(), DateConst.YYYY_MM_DD));
+            }
+            if (navDo.getCreatetime() != null) {
+                navDto.setCreatetime(DateUtil.DateToString(navDo.getCreatetime(), DateConst.YYYY_MM_DD));
+            }
+
+            if (fundIdNavDtoListMap.containsKey(navDo.getCompanyId())) {
+                List<NavDto> navDtoList = fundIdNavDtoListMap.get(navDo.getCompanyId());
+                navDtoList.add(navDto);
+            } else {
+                List<NavDto> navDtoList = new ArrayList<>();
+                navDtoList.add(navDto);
+                fundIdNavDtoListMap.put(navDo.getCompanyId(), navDtoList);
+            }
+        }
+        return fundIdNavDtoListMap;
+    }
+    
+}

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

@@ -1,5 +1,6 @@
 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;
@@ -27,6 +28,11 @@ public class FundInformationDao {
         this.monetaryFundProfitMapper = monetaryFundProfitMapper;
     }
 
+    public FundInformationDo getFundInfoById(String fundId) {
+        List<FundInformationDo> dataList = this.fundInformationDoMapper.listFundInfo(ListUtil.toList(fundId));
+        return dataList.stream().filter(e -> fundId.equals(e.getFundId())).findFirst().orElse(null);
+    }
+
     public String getNavFrequencyByFundId(String secId) {
         return this.fundFrequencyDoMapper.getNavFrequencyByFundId(secId);
     }

+ 156 - 0
src/main/java/com/smppw/analysis/domain/dao/ManagerNavDao.java

@@ -0,0 +1,156 @@
+package com.smppw.analysis.domain.dao;
+
+
+import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveDo;
+import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveWeeklyDo;
+import com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveDoMapper;
+import com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveWeeklyDoMapper;
+import com.smppw.common.cache.CaffeineLocalCache;
+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.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public class ManagerNavDao {
+
+    @Autowired
+    private FundManagerFittedCurveDoMapper fundManagerFittedCurveSlave1Mapper;
+
+    @Autowired
+    private FundManagerFittedCurveWeeklyDoMapper fundManagerFittedCurveWeeklySlave1Mapper;
+
+    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<>();
+        List<String> weekSecIdList = new ArrayList<>();
+        for (String companyId : companyIdList) {
+            Frequency frequency = secFrequencyMap.get(companyId);
+            if (Frequency.Weekly == frequency) {
+                weekSecIdList.add(companyId);
+            } else {
+                monthSecIdList.add(companyId);
+            }
+        }
+
+        Map<String, List<NavDto>> secNavDtoMap = new HashMap<>();
+
+        if (monthSecIdList.size() > 0) {
+            String startDateMonth = null;
+            if (StringUtils.isNotEmpty(startDate) && startDate.length() >= 7) {
+                startDateMonth = startDate.substring(0, 7);
+            }
+            List<FundManagerFittedCurveDo> navDoList = fundManagerFittedCurveSlave1Mapper.listNavByTimeInterval(monthSecIdList, startDateMonth, endDate, curveTypeId, strategyId, needUpdateAndCreateTime);
+            Map<String, List<NavDto>> secMonthNavDtoMap = monthNavDoListToNavDtoMap(navDoList);
+            secNavDtoMap.putAll(secMonthNavDtoMap);
+        }
+
+        if (weekSecIdList.size() > 0) {
+            String startYearWeek = null;
+            String endYearWeek = null;
+            if (StringUtils.isNotEmpty(startDate)) {
+                startYearWeek = CaffeineLocalCache.getYearWeekByDate(startDate);
+            }
+            if (StringUtils.isNotEmpty(endDate)) {
+                endYearWeek = CaffeineLocalCache.getYearWeekByDate(endDate);
+            }
+            List<FundManagerFittedCurveWeeklyDo> navDoList = fundManagerFittedCurveWeeklySlave1Mapper.listNavByTimeInterval(weekSecIdList, startYearWeek, endYearWeek, curveTypeId, strategyId, needUpdateAndCreateTime);
+            Map<String, List<NavDto>> secWeekNavDtoMap = weekNavDoListToNavDtoMap(navDoList);
+            secNavDtoMap.putAll(secWeekNavDtoMap);
+        }
+
+        return secNavDtoMap;
+    }
+
+    /**
+     *  领域对象集合转为数据传输对象集合
+     * @param navDoList 领域对象集合
+     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     */
+    private Map<String, List<NavDto>> monthNavDoListToNavDtoMap(List<FundManagerFittedCurveDo> navDoList) {
+        Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
+
+        if (navDoList == null) {
+            return fundIdNavDtoListMap;
+        }
+
+        for (FundManagerFittedCurveDo navDo : navDoList) {
+            NavDto navDto = new NavDto();
+            navDto.setFundId(navDo.getFundManagerId());
+            if (navDo.getEndDate() == null) {
+                continue;
+            }
+            navDto.setPriceDate(navDo.getEndDate());
+            navDto.setOriginalNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNavWithdrawal(navDo.getCumulativeNav());
+            if (navDo.getUpdatetime() != null) {
+                navDto.setUpdatetime(DateUtil.DateToString(navDo.getUpdatetime(), DateConst.YYYY_MM_DD));
+            }
+            if (navDo.getCreatetime() != null) {
+                navDto.setCreatetime(DateUtil.DateToString(navDo.getCreatetime(), DateConst.YYYY_MM_DD));
+            }
+
+            if (fundIdNavDtoListMap.containsKey(navDo.getFundManagerId())) {
+                List<NavDto> navDtoList = fundIdNavDtoListMap.get(navDo.getFundManagerId());
+                navDtoList.add(navDto);
+            } else {
+                List<NavDto> navDtoList = new ArrayList<>();
+                navDtoList.add(navDto);
+                fundIdNavDtoListMap.put(navDo.getFundManagerId(), navDtoList);
+            }
+        }
+        return fundIdNavDtoListMap;
+    }
+
+    /**
+     *  领域对象集合转为数据传输对象集合
+     * @param navDoList 领域对象集合
+     * @return  数据传输对象集合  key-基金ID  value-数据传输对象集合
+     */
+    private Map<String, List<NavDto>> weekNavDoListToNavDtoMap(List<FundManagerFittedCurveWeeklyDo> navDoList) {
+        Map<String, List<NavDto>> fundIdNavDtoListMap = new HashMap<>();
+
+        if (navDoList == null) {
+            return fundIdNavDtoListMap;
+        }
+
+        for (FundManagerFittedCurveWeeklyDo navDo : navDoList) {
+            NavDto navDto = new NavDto();
+            navDto.setFundId(navDo.getFundManagerId());
+            String priceDate = CaffeineLocalCache.getLastTradeDateByYearWeek(navDo.getYearWeek());
+            if (StringUtils.isEmpty(priceDate)) {
+                continue;
+            }
+            navDto.setPriceDate(priceDate);
+            navDto.setOriginalNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNav(navDo.getCumulativeNav());
+            navDto.setCumulativeNavWithdrawal(navDo.getCumulativeNav());
+            if (navDo.getUpdatetime() != null) {
+                navDto.setUpdatetime(DateUtil.DateToString(navDo.getUpdatetime(), DateConst.YYYY_MM_DD));
+            }
+            if (navDo.getCreatetime() != null) {
+                navDto.setCreatetime(DateUtil.DateToString(navDo.getCreatetime(), DateConst.YYYY_MM_DD));
+            }
+
+            if (fundIdNavDtoListMap.containsKey(navDo.getFundManagerId())) {
+                List<NavDto> navDtoList = fundIdNavDtoListMap.get(navDo.getFundManagerId());
+                navDtoList.add(navDto);
+            } else {
+                List<NavDto> navDtoList = new ArrayList<>();
+                navDtoList.add(navDto);
+                fundIdNavDtoListMap.put(navDo.getFundManagerId(), navDtoList);
+            }
+        }
+        return fundIdNavDtoListMap;
+    }
+    
+}

+ 2 - 3
src/main/java/com/smppw/analysis/domain/dao/MarketIndexNavDao.java

@@ -14,15 +14,14 @@ import java.util.List;
 import java.util.Map;
 
 @Repository
-public class MarketIndexNavDao {
+public class MarketIndexDao {
 
     @Autowired
     private MarketIndexesDoMapper marketIndexesDoMapper;
 
     public Map<String, List<NavDto>> getNav(List<String> indexIdList, String startDate, String endDate, boolean needUpdateAndCreateTime) {
         List<MarketIndexesDo> navDoList = marketIndexesDoMapper.listNavByTimeInterval(indexIdList, startDate, endDate, needUpdateAndCreateTime);
-        Map<String, List<NavDto>> indexIdNavDtoListMap = navDoListToNavDtoMap(navDoList);
-        return indexIdNavDtoListMap;
+        return navDoListToNavDtoMap(navDoList);
     }
 
     public List<MarketIndexesDo> getIndexNavByPriceDate(String indexId, List<String> priceDateList) {

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

@@ -0,0 +1,77 @@
+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;
+}

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

@@ -0,0 +1,92 @@
+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;
+}

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

@@ -0,0 +1,72 @@
+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;
+}

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

@@ -0,0 +1,87 @@
+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;
+}

+ 60 - 0
src/main/java/com/smppw/analysis/domain/dto/info/FundHeadInfoVO.java

@@ -0,0 +1,60 @@
+package com.smppw.analysis.domain.dto.info;
+
+import com.smppw.common.pojo.ValueLabelVO;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Setter
+@Getter
+public class FundHeadInfoVO extends HeadInfoVO {
+    /**
+     * 基金管理人ID
+     */
+    private String trustId;
+    /**
+     * 基金管理人
+     */
+    private String trustName;
+    /**
+     * 基金经理 id:名称
+     */
+    private List<ValueLabelVO> managers;
+    /**
+     * 基金状态值
+     * 1-募集中、2-开放运行、3-封闭运行(已废弃)、4-提前清算、5-到期清算、6-发行失败、7-投顾协议已终止、 8-延期清算 -1-其他 9-非正常清算 10-已终止 11-已作废
+     */
+    private String fundStatusValue;
+    /**
+     * 三级策略名称
+     */
+    private String thirdStrategyId;
+    /**
+     * 三级策略名称
+     */
+    private String thirdStrategy;
+    /**
+     * 基金规模 中基协数据
+     */
+    private String fundScale;
+    /**
+     * 公司规模
+     */
+    private Byte companyAssetSize;
+    /**
+     * 是否小于500万
+     */
+    private ValueLabelVO lowerThanFiveMillionLabel;
+    /**
+     * 基准id与名称
+     */
+    private String primaryBenchmarkId;
+
+    private String primaryBenchmarkName;
+
+    @Override
+    public String getStrategySummaryName() {
+        return super.getStrategySummaryName() + "" + this.getThirdStrategy();
+    }
+}

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

@@ -1,6 +1,5 @@
 package com.smppw.analysis.domain.dto.info;
 
-import com.smppw.common.pojo.ValueLabelVO;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -65,10 +64,6 @@ public class HeadInfoVO {
      */
     private String substrategy;
     /**
-     * 公司规模
-     */
-    private Byte companyAssetSize;
-    /**
      * 合并后的策略
      */
     private String strategySummaryName;
@@ -76,10 +71,6 @@ public class HeadInfoVO {
      * 最新净值日期
      */
     private String priceDate;
-    /**
-     * 是否小于500万
-     */
-    private ValueLabelVO lowerThanFiveMillionLabel;
 
     public String getStrategySummaryName() {
         return this.getStrategy() + "" + this.getSubstrategy();

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

@@ -1,11 +1,8 @@
 package com.smppw.analysis.domain.dto.info;
 
-import com.smppw.common.pojo.ValueLabelVO;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.List;
-
 /**
  * @author wangzaijun
  * @date 2023/8/7 16:41
@@ -13,36 +10,7 @@ import java.util.List;
  */
 @Setter
 @Getter
-public class PrivatelyFundHeadInfoVO extends HeadInfoVO {
-    /**
-     * 基金管理人ID
-     */
-    private String trustId;
-    /**
-     * 基金管理人
-     */
-    private String trustName;
-    /**
-     * 基金经理 id:名称
-     */
-    private List<ValueLabelVO> managers;
-    /**
-     * 基金状态值
-     */
-    private String fundStatusValue;
-    /**
-     * 三级策略名称
-     */
-    private String thirdStrategyId;
-    /**
-     * 三级策略名称
-     */
-    private String thirdStrategy;
-    /**
-     * 基金规模 中基协数据
-     */
-    private String fundScale;
-
+public class PrivatelyFundHeadInfoVO extends FundHeadInfoVO {
     /**
      * 单位净值
      */
@@ -55,13 +23,4 @@ public class PrivatelyFundHeadInfoVO extends HeadInfoVO {
      * 累计净值
      */
     private String cumulativeNavWithdrawal;
-
-    /**
-     * 融智策略基准id
-     */
-    private String primaryBenchmarkId;
-    /**
-     * 融智策略基准名称
-     */
-    private String primaryBenchmarkName;
 }

+ 0 - 1
src/main/java/com/smppw/analysis/domain/dto/info/PubliclyCurrencyFundHeadInfoVO.java

@@ -25,7 +25,6 @@ public class PubliclyCurrencyFundHeadInfoVO extends PubliclyFundHeadInfoVO {
      * 百份、万份、百万份收益
      */
     private BigDecimal retPerUnit;
-
     /**
      * 单位- 1:百份  2:万份  3:百万份
      */

+ 1 - 33
src/main/java/com/smppw/analysis/domain/dto/info/PubliclyFundHeadInfoVO.java

@@ -1,11 +1,8 @@
 package com.smppw.analysis.domain.dto.info;
 
-import com.smppw.common.pojo.ValueLabelVO;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.List;
-
 /**
  * @author wangzaijun
  * @date 2023/8/7 16:41
@@ -13,27 +10,7 @@ import java.util.List;
  */
 @Setter
 @Getter
-public class PubliclyFundHeadInfoVO extends HeadInfoVO {
-    /**
-     * 基金管理人ID
-     */
-    private String trustId;
-    /**
-     * 基金管理人
-     */
-    private String trustName;
-    /**
-     * 基金经理 id:名称
-     */
-    private List<ValueLabelVO> managers;
-    /**
-     * 基金状态值
-     */
-    private String fundStatusValue;
-    /**
-     * 基金规模 中基协数据
-     */
-    private String fundScale;
+public class PubliclyFundHeadInfoVO extends FundHeadInfoVO {
     /**
      * 单位净值
      */
@@ -46,13 +23,4 @@ public class PubliclyFundHeadInfoVO extends HeadInfoVO {
      * 累计净值
      */
     private String cumulativeNavWithdrawal;
-    /**
-     * 融智策略基准id
-     */
-    private String primaryBenchmarkId;
-
-    /**
-     * 融智策略基准名称
-     */
-    private String primaryBenchmarkName;
 }

+ 62 - 0
src/main/java/com/smppw/analysis/domain/manager/info/AbstractFundHeadInfo.java

@@ -0,0 +1,62 @@
+package com.smppw.analysis.domain.manager.info;
+
+import cn.hutool.core.date.DateUtil;
+import com.smppw.analysis.domain.dao.FundInformationDao;
+import com.smppw.analysis.domain.dataobject.FundInformationDo;
+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.enums.RaiseType;
+
+import java.util.Map;
+
+public abstract class AbstractFundHeadInfo<R extends FundHeadInfoVO> implements HeadInfo<R> {
+    protected final BaseInfoService baseInfoService;
+    protected final FundInformationDao fundInformationDao;
+
+    public AbstractFundHeadInfo(BaseInfoService baseInfoService, FundInformationDao fundInformationDao) {
+        this.baseInfoService = baseInfoService;
+        this.fundInformationDao = fundInformationDao;
+    }
+
+    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);
+        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.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());
+        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);
+    }
+
+    public abstract R getFund(HeadInfoParams params, FundHeadInfoVO headInfo);
+}

+ 25 - 0
src/main/java/com/smppw/analysis/domain/manager/info/HeadInfoConstants.java

@@ -0,0 +1,25 @@
+package com.smppw.analysis.domain.manager.info;
+
+import cn.hutool.core.map.MapUtil;
+import com.smppw.constants.SecType;
+
+import java.util.Map;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/10 18:24
+ * @description head-info接口业务处理类 bean常量
+ */
+public final class HeadInfoConstants {
+    public static final String PRIVATELY_FUND = "privatelyFundHeadInfo";
+    public static final String PUBLICLY_FUND = "publiclyFundHeadInfo";
+    public static final Map<String, String> SEC_TYPE_HEAD_MAP = MapUtil.newHashMap(16);
+
+    static {
+        SEC_TYPE_HEAD_MAP.put(SecType.PRIVATELY_OFFERED_FUND, PRIVATELY_FUND);
+        SEC_TYPE_HEAD_MAP.put(SecType.PUBLICLY_OFFERED_FUNDS, PUBLICLY_FUND);
+    }
+
+    private HeadInfoConstants() {
+    }
+}

+ 35 - 6
src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyFundHeadInfo.java

@@ -1,15 +1,44 @@
 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.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.HeadInfo;
-import com.smppw.constants.SecType;
+import com.smppw.analysis.domain.manager.info.AbstractFundHeadInfo;
+import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
+import com.smppw.analysis.domain.service.BaseInfoService;
 import org.springframework.stereotype.Component;
 
-@Component(SecType.PRIVATELY_OFFERED_FUND)
-public class PrivatelyFundHeadInfo implements HeadInfo<PrivatelyFundHeadInfoVO> {
+import java.util.Map;
+
+@Component(HeadInfoConstants.PRIVATELY_FUND)
+public class PrivatelyFundHeadInfo extends AbstractFundHeadInfo<PrivatelyFundHeadInfoVO> {
+    public PrivatelyFundHeadInfo(BaseInfoService baseInfoService, FundInformationDao fundInformationDao) {
+        super(baseInfoService, fundInformationDao);
+    }
+
+    @Override
+    protected Map<String, String> getSecNameMap(FundInformationDo fundInfo) {
+        return MapUtil.empty();
+    }
+
     @Override
-    public PrivatelyFundHeadInfoVO get(HeadInfoParams params) {
-        return new PrivatelyFundHeadInfoVO();
+    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);
+        return result;
     }
 }

+ 38 - 7
src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyFundHeadInfo.java

@@ -1,16 +1,47 @@
 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.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.HeadInfo;
-import com.smppw.constants.SecType;
+import com.smppw.analysis.domain.manager.info.AbstractFundHeadInfo;
+import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
+import com.smppw.analysis.domain.service.BaseInfoService;
 import org.springframework.stereotype.Component;
 
-@Component(SecType.PUBLICLY_OFFERED_FUNDS)
-public class PubliclyFundHeadInfo implements HeadInfo<PubliclyFundHeadInfoVO> {
+import java.util.Map;
+
+@Component(HeadInfoConstants.PUBLICLY_FUND)
+public class PubliclyFundHeadInfo extends AbstractFundHeadInfo<PubliclyFundHeadInfoVO> {
+    public PubliclyFundHeadInfo(BaseInfoService baseInfoService, FundInformationDao fundInformationDao) {
+        super(baseInfoService, fundInformationDao);
+    }
+
+    @Override
+    protected Map<String, String> getSecNameMap(FundInformationDo fundInfo) {
+        return MapUtil.empty();
+    }
+
     @Override
-    public PubliclyFundHeadInfoVO get(HeadInfoParams params) {
-        // todo 如果是货币则返回货币类的头部信息
-        return new PubliclyFundHeadInfoVO();
+    public PubliclyFundHeadInfoVO getFund(HeadInfoParams params, FundHeadInfoVO headInfo) {
+        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);
+        return result;
     }
 }

+ 4 - 1
src/main/java/com/smppw/analysis/domain/manager/performance/handler/TrendHandler.java

@@ -9,6 +9,7 @@ import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformanc
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.BaseInfoService;
+import com.smppw.common.pojo.IStrategy;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcSecDataDto;
@@ -16,6 +17,7 @@ import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.DateIntervalType;
 import com.smppw.common.pojo.enums.TrendType;
 import com.smppw.common.pojo.enums.Visibility;
+import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -31,6 +33,7 @@ public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<
     @Override
     protected Map<String, Object> bizSecHandle(TrendParams params) {
         List<String> refIds = params.getRefIds();
+        IStrategy strategy = StrategyHandleUtils.getStrategy(params.getStrategy());
         List<String> secIds = this.getSecIdsByParams(params);
         List<String> indexIds = CollectionUtil.subtractToList(secIds, refIds);
         // 时段参数构建
@@ -46,7 +49,7 @@ public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<
         List<TrendType> indexTrendTypes = params.getIndexTrendTypes();
         // 计算走势图
         Map<String, List<IndicatorCalcPropertyDto>> trendMap = this.baseIndicatorServiceV2.getMultipleSecTrend(refIds, benchmarkIdMap,
-                indexIds, dateInterval, params.getFrequency(), null, null, Visibility.Both, params.getNavType(), trendTypes);
+                indexIds, dateInterval, params.getFrequency(), null, null, params.getRaiseType(), strategy, Visibility.Both, params.getNavType(), trendTypes);
         // 结果处理,支持多标的
         // 处理走势图
         Map<String, List<Map<String, Object>>> dataListMap = MapUtil.newHashMap(true);

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

@@ -0,0 +1,15 @@
+package com.smppw.analysis.domain.mapper.core;
+
+import com.smppw.analysis.domain.dataobject.CompanyFittedCurveDo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CompanyFittedCurveDoMapper {
+    List<CompanyFittedCurveDo> listNavByTimeInterval(@Param("companyIdList") List<String> companyIdList, @Param("startDate") String startDate, @Param("endDate") String endDate,
+                                                     @Param("curveType") Integer curveType, @Param("strategy") Integer strategy, @Param("needUpdateAndCreateTime") boolean needUpdateAndCreateTime);
+
+    List<CompanyFittedCurveDo> queryCompanyStrategies(@Param("companyId") String companyId, @Param("curveType") List<Integer> curveTypeList);
+}

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

@@ -0,0 +1,15 @@
+package com.smppw.analysis.domain.mapper.core;
+
+import com.smppw.analysis.domain.dataobject.CompanyFittedCurveWeeklyDo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CompanyFittedCurveWeeklyDoMapper {
+
+    List<CompanyFittedCurveWeeklyDo> listNavByTimeInterval(@Param("companyIdList") List<String> companyIdList, @Param("startDate") String startDate, @Param("endDate") String endDate,
+                                                           @Param("curveType") Integer curveType, @Param("strategy") Integer strategy, @Param("needUpdateAndCreateTime") boolean needUpdateAndCreateTime);
+
+}

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

@@ -0,0 +1,16 @@
+package com.smppw.analysis.domain.mapper.core;
+
+import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveDo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface FundManagerFittedCurveDoMapper {
+
+    List<FundManagerFittedCurveDo> listNavByTimeInterval(@Param("companyIdList") List<String> companyIdList, @Param("startDate") String startDate, @Param("endDate") String endDate,
+                                                         @Param("curveType") Integer curveType, @Param("strategy") Integer strategy, @Param("needUpdateAndCreateTime") boolean needUpdateAndCreateTime);
+
+    List<FundManagerFittedCurveDo> queryManagerStrategies(@Param("managerId") String managerId, @Param("curveType") List<Integer> curveTypeList);
+}

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

@@ -0,0 +1,15 @@
+package com.smppw.analysis.domain.mapper.core;
+
+import com.smppw.analysis.domain.dataobject.FundManagerFittedCurveWeeklyDo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface FundManagerFittedCurveWeeklyDoMapper {
+
+    List<FundManagerFittedCurveWeeklyDo> listNavByTimeInterval(@Param("companyIdList") List<String> companyIdList, @Param("startDate") String startDate, @Param("endDate") String endDate,
+                                                               @Param("curveType") Integer curveType, @Param("strategy") Integer strategy, @Param("needUpdateAndCreateTime") boolean needUpdateAndCreateTime);
+
+}

+ 1 - 9
src/main/java/com/smppw/analysis/domain/service/BaseIndicatorServiceV2.java

@@ -3,7 +3,6 @@ package com.smppw.analysis.domain.service;
 import com.smppw.common.pojo.IStrategy;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
-import com.smppw.common.pojo.dto.calc.IndicatorCalcTimeRangeDto;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.*;
@@ -16,16 +15,9 @@ public interface BaseIndicatorServiceV2 {
     Map<String, List<IndicatorCalcPropertyDto>> calcMultipleSecMultipleTimeRangeIndicator(CalcMultipleSecMultipleTimeRangeIndicatorReq req);
 
     Map<String, List<IndicatorCalcPropertyDto>> getMultipleSecTrend(List<String> mainSecIdList, Map<String, String> secBenchmarkIdMap, List<String> indexIdList,
-                                                                    DateIntervalDto dateIntervalDto, Frequency frequency, BigDecimal fixedIncome, BigDecimal initValue,
+                                                                    DateIntervalDto dateIntervalDto, Frequency frequency, BigDecimal fixedIncome, BigDecimal initValue,RaiseType raiseType, IStrategy strategy,
                                                                     Visibility visibility, NavType navType, List<TrendType> trendTypeV2List);
 
-    List<IndicatorCalcTimeRangeDto> getSecTimeRange(String mainSecId, Visibility visibility);
-
-    Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIds, Frequency frequency,
-                                                                      Frequency rollingFrequency, String startDate, String endDate, boolean ifExcessReturn,
-                                                                      String benchmarkId, RaiseType raiseType, IStrategy strategy,
-                                                                      Visibility visible, NavType navType);
-
     Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIds, Frequency frequency,
                                                                       Frequency rollingFrequency, String startDate, String endDate, boolean ifExcessReturn,
                                                                       String benchmarkId, RaiseType raiseType, IStrategy strategy,

+ 15 - 3
src/main/java/com/smppw/analysis/domain/service/NavService.java

@@ -1,6 +1,8 @@
 package com.smppw.analysis.domain.service;
 
+import cn.hutool.core.map.MapUtil;
 import com.smppw.common.pojo.dto.DateValue;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.NavType;
 import com.smppw.common.pojo.enums.Visibility;
 
@@ -9,10 +11,20 @@ import java.util.Map;
 
 public interface NavService {
     Map<String, List<DateValue>> getSecIdDateValueNavListMapFromRedisAndDB(List<String> mainSecIdList, List<String> benchmarkIdList, List<String> indexList,
-                                                                           String startDate, String endDate, NavType navType, Visibility visibility);
+                                                                           String startDate, String endDate, Integer curveTypeId, Integer strategyId,
+                                                                           NavType navType, Visibility visibility, Map<String, Frequency> secFrequencyMap);
 
-    Map<String, List<DateValue>> getSecIdDateValueNavListMapByDb(List<String> allSecIdList, String startDate, String endDate
-            , Visibility visibility, NavType navType);
+    default Map<String, List<DateValue>> getSecIdDateValueNavListMapByDb(List<String> allSecIdList, String startDate, String endDate,
+                                                                         Visibility visibility, NavType navType) {
+        return this.getSecIdDateValueNavListMapByDb(allSecIdList, startDate, endDate, null, null,  visibility, navType, MapUtil.empty());
+    }
+
+    Map<String, List<DateValue>> getSecIdDateValueNavListMapByDb(List<String> allSecIdList, String startDate, String endDate,
+            Integer curveTypeId, Integer strategyId, Visibility visibility, NavType navType, Map<String, Frequency> secFrequencyMap);
+
+    Map<String, List<DateValue>> getManagerNavMap(List<String> managerIdList, String startDate, String endDate, Integer curveType, Integer strategy, NavType navType, Map<String, Frequency> secFrequencyMap);
+
+    Map<String, List<DateValue>> getCompanyNavMap(List<String> companyIdList, String startDate, String endDate, Integer curveType, Integer strategy, NavType navType, Map<String, Frequency> secFrequencyMap);
 
     Map<String, List<DateValue>> getRongzhiIndexNavMap(List<String> rongzhiIndexIdList, String startDate, String endDate, NavType navType);
 

+ 8 - 25
src/main/java/com/smppw/analysis/domain/service/impl/BaseIndicatorServiceV2Impl.java

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.service.impl;
 
-import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.dao.FundInformationDao;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
@@ -8,7 +8,6 @@ import com.smppw.analysis.domain.service.NavService;
 import com.smppw.common.pojo.IStrategy;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
-import com.smppw.common.pojo.dto.calc.IndicatorCalcTimeRangeDto;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.*;
@@ -36,14 +35,17 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         Map<String, String> secBenchmarkIdMap = req.getSecBenchmarkIdMap();
         List<String> indexIdList = req.getIndexIdList();
         Visibility visibility = req.getVisibility();
+        RaiseType raiseType = req.getRaiseType();
+        IStrategy strategy = req.getStrategy();
         NavType navType = req.getNavType();
         String riskOfFreeId = req.getRiskOfFreeId();
         List<String> benchmarkIdList = secBenchmarkIdMap.values().stream().distinct().collect(Collectors.toList());
         if (StrUtil.isNotEmpty(riskOfFreeId)) {
             benchmarkIdList.add(riskOfFreeId);
         }
+        CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
-                null, null, navType, visibility);
+                null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
         Map<String, Frequency> secFreqMap = this.fundInformationDao.getNavFrequency(mainSecIdList);
         return IndicatorService.getInstance().calcMultipleSecMultipleTimeRangeIndicator(req, allNavMap, secFreqMap);
     }
@@ -51,37 +53,18 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
     @Override
     public Map<String, List<IndicatorCalcPropertyDto>> getMultipleSecTrend(List<String> mainSecIdList, Map<String, String> secBenchmarkIdMap,
                                                                            List<String> indexIdList, DateIntervalDto dateIntervalDto, Frequency frequency,
-                                                                           BigDecimal fixedIncome, BigDecimal initValue,
+                                                                           BigDecimal fixedIncome, BigDecimal initValue, RaiseType raiseType, IStrategy strategy,
                                                                            Visibility visibility, NavType navType, List<TrendType> trendTypeV2List) {
         List<String> benchmarkIdList = secBenchmarkIdMap.values().stream().distinct().collect(Collectors.toList());
+        CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
-                null, null, navType, visibility);
+                null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
         Map<String, Frequency> secFreqMap = this.fundInformationDao.getNavFrequency(mainSecIdList);
         return IndicatorService.getInstance().getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, fixedIncome,
                 initValue, frequency, trendTypeV2List, secFreqMap, allNavMap);
     }
 
     @Override
-    public List<IndicatorCalcTimeRangeDto> getSecTimeRange(String mainSecId, Visibility visibility) {
-        List<String> secIds = ListUtil.of(mainSecId);
-        Map<String, Frequency> navFrequency = this.fundInformationDao.getNavFrequency(secIds);
-        Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(secIds, ListUtil.empty(), ListUtil.empty(),
-                null, null, NavType.All, visibility);
-        return IndicatorService.getInstance().getSecTimeRange(mainSecId, navFrequency.get(mainSecId), allNavMap);
-    }
-
-    @Override
-    public Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIds, Frequency frequency, Frequency rollingFrequency,
-                                                                             String startDate, String endDate, boolean ifExcessReturn, String benchmarkId, RaiseType raiseType,
-                                                                             IStrategy strategy, Visibility visible, NavType navType) {
-        Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, ListUtil.of(benchmarkId), indexIds,
-                startDate, endDate, navType, visible);
-        Map<String, Frequency> secFreqMap = this.fundInformationDao.getNavFrequency(mainSecIdList);
-        return IndicatorService.getInstance().getMultiSecRetListNew(mainSecIdList, indexIds, frequency, rollingFrequency, startDate, endDate, ifExcessReturn,
-                benchmarkId, raiseType, strategy, visible, navType, allNavMap, secFreqMap);
-    }
-
-    @Override
     public Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIds, Frequency frequency, Frequency rollingFrequency,
                                                                              String startDate, String endDate, boolean ifExcessReturn, String benchmarkId, RaiseType raiseType, IStrategy strategy,
                                                                              Visibility visible, NavType navType, Map<String, List<DateValue>> allNavMap) {

+ 14 - 0
src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java

@@ -228,6 +228,9 @@ 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> 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);
@@ -311,4 +314,15 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
             secNameMap.putAll(function.apply(refIds));
         }
     }
+
+    private Map<String, String> getStrategyIdNameMap(List<String> strategyIds) {
+        if (CollUtil.isEmpty(strategyIds)) {
+            return MapUtil.empty();
+        }
+        Map<String, String> result = MapUtil.newHashMap(strategyIds.size(), true);
+        for (String strategyId : strategyIds) {
+            result.put(strategyId, StrategyHandleUtils.getStrategy(strategyId).getStrategyNameDesc());
+        }
+        return result;
+    }
 }

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

@@ -5,6 +5,7 @@ import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.NavType;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.constants.SecType;
@@ -49,16 +50,16 @@ public class NavServiceImpl implements NavService {
 //    private FactorNavDao factorNavDao;
 //
     @Autowired
-    private MarketIndexNavDao marketIndexNavDao;
+    private MarketIndexDao marketIndexDao;
     //
 //    @Autowired
 //    private UdfIndexNavDao udfIndexNavDao;
 //
-//    @Autowired
-//    private CompanyNavDao companyNavDao;
-//
-//    @Autowired
-//    private ManagerNavDao managerNavDao;
+    @Autowired
+    private CompanyNavDao companyNavDao;
+
+    @Autowired
+    private ManagerNavDao managerNavDao;
 //
 //    @Autowired
 //    private CmAdvisoryPoolCurveWeeklyDao cmAdvisoryPoolCurveWeeklyDao;
@@ -130,7 +131,8 @@ public class NavServiceImpl implements NavService {
 
     @Override
     public Map<String, List<DateValue>> getSecIdDateValueNavListMapFromRedisAndDB(List<String> mainSecIdList, List<String> benchmarkIdList, List<String> indexList,
-                                                                                  String startDate, String endDate, NavType navType, Visibility visibility) {
+                                                                                  String startDate, String endDate, Integer curveTypeId, Integer strategyId, NavType navType,
+                                                                                  Visibility visibility, Map<String, Frequency> secFrequencyMap) {
 
         //全部的标的集合
         Map<String, Boolean> secIfExtractMap = new HashMap<>();
@@ -150,7 +152,7 @@ public class NavServiceImpl implements NavService {
         Map<String, List<DateValue>> allSecNavListMap = new HashMap<>();
 
         //取DB
-        Map<String, List<DateValue>> secNavListMapDbData = getSecIdDateValueNavListMapByDb(secIds, startDate, endDate, visibility, navType);
+        Map<String, List<DateValue>> secNavListMapDbData = getSecIdDateValueNavListMapByDb(secIds, startDate, endDate, curveTypeId, strategyId, visibility, navType, secFrequencyMap);
         allSecNavListMap.putAll(secNavListMapDbData);
 
         //将取DB的标的的净值存进redis
@@ -160,8 +162,8 @@ public class NavServiceImpl implements NavService {
     }
 
     @Override
-    public Map<String, List<DateValue>> getSecIdDateValueNavListMapByDb(List<String> allSecIdList, String startDate, String endDate
-            , Visibility visibility, NavType navType) {
+    public Map<String, List<DateValue>> getSecIdDateValueNavListMapByDb(List<String> allSecIdList, String startDate, String endDate,
+            Integer curveTypeId, Integer strategyId, Visibility visibility, NavType navType, Map<String, Frequency> secFrequencyMap) {
 
         Map<String, List<DateValue>> allNavMap = new HashMap<>();
 
@@ -196,6 +198,20 @@ public class NavServiceImpl implements NavService {
             allNavMap.putAll(rongzhiIndexIdNavMap);
         }
 
+        //10.机构拟合净值
+        List<String> companyIdList = secIdTypeMap.get(SecType.COMPANY);
+        if(companyIdList != null && companyIdList.size() > 0){
+            Map<String, List<DateValue>> companyIdNavMap = getCompanyNavMap(companyIdList, startDate, endDate, curveTypeId, strategyId, navType, secFrequencyMap);
+            allNavMap.putAll(companyIdNavMap);
+        }
+
+        //11.经理拟合净值
+        List<String> managerIdList = secIdTypeMap.get(SecType.MANAGER);
+        if(managerIdList != null && managerIdList.size() > 0){
+            Map<String, List<DateValue>> managerIdNavMap = getManagerNavMap(managerIdList, startDate, endDate, curveTypeId, strategyId, navType, secFrequencyMap);
+            allNavMap.putAll(managerIdNavMap);
+        }
+
         //13.无风险收益
         List<String> riskOfFree = secIdTypeMap.get(SecType.RISK_OF_FREE);
         if (riskOfFree != null && riskOfFree.size() > 0) {
@@ -212,6 +228,18 @@ public class NavServiceImpl implements NavService {
     }
 
     @Override
+    public Map<String, List<DateValue>> getManagerNavMap(List<String> managerIdList, String startDate, String endDate, Integer curveType, Integer strategy, NavType navType, Map<String, Frequency> secFrequencyMap) {
+        Map<String, List<NavDto>> managerIdNavDtoListMap = managerNavDao.getNav(managerIdList, startDate, endDate, curveType, strategy, secFrequencyMap, false);
+        return SecNavDtoListMapToSecDateValueListMap(navType, managerIdNavDtoListMap);
+    }
+
+    @Override
+    public Map<String, List<DateValue>> getCompanyNavMap(List<String> companyIdList, String startDate, String endDate, Integer curveType, Integer strategy, NavType navType, Map<String, Frequency> secFrequencyMap) {
+        Map<String, List<NavDto>> companyIdNavDtoListMap = companyNavDao.getNav(companyIdList, startDate, endDate, curveType, strategy, secFrequencyMap, false);
+        return SecNavDtoListMapToSecDateValueListMap(navType, companyIdNavDtoListMap);
+    }
+
+    @Override
     public Map<String, List<DateValue>> getRongzhiIndexNavMap(List<String> rongzhiIndexIdList, String startDate, String endDate, NavType navType) {
         Map<String, List<NavDto>> rongzhiIndexIdNavDtoListMap = rongzhiIndexNavDao.getNav(rongzhiIndexIdList, startDate, endDate, false);
         return SecNavDtoListMapToSecDateValueListMap(navType, rongzhiIndexIdNavDtoListMap);
@@ -219,7 +247,7 @@ public class NavServiceImpl implements NavService {
 
     @Override
     public Map<String, List<DateValue>> getMarketIndexNavMap(List<String> marketIndexIdList, String startDate, String endDate, NavType navType) {
-        Map<String, List<NavDto>> indexIdNavDtoListMap = marketIndexNavDao.getNav(marketIndexIdList, startDate, endDate, false);
+        Map<String, List<NavDto>> indexIdNavDtoListMap = marketIndexDao.getNav(marketIndexIdList, startDate, endDate, false);
         return SecNavDtoListMapToSecDateValueListMap(navType, indexIdNavDtoListMap);
     }
 

+ 82 - 0
src/main/resources/mapping/core/CompanyFittedCurveDoMapper.xml

@@ -0,0 +1,82 @@
+<?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">
+        <!--@mbg.generated-->
+        <!--@Table company_fitted_curve-->
+        <id column="id" property="id"/>
+        <result column="company_id" property="companyId"/>
+        <result column="raise_type" property="raiseType"/>
+        <result column="curve_type" property="curveType"/>
+        <result column="strategy" property="strategy"/>
+        <result column="end_date" property="endDate"/>
+        <result column="cumulative_nav" property="cumulativeNav"/>
+        <result column="fund_num" property="fundNum"/>
+        <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>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        id,
+        company_id,
+        raise_type,
+        curve_type,
+        strategy,
+        end_date,
+        cumulative_nav,
+        fund_num,
+        creatorid,
+        createtime,
+        updaterid,
+        updatetime,
+        isvalid
+    </sql>
+
+    <select id="listNavByTimeInterval" resultMap="BaseResultMap">
+        select n.company_id,
+               ifnull((select fp.price_date
+                       from rz_hfdb_core.fund_performance fp
+                       where fp.fund_id = 'IN00000008'
+                         AND fp.end_date = n.end_date
+                       limit 1), last_day(CONCAT(`end_date`, '-01'))) as end_date,
+               n.cumulative_nav
+        <if test="needUpdateAndCreateTime">
+            ,
+                n.updatetime,
+                n.createtime
+        </if>
+        from company_fitted_curve n
+        where n.isvalid = 1
+          AND n.curve_type = #{curveType}
+          AND n.company_id in
+        <foreach collection="companyIdList" item="item" index="index" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        <if test="startDate != null and startDate != ''">
+            AND n.end_date &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            AND n.end_date &lt;= #{endDate}
+        </if>
+        <if test="curveType == 2 or curveType == 5 or curveType == 8">
+            <if test="strategy != null">
+                AND n.strategy = #{strategy}
+            </if>
+        </if>
+    </select>
+
+    <select id="queryCompanyStrategies" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from rz_hfdb_core.company_fitted_curve
+        where isvalid = 1
+          and company_id = #{companyId}
+          and curve_type in
+        <foreach collection="curveType" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+</mapper>

+ 54 - 0
src/main/resources/mapping/core/CompanyFittedCurveWeeklyDoMapper.xml

@@ -0,0 +1,54 @@
+<?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">
+    <!--@mbg.generated-->
+    <!--@Table company_fitted_curve_weekly-->
+    <id column="id" property="id" />
+    <result column="company_id" property="companyId" />
+    <result column="raise_type" property="raiseType" />
+    <result column="curve_type" property="curveType" />
+    <result column="strategy" property="strategy" />
+    <result column="year_week" property="yearWeek" />
+    <result column="end_year" property="endYear" />
+    <result column="week_of_year" property="weekOfYear" />
+    <result column="price_date" property="priceDate" />
+    <result column="cumulative_nav" property="cumulativeNav" />
+    <result column="fund_num" property="fundNum" />
+    <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>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, company_id, raise_type, curve_type, strategy, year_week, end_year, week_of_year, 
+    price_date, cumulative_nav, fund_num, creatorid, createtime, updaterid, updatetime, 
+    isvalid
+  </sql>
+
+  <select id="listNavByTimeInterval" resultMap="BaseResultMap">
+    select company_id, year_week, cumulative_nav
+    <if test="needUpdateAndCreateTime">
+      , updatetime, createtime
+    </if>
+    from company_fitted_curve_weekly
+    where isvalid = 1 AND curve_type = #{curveType} AND company_id in
+    <foreach collection="companyIdList" item="item" index="index" separator="," open="(" close=")">
+      #{item}
+    </foreach>
+    <if test="startDate != null and startDate != ''">
+      AND year_week &gt;= #{startDate}
+    </if>
+    <if test="endDate != null and endDate != ''">
+      AND year_week &lt;= #{endDate}
+    </if>
+    <if test="curveType == 2 or curveType == 5 or curveType == 8">
+      <if test="strategy != null">
+        AND strategy = #{strategy}
+      </if>
+    </if>
+  </select>
+
+</mapper>

+ 63 - 0
src/main/resources/mapping/core/FundManagerFittedCurveDoMapper.xml

@@ -0,0 +1,63 @@
+<?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">
+    <!--@mbg.generated-->
+    <!--@Table fund_manager_fitted_curve-->
+    <id column="id" property="id" />
+    <result column="fund_manager_id" property="fundManagerId" />
+    <result column="curve_type" property="curveType" />
+    <result column="strategy" property="strategy" />
+    <result column="end_date" property="endDate" />
+    <result column="cumulative_nav" property="cumulativeNav" />
+    <result column="fund_num" property="fundNum" />
+    <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>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, fund_manager_id, curve_type, strategy, end_date, cumulative_nav, fund_num, creatorid, 
+    createtime, updaterid, updatetime, isvalid
+  </sql>
+
+  <select id="listNavByTimeInterval" resultMap="BaseResultMap">
+    select n.fund_manager_id ,
+    ifnull((select fp.price_date from rz_hfdb_core.fund_performance fp
+    where fp.fund_id='IN00000008' AND fp.end_date = n.end_date limit 1 ),last_day(CONCAT(`end_date`,'-01'))) as end_date,
+    cumulative_nav
+    <if test="needUpdateAndCreateTime">
+      , n.updatetime, n.createtime
+    </if>
+    from fund_manager_fitted_curve n
+    where n.isvalid = 1 AND n.curve_type = #{curveType} AND n.fund_manager_id in
+    <foreach collection="companyIdList" item="item" index="index" separator="," open="(" close=")">
+      #{item}
+    </foreach>
+    <if test="startDate != null and startDate != ''">
+      AND n.end_date &gt;= #{startDate}
+    </if>
+    <if test="endDate != null and endDate != ''">
+      AND n.end_date &lt;= #{endDate}
+    </if>
+    <if test="curveType == 2 or curveType == 5 or curveType == 8">
+      <if test="strategy != null">
+        AND n.strategy = #{strategy}
+      </if>
+    </if>
+  </select>
+
+  <select id="queryManagerStrategies" resultMap="BaseResultMap">
+      select
+      <include refid="Base_Column_List"/>
+      from rz_hfdb_core.fund_manager_fitted_curve
+      where isvalid = 1
+      and fund_manager_id = #{managerId}
+      and curve_type in
+      <foreach collection="curveType" item="item" separator="," open="(" close=")">
+        #{item}
+      </foreach>
+    </select>
+</mapper>

+ 49 - 0
src/main/resources/mapping/core/FundManagerFittedCurveWeeklyDoMapper.xml

@@ -0,0 +1,49 @@
+<?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">
+    <!--@mbg.generated-->
+    <!--@Table fund_manager_fitted_curve_weekly-->
+    <id column="id" property="id" />
+    <result column="fund_manager_id" property="fundManagerId" />
+    <result column="curve_type" property="curveType" />
+    <result column="strategy" property="strategy" />
+    <result column="year_week" property="yearWeek" />
+    <result column="end_year" property="endYear" />
+    <result column="week_of_year" property="weekOfYear" />
+    <result column="price_date" property="priceDate" />
+    <result column="cumulative_nav" property="cumulativeNav" />
+    <result column="fund_num" property="fundNum" />
+    <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>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, fund_manager_id, curve_type, strategy, year_week, end_year, week_of_year, price_date, 
+    cumulative_nav, fund_num, creatorid, createtime, updaterid, updatetime, isvalid
+  </sql>
+
+  <select id="listNavByTimeInterval" resultMap="BaseResultMap">
+    select fund_manager_id, year_week, cumulative_nav
+    from fund_manager_fitted_curve_weekly
+    where isvalid = 1 AND curve_type = #{curveType} AND fund_manager_id in
+    <foreach collection="companyIdList" item="item" index="index" separator="," open="(" close=")">
+      #{item}
+    </foreach>
+    <if test="startDate != null and startDate != ''">
+      AND year_week &gt;= #{startDate}
+    </if>
+    <if test="endDate != null and endDate != ''">
+      AND year_week &lt;= #{endDate}
+    </if>
+    <if test="curveType == 2 or curveType == 5 or curveType == 8">
+      <if test="strategy != null">
+        AND strategy = #{strategy}
+      </if>
+    </if>
+  </select>
+
+</mapper>