Jelajahi Sumber

feat:通用服务改造-支持自建基金净值获取,删除注释代码

wangzaijun 10 bulan lalu
induk
melakukan
37e3468bcf
100 mengubah file dengan 137 tambahan dan 8915 penghapusan
  1. 0 50
      src/main/java/com/smppw/analysis/application/dto/info/FundSimilarReq.java
  2. 0 28
      src/main/java/com/smppw/analysis/application/dto/info/ManualFundManagerParams.java
  3. 0 34
      src/main/java/com/smppw/analysis/application/dto/info/ManualFundNoticeReq.java
  4. 0 24
      src/main/java/com/smppw/analysis/application/dto/performance/RankReq.java
  5. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/AssetAllocationReq.java
  6. 0 29
      src/main/java/com/smppw/analysis/application/dto/position/BarraSensitivityReq.java
  7. 0 23
      src/main/java/com/smppw/analysis/application/dto/position/BasePositionReq.java
  8. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/ChangeNumberReq.java
  9. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/ConcentrationReq.java
  10. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/HolderInfoReq.java
  11. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/LeverageChangeReq.java
  12. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/MajorChangeReq.java
  13. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/MarginalRiskContributionReq.java
  14. 0 20
      src/main/java/com/smppw/analysis/application/dto/position/PositionInfoReq.java
  15. 0 36
      src/main/java/com/smppw/analysis/application/dto/position/PositionListReq.java
  16. 0 30
      src/main/java/com/smppw/analysis/application/dto/position/StockAllocationReq.java
  17. 0 29
      src/main/java/com/smppw/analysis/application/dto/position/StockPerformanceAttributionReq.java
  18. 0 43
      src/main/java/com/smppw/analysis/application/dto/style/BaseStyleReq.java
  19. 0 526
      src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java
  20. 0 6
      src/main/java/com/smppw/analysis/application/service/performance/FundPerformanceService.java
  21. 0 84
      src/main/java/com/smppw/analysis/application/service/position/FundFuturesOptionService.java
  22. 0 78
      src/main/java/com/smppw/analysis/application/service/position/FuturePositionAnalysis.java
  23. 0 283
      src/main/java/com/smppw/analysis/application/service/position/StockPositionAnalysis.java
  24. 0 133
      src/main/java/com/smppw/analysis/application/service/position/SynthesizePositionAnalysis.java
  25. 0 101
      src/main/java/com/smppw/analysis/application/service/style/StyleService.java
  26. 0 1160
      src/main/java/com/smppw/analysis/application/service/style/StyleServiceImpl.java
  27. 0 85
      src/main/java/com/smppw/analysis/client/FundApi.java
  28. 0 6
      src/main/java/com/smppw/analysis/client/FundPerformanceApi.java
  29. 0 304
      src/main/java/com/smppw/analysis/client/FundPositionApi.java
  30. 0 141
      src/main/java/com/smppw/analysis/client/FundStyleApi.java
  31. 0 31
      src/main/java/com/smppw/analysis/domain/dao/CompanyInformationDao.java
  32. 0 26
      src/main/java/com/smppw/analysis/domain/dao/FundAnnounceDao.java
  33. 0 25
      src/main/java/com/smppw/analysis/domain/dao/FundArchivesDao.java
  34. 0 27
      src/main/java/com/smppw/analysis/domain/dao/FundStyleDao.java
  35. 0 31
      src/main/java/com/smppw/analysis/domain/dao/PersonnelInformationDao.java
  36. 0 114
      src/main/java/com/smppw/analysis/domain/dao/PositionAnalysisDao.java
  37. 0 58
      src/main/java/com/smppw/analysis/domain/dao/PubliclyFundPositionDao.java
  38. 0 61
      src/main/java/com/smppw/analysis/domain/dao/nav/CompanyNavDao.java
  39. 0 61
      src/main/java/com/smppw/analysis/domain/dao/nav/ManagerNavDao.java
  40. 1 2
      src/main/java/com/smppw/analysis/domain/dao/nav/NavConstants.java
  41. 1 2
      src/main/java/com/smppw/analysis/domain/dao/nav/NavFactory.java
  42. 23 0
      src/main/java/com/smppw/analysis/domain/dao/nav/PrivateFundNavDao.java
  43. 0 21
      src/main/java/com/smppw/analysis/domain/dataobject/FundSimilarDo.java
  44. 0 237
      src/main/java/com/smppw/analysis/domain/dataobject/FundStyleStatsDO.java
  45. 0 28
      src/main/java/com/smppw/analysis/domain/dataobject/ManualFundAssetSizeDo.java
  46. 0 45
      src/main/java/com/smppw/analysis/domain/dataobject/ManualFundFeeDo.java
  47. 0 33
      src/main/java/com/smppw/analysis/domain/dataobject/ManualFundPurchaseRedeemDO.java
  48. 0 38
      src/main/java/com/smppw/analysis/domain/dataobject/MfFundArchivesInfoDo.java
  49. 0 37
      src/main/java/com/smppw/analysis/domain/dataobject/MfManagerFundNumDo.java
  50. 0 219
      src/main/java/com/smppw/analysis/domain/dataobject/PersonnelInformationDo.java
  51. 0 38
      src/main/java/com/smppw/analysis/domain/dataobject/PersonnelWorkExperienceDo.java
  52. 0 77
      src/main/java/com/smppw/analysis/domain/dataobject/PubliclyFundHolderInfoDO.java
  53. 0 49
      src/main/java/com/smppw/analysis/domain/dataobject/PubliclyFundStockChangeDO.java
  54. 0 24
      src/main/java/com/smppw/analysis/domain/dataobject/SecClosePriceDO.java
  55. 0 34
      src/main/java/com/smppw/analysis/domain/dataobject/SecLiquidityInfoDO.java
  56. 0 28
      src/main/java/com/smppw/analysis/domain/dataobject/SecStyleInfoDO.java
  57. 0 26
      src/main/java/com/smppw/analysis/domain/dataobject/SecTurnoverInfoDO.java
  58. 0 21
      src/main/java/com/smppw/analysis/domain/dataobject/SwSecIndustryInfoDO.java
  59. 112 0
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CmNavDo.java
  60. 0 21
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyFittedCurveDo.java
  61. 0 39
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyFittedCurveWeeklyDo.java
  62. 0 89
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyNavDO.java
  63. 0 21
      src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerFittedCurveDo.java
  64. 0 39
      src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerFittedCurveWeeklyDo.java
  65. 0 84
      src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerNavDO.java
  66. 0 128
      src/main/java/com/smppw/analysis/domain/dto/info/FundBaseFeeVO.java
  67. 0 57
      src/main/java/com/smppw/analysis/domain/dto/info/FundManagerInfoVo.java
  68. 0 31
      src/main/java/com/smppw/analysis/domain/dto/info/FundOpenDayVO.java
  69. 0 43
      src/main/java/com/smppw/analysis/domain/dto/info/FundSimilarParams.java
  70. 0 22
      src/main/java/com/smppw/analysis/domain/dto/info/FundSimilarVO.java
  71. 0 46
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundFeeInfoVO.java
  72. 0 28
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundInvestInfoVO.java
  73. 0 58
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundManagerChangeVO.java
  74. 0 73
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundManagerInfoVO.java
  75. 0 44
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundNoticeInfoVO.java
  76. 0 20
      src/main/java/com/smppw/analysis/domain/dto/performance/RankParams.java
  77. 0 97
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/RankHandler.java
  78. 0 218
      src/main/java/com/smppw/analysis/domain/manager/position/AbstractAnalysisBizHandler.java
  79. 0 156
      src/main/java/com/smppw/analysis/domain/manager/position/AbstractBizHandler.java
  80. 0 73
      src/main/java/com/smppw/analysis/domain/manager/position/AbstractNonSynthesizeBizHandler.java
  81. 0 10
      src/main/java/com/smppw/analysis/domain/manager/position/AbstractPositionLoad.java
  82. 0 21
      src/main/java/com/smppw/analysis/domain/manager/position/BizHandler.java
  83. 0 26
      src/main/java/com/smppw/analysis/domain/manager/position/BizHandlerConstants.java
  84. 0 35
      src/main/java/com/smppw/analysis/domain/manager/position/BizHandlerFactory.java
  85. 0 32
      src/main/java/com/smppw/analysis/domain/manager/position/PositionLoad.java
  86. 0 25
      src/main/java/com/smppw/analysis/domain/manager/position/PositionLoadConstants.java
  87. 0 59
      src/main/java/com/smppw/analysis/domain/manager/position/PositionLoadFactory.java
  88. 0 30
      src/main/java/com/smppw/analysis/domain/manager/position/PrivatePositionLoad.java
  89. 0 126
      src/main/java/com/smppw/analysis/domain/manager/position/PrivatelyFundPositionLoad.java
  90. 0 92
      src/main/java/com/smppw/analysis/domain/manager/position/PubliclyFundPositionLoad.java
  91. 0 512
      src/main/java/com/smppw/analysis/domain/manager/position/bond/BondPositionService.java
  92. 0 75
      src/main/java/com/smppw/analysis/domain/manager/position/bond/ConcentrationBizBondHandler.java
  93. 0 1074
      src/main/java/com/smppw/analysis/domain/manager/position/future/FundFuturesOptionBaseService.java
  94. 0 288
      src/main/java/com/smppw/analysis/domain/manager/position/future/MarginalRiskContributionBizHandler.java
  95. 0 69
      src/main/java/com/smppw/analysis/domain/manager/position/stock/BarraSensitivityComponent.java
  96. 0 50
      src/main/java/com/smppw/analysis/domain/manager/position/stock/ChangeNumberBizHandler.java
  97. 0 71
      src/main/java/com/smppw/analysis/domain/manager/position/stock/ConcentrationBizHandler.java
  98. 0 67
      src/main/java/com/smppw/analysis/domain/manager/position/stock/IndustryAllocationBizHandler.java
  99. 0 80
      src/main/java/com/smppw/analysis/domain/manager/position/stock/IndustryAllocationPreferenceComponent.java
  100. 0 0
      src/main/java/com/smppw/analysis/domain/manager/position/stock/NewLiquidityAllocationBizHandler.java

+ 0 - 50
src/main/java/com/smppw/analysis/application/dto/info/FundSimilarReq.java

@@ -1,50 +0,0 @@
-//package com.smppw.analysis.application.dto.info;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.application.dto.BaseReq;
-//import com.smppw.analysis.domain.dto.info.FundSimilarParams;
-//import com.smppw.common.pojo.enums.RaiseType;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/3/22 16:58
-// * @description 相似产品(仅支持私募基金) 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class FundSimilarReq extends BaseReq<FundSimilarParams> {
-//    public static final String DEFAULT_THRESHOLD = "0.85";
-//    /**
-//     * 基金id
-//     */
-//    private String secId;
-//    /**
-//     * 管理人id
-//     */
-//    private String trustId;
-//    /**
-//     * 1-市场同策略,2-管理人同策略
-//     */
-//    private Integer calcType = 2;
-//    /**
-//     * 相关性阈值,小数
-//     */
-//    private String threshold = DEFAULT_THRESHOLD;
-//    /**
-//     * 募集类型
-//     */
-//    private RaiseType raiseType;
-//    /**
-//     * 末级策略,head-info接口返回的
-//     */
-//    private String strategy;
-//
-//    private String benchmarkId;
-//
-//    @Override
-//    public FundSimilarParams convert() {
-//        return BeanUtil.copyProperties(this, FundSimilarParams.class);
-//    }
-//}

+ 0 - 28
src/main/java/com/smppw/analysis/application/dto/info/ManualFundManagerParams.java

@@ -1,28 +0,0 @@
-//package com.smppw.analysis.application.dto.info;
-//
-//import com.smppw.analysis.application.dto.BaseReq;
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 17:00
-// * @description 公募基金的基金经理变更历史请求参数
-// */
-//@Data
-//public class ManualFundManagerParams extends BaseReq<ManualFundManagerParams> {
-//
-//    /**
-//     * 基金id
-//     */
-//    private String secId;
-//
-//    /**
-//     * 基准
-//     */
-//    private String benchmarkId;
-//
-//    @Override
-//    public ManualFundManagerParams convert() {
-//        return null;
-//    }
-//}

+ 0 - 34
src/main/java/com/smppw/analysis/application/dto/info/ManualFundNoticeReq.java

@@ -1,34 +0,0 @@
-//package com.smppw.analysis.application.dto.info;
-//
-//import com.smppw.analysis.application.dto.BaseReq;
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 09:25
-// * @description 公募基金公告信息请求参数
-// */
-//@Data
-//public class ManualFundNoticeReq extends BaseReq<ManualFundNoticeReq> {
-//
-//    /**
-//     * 公募基金id
-//     */
-//    private String secId;
-//
-//    /**
-//     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告,多个类型以逗号隔开
-//     */
-//    private String type;
-//
-//    /**
-//     * 标题,模糊查询
-//     */
-//    private String title;
-//
-//    @Override
-//    public ManualFundNoticeReq convert() {
-//        return null;
-//    }
-//
-//}

+ 0 - 24
src/main/java/com/smppw/analysis/application/dto/performance/RankReq.java

@@ -1,24 +0,0 @@
-//package com.smppw.analysis.application.dto.performance;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dto.performance.RankParams;
-//import com.smppw.common.pojo.enums.Indicator;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//@Setter
-//@Getter
-//public class RankReq extends BasePerformanceReq<RankParams> {
-//    /**
-//     * 选择的指标
-//     */
-//    private Indicator indicator;
-//
-//    @Override
-//    public RankParams convert() {
-//        RankParams params = BeanUtil.copyProperties(this, RankParams.class);
-//        params.setRefIds(ListUtil.toLinkedList(this.getSecId()));
-//        return params;
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/AssetAllocationReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.synthesize.AssetAllocationParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 11:30
-// * @description 大类资产配置,后续支持穿透
-// */
-//@Setter
-//@Getter
-//public class AssetAllocationReq extends BasePositionReq<AssetAllocationParams> {
-//    @Override
-//    public AssetAllocationParams convert() {
-//        return BeanUtil.copyProperties(this, AssetAllocationParams.class);
-//    }
-//}

+ 0 - 29
src/main/java/com/smppw/analysis/application/dto/position/BarraSensitivityReq.java

@@ -1,29 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.stock.BarraSensitivityParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 17:13
-// * @description 股票barra敏感度分析 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class BarraSensitivityReq extends BasePositionReq<BarraSensitivityParams> {
-//    /**
-//     * 基准,只支持 沪深300、中证500、中证1000
-//     */
-//    private String benchmarkId;
-//    /**
-//     * 估值日期
-//     */
-//    private String date;
-//
-//    @Override
-//    public BarraSensitivityParams convert() {
-//        return BeanUtil.copyProperties(this, BarraSensitivityParams.class);
-//    }
-//}

+ 0 - 23
src/main/java/com/smppw/analysis/application/dto/position/BasePositionReq.java

@@ -1,23 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import com.smppw.analysis.application.dto.BaseReq;
-//import com.smppw.analysis.domain.dto.position.BaseParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//@Setter
-//@Getter
-//public abstract class BasePositionReq<R extends BaseParams> extends BaseReq<R> {
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//    /**
-//     * 开始时间
-//     */
-//    private String startDate;
-//    /**
-//     * 结束时间
-//     */
-//    private String endDate;
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/ChangeNumberReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.stock.ChangeNumberParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:53
-// * @description 持股数量变动时序 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class ChangeNumberReq extends BasePositionReq<ChangeNumberParams> {
-//    @Override
-//    public ChangeNumberParams convert() {
-//        return BeanUtil.copyProperties(this, ChangeNumberParams.class);
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/ConcentrationReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.stock.ConcentrationParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:53
-// * @description 股票集中度 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class ConcentrationReq extends BasePositionReq<ConcentrationParams> {
-//    @Override
-//    public ConcentrationParams convert() {
-//        return BeanUtil.copyProperties(this, ConcentrationParams.class);
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/HolderInfoReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.synthesize.HolderInfoParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:26
-// * @description 公募基金持有人结构 请求参数
-// */
-//@Setter
-//@Getter
-//public class HolderInfoReq extends BasePositionReq<HolderInfoParams> {
-//    @Override
-//    public HolderInfoParams convert() {
-//        return BeanUtil.copyProperties(this, HolderInfoParams.class);
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/LeverageChangeReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.synthesize.LeverageChangeParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 11:30
-// * @description 杠杆变化,不需要支持穿透
-// */
-//@Setter
-//@Getter
-//public class LeverageChangeReq extends BasePositionReq<LeverageChangeParams> {
-//    @Override
-//    public LeverageChangeParams convert() {
-//        return BeanUtil.copyProperties(this, LeverageChangeParams.class);
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/MajorChangeReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.stock.MajorChangeParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:53
-// * @description 持仓股票重大变动 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class MajorChangeReq extends BasePositionReq<MajorChangeParams> {
-//    @Override
-//    public MajorChangeParams convert() {
-//        return BeanUtil.copyProperties(this, MajorChangeParams.class);
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/MarginalRiskContributionReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContributionParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/19 11:16
-// * @description 私募基金期货的边际风险贡献接口请求参数
-// */
-//@Setter
-//@Getter
-//public class MarginalRiskContributionReq extends BasePositionReq<MarginalRiskContributionParams> {
-//    @Override
-//    public MarginalRiskContributionParams convert() {
-//        return BeanUtil.copyProperties(this, MarginalRiskContributionParams.class);
-//    }
-//}

+ 0 - 20
src/main/java/com/smppw/analysis/application/dto/position/PositionInfoReq.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.synthesize.PositionInfoParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:10
-// * @description 持仓列表的返回参数接口的请求参数
-// */
-//@Setter
-//@Getter
-//public class PositionInfoReq extends BasePositionReq<PositionInfoParams> {
-//    @Override
-//    public PositionInfoParams convert() {
-//        return BeanUtil.copyProperties(this, PositionInfoParams.class);
-//    }
-//}

+ 0 - 36
src/main/java/com/smppw/analysis/application/dto/position/PositionListReq.java

@@ -1,36 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.AssetCategoryEnum;
-//import com.smppw.analysis.domain.dto.position.synthesize.PositionListParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 11:30
-// * @description 持仓列表,后续需要支持穿透
-// */
-//@Setter
-//@Getter
-//public class PositionListReq extends BasePositionReq<PositionListParams> {
-//    /**
-//     * 数量,前10、前20、前50,-1-全部,默认前10
-//     */
-//    private String num;
-//    /**
-//     * 类别
-//     *
-//     * @see AssetCategoryEnum
-//     */
-//    private String type;
-//    /**
-//     * 估值日期
-//     */
-//    private String date;
-//
-//    @Override
-//    public PositionListParams convert() {
-//        return BeanUtil.copyProperties(this, PositionListParams.class);
-//    }
-//}

+ 0 - 30
src/main/java/com/smppw/analysis/application/dto/position/StockAllocationReq.java

@@ -1,30 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.stock.StockAllocationParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 15:27
-// * @description 行业配置\风格配置或流动性 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class StockAllocationReq extends BasePositionReq<StockAllocationParams> {
-//    /**
-//     * 基准,只支持 沪深300、中证500、中证1000
-//     */
-//    private String benchmarkId;
-//    /**
-//     * 方向约束,默认多空,其他条件不生效
-//     * 1-多头,2-空头,3-多空
-//     */
-//    private String constraint;
-//
-//    @Override
-//    public StockAllocationParams convert() {
-//        return BeanUtil.copyProperties(this, StockAllocationParams.class);
-//    }
-//}

+ 0 - 29
src/main/java/com/smppw/analysis/application/dto/position/StockPerformanceAttributionReq.java

@@ -1,29 +0,0 @@
-//package com.smppw.analysis.application.dto.position;
-//
-//import cn.hutool.core.bean.BeanUtil;
-//import com.smppw.analysis.domain.dto.position.stock.StockPerformanceAttributionParams;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 16:31
-// * @description 股票业绩归因 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class StockPerformanceAttributionReq extends BasePositionReq<StockPerformanceAttributionParams> {
-//    /**
-//     * 基准,只支持 沪深300、中证500、中证1000
-//     */
-//    private String benchmarkId;
-//    /**
-//     * 是否年化,默认不年化
-//     */
-//    private Boolean ifAnnualized;
-//
-//    @Override
-//    public StockPerformanceAttributionParams convert() {
-//        return BeanUtil.copyProperties(this, StockPerformanceAttributionParams.class);
-//    }
-//}

+ 0 - 43
src/main/java/com/smppw/analysis/application/dto/style/BaseStyleReq.java

@@ -1,43 +0,0 @@
-//package com.smppw.analysis.application.dto.style;
-//
-//import com.smppw.analysis.application.dto.BaseReq;
-//import com.smppw.analysis.domain.dto.style.BaseParams;
-//import com.smppw.common.pojo.enums.Frequency;
-//import com.smppw.common.pojo.enums.RaiseType;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//@Setter
-//@Getter
-//public abstract class BaseStyleReq<R extends BaseParams> extends BaseReq<R> {
-//    /**
-//     * 标的id,包括基金、机构行业经理
-//     */
-//    private String secId;
-//    /**
-//     * 开始日期
-//     */
-//    private String startDate;
-//    /**
-//     * 结束日期
-//     */
-//    private String endDate;
-//    /**
-//     * 滚动期数,默认24期
-//     */
-//    private String winlen;
-//    /**
-//     * 滚动步长,默认1
-//     */
-//    private String step;
-//    /**
-//     * 净值频率
-//     */
-//    private Frequency frequency;
-//
-//    private RaiseType raiseType;
-//
-//    private String strategy;
-//
-//    public abstract R convert();
-//}

+ 0 - 526
src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java

@@ -79,469 +79,12 @@ public class FundInfoService {
 
     }
 
-    //    private final NavService navService;
     private final BaseInfoService baseInfoService;
-//    private final BaseIndicatorServiceV2 baseIndicatorServiceV2;
-//    private final CompanyInformationDao companyInformationDao;
 
     public FundInfoService(BaseInfoService baseInfoService) {
-//        this.navService = navService;
         this.baseInfoService = baseInfoService;
-//        this.baseIndicatorServiceV2 = baseIndicatorServiceV2;
-//        this.companyInformationDao = companyInformationDao;
     }
 
-//    /**
-//     * 私募基金相似产品,计算相关性时代码可以优化(参考基金相关性)
-//     *
-//     * @param req /
-//     * @return /
-//     */
-//    public List<FundSimilarVO> getFundSimilarList(FundSimilarReq req) {
-//        List<String> secIds = ListUtil.toLinkedList(req.getSecId());
-//        IStrategy strategy = StrategyHandleUtils.getStrategy(req.getStrategy());
-//        Map<String, List<DateValue>> secNavMap = this.navService.getSecIdDateValueNavListMapByDb(secIds,
-//                null, null, Visibility.Both, NavType.CumulativeNav);
-//        List<IndicatorCalcTimeRangeDto> secTimeRanges = IndicatorService.getInstance().getSecTimeRange(req.getSecId(), Frequency.Monthly, secNavMap);
-//        String startDate = null;
-//        String endDate = null;
-//        if (CollUtil.isNotEmpty(secTimeRanges)) {
-//            for (IndicatorCalcTimeRangeDto secTimeRange : secTimeRanges) {
-//                if (TimeRange.Last1Year == secTimeRange.getTimeRange()) {
-//                    startDate = secTimeRange.getStartDate();
-//                    endDate = secTimeRange.getEndDate();
-//                    break;
-//                }
-//            }
-//        }
-//        FundSimilarParams params = req.convert();
-//        params.setStartDate(startDate);
-//        List<FundSimilarDo> dataList = this.baseInfoService.getFundSimilarList(params);
-//        List<String> fundIds = dataList.stream().map(FundSimilarDo::getFundId).collect(Collectors.toList());
-//        if (CollUtil.isNotEmpty(fundIds)) {
-//            secIds.addAll(fundIds);
-//        }
-//        Map<String, List<DateValue>> allNavMap = this.navService.getSecIdDateValueNavListMapByDb(secIds,
-//                startDate, endDate, Visibility.Both, NavType.CumulativeNav);
-//        Map<String, List<IndicatorCalcPropertyDto>> multiSecRetListNew = this.baseIndicatorServiceV2.getMultiSecRetListNew(
-//                secIds, ListUtil.empty(), Frequency.Monthly, Frequency.Daily, startDate, endDate, false, params.getBenchmarkId(),
-//                params.getRaiseType(), strategy, Visibility.Both, NavType.CumulativeNav, allNavMap);
-//        List<Map<String, Object>> initRetList = NavUtil.handleNextStepNew(secIds, ListUtil.empty(), multiSecRetListNew, false);
-//        Map<String, Map<String, Double>> retMap = this.transfer2TwoDimensionMap(initRetList);
-//        Double[][] corArr = CalcUtils.getCorrelationMatrix(retMap, ListUtil.toList(params.getSecId()), secIds);
-//        List<FundSimilarVO> resultList = ListUtil.list(true);
-//        for (FundSimilarDo map : dataList) {
-//            FundSimilarVO similarVO = BeanUtil.copyProperties(map, FundSimilarVO.class);
-//            // 因为第一个基金是当前基金,所以需要 + 1 来取该基金与当前基金的相关性
-//            int i = fundIds.indexOf(map.getFundId()) + 1;
-//            similarVO.setSimilar(corArr[0][i]);
-//            similarVO.setStrategy(StrategyHandleUtils.getStrategy(map.getStrategy()).getStrategyNameDesc());
-//            similarVO.setSubStrategy(this.getStrategyName(map.getSubStrategy()));
-//            similarVO.setThirdStrategy(this.getStrategyName(map.getThirdStrategy()));
-//            resultList.add(similarVO);
-//        }
-//        return resultList.stream().filter(e -> e.getSimilar() != null && e.getSimilar() >= Double.parseDouble(params.getThreshold())).collect(Collectors.toList());
-//    }
-
-//    private String getStrategyName(String strategyKey) {
-//        IStrategy strategy = StrategyHandleUtils.getStrategy(strategyKey);
-//        if (strategy == null || strategy == NewSubStrategy.OtherStrategy || strategy.getStrategyId() == -1) {
-//            return "--";
-//        }
-//        return strategy.getStrategyNameDesc();
-//    }
-//
-//    private Map<String, Map<String, Double>> transfer2TwoDimensionMap(List<Map<String, Object>> initRetList) {
-//        Map<String, Map<String, Double>> map = new TreeMap<>();
-//        for (Map<String, Object> unit : initRetList) {
-//            if (unit != null) {
-//                String id = unit.get("fund_id").toString();
-//                if (!map.containsKey(id)) {
-//                    map.put(id, new TreeMap<>());
-//                }
-//                Object t = unit.get("ret_range");
-//                if (t == null) {
-//                    continue;
-//                }
-//                map.get(id).put(unit.get("end_date").toString(), Double.valueOf(unit.get("ret_range").toString()));
-//            }
-//
-//        }
-//        return map;
-//    }
-
-//    public List<ManualFundNoticeInfoVO> noticeList(ManualFundNoticeReq params) {
-//        Map<String, String> typeMapper = MapUtil.builder("1", "10").put("2", "20").put("3", "30").put("4", "50, 70, 90, 91").build();
-//        String fundId = params.getSecId();
-//        String title = params.getTitle();
-//        // type 逗号拆分 转list,直接数据库in查询
-//        List<String> typeList = ListUtil.list(false);
-//        if (CharSequenceUtil.isNotBlank(params.getType())) {
-//            String s = typeMapper.get(params.getType());
-//            typeList.addAll(StrUtil.split(s, ","));
-//        }
-//        List<ManualFundNoticeInfoDO> dataList = this.baseInfoService.queryFundAnnounce(fundId, typeList, title);
-//        List<ManualFundNoticeInfoVO> resultList = ListUtil.list(true);
-//        // key value互换
-//        Map<String, String> reverse = MapUtil.reverse(typeMapper);
-//        for (ManualFundNoticeInfoDO temp : dataList) {
-//            ManualFundNoticeInfoVO vo = BeanUtil.copyProperties(temp, ManualFundNoticeInfoVO.class);
-//            vo.setType(reverse.getOrDefault(vo.getType(), "4"));
-//            vo.setDate(DateUtil.formatDate(temp.getDate()));
-//            resultList.add(vo);
-//        }
-//        return resultList;
-//    }
-//
-//    public ManualFundInvestInfoVO investInfo(String secId) {
-//        ManualFundInvestInfoVO fundInvestInfoVO = new ManualFundInvestInfoVO();
-//        FundArchivesInfoDO fundArchivesInfo = this.baseInfoService.queryFundArchives(secId);
-//        if (fundArchivesInfo == null) {
-//            return fundInvestInfoVO;
-//        }
-//        fundInvestInfoVO.setInvestmentObjective(fundArchivesInfo.getInvestmentObjective());
-//        fundInvestInfoVO.setStrategyDescription(fundArchivesInfo.getStrategyDescription());
-//        fundInvestInfoVO.setInvestmentScope(fundArchivesInfo.getInvestmentScope());
-//        return fundInvestInfoVO;
-//    }
-//
-//    public FundBaseFeeVO getFundFee(String secId) {
-//        FundFeeDo fundFee = this.baseInfoService.getFundFee(secId);
-//        DateFormatUtils.format(new Date(), DateConst.YYYY, TimeZone.getDefault());
-//        //数字格式处理
-//        FundFeeDo fundFees = numberFormat(fundFee);
-//        FundBaseFeeVO fee = BeanUtil.copyProperties(fundFees, FundBaseFeeVO.class);
-//        String frequency = Optional.ofNullable(fundFees.getAccruedFrequency()).map(e -> StrUtil.subBetween(e, "[", "]"))
-//                .map(e -> StrUtil.split(e, ",")).orElse(ListUtil.empty()).stream().filter(StrUtil::isNotBlank)
-//                .map(ACCRUED_FREQUENCY::get).collect(Collectors.joining(","));
-//        fee.setAccruedFrequency(frequency);
-//        String method = Optional.ofNullable(fundFees.getAccruedMethod()).map(e -> StrUtil.subBetween(e, "[", "]"))
-//                .map(e -> StrUtil.split(e, ",")).orElse(ListUtil.empty()).stream().filter(StrUtil::isNotBlank)
-//                .map(ACCRUED_METHOD::get).collect(Collectors.joining(","));
-//        fee.setAccruedMethod(method);
-//        return fee;
-//    }
-//
-//    private FundFeeDo numberFormat(FundFeeDo fundFees) {
-//        String minInvestmentShare = fundFees.getMinInvestmentShare();
-//        fundFees.setMinInvestmentShare(NumberUtil.isNumber(minInvestmentShare) ? BigDecimalUtils.toBigDecimal(minInvestmentShare)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "万" : minInvestmentShare);
-//
-//        String managementFeeBank = fundFees.getManagementFeeBank();
-//        fundFees.setManagementFeeBank(NumberUtil.isNumber(managementFeeBank) ? BigDecimalUtils.toBigDecimal(managementFeeBank)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : managementFeeBank);
-//
-//        String subscriptionFee = fundFees.getSubscriptionFee();
-//        fundFees.setSubscriptionFee(NumberUtil.isNumber(subscriptionFee) ? BigDecimalUtils.toBigDecimal(subscriptionFee)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : subscriptionFee);
-//
-//        String redemptionFee = fundFees.getRedemptionFee();
-//        fundFees.setRedemptionFee(NumberUtil.isNumber(redemptionFee) ? BigDecimalUtils.toBigDecimal(redemptionFee)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : redemptionFee);
-//
-//        String managementFee = fundFees.getManagementFee();
-//        fundFees.setManagementFee(NumberUtil.isNumber(managementFee) ? BigDecimalUtils.toBigDecimal(managementFee)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : managementFee);
-//
-//        String managementFeeConsult = fundFees.getManagementFeeConsult();
-//        fundFees.setManagementFeeConsult(NumberUtil.isNumber(managementFeeConsult) ? BigDecimalUtils.toBigDecimal(managementFeeConsult)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : managementFeeConsult);
-//
-//        String performanceFee = fundFees.getPerformanceFee();
-//        fundFees.setPerformanceFee(NumberUtil.isNumber(performanceFee) ? BigDecimalUtils.toBigDecimal(performanceFee)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : performanceFee);
-//
-//        String guardLine = fundFees.getGuardLine();
-//        fundFees.setGuardLine(NumberUtil.isNumber(guardLine) ? BigDecimalUtils.toBigDecimal(guardLine)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : guardLine);
-//
-//        String subsequentInvestmentShare = fundFees.getSubsequentInvestmentShare();
-//        fundFees.setSubsequentInvestmentShare(NumberUtil.isNumber(subsequentInvestmentShare) ? BigDecimalUtils.toBigDecimal(subsequentInvestmentShare)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "万" : subsequentInvestmentShare);
-//
-//        String stopLossLine = fundFees.getStopLossLine();
-//        fundFees.setStopLossLine(NumberUtil.isNumber(stopLossLine) ? BigDecimalUtils.toBigDecimal(stopLossLine)
-//                .setScale(2, RoundingMode.HALF_DOWN) + "%" : stopLossLine);
-//        return fundFees;
-//    }
-
-//    public ManualFundFeeInfoVO getMfFundFee(String fundId) {
-//        List<ManualFundFeeDo> dataList = this.baseInfoService.getManualFundFee(fundId);
-//        ManualFundFeeInfoVO result = new ManualFundFeeInfoVO();
-//        // 数据库 费率 类型与中文映射
-//        Map<String, String> typeMapper = MapUtil.builder("10210", "认购金额").put("11210", "申购金额").put("11010", "申购金额")
-//                .put("12200", "持有期限").put("12000", "持有期限").build();
-//        // 费率类型 与 单位映射
-//        Map<String, String> unitMapper = MapUtil.builder("10210", "万元").put("11210", "万元").put("11010", "万元")
-//                .put("12200", "日").put("12000", "日").build();
-//        // 记录映射函数,返回一个包含最大最小的范围
-//        Function<ManualFundFeeDo, ValueLabelVO> function = e -> {
-//            ValueLabelVO vo = new ValueLabelVO();
-//            vo.setValue(e.getChargeRateDes());
-//            String label = typeMapper.get(e.getChargeRateType());
-//            // 最小值不为0和null时,设置为起始数据
-//            if (e.getStDivStand1() != null && !Double.valueOf(0.0d).equals(e.getStDivStand1())) {
-//                label = NumberUtil.roundStr(e.getStDivStand1(), 0) + unitMapper.get(e.getChargeRateType()) + " <= " + label;
-//            }
-//            // 最大值不为null时设置截止范围数据
-//            if (e.getEnDivStand1() != null) {
-//                label += " < " + NumberUtil.roundStr(e.getEnDivStand1(), 0) + unitMapper.get(e.getChargeRateType());
-//            }
-//            vo.setLabel(label);
-//            return vo;
-//        };
-//        // 认购费
-//        List<ValueLabelVO> subscriptionFee = this.handleFee(dataList, "10210", function);
-//        result.setSubscriptionFee(subscriptionFee);
-//        // 申购费,先取场外
-//        List<ValueLabelVO> applyFee = this.handleFee(dataList, "11210", function);
-//        if (applyFee.isEmpty()) {
-//            applyFee = this.handleFee(dataList, "11010", function);
-//        }
-//        result.setApplyFee(applyFee);
-//        // 赎回费,先取场外
-//        List<ValueLabelVO> redemptionFee = this.handleFee(dataList, "12200", function);
-//        if (redemptionFee.isEmpty()) {
-//            redemptionFee = this.handleFee(dataList, "12000", function);
-//        }
-//        result.setRedemptionFee(redemptionFee);
-//        // 管理费、托管费和营销费
-//        result.setManagementFeeTrust(this.handleOneFee(dataList, "15000", ManualFundFeeDo::getChargeRateDes));
-//        result.setManagementFeeBank(this.handleOneFee(dataList, "16000", ManualFundFeeDo::getChargeRateDes));
-//        result.setSaleFee(this.handleOneFee(dataList, "19000", ManualFundFeeDo::getChargeRateDes));
-//        return result;
-//    }
-
-//    /**
-//     * 费率处理工具,返回一个列表
-//     *
-//     * @param dataList 费率数据
-//     * @param type     过滤的关键字
-//     * @param function 转换函数
-//     * @param <T>      类型参数
-//     * @return /
-//     */
-//    private <T> List<T> handleFee(List<ManualFundFeeDo> dataList, String type, Function<ManualFundFeeDo, T> function) {
-//        return dataList.stream().filter(e -> type.equals(e.getChargeRateType())).map(function).collect(Collectors.toList());
-//    }
-
-//    /**
-//     * 费率处理工具,返回一个对象
-//     *
-//     * @param dataList 费率数据
-//     * @param type     过滤的关键字
-//     * @param function 转换函数
-//     * @param <T>      类型参数
-//     * @return /
-//     */
-//    private <T> T handleOneFee(List<ManualFundFeeDo> dataList, String type, Function<ManualFundFeeDo, T> function) {
-//        return this.handleFee(dataList, type, function).stream().findFirst().orElse(null);
-//    }
-
-//    public List<FundManagerInfoVo> getHFManagerInfo(String secId) {
-//        List<FundManagerInfoVo> resultList = ListUtil.list(true);
-//        List<PersonnelInformationDo> managerInfoList = this.baseInfoService.getFundManagerInfo(secId);
-//        if (CollUtil.isEmpty(managerInfoList)) {
-//            return resultList;
-//        }
-//        List<String> managerIdList = managerInfoList.stream().map(PersonnelInformationDo::getPersonnelId).collect(Collectors.toList());
-//        List<PersonnelWorkExperienceDo> workExperienceList = this.baseInfoService.listPersonnelWorkExperience(managerIdList);
-//        //过滤掉任职开始日期和任职结束日期为空的数据
-//        if (CollUtil.isNotEmpty(workExperienceList)) {
-//            workExperienceList = workExperienceList.stream()
-//                    .filter(e -> !(StrUtil.isEmpty(e.getStartDate()) && StrUtil.isEmpty(e.getEndDate()))).collect(Collectors.toList());
-//        }
-//        if (CollUtil.isNotEmpty(workExperienceList)) {
-//            Map<String, List<PersonnelWorkExperienceDo>> personnelIdWorkExperienceMap = workExperienceList.stream()
-//                    .collect(Collectors.groupingBy(PersonnelWorkExperienceDo::getPersonnelId));
-//            for (PersonnelInformationDo fundManagerInfo : managerInfoList) {
-//                FundManagerInfoVo result = new FundManagerInfoVo();
-//                result.setManagerId(fundManagerInfo.getPersonnelId());
-//                result.setManagerName(fundManagerInfo.getPersonnelName());
-//                result.setAvatar(fundManagerInfo.getAvatar());
-//                result.setAvatar2(fundManagerInfo.getAvatar2());
-//                result.setEducation(EDUCATION_NAME_MAP.get(fundManagerInfo.getEducation()));
-//                result.setProfile(fundManagerInfo.getProfile());
-//                List<PersonnelWorkExperienceDo> workExperienceDoList = personnelIdWorkExperienceMap.get(fundManagerInfo.getPersonnelId());
-//                if (CollUtil.isNotEmpty(workExperienceDoList)) {
-//                    String latestPosition = workExperienceDoList.stream().filter(e -> e.getEndDate() == null)
-//                            .sorted(Comparator.comparing(PersonnelWorkExperienceDo::getStartDate).reversed())
-//                            .map(PersonnelWorkExperienceDo::getPosition).findFirst().orElse(null);
-//                    result.setManagerWorkExperienceList(workExperienceDoList);
-//                    result.setLatestPosition(latestPosition);
-//                }
-//                resultList.add(result);
-//            }
-//        }
-//        return resultList;
-//    }
-//
-//    public List<ManualFundManagerChangeVO> managerChangeList(ManualFundManagerParams params) {
-//        String secId = params.getSecId();
-//        String benchmarkId = params.getBenchmarkId();
-//        List<ManualFundManagerChangeDo> dataList = this.baseInfoService.listFundManagerChangeHistory(secId);
-//
-//        dataList = dataList.stream().filter(e -> e.getStartDate() != null).collect(Collectors.toList());
-//        // 按基金经理+开始任职时间分组每个经理只取一条数据
-//        Map<String, ManualFundManagerChangeDo> managerInfoMap = MapUtil.newHashMap();
-//        Map<String, List<ManualFundManagerChangeDo>> collect = dataList.stream().collect(Collectors.groupingBy(e -> e.getManagerId() + e.getStartDate(), Collectors.toList()));
-//        collect.forEach((k, v) -> {
-//            ManualFundManagerChangeDo temp = v.stream().findFirst().orElse(null);
-//            managerInfoMap.put(k, temp);
-//        });
-//
-//        List<ManualFundManagerChangeVO> resultList = ListUtil.list(true);
-//        List<Indicator> indicatorList = ListUtil.of(Indicator.IntervalReturn, Indicator.AnnualReturn, Indicator.MaxDrawdown,
-//                Indicator.SortinoRatio, Indicator.CalmarRatio);
-//        managerInfoMap.forEach((k, data) -> {
-//            ManualFundManagerChangeVO vo = new ManualFundManagerChangeVO();
-//            vo.setManagerId(data.getManagerId());
-//            vo.setManagerName(data.getManagerName());
-//            // 任职日期和天数计算
-//            vo.setEmployDate(data.getStartDate() + "~" + (CharSequenceUtil.isBlank(data.getEndDate()) ? "至今" : data.getEndDate()));
-//            Date date = new Date();
-//            if (CharSequenceUtil.isNotBlank(data.getEndDate())) {
-//                date = DateUtil.parseDate(data.getEndDate());
-//            }
-//            vo.setEmployDayNum(DateUtil.between(DateUtil.parseDate(data.getStartDate()), date, DateUnit.DAY) + "");
-//            // 指标计算
-//            Map<String, Map<String, String>> indicatorValue =
-//                    this.getIndicatorValue(secId, benchmarkId, data.getStartDate(), data.getEndDate(), indicatorList);
-//            if (indicatorValue.get(secId) != null) {
-//                vo.setFundRet(indicatorValue.get(secId).get(Indicator.IntervalReturn.name()));
-//                vo.setAnnualRet(indicatorValue.get(secId).get(Indicator.AnnualReturn.name()));
-//                vo.setMaxDrawdown(indicatorValue.get(secId).get(Indicator.MaxDrawdown.name()));
-//                vo.setCalmar(indicatorValue.get(secId).get(Indicator.CalmarRatio.name()));
-//                vo.setSortino(indicatorValue.get(secId).get(Indicator.SortinoRatio.name()));
-//            }
-//            resultList.add(vo);
-//        });
-//        return resultList;
-//    }
-
-//
-//    /**
-//     * 计算公募基金和其基准区间内的指标
-//     *
-//     * @param secId         公募基金
-//     * @param benchmarkId   基准
-//     * @param startDate     开始日期
-//     * @param endDate       结束日期
-//     * @param indicatorList 计算指标
-//     * @return /
-//     */
-//    private Map<String, Map<String, String>> getIndicatorValue(String secId, String benchmarkId, String startDate, String endDate, List<Indicator> indicatorList) {
-//        DateIntervalDto dateIntervalDto = DateIntervalDto.builder()
-//                .id(DateIntervalType.CustomInterval.name()).startDate(startDate).endDate(endDate)
-//                .dateIntervalType(DateIntervalType.CustomInterval).frequency(Frequency.Default).build();
-//        Map<String, List<DateIntervalDto>> dateIntervalMap = MapUtil.builder(secId, ListUtil.of(dateIntervalDto)).build();
-//        Map<String, String> benchmarkIdMap = MapUtil.builder(secId, benchmarkId).build();
-//        CalcMultipleSecMultipleTimeRangeIndicatorReq req = CalcMultipleSecMultipleTimeRangeIndicatorReq.builder()
-//                .mainSecIdList(ListUtil.of(secId))
-//                .secBenchmarkIdMap(benchmarkIdMap)
-//                .indexIdList(ListUtil.of(benchmarkId))
-//                .raiseType(RaiseType.Both)
-//                .strategy(Strategy.All)
-//                .visibility(Visibility.Both)
-//                .dataFrequency(Frequency.Default)
-//                .navType(NavType.CumulativeNav)
-//                .secDateIntervalDtoListMap(dateIntervalMap)
-//                .indicatorList(indicatorList)
-//                .geoExtraindicatorList(ListUtil.empty())
-//                .ifAnnualize(true)
-//                .riskOfFreeId(Consts.RISK_OF_FREE)
-//                .calcIndexRetIndicatorValue(true)
-//                .ifConvertPerformanceConsistencyWord(true).build();
-//        Map<String, List<IndicatorCalcPropertyDto>> indicatorValueMap = this.baseIndicatorServiceV2.calcMultipleSecMultipleTimeRangeIndicator(req);
-//
-//        // DateIntervalType.CustomInterval 类型下每个标的只会返回一个维度下的指标计算结果,所以只获取第一条记录的指标计算结果
-//        Map<String, Map<String, String>> result = MapUtil.newHashMap();
-//        Map<String, String> valueMap = Optional.ofNullable(indicatorValueMap).map(e -> e.get(secId)).orElse(ListUtil.empty()).stream().findFirst()
-//                .map(IndicatorCalcPropertyDto::getSecData).map(IndicatorCalcSecDataDto::getIndicatorValueMap).orElse(MapUtil.empty());
-//        Map<String, String> valueBenchmarkMap = Optional.ofNullable(indicatorValueMap).map(e -> e.get(secId)).orElse(ListUtil.empty()).stream().findFirst()
-//                .map(IndicatorCalcPropertyDto::getIndexData).map(IndicatorCalcIndexDataDto::getIndexIndicatorValueMap).map(e -> e.get(benchmarkId)).orElse(MapUtil.empty());
-//        result.put(secId, valueMap);
-//        result.put(benchmarkId, valueBenchmarkMap);
-//        return result;
-//    }
-
-//    public List<ManualFundManagerInfoVO> managerList(ManualFundManagerParams params) {
-//        String secId = params.getSecId();
-//        String benchmarkId = params.getBenchmarkId();
-//        List<ManualFundManagerInfoVO> resultList = ListUtil.list(true);
-//        //1.先获取基金下的现任基金经理基本信息
-//        List<PersonnelInformationDo> managerInfoList = this.baseInfoService.getFundPresentManagerInfo(secId);
-//        if (CollUtil.isEmpty(managerInfoList)) {
-//            return resultList;
-//        }
-//        List<String> managerIdList = managerInfoList.stream().map(PersonnelInformationDo::getPersonnelId).collect(Collectors.toList());
-//        //2.获取现任基金经理管理的产品
-//        List<MfManagerFundNumDo> mfManagerFundNumList = this.baseInfoService.listMfManagerFundNumByManagerId(managerIdList);
-//        Map<String, List<MfManagerFundNumDo>> listMap = mfManagerFundNumList.stream().collect(Collectors.groupingBy(MfManagerFundNumDo::getManagerId));
-//        //3.不改变以前的处理逻辑,将PersonnelInformationDo转化为ManualFundManagerInfoDo
-//        List<ManualFundManagerInfoDo> dataList = managerInfoList.stream().map(e -> {
-//            ManualFundManagerInfoDo manualFundManagerInfoDo = new ManualFundManagerInfoDo();
-//            String managerId = e.getPersonnelId();
-//            manualFundManagerInfoDo.setManagerId(managerId);
-//            manualFundManagerInfoDo.setManagerName(e.getPersonnelName());
-//            manualFundManagerInfoDo.setAvatar(e.getAvatar());
-//            manualFundManagerInfoDo.setAvatar2(e.getAvatar2());
-//            List<MfManagerFundNumDo> mfManagerFundNumDos = listMap.get(managerId);
-//            if (CollUtil.isNotEmpty(mfManagerFundNumDos)) {
-//                mfManagerFundNumDos.stream().filter(k -> secId.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();
-//                manualFundManagerInfoDo.setPublicProductNumAll(String.valueOf(publicProductNumAll));
-//                manualFundManagerInfoDo.setPublicProductNumRunning(String.valueOf(publicProductNumRunning));
-//            }
-//            return manualFundManagerInfoDo;
-//        }).collect(Collectors.toList());
-//        dataList = dataList.stream().filter(e -> e.getStartDate() != null).collect(Collectors.toList());
-//        // 按基金经理分组每个经理只取一条数据
-//        Map<String, ManualFundManagerInfoDo> managerInfoMap = MapUtil.newHashMap();
-//        Map<String, List<ManualFundManagerInfoDo>> collect = dataList.stream().collect(Collectors.groupingBy(ManualFundManagerInfoDo::getManagerId, Collectors.toList()));
-//        collect.forEach((k, v) -> {
-//            ManualFundManagerInfoDo temp = v.stream().findFirst().orElse(null);
-//            managerInfoMap.put(k, temp);
-//        });
-//        List<Indicator> indicatorList = ListUtil.of(Indicator.IntervalReturn, Indicator.AnnualReturn, Indicator.SharpeRatio);
-//        managerInfoMap.forEach((k, data) -> {
-//            ManualFundManagerInfoVO vo = new ManualFundManagerInfoVO();
-//            vo.setManagerId(data.getManagerId());
-//            vo.setManagerName(data.getManagerName());
-//            vo.setAvatar(data.getAvatar());
-//            vo.setAvatar2(data.getAvatar2());
-//            vo.setGender(data.getGenderValue());
-//            vo.setFundNum(data.getPublicProductNumAll());
-//            vo.setRunningNum(data.getPublicProductNumRunning());
-//            // 取经理的所有在管基金的最新资产值并求和
-//            List<ManualFundAssetSizeDo> tempList = this.baseInfoService.getAssetSizeList(data.getManagerId());
-//            if (CollUtil.isNotEmpty(tempList)) {
-//                List<String> fundIds = tempList.stream().map(ManualFundAssetSizeDo::getFundId).distinct().collect(Collectors.toList());
-//                Double total = 0d;
-//                for (String fundId : fundIds) {
-//                    Double aDouble = tempList.stream().filter(e -> e.getFundId().equals(fundId)).max(Comparator.comparing(ManualFundAssetSizeDo::getDate))
-//                            .map(ManualFundAssetSizeDo::getFundAssetSize).orElse(0d);
-//                    total += aDouble;
-//                }
-//                vo.setRunningScale(String.valueOf(total));
-//            }
-//            // 指标计算结果处理
-//            Map<String, Map<String, String>> indicatorValue = this.getIndicatorValue(secId, benchmarkId, data.getStartDate(), data.getEndDate(), indicatorList);
-//            if (indicatorValue.get(secId) != null) {
-//                vo.setNavChange(indicatorValue.get(secId).get(Indicator.IntervalReturn.name()));
-//                vo.setAnnualRet(indicatorValue.get(secId).get(Indicator.AnnualReturn.name()));
-//                vo.setSharpe(indicatorValue.get(secId).get(Indicator.SharpeRatio.name()));
-//            }
-//            if (indicatorValue.get(benchmarkId) != null) {
-//                vo.setBenchmarkRet(indicatorValue.get(benchmarkId).get(Indicator.IntervalReturn.name()));
-//            }
-//            resultList.add(vo);
-//        });
-//        return resultList;
-//    }
-
     public PrivatelyFundBaseInfoVO getFundBaseInfo(String fundId) {
         PrivatelyFundBaseInfoVO privatelyFundBaseInfoVO = new PrivatelyFundBaseInfoVO();
         //私募基金基本信息
@@ -646,73 +189,4 @@ public class FundInfoService {
 //        handleFundScale(publiclyFundBaseInfoVO, fundId);
         return publiclyFundBaseInfoVO;
     }
-
-//    private void handleOpenDayAndRedeemType(PubliclyFundBaseInfoVO publiclyFundBaseInfoVO, String fundId) {
-//        List<ManualFundPurchaseRedeemDO> tempList = this.baseInfoService.getMFundPurchaseRedeemList(fundId);
-//        if (CollUtil.isNotEmpty(tempList)) {
-//            String type = null;
-//            String applyingType = tempList.get(0).getApplyingType();
-//            if (CharSequenceUtil.isNotBlank(applyingType)) {
-//                // 限大额 -> 限大额申购
-//                if ("限大额".equals(applyingType)) {
-//                    applyingType = applyingType + "申购";
-//                }
-//                type = applyingType;
-//            }
-//            String redeemType = tempList.get(0).getRedeemType();
-//            if (CharSequenceUtil.isNotBlank(redeemType)) {
-//                type = type + "," + redeemType;
-//            }
-//            publiclyFundBaseInfoVO.setApplyRedemType(type);
-//            publiclyFundBaseInfoVO.setOpenDays(this.findAndBuildOpenDay(tempList));
-//        }
-//    }
-
-//    private List<FundOpenDayVO> findAndBuildOpenDay(List<ManualFundPurchaseRedeemDO> dataList) {
-//        dataList.sort(Comparator.comparing(ManualFundPurchaseRedeemDO::getEndDate).reversed());
-//        FundOpenDayVO apply = this.buildOpenDay(dataList, "可申购");
-//        FundOpenDayVO redeem = this.buildOpenDay(dataList, "可赎回");
-//        return ListUtil.of(apply, redeem);
-//    }
-
-//    private FundOpenDayVO buildOpenDay(List<ManualFundPurchaseRedeemDO> dataList, String type) {
-//        Map<String, String> typeMapper = MapUtil.builder("可申购", "applyingType").put("可赎回", "redeemType").build();
-//        ManualFundPurchaseRedeemDO purchaseRedeemDO = dataList.get(dataList.size() - 1);
-//        String startDate = null;
-//        for (ManualFundPurchaseRedeemDO data : dataList) {
-//            // 小于结束日期的第一个不满足type约束的日期为开始日期
-//            Object typeValue = ReflectUtil.getFieldValue(data, typeMapper.get(type));
-//            if (typeValue != null && !Objects.equals(type, typeValue)) {
-//                break;
-//            }
-//            startDate = data.getEndDate();
-//        }
-//        // 开始日为最后一天且value不为可申赎时置为null
-//        Object fieldValue = ReflectUtil.getFieldValue(purchaseRedeemDO, typeMapper.get(type));
-//        if (purchaseRedeemDO.getEndDate().equals(startDate) && !Objects.equals(type, fieldValue)) {
-//            startDate = null;
-//        }
-//        return FundOpenDayVO.builder().type(type).startDate(startDate).build();
-//    }
-
-//    private void handleFundScale(PubliclyFundBaseInfoVO publiclyFundBaseInfoVO, String fundId) {
-//        List<FundInitLatestAssetSizeDO> initLatest = this.baseInfoService.getFundInitLatestAssetSize(fundId);
-//        if (CollUtil.isNotEmpty(initLatest)) {
-//            NewDateValue initScale = initLatest.stream().filter(e -> "0".equals(e.getType())).map(e -> new NewDateValue(e.getDate(), e.getAssetSize())).findFirst().orElse(null);
-//            NewDateValue latestScale = initLatest.stream().filter(e -> "1".equals(e.getType())).map(e -> new NewDateValue(e.getDate(), e.getAssetSize())).findFirst().orElse(null);
-//            publiclyFundBaseInfoVO.setInitScale(initScale);
-//            publiclyFundBaseInfoVO.setLatestScale(latestScale);
-//        }
-//    }
-
-//    private void handleFundArchivesInfo(PubliclyFundBaseInfoVO publiclyFundBaseInfoVO, String fundId) {
-//        FundArchivesInfoDO fundArchivesInfoDO = this.baseInfoService.queryFundArchives(fundId);
-//        publiclyFundBaseInfoVO.setApplyingMarket(fundArchivesInfoDO.getApplyingMarket() != null
-//                ? APPLYING_MARKET_MAP.get(Integer.valueOf(fundArchivesInfoDO.getApplyingMarket())) : APPLYING_MARKET_MAP.get(2));
-//        publiclyFundBaseInfoVO.setLowestApplyAmount(fundArchivesInfoDO.getLowestApplyAmount());
-//        publiclyFundBaseInfoVO.setLowestSumRedemption(fundArchivesInfoDO.getLowestSumRedemption());
-//        NewDateValue initShare = new NewDateValue(fundArchivesInfoDO.getInitialDate(), fundArchivesInfoDO.getInitialShare());
-//        publiclyFundBaseInfoVO.setInitShare(initShare);
-//    }
-
 }

+ 0 - 6
src/main/java/com/smppw/analysis/application/service/performance/FundPerformanceService.java

@@ -71,10 +71,4 @@ public class FundPerformanceService {
         Performance<RollingParams, Map<String, Object>> instance = this.factory.getInstance(ROLLING);
         return instance.execute(params);
     }
-
-//    public Map<String, Object> rank(RankReq req) {
-//        RankParams params = req.convert();
-//        Performance<RankParams, Map<String, Object>> instance = this.factory.getInstance(RANK);
-//        return instance.execute(params);
-//    }
 }

+ 0 - 84
src/main/java/com/smppw/analysis/application/service/position/FundFuturesOptionService.java

@@ -1,84 +0,0 @@
-//package com.smppw.analysis.application.service.position;
-//
-//import cn.hutool.core.map.MapUtil;
-//import com.smppw.analysis.domain.manager.position.future.FundFuturesOptionBaseService;
-//import com.smppw.common.pojo.ResultVo;
-//import com.smppw.common.pojo.enums.status.ResultCode;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * FileName: FundFuturesOptionService
-// * Author:   chenjianhua
-// * Date:     2023/6/8 14:11
-// * Description: ${DESCRIPTION}
-// */
-//@Component
-//public class FundFuturesOptionService {
-//
-//    @Autowired
-//    private FundFuturesOptionBaseService fundFuturesOptionBaseService;
-//
-//    public ResultVo<Map<String, Object>> fundFuturesOption(Map<String, Object> params) {
-//        Integer userId = MapUtil.getInt(params, "userId");
-//        String fundId = MapUtil.getStr(params, "fundId");
-//        Integer optionType = MapUtil.getInt(params, "optionType");
-//        Integer shType = MapUtil.getInt(params, "shType");
-//        String startDate = MapUtil.getStr(params, "startDate");
-//        String endDate = MapUtil.getStr(params, "endDate");
-//        Map<String, Object> result = fundFuturesOptionBaseService.fundFuturesOption(userId, fundId, optionType, shType, startDate, endDate);
-//        return new ResultVo<>(ResultCode.SUCCESS, result);
-//    }
-//
-//    public ResultVo<Map<String, Object>> fundPositionAnalysis(Map<String, Object> params) {
-//        Integer userId = MapUtil.getInt(params, "userId");
-//        String fundId = MapUtil.getStr(params, "fundId");
-//        Integer optionType = MapUtil.getInt(params, "optionType");
-//        Integer shType = MapUtil.getInt(params, "shType");
-//        String startDate = MapUtil.getStr(params, "startDate");
-//        String endDate = MapUtil.getStr(params, "endDate");
-//        Map<String, Object> result = fundFuturesOptionBaseService.fundPositionAnalysis(userId, fundId, optionType, shType, startDate, endDate);
-//        return new ResultVo<>(ResultCode.SUCCESS, result);
-//    }
-//
-//    public ResultVo<Map<String, Object>> fundDerivativeLeverageMargin(Map<String, Object> params) {
-//        Integer userId = MapUtil.getInt(params, "userId");
-//        String fundId = MapUtil.getStr(params, "fundId");
-//        Integer optionType = MapUtil.getInt(params, "optionType");
-//        Integer shType = MapUtil.getInt(params, "shType");
-//        String startDate = MapUtil.getStr(params, "startDate");
-//        String endDate = MapUtil.getStr(params, "endDate");
-//        Map<String, Object> result = fundFuturesOptionBaseService.fundDerivativeLeverageMargin(userId, fundId, shType, startDate, endDate);
-//        return new ResultVo<>(ResultCode.SUCCESS, result);
-//    }
-//
-//    public ResultVo<Map<String, Object>> fundPositionAnalysisLine(Map<String, Object> params) {
-//        Integer userId = MapUtil.getInt(params, "userId");
-//        String fundId = MapUtil.getStr(params, "fundId");
-//        Integer optionType = MapUtil.getInt(params, "optionType");
-//        Integer shType = MapUtil.getInt(params, "shType");
-//        String startDate = MapUtil.getStr(params, "startDate");
-//        String endDate = MapUtil.getStr(params, "endDate");
-//        Map<String, Object> result = fundFuturesOptionBaseService.fundPositionAnalysisLine(userId, fundId, optionType, shType, startDate, endDate);
-//        return new ResultVo<>(ResultCode.SUCCESS, result);
-//    }
-//
-//    public ResultVo<Map<String, Object>> fundFuturesOptionForBreed(Map<String, Object> params) {
-//        Integer userId = MapUtil.getInt(params, "userId");
-//        String fundId = MapUtil.getStr(params, "fundId");
-//        Integer optionType = MapUtil.getInt(params, "optionType");
-//        Integer shType = MapUtil.getInt(params, "shType");
-//        String startDate = MapUtil.getStr(params, "startDate");
-//        String endDate = MapUtil.getStr(params, "endDate");
-//        Map<String, Object> result = fundFuturesOptionBaseService.fundFuturesOptionForBreed(userId, fundId, optionType, shType, startDate, endDate);
-//        return new ResultVo<>(ResultCode.SUCCESS, result);
-//    }
-//
-//    public ResultVo<Map<String, List<String>>> fundFuturesOptionView() {
-//        Map<String, List<String>> result = fundFuturesOptionBaseService.fundFuturesOptionView();
-//        return new ResultVo<>(ResultCode.SUCCESS, result);
-//    }
-//}

+ 0 - 78
src/main/java/com/smppw/analysis/application/service/position/FuturePositionAnalysis.java

@@ -1,78 +0,0 @@
-//package com.smppw.analysis.application.service.position;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.map.MapUtil;
-//import com.smppw.analysis.application.dto.position.MarginalRiskContributionReq;
-//import com.smppw.analysis.domain.dto.position.RefMarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContribution;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContributionParams;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContributionVO;
-//import com.smppw.analysis.domain.manager.position.BizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerConstants;
-//import com.smppw.analysis.domain.manager.position.BizHandlerFactory;
-//import com.smppw.common.pojo.FundFuturesOption;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:41
-// * @description 基金持仓分析-期货tab
-// */
-//@Component
-//public class FuturePositionAnalysis {
-//    private final BizHandlerFactory factor;
-//
-//    public FuturePositionAnalysis(BizHandlerFactory factor) {
-//        this.factor = factor;
-//    }
-//
-//    public Map<String, Object> riskCont(MarginalRiskContributionReq req) {
-//        MarginalRiskContributionParams params = req.convert();
-//        BizHandler<MarginalRiskContributionParams, List<MarginalRiskContributionVO>> bizHandler = this.factor.getBizHandlerInstance(BizHandlerConstants.MARGINAL_RISK_CONTRIBUTION);
-//        List<MarginalRiskContributionVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return MapUtil.empty();
-//        }
-//        Map<String, String> mapping = MapUtil.newHashMap(true);
-//        mapping.put(FundFuturesOption.Bond.getNameEnDesc(), FundFuturesOption.Bond.getNameDesc());
-//        mapping.put(FundFuturesOption.Product.getNameEnDesc(), FundFuturesOption.Product.getNameDesc());
-//        mapping.put(FundFuturesOption.StockIndex.getNameEnDesc(), FundFuturesOption.StockIndex.getNameDesc());
-//        Map<String, Object> dataset = MapUtil.newHashMap();
-//        mapping.forEach((k, v) -> {
-//            List<Map<String, Object>> tempList = ListUtil.list(true);
-//            for (MarginalRiskContributionVO vo : dataList) {
-//                List<MarginalRiskContribution> collect = vo.getRiskContList().stream().filter(e -> k.equals(e.getAsset().getValue())).collect(Collectors.toList());
-//                Map<String, Object> data = MapUtil.newHashMap();
-//                data.put("date", vo.getDate());
-//                data.put("ratio", collect.stream().map(RefMarketValueRatio::getRatio).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
-//                data.put("riskCont", collect.stream().map(MarginalRiskContribution::getRiskCont).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
-//                tempList.add(data);
-//            }
-//            dataset.put(k, tempList);
-//        });
-//        Map<String, List<Map<String, Object>>> tableObj = MapUtil.newHashMap(true);
-//        for (MarginalRiskContributionVO vo : dataList) {
-//            List<Map<String, Object>> tempList = vo.getRiskContList().stream().map(e -> {
-//                Map<String, Object> data = MapUtil.newHashMap(true);
-//                String label = e.getRef().getLabel();
-//                if (label.contains("票面利率") && label.contains("名义") && label.contains("国债")) {
-//                    label = label.split("名义")[1];
-//                }
-//                data.put("name", label);
-//                data.put("ratio", e.getRatio());
-//                data.put("riskCont", e.getRiskCont());
-//                return data;
-//            }).collect(Collectors.toList());
-//            tempList = tempList.stream().limit(10).collect(Collectors.toList());
-//            tableObj.put(vo.getDate(), tempList);
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset)
-//                .put("productNameMapping", mapping).put("tableObj", tableObj).build();
-//    }
-//}

+ 0 - 283
src/main/java/com/smppw/analysis/application/service/position/StockPositionAnalysis.java

@@ -1,283 +0,0 @@
-//package com.smppw.analysis.application.service.position;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.map.MapUtil;
-//import com.smppw.analysis.application.dto.position.*;
-//import com.smppw.analysis.domain.dao.PubliclyFundPositionDao;
-//import com.smppw.analysis.domain.dataobject.PubliclyFundStockChangeDO;
-//import com.smppw.analysis.domain.dataobject.SwSecIndustryInfoDO;
-//import com.smppw.analysis.domain.dto.position.*;
-//import com.smppw.analysis.domain.dto.position.stock.*;
-//import com.smppw.analysis.domain.manager.position.BizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerFactory;
-//import com.smppw.analysis.domain.manager.position.stock.IndustryAllocationPreferenceComponent;
-//import com.smppw.analysis.domain.mapper.core.BaseUnderlyingMapper;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import com.smppw.common.pojo.dto.NewDateValue;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.*;
-//import java.util.function.Function;
-//import java.util.stream.Collectors;
-//
-//import static com.smppw.analysis.domain.manager.position.BizHandlerConstants.*;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:41
-// * @description 基金持仓分析-股票tab
-// */
-//@Component
-//public class StockPositionAnalysis {
-//    private static final Map<Long, String> POSITION_NAME = MapUtil.newHashMap(true);
-//
-//    static {
-//        POSITION_NAME.put(1L, "最大持仓");
-//        POSITION_NAME.put(3L, "前三大持仓");
-//        POSITION_NAME.put(5L, "前五大持仓");
-//        POSITION_NAME.put(10L, "前十大持仓");
-//        POSITION_NAME.put(-1L, "股票持仓");
-//    }
-//
-//    private final BizHandlerFactory factor;
-//    private final BaseUnderlyingMapper baseUnderlyingMapper;
-////    private final BarraSensitivityComponent barraSensitivity;
-//    private final PubliclyFundPositionDao fundPositionBaseService;
-//    private final IndustryAllocationPreferenceComponent industryAllocationPreference;
-//
-//    public StockPositionAnalysis(BizHandlerFactory factor,
-//                                 BaseUnderlyingMapper baseUnderlyingMapper,
-////                                 BarraSensitivityComponent barraSensitivity,
-//                                 PubliclyFundPositionDao fundPositionBaseService,
-//                                 IndustryAllocationPreferenceComponent industryAllocationPreference) {
-//        this.factor = factor;
-////        this.barraSensitivity = barraSensitivity;
-//        this.baseUnderlyingMapper = baseUnderlyingMapper;
-//        this.fundPositionBaseService = fundPositionBaseService;
-//        this.industryAllocationPreference = industryAllocationPreference;
-//    }
-//
-//    public List<MajorChangeVO> getMajorChangeList(MajorChangeReq req) {
-//        MajorChangeParams params = req.convert();
-//        List<SwSecIndustryInfoDO> industryList = this.baseUnderlyingMapper.querySecIndustryInfo();
-//        List<MajorChangeVO> resultList = ListUtil.list(false);
-//        List<PubliclyFundStockChangeDO> dataList = this.fundPositionBaseService.mfStockChangeList(params.getFundId(),
-//                params.getStartDate(), params.getEndDate());
-//        for (PubliclyFundStockChangeDO data : dataList) {
-//            String industryName = industryList.stream().filter(e -> data.getSecCode().equals(e.getSecCode())).findFirst()
-//                    .map(SwSecIndustryInfoDO::getIndustryName).orElse(null);
-//            MajorChangeVO vo = new MajorChangeVO();
-//            vo.setDate(DateUtil.formatDate(data.getReportDate()));
-//            vo.setStockCode(data.getSecCode());
-//            vo.setStockName(data.getSecName());
-//            vo.setChangeType(Optional.ofNullable(data.getChangeType()).map(Object::toString).orElse(null));
-//            vo.setAccumulatedTradeSum(Optional.ofNullable(data.getAccumulatedTradeSum()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setRatioInNvAtBegin(Optional.ofNullable(data.getRatioInNvAtBegin()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setIndustry(industryName);
-//            resultList.add(vo);
-//        }
-//        // 按报告期降序
-//        resultList.sort((o1, o2) -> o2.getDate().compareTo(o1.getDate()));
-//        return resultList;
-//    }
-//
-//    public Map<String, Object> getConcentration(ConcentrationReq req) {
-//        ConcentrationParams params = req.convert();
-//        Map<String, Object> dataset = MapUtil.newHashMap();
-//        BizHandler<ConcentrationParams, List<ConcentrationVO>> bizHandler = this.factor.getBizHandlerInstance(STOCK_CONCENTRATION);
-//        List<ConcentrationVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return MapUtil.empty();
-//        }
-//        for (Long integer : POSITION_NAME.keySet()) {
-//            List<MarketValueRatio> tempList = ListUtil.list(true);
-//            for (ConcentrationVO vo : dataList) {
-//                MarketValueRatio mvr = new MarketValueRatio();
-//                mvr.setDate(vo.getDate());
-//                List<RefMarketValueRatio> resList = vo.getPosition();
-//                if (integer != -1L) {
-//                    // 不为-1时取前n条记录求和
-//                    resList = vo.getPosition().stream().limit(integer).collect(Collectors.toList());
-//                }
-//                BigDecimal marketValue = resList.stream().map(RefMarketValueRatio::getMarketValue)
-//                        .filter(Objects::nonNull).reduce(BigDecimal::add).orElse(null);
-//                BigDecimal ratio = resList.stream().map(RefMarketValueRatio::getRatio).filter(Objects::nonNull)
-//                        .reduce(BigDecimal::add).orElse(null);
-//                mvr.setMarketValue(marketValue);
-//                mvr.setRatio(ratio);
-//                tempList.add(mvr);
-//            }
-//            dataset.put(integer.toString(), tempList);
-//        }
-//        for (ConcentrationVO vo : dataList) {
-//            List<RefMarketValueRatio> collect = vo.getPosition().stream().sorted((o1, o2) -> o2.getRatio().compareTo(o1.getRatio()))
-//                    .limit(10).collect(Collectors.toList());
-//            vo.setPosition(collect);
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset)
-//                .put("productNameMapping", POSITION_NAME).put("table", dataList).build();
-//    }
-//
-//    public List<ChangeNumberVO> getChangeNumber(ChangeNumberReq req) {
-//        ChangeNumberParams params = req.convert();
-//        BizHandler<ChangeNumberParams, List<ChangeNumberVO>> bizHandler = this.factor.getBizHandlerInstance(CHANGE_NUMBER);
-//        List<ChangeNumberVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return ListUtil.empty();
-//        }
-//        return dataList;
-//    }
-//
-//    public Map<String, Object> getIndustryAllocation(StockAllocationReq req) {
-//        StockAllocationParams params = req.convert();
-//        BizHandler<StockAllocationParams, List<StockAllocationVO>> bizHandler = this.factor.getBizHandlerInstance(INDUSTRY_ALLOCATION);
-//        List<StockAllocationVO> dataList = bizHandler.bizHandle(params);
-//        return this.convertDataset(dataList);
-//    }
-//
-//    public Map<String, Object> getIndustryAllocationPreference(StockAllocationReq req) {
-//        StockAllocationParams params = req.convert();
-//        List<IndustryAllocationPreferenceVO> dataList = this.industryAllocationPreference.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return MapUtil.empty();
-//        }
-//        List<ValueLabelVO> industryList = dataList.get(0).getIndustryList();
-//        // 倒序,其他排最后面
-//        industryList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
-//        List<Map<String, Object>> dataset = ListUtil.list(true);
-//        for (IndustryAllocationPreferenceVO temp : dataList) {
-//            Map<String, Object> data = MapUtil.newHashMap(true);
-//            data.put("date", temp.getDate());
-//            data.putAll(temp.getIndustryPreference());
-//            data.put("avg", temp.getAvg());
-//            dataset.add(data);
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", industryList).build();
-//    }
-//
-//    public Map<String, Object> getStyleAllocation(StockAllocationReq req) {
-//        StockAllocationParams params = req.convert();
-//        BizHandler<StockAllocationParams, List<StockAllocationVO>> bizHandler = this.factor.getBizHandlerInstance(STYLE_ALLOCATION);
-//        List<StockAllocationVO> dataList = bizHandler.bizHandle(params);
-//        return this.convertDataset(dataList);
-//    }
-//
-//    public Map<String, Object> getLiquidityAllocation(StockAllocationReq req) {
-//        StockAllocationParams params = req.convert();
-//        BizHandler<StockAllocationParams, List<StockAllocationVO>> bizHandler = this.factor.getBizHandlerInstance(LIQUIDITY_ALLOCATION);
-//        List<StockAllocationVO> dataList = bizHandler.bizHandle(params);
-//        List<ValueLabelVO> categoryList = Arrays.stream(PositionLiquidityEnum.values())
-//                .map(e -> new ValueLabelVO(e.name(), e.getDesc())).collect(Collectors.toList());
-//        return this.convertDataset(dataList, categoryList);
-//    }
-//
-////    public Map<String, Object> getBarraSensitivity(BarraSensitivityReq req) {
-////        BarraSensitivityParams params = req.convert();
-////        return this.barraSensitivity.bizHandle(params);
-////    }
-//
-//    public Map<String, Object> getPerformanceAttribution(StockPerformanceAttributionReq req) {
-//        StockPerformanceAttributionParams params = req.convert();
-//        boolean ifAnnualized = params.getIfAnnualized() != null && params.getIfAnnualized();
-//        List<ValueLabelVO> effects = ListUtil.list(true);
-//        effects.add(new ValueLabelVO("allocation", "配置效应"));
-//        effects.add(new ValueLabelVO("stock", "选股效应"));
-//        effects.add(new ValueLabelVO("timing", "择时效应"));
-//        effects.add(new ValueLabelVO("total", "超额收益"));
-//        BizHandler<StockPerformanceAttributionParams, List<StockPerformanceAttributionVO>> bizHandler =
-//                this.factor.getBizHandlerInstance(STOCK_PERFORMANCE_ATTRIBUTION);
-//        List<StockPerformanceAttributionVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return MapUtil.empty();
-//        }
-//        Map<String, Object> dataset = MapUtil.newHashMap();
-//        for (ValueLabelVO effect : effects) {
-//            List<NewDateValue> tempList = ListUtil.list(false);
-//            Function<StockPerformanceAttributionVO.Effect, Double> function = e -> {
-//                if ("allocation".equals(effect.getValue())) {
-//                    return e.getAllocation();
-//                } else if ("stock".equals(effect.getValue())) {
-//                    return e.getStock();
-//                } else if ("timing".equals(effect.getValue())) {
-//                    return e.getTiming();
-//                } else if ("total".equals(effect.getValue())) {
-//                    return e.getExactRet();
-//                }
-//                return null;
-//            };
-//            String prevDate = dataList.get(0).getDate();
-//            for (StockPerformanceAttributionVO vo : dataList) {
-//                String date = vo.getDate();
-//                double eff = vo.getEffect().stream().map(function).filter(Objects::nonNull).reduce(Double::sum).orElse(0d);
-//                // 需要年化时才年化
-//                if (ifAnnualized) {
-//                    int dayCount = com.smppw.utils.DateUtil.getDateDistance(prevDate, date);
-//                    eff = Math.pow(1 + eff, 365.0d / dayCount) - 1;
-//                }
-//                tempList.add(new NewDateValue(date, String.valueOf(eff)));
-//                prevDate = date;
-//            }
-//            dataset.put(effect.getValue(), tempList);
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset)
-//                .put("productNameMapping", effects).put("table", dataList).build();
-//    }
-//
-//    /**
-//     * 配置数据转换为前端需要的dataset和table数据结构
-//     *
-//     * @param dataList 配置结构
-//     * @return /
-//     */
-//    private Map<String, Object> convertDataset(List<StockAllocationVO> dataList) {
-//        if (CollUtil.isEmpty(dataList)) {
-//            return MapUtil.empty();
-//        }
-//        List<ValueLabelVO> categoryList = ListUtil.list(false);
-//        for (StockAllocationVO vo : dataList) {
-//            List<ValueLabelVO> collect = vo.getIndustries().stream().map(CategoryConstraint::getCategory)
-//                    .distinct().collect(Collectors.toList());
-//            CollUtil.addAllIfNotContains(categoryList, collect);
-//        }
-//
-//        //修正为统计原有分组列表数量,先过滤其它字段后进行对比,当出现值不一致时追加其它字段,保证其它永远在最后
-//        int count = categoryList.size();
-//        categoryList = categoryList.stream().filter(e -> !PositionConstants.ASSET_OTHER.equalsIgnoreCase(e.getValue())).collect(Collectors.toList());
-//        if (count > categoryList.size()) {
-//            categoryList.add(PositionConstants.OTHER_ASSET);
-//        }
-//
-//        return this.convertDataset(dataList, categoryList);
-//    }
-//
-//    /**
-//     * 配置数据转换为前端需要的dataset和table数据结构
-//     *
-//     * @param dataList     配置结构
-//     * @param categoryList 分类映射关系
-//     * @return /
-//     */
-//    private Map<String, Object> convertDataset(List<StockAllocationVO> dataList, List<ValueLabelVO> categoryList) {
-//        Map<String, Object> dataset = MapUtil.newHashMap(false);
-//        for (ValueLabelVO category : categoryList) {
-//            List<Map<String, Object>> tempList = ListUtil.list(true);
-//            for (StockAllocationVO vo : dataList) {
-//                Map<String, Object> temp = MapUtil.newHashMap();
-//                temp.put("date", vo.getDate());
-//                CategoryConstraint s = vo.getIndustries().stream().filter(e -> category.equals(e.getCategory()))
-//                        .findFirst().orElse(null);
-//                temp.put("bull", Optional.ofNullable(s).map(CategoryConstraint::getBull).orElse(BigDecimal.ZERO));
-//                temp.put("bear", Optional.ofNullable(s).map(CategoryConstraint::getBear).orElse(BigDecimal.ZERO));
-//                temp.put("pupil", Optional.ofNullable(s).map(CategoryConstraint::getPupil).orElse(BigDecimal.ZERO));
-//                temp.put("benchmark", Optional.ofNullable(s).map(CategoryConstraint::getBenchmark).orElse(BigDecimal.ZERO));
-//                tempList.add(temp);
-//            }
-//            dataset.put(category.getValue(), tempList);
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", categoryList)
-//                .put("table", dataList).build();
-//    }
-//}

+ 0 - 133
src/main/java/com/smppw/analysis/application/service/position/SynthesizePositionAnalysis.java

@@ -1,133 +0,0 @@
-//package com.smppw.analysis.application.service.position;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.map.MapUtil;
-//import cn.hutool.core.util.NumberUtil;
-//import com.smppw.analysis.application.dto.position.*;
-//import com.smppw.analysis.domain.dao.PubliclyFundPositionDao;
-//import com.smppw.analysis.domain.dataobject.PubliclyFundHolderInfoDO;
-//import com.smppw.analysis.domain.dto.position.AssetCategoryEnum;
-//import com.smppw.analysis.domain.dto.position.MarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.PositionConstants;
-//import com.smppw.analysis.domain.dto.position.RefMarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.synthesize.*;
-//import com.smppw.analysis.domain.manager.position.BizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerFactory;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Objects;
-//import java.util.Optional;
-//import java.util.stream.Collectors;
-//
-//import static com.smppw.analysis.domain.manager.position.BizHandlerConstants.*;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 14:40
-// * @description 基金持仓分析-综合tab
-// */
-//@Component
-//public class SynthesizePositionAnalysis {
-//    private static final Map<String, String> ASSET_TYPE_MAPPER = MapUtil.newHashMap(true);
-//
-//    static {
-//        for (AssetCategoryEnum value : AssetCategoryEnum.values()) {
-//            ASSET_TYPE_MAPPER.put(value.name(), value.getName());
-//        }
-//        ASSET_TYPE_MAPPER.put(PositionConstants.ASSET_SALE, PositionConstants.ASSET_SALE_DESC);
-//        ASSET_TYPE_MAPPER.put(PositionConstants.ASSET_RETURN_SALE, PositionConstants.ASSET_RETURN_SALE_DESC);
-//        ASSET_TYPE_MAPPER.put(PositionConstants.ASSET_MONEY, PositionConstants.ASSET_MONEY_DESC);
-//        ASSET_TYPE_MAPPER.put(PositionConstants.ASSET_OTHER, PositionConstants.ASSET_OTHER_DESC);
-//    }
-//
-//    private final BizHandlerFactory factor;
-//    private final PubliclyFundPositionDao fundPositionBaseService;
-//
-//    public SynthesizePositionAnalysis(BizHandlerFactory factor, PubliclyFundPositionDao fundPositionBaseService) {
-//        this.factor = factor;
-//        this.fundPositionBaseService = fundPositionBaseService;
-//    }
-//
-//    public Map<String, Object> getAssetAllocation(AssetAllocationReq req) {
-//        AssetAllocationParams params = req.convert();
-//        BizHandler<AssetAllocationParams, List<AssetAllocationVO>> bizHandler = this.factor.getBizHandlerInstance(ASSET_ALLOCATION);
-//        List<AssetAllocationVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return MapUtil.empty();
-//        }
-//        List<ValueLabelVO> mapping = ListUtil.list(true);
-//        Map<String, Object> dataset = MapUtil.newHashMap();
-//        ASSET_TYPE_MAPPER.forEach((k, v) -> {
-//            List<MarketValueRatio> collect = dataList.stream().map(e -> {
-//                RefMarketValueRatio mvr = e.getAsset().stream()
-//                        .filter(o -> k.equals(o.getRef().getValue())).findFirst().orElse(null);
-//                MarketValueRatio data = new MarketValueRatio();
-//                data.setDate(e.getDate());
-//                data.setMarketValue(Optional.ofNullable(mvr).map(RefMarketValueRatio::getMarketValue).orElse(BigDecimal.ZERO));
-//                data.setRatio(Optional.ofNullable(mvr).map(RefMarketValueRatio::getRatio).orElse(BigDecimal.ZERO));
-//                return data;
-//            }).collect(Collectors.toList());
-//            dataset.put(k, collect);
-//            mapping.add(new ValueLabelVO(k, v));
-//        });
-//        return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", mapping).put("table", dataList).build();
-//    }
-//
-//    public List<LeverageChangeVO> getLeverageChange(LeverageChangeReq req) {
-//        LeverageChangeParams params = req.convert();
-//        BizHandler<LeverageChangeParams, List<LeverageChangeVO>> bizHandler = this.factor.getBizHandlerInstance(LEVERAGE_CHANGE);
-//        List<LeverageChangeVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return ListUtil.empty();
-//        }
-//        return dataList;
-//    }
-//
-//    public PositionInfoVO getPositionParams(PositionInfoReq req) {
-//        PositionInfoParams params = req.convert();
-//        BizHandler<PositionInfoParams, PositionInfoVO> bizHandler = this.factor.getBizHandlerInstance(POSITION_PARAMS);
-//        return bizHandler.bizHandle(params);
-//    }
-//
-//    public List<PositionListVO> getPosition(PositionListReq req) {
-//        PositionListParams params = req.convert();
-//        BizHandler<PositionListParams, List<PositionListVO>> bizHandler = this.factor.getBizHandlerInstance(POSITION_LIST);
-//        List<PositionListVO> dataList = bizHandler.bizHandle(params);
-//        if (CollUtil.isEmpty(dataList)) {
-//            return ListUtil.empty();
-//        }
-//        return dataList;
-//    }
-//
-//    public List<HolderInfoVO> getHolderInfo(HolderInfoReq req) {
-//        HolderInfoParams params = req.convert();
-//        List<HolderInfoVO> resultList = ListUtil.list(true);
-//        List<PubliclyFundHolderInfoDO> dataList = this.fundPositionBaseService.mfHolderInfoList(params.getFundId(), params.getStartDate(), params.getEndDate());
-//        for (PubliclyFundHolderInfoDO data : dataList) {
-//            HolderInfoVO vo = new HolderInfoVO();
-//            vo.setDate(DateUtil.formatDate(data.getEndDate()));
-//            vo.setAverageHoldShares(Optional.ofNullable(data.getAverageHoldShares()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setEtfFeederHoldRatio(Optional.ofNullable(data.getEtfFeederHoldRatio()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setHolderAccountNumber(Optional.ofNullable(data.getHolderAccountNumber()).map(Object::toString).orElse(null));
-//            vo.setIndividualHoldRatio(Optional.ofNullable(data.getIndividualHoldRatio()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setInstitutionHoldRatio(Optional.ofNullable(data.getInstitutionHoldRatio()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setProfessionalHoldRatio(Optional.ofNullable(data.getProfessionalHoldRatio()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setTop10HolderAmount(Optional.ofNullable(data.getTop10HolderAmount()).map(BigDecimal::toPlainString).orElse(null));
-//            vo.setTop10HoldersProportion(Optional.ofNullable(data.getTop10HoldersProportion()).map(BigDecimal::toPlainString).orElse(null));
-//            // 计算总份额=机构持有份额+个人持有份额+未明确投资者持有份额
-//            BigDecimal total = NumberUtil.add(ListUtil.of(data.getInstitutionHoldShares(), data.getIndividualHoldShares(), data.getUndefinedHoldShares())
-//                    .stream().filter(Objects::nonNull).toArray(BigDecimal[]::new));
-//            vo.setTotal(total.toPlainString());
-//            resultList.add(vo);
-//        }
-//        // 日期倒序
-//        resultList.sort((o1, o2) -> o2.getDate().compareTo(o1.getDate()));
-//        return resultList;
-//    }
-//}

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

@@ -1,101 +0,0 @@
-//package com.smppw.analysis.application.service.style;
-//
-//
-//import com.smppw.analysis.domain.dto.style.*;
-//
-//import java.util.Map;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/3/10 18:29
-// * @description 风格测评 业务接口 (全部现金项先保留,MVP版本发布后去掉)
-// */
-//public interface StyleService {
-//    /**
-//     * 股票五因子-业绩归因
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> stockAttribution(StockAttributionParams params);
-//
-//    /**
-//     * 债券业绩归因
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> bondAttribution(BondAttributionParams params);
-//
-//    /**
-//     * 相对价值业绩归因
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> relativeAttribution(RelativeAttributionParams params);
-//
-//    /**
-//     * 成长价值风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    FundStyleVO growthValue(GrowthValueParams params);
-//
-//    /**
-//     * 行业配置风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    FundStyleVO industryValue(IndustryValueParams params);
-//
-//    /**
-//     * 期货风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> futureFactor(FutureFactorParams params);
-//
-//    /**
-//     * 自定义风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    CustomRbsaVO customRbsa(CustomRbsaParams params);
-//
-//    /**
-//     * barra概览
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> barraOverview(BarraStyleParams params);
-//
-//    /**
-//     * barra风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> barraRiskProfit(BarraStyleParams params);
-//
-//    /**
-//     * 选股择时能力
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> selectionTiming(SelectionTimingParams params);
-//
-//    /**
-//     * 融智 风格总览 (融智改排排网)
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    Map<String, Object> rzStyle(RzStyleParams params);
-//}

File diff ditekan karena terlalu besar
+ 0 - 1160
src/main/java/com/smppw/analysis/application/service/style/StyleServiceImpl.java


+ 0 - 85
src/main/java/com/smppw/analysis/client/FundApi.java

@@ -61,91 +61,6 @@ public class FundApi {
     public ResultVo<HeadIndicatorVO> headIndicator(@RequestBody HeadIndicatorReq params) {
         return ResultVo.ok(this.globalService.headIndicator(params));
     }
-//
-//    /**
-//     * 相似产品(私募基金)
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("similar")
-//    public ResultVo<List<FundSimilarVO>> similar(@RequestBody FundSimilarReq params) {
-//        return ResultVo.ok(this.service.getFundSimilarList(params));
-//    }
-
-//    /**
-//     * 公募基金公告
-//     *
-//     * @param params 基金id
-//     * @return 基金公告
-//     */
-//    @PostMapping("notice-info")
-//    public ResultVo<List<ManualFundNoticeInfoVO>> noticeInfo(@RequestBody ManualFundNoticeReq params) {
-//        return ResultVo.ok(service.noticeList(params));
-//    }
-//
-//    /**
-//     * 公募基金投资类信息说明
-//     *
-//     * @return 投资类信息说明
-//     */
-//    @PostMapping("invest-info")
-//    public ResultVo<ManualFundInvestInfoVO> investInfo(@RequestBody WithSecReq req) {
-//        return ResultVo.ok(service.investInfo(req.getSecId()));
-//    }
-//
-//    /**
-//     * 私募基金费率信息
-//     *
-//     * @return 基金费率信息
-//     */
-//    @PostMapping("fee")
-//    public ResultVo<FundBaseFeeVO> fee(@RequestBody WithSecReq req) {
-//        return ResultVo.ok(this.service.getFundFee(req.getSecId()));
-//    }
-//
-//    /**
-//     * 公募基金费率信息
-//     *
-//     * @return 基金费率信息
-//     */
-//    @PostMapping("mf-fee")
-//    public ResultVo<ManualFundFeeInfoVO> mFFundFee(@RequestBody WithSecReq req) {
-//        return ResultVo.ok(this.service.getMfFundFee(req.getSecId()));
-//    }
-//
-//
-//    /**
-//     * 私募基金详情页-基金经理
-//     *
-//     * @return 基金经理信息
-//     */
-//    @PostMapping("manager-info")
-//    public ResultVo<List<FundManagerInfoVo>> managerInfo(@RequestBody WithSecReq req) {
-//        return ResultVo.ok(this.service.getHFManagerInfo(req.getSecId()));
-//    }
-//
-//    /**
-//     * 公募基金详情页-基金经理
-//     *
-//     * @param params 详情请看请求体
-//     * @return 基金经理信息
-//     */
-//    @PostMapping("mf-manager-info")
-//    public ResultVo<List<ManualFundManagerInfoVO>> managerInfo(@RequestBody ManualFundManagerParams params) {
-//        return ResultVo.ok(this.service.managerList(params));
-//    }
-//
-//    /**
-//     * 公募基金的基金经理变更历史
-//     *
-//     * @param params 详情请看请求体
-//     * @return 公募基金的基金经理变更历史
-//     */
-//    @PostMapping("manager-change")
-//    public ResultVo<List<ManualFundManagerChangeVO>> managerChange(@RequestBody ManualFundManagerParams params) {
-//        return ResultVo.ok(this.service.managerChangeList(params));
-//    }
 
     /**
      * 私募基金的基本信息

+ 0 - 6
src/main/java/com/smppw/analysis/client/FundPerformanceApi.java

@@ -77,10 +77,4 @@ public class FundPerformanceApi {
         Map<String, Object> data = this.service.rolling(req);
         return ResultVo.ok(data);
     }
-
-//    @PostMapping("rank")
-//    public ResultVo<Map<String, Object>> rank(@RequestBody RankReq req) {
-//        Map<String, Object> data = this.service.rank(req);
-//        return ResultVo.ok(data);
-//    }
 }

+ 0 - 304
src/main/java/com/smppw/analysis/client/FundPositionApi.java

@@ -1,304 +0,0 @@
-//package com.smppw.analysis.client;
-//
-//import com.smppw.analysis.application.dto.BaseReq;
-//import com.smppw.analysis.application.dto.position.*;
-//import com.smppw.analysis.application.service.position.FundFuturesOptionService;
-//import com.smppw.analysis.application.service.position.FuturePositionAnalysis;
-//import com.smppw.analysis.application.service.position.StockPositionAnalysis;
-//import com.smppw.analysis.application.service.position.SynthesizePositionAnalysis;
-//import com.smppw.analysis.domain.dto.position.bond.BondSortAllocationParam;
-//import com.smppw.analysis.domain.dto.position.stock.ChangeNumberVO;
-//import com.smppw.analysis.domain.dto.position.stock.MajorChangeVO;
-//import com.smppw.analysis.domain.dto.position.synthesize.HolderInfoVO;
-//import com.smppw.analysis.domain.dto.position.synthesize.LeverageChangeVO;
-//import com.smppw.analysis.domain.dto.position.synthesize.PositionInfoVO;
-//import com.smppw.analysis.domain.dto.position.synthesize.PositionListVO;
-//import com.smppw.analysis.domain.manager.position.bond.BondPositionService;
-//import com.smppw.common.pojo.ResultVo;
-//import org.springframework.web.bind.annotation.PostMapping;
-//import org.springframework.web.bind.annotation.RequestBody;
-//import org.springframework.web.bind.annotation.RequestMapping;
-//import org.springframework.web.bind.annotation.RestController;
-//
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/6 11:23
-// * @description 基金 持仓分析,包括公募、私募基金,区分综合、股票、债券和期货tab组件
-// */
-//@RestController
-//@RequestMapping("/v1/api/position")
-//public class FundPositionApi {
-//    private final StockPositionAnalysis stock;
-//    private final FuturePositionAnalysis future;
-//    private final SynthesizePositionAnalysis synthesize;
-//    private final BondPositionService bondPositionService;
-//    private final FundFuturesOptionService fundFuturesOptionService;
-//
-//    public FundPositionApi(StockPositionAnalysis stock, FuturePositionAnalysis future,
-//                           SynthesizePositionAnalysis synthesize, BondPositionService bondPositionService,
-//                           FundFuturesOptionService fundFuturesOptionService) {
-//        this.stock = stock;
-//        this.future = future;
-//        this.synthesize = synthesize;
-//        this.bondPositionService = bondPositionService;
-//        this.fundFuturesOptionService = fundFuturesOptionService;
-//    }
-//
-//    /**
-//     * 公募私募,综合-资产大类配置
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("asset-allocation")
-//    public ResultVo<Map<String, Object>> getAssetAllocation(@RequestBody AssetAllocationReq params) {
-//        return ResultVo.ok(this.synthesize.getAssetAllocation(params));
-//    }
-//
-//    /**
-//     * 公募私募,综合-杠杆变化
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("leverage-change")
-//    public ResultVo<List<LeverageChangeVO>> getLeverageChange(@RequestBody LeverageChangeReq params) {
-//        return ResultVo.ok(this.synthesize.getLeverageChange(params));
-//    }
-//
-//    /**
-//     * 公募私募,综合-持仓列表的请求参数
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("position-param")
-//    public ResultVo<PositionInfoVO> getPositionParams(@RequestBody PositionInfoReq params) {
-//        return ResultVo.ok(this.synthesize.getPositionParams(params));
-//    }
-//
-//    /**
-//     * 公募私募,综合-持仓列表
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("position-list")
-//    public ResultVo<List<PositionListVO>> getPosition(@RequestBody PositionListReq params) {
-//        return ResultVo.ok(this.synthesize.getPosition(params));
-//    }
-//
-//    /**
-//     * 公募,综合-持有人结构
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("holder-info")
-//    public ResultVo<List<HolderInfoVO>> getHolderInfo(@RequestBody HolderInfoReq params) {
-//        return ResultVo.ok(this.synthesize.getHolderInfo(params));
-//    }
-//
-//    /**
-//     * 公募,股票-持仓股票重大变动
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/major-change")
-//    public ResultVo<List<MajorChangeVO>> getMajorChange(@RequestBody MajorChangeReq params) {
-//        return ResultVo.ok(this.stock.getMajorChangeList(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-集中度
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/crn")
-//    public ResultVo<Map<String, Object>> getStockConcentration(@RequestBody ConcentrationReq params) {
-//        return ResultVo.ok(this.stock.getConcentration(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-持股数量变动时序
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/change-num")
-//    public ResultVo<List<ChangeNumberVO>> getStockChangeNumber(@RequestBody ChangeNumberReq params) {
-//        return ResultVo.ok(this.stock.getChangeNumber(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-行业配置
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/industry-allocation")
-//    public ResultVo<Map<String, Object>> getStockIndustryAllocation(@RequestBody StockAllocationReq params) {
-//        return ResultVo.ok(this.stock.getIndustryAllocation(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-行业配置偏好时序
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/industry-allocation-preference")
-//    public ResultVo<Map<String, Object>> getStockIndustryAllocationPreference(@RequestBody StockAllocationReq params) {
-//        return ResultVo.ok(this.stock.getIndustryAllocationPreference(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-风格配置
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/style-allocation")
-//    public ResultVo<Map<String, Object>> getStockStyleAllocation(@RequestBody StockAllocationReq params) {
-//        return ResultVo.ok(this.stock.getStyleAllocation(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-流动性分析
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/liquidity-allocation")
-//    public ResultVo<Map<String, Object>> getStockLiquidityAllocation(@RequestBody StockAllocationReq params) {
-//        return ResultVo.ok(this.stock.getLiquidityAllocation(params));
-//    }
-//
-//    /**
-//     * 公募私募,股票-业绩归因
-//     *
-//     * @param params /
-//     * @return /
-//     */
-//    @PostMapping("stock/performance-attribution")
-//    public ResultVo<Map<String, Object>> getStockPerformanceAttribution(@RequestBody StockPerformanceAttributionReq params) {
-//        return ResultVo.ok(this.stock.getPerformanceAttribution(params));
-//    }
-//
-////    /**
-////     * 公募私募,股票-Barra敏感度分析
-////     *
-////     * @param params /
-////     * @return /
-////     */
-////    @PostMapping("stock/barra-sensitivity")
-////    public ResultVo<Map<String, Object>> getStockBarraSensitivity(@RequestBody BarraSensitivityReq params) {
-////        return ResultVo.ok(this.stock.getBarraSensitivity(params));
-////    }
-//
-//    /**
-//     * 债券分类配置及明细  公募私募
-//     *
-//     * @param param /
-//     * @return /
-//     */
-//    @PostMapping("bond/sort-allocation")
-//    public ResultVo<Map<String, Object>> getBondSortAllocation(@RequestBody BondSortAllocationParam param) {
-//        return ResultVo.ok(bondPositionService.getBondSortAllocation(param));
-//    }
-//
-//    /**
-//     * 债券集中度
-//     *
-//     * @param param /
-//     * @return /
-//     */
-//    @PostMapping("bond/crn")
-//    public ResultVo<Map<String, Object>> getBondConcentration(@RequestBody BondSortAllocationParam param) {
-//        return ResultVo.ok(bondPositionService.getBondConcentration(param));
-//    }
-//
-//    /**
-//     * 债券信用评级
-//     *
-//     * @param param /
-//     * @return /
-//     */
-//    @PostMapping("/bond/credit-grading")
-//    public ResultVo<Map<String, Object>> getBondCreditGrading(@RequestBody BondSortAllocationParam param) {
-//        return ResultVo.ok(bondPositionService.getBondCreditGrading(param));
-//    }
-//
-//    /**
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-futures-option")
-//    public ResultVo<Map<String, Object>> fundFuturesOption(@RequestBody Map<String, Object> params) {
-//        return fundFuturesOptionService.fundFuturesOption(params);
-//    }
-//
-//
-//    /**
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-futures-option-breed")
-//    public ResultVo<Map<String, Object>> fundFuturesOptionForBreed(@RequestBody Map<String, Object> params) {
-//        return fundFuturesOptionService.fundFuturesOptionForBreed(params);
-//    }
-//
-//    /**
-//     * 板块持仓分析
-//     *
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-position-analysis")
-//    public ResultVo<Map<String, Object>> fundPositionAnalysis(@RequestBody Map<String, Object> params) {
-//        return fundFuturesOptionService.fundPositionAnalysis(params);
-//    }
-//
-//    /**
-//     * 板块持仓分析
-//     *
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-position-analysis-line")
-//    public ResultVo<Map<String, Object>> fundPositionAnalysisLine(@RequestBody Map<String, Object> params) {
-//        return fundFuturesOptionService.fundPositionAnalysisLine(params);
-//    }
-//
-//
-//    /**
-//     * 衍生品杠杆与保证金
-//     *
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-derivative-leverage-margin")
-//    public ResultVo<Map<String, Object>> fundDerivativeLeverageMargin(@RequestBody Map<String, Object> params) {
-//        return fundFuturesOptionService.fundDerivativeLeverageMargin(params);
-//    }
-//
-//
-//    /**
-//     * 边际风险贡献
-//     *
-//     * @param params
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-marginal-risk-contribution")
-//    public ResultVo<Map<String, Object>> getFutureRiskCont(@RequestBody MarginalRiskContributionReq params) {
-//        return ResultVo.ok(this.future.riskCont(params));
-//    }
-//
-//    /**
-//     * @return
-//     */
-//    @PostMapping(value = "/fund-futures-option-view")
-//    public ResultVo<Map<String, List<String>>> fundFuturesOptionView(@RequestBody BaseReq.DefaultReq req) {
-//        return fundFuturesOptionService.fundFuturesOptionView();
-//    }
-//}

+ 0 - 141
src/main/java/com/smppw/analysis/client/FundStyleApi.java

@@ -1,141 +0,0 @@
-//package com.smppw.analysis.client;
-//
-//import com.smppw.analysis.application.service.style.StyleService;
-//import com.smppw.analysis.domain.dto.style.*;
-//import com.smppw.common.pojo.ResultVo;
-//import org.springframework.web.bind.annotation.PostMapping;
-//import org.springframework.web.bind.annotation.RequestBody;
-//import org.springframework.web.bind.annotation.RequestMapping;
-//import org.springframework.web.bind.annotation.RestController;
-//
-//import java.util.Map;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/8/7 15:52
-// * @description 风格评测api
-// */
-//@RestController
-//@RequestMapping("/v1/api/style")
-//public class FundStyleApi {
-//    private final StyleService service;
-//
-//    public FundStyleApi(StyleService service) {
-//        this.service = service;
-//    }
-//
-//    /**
-//     * 股票业绩归因(五因子归因分析)-前端组件:风格评测-股票业绩归因组件
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("stock-attribution")
-//    public ResultVo<Map<String, Object>> stockAttribution(@RequestBody StockAttributionParams params) {
-//        return ResultVo.ok(this.service.stockAttribution(params));
-//    }
-//
-//    /**
-//     * 债券业绩归因-前端组件:风格评测-债券业绩归因
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("bond-attribution")
-//    public ResultVo<Map<String, Object>> bondAttribution(@RequestBody BondAttributionParams params) {
-//        return ResultVo.ok(this.service.bondAttribution(params));
-//    }
-//
-//    /**
-//     * 相对价值业绩归因-前端组件:风格评测-相对价值业绩归因
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("relative-attribution")
-//    public ResultVo<Map<String, Object>> relativeAttribution(@RequestBody RelativeAttributionParams params) {
-//        return ResultVo.ok(this.service.relativeAttribution(params));
-//    }
-//
-//    /**
-//     * 成长价值风格-前端组件:风格评测-成长价值风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("growth-value")
-//    public ResultVo<FundStyleVO> growthValue(@RequestBody GrowthValueParams params) {
-//        return ResultVo.ok(this.service.growthValue(params));
-//    }
-//
-//    /**
-//     * 行业配置-前端组件:风格评测-行业配置
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("industry-value")
-//    public ResultVo<FundStyleVO> industryValue(@RequestBody IndustryValueParams params) {
-//        return ResultVo.ok(this.service.industryValue(params));
-//    }
-//
-//    /**
-//     * 期货风格-前端组件:风格评测-期货风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("future-factor")
-//    public ResultVo<Map<String, Object>> futureFactor(@RequestBody FutureFactorParams params) {
-//        return ResultVo.ok(this.service.futureFactor(params));
-//    }
-//
-//    /**
-//     * 自定义风格-前端组件:风格评测-自定义风格
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("custom-rbsa")
-//    public ResultVo<CustomRbsaVO> customRbsa(@RequestBody CustomRbsaParams params) {
-//        return ResultVo.ok(this.service.customRbsa(params));
-//    }
-//
-//    /**
-//     * Barra风格概览
-//     */
-//    @PostMapping("/barra-factor-overview")
-//    public ResultVo<Map<String, Object>> barraOverview(@RequestBody BarraStyleParams params) {
-//        return ResultVo.ok(this.service.barraOverview(params));
-//    }
-//
-//    /**
-//     * Barra 风格归因
-//     */
-//    @PostMapping("/barra-factor-risk-profit")
-//    public ResultVo<Map<String, Object>> barraRiskProfit(@RequestBody BarraStyleParams params) {
-//        return ResultVo.ok((this.service.barraRiskProfit(params)));
-//    }
-//
-//    /**
-//     * 选股择时能力-前端组件:风格评测-选股择时能力
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("selection-timing")
-//    public ResultVo<Map<String, Object>> selectionTiming(@RequestBody SelectionTimingParams params) {
-//        return ResultVo.ok(this.service.selectionTiming(params));
-//    }
-//
-//    /**
-//     * 融智 风格总览-前端组件:风格评测-融智 风格总览
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    @PostMapping("ppw")
-//    public ResultVo<Map<String, Object>> rzStyle(@RequestBody RzStyleParams params) {
-//        return ResultVo.ok(this.service.rzStyle(params));
-//    }
-//}

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

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

+ 0 - 26
src/main/java/com/smppw/analysis/domain/dao/FundAnnounceDao.java

@@ -1,26 +0,0 @@
-//package com.smppw.analysis.domain.dao;
-//
-//import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
-//import com.smppw.analysis.domain.mapper.mf.MfFundAnnounceMapper;
-//import org.springframework.stereotype.Service;
-//
-//import java.util.List;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 9:30
-// * @description 公募基金公告信息Dao
-// */
-//@Service
-//public class FundAnnounceDao {
-//
-//    private final MfFundAnnounceMapper fundAnnounceMapper;
-//
-//    public FundAnnounceDao(MfFundAnnounceMapper fundAnnounceMapper) {
-//        this.fundAnnounceMapper = fundAnnounceMapper;
-//    }
-//
-//    public List<ManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
-//        return fundAnnounceMapper.queryFundAnnounce(fundId, typeList, title);
-//    }
-//}

+ 0 - 25
src/main/java/com/smppw/analysis/domain/dao/FundArchivesDao.java

@@ -1,25 +0,0 @@
-//package com.smppw.analysis.domain.dao;
-//
-//import com.smppw.analysis.domain.dataobject.FundArchivesInfoDO;
-//import com.smppw.analysis.domain.mapper.mf.MfFundArchivesMapper;
-//import org.springframework.stereotype.Service;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 9:30
-// * @description 公募基金投资类信息说明Mapper
-// */
-//@Service
-//public class FundArchivesDao {
-//
-//    private final MfFundArchivesMapper fundArchivesMapper;
-//
-//    public FundArchivesDao(MfFundArchivesMapper fundArchivesMapper) {
-//        this.fundArchivesMapper = fundArchivesMapper;
-//    }
-//
-//    public FundArchivesInfoDO getFundArchives(String fundId) {
-//        return fundArchivesMapper.queryFundArchives(fundId);
-//    }
-//
-//}

+ 0 - 27
src/main/java/com/smppw/analysis/domain/dao/FundStyleDao.java

@@ -1,27 +0,0 @@
-//package com.smppw.analysis.domain.dao;
-//
-//import com.smppw.analysis.domain.dataobject.FundStyleStatsDO;
-//import com.smppw.analysis.domain.mapper.core.FundStyleStatsMapper;
-//import org.springframework.stereotype.Service;
-//
-//import java.util.List;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 14:30
-// * @description 基金风格ao
-// */
-//@Service
-//public class FundStyleDao {
-//
-//    private final FundStyleStatsMapper fundStyleStatsMapper;
-//
-//    public FundStyleDao(FundStyleStatsMapper fundStyleStatsMapper) {
-//        this.fundStyleStatsMapper = fundStyleStatsMapper;
-//    }
-//
-//    public List<FundStyleStatsDO> listFundStyleOverview(String fundId){
-//        return fundStyleStatsMapper.listFundStyleOverview(fundId);
-//    }
-//
-//}

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

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

+ 0 - 114
src/main/java/com/smppw/analysis/domain/dao/PositionAnalysisDao.java

@@ -1,114 +0,0 @@
-//package com.smppw.analysis.domain.dao;
-//
-//
-//import com.smppw.analysis.domain.dataobject.*;
-//import com.smppw.analysis.domain.mapper.core.BaseUnderlyingMapper;
-//import com.smppw.analysis.domain.mapper.core.IndexesTradeDateMapper;
-//import org.springframework.stereotype.Service;
-//
-//import java.util.List;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/7/24 11:39
-// * @description 基金持仓分析需要的所有mapper接口
-// */
-//@Service
-//public class PositionAnalysisDao {
-//    private final BaseUnderlyingMapper baseUnderlyingMapper;
-//    private final IndexesTradeDateMapper indexesTradeDateMapper;
-//
-//    public PositionAnalysisDao(BaseUnderlyingMapper baseUnderlyingMapper,
-//                               IndexesTradeDateMapper indexesTradeDateMapper) {
-//        this.baseUnderlyingMapper = baseUnderlyingMapper;
-//        this.indexesTradeDateMapper = indexesTradeDateMapper;
-//    }
-//
-//    /**
-//     * 获取最近的交日期,往前找
-//     *
-//     * @param tradeDate /
-//     * @return /
-//     */
-//    public String getLatestTradeDate(String tradeDate) {
-//        return this.indexesTradeDateMapper.queryLatestTradeDate(tradeDate);
-//    }
-//
-//    /**
-//     * 获取多个日期的流动性标准
-//     *
-//     * @param dateList /
-//     * @return /
-//     */
-//    public List<SecLiquidityInfoDO> listSecLiquidityInfo(List<String> dateList) {
-//        return this.baseUnderlyingMapper.querySecLiquidityInfo(dateList);
-//    }
-//
-//    /**
-//     * 多个日期的5日平均换手率
-//     *
-//     * @param dateList /
-//     * @return /
-//     */
-//    public List<SecTurnoverInfoDO> listSecTurnoverInfo(List<String> dateList) {
-//        return this.baseUnderlyingMapper.querySecTurnoverInfo(dateList);
-//    }
-//
-//    /**
-//     * 获取所有股票对应行业
-//     *
-//     * @return /
-//     */
-//    public List<SwSecIndustryInfoDO> listSecIndustryInfo() {
-//        return this.baseUnderlyingMapper.querySecIndustryInfo();
-//    }
-//
-//    /**
-//     * 获取所有股票对应风格
-//     *
-//     * @param dateList 风格截止日集合
-//     * @return /
-//     */
-//    public List<SecStyleInfoDO> listSecStyleInfo(List<String> dateList) {
-//        return this.baseUnderlyingMapper.querySecStyleInfo(dateList);
-//    }
-//
-//    /**
-//     * 获取当前日期之后最近的权重数据
-//     *
-//     * @param indexId 基准id
-//     * @param endDate 当前日期
-//     * @return /
-//     */
-//    public List<IndexSecWeightInfoDO> listIndexSecWeight(String indexId, String endDate) {
-//        return this.baseUnderlyingMapper.queryIndexSecWeight(indexId, endDate);
-//    }
-//
-//    /**
-//     * 获取股票行情
-//     *
-//     * @param endDate 当前时间
-//     * @return /
-//     */
-//    public List<SecClosePriceDO> listSecClosePrice(String startDate, String endDate) {
-//        return this.baseUnderlyingMapper.listSecClosePrice(startDate, endDate);
-//    }
-//
-//    public List<SecClosePriceDO> listSecClosePrice(List<String> dateList) {
-//        return this.baseUnderlyingMapper.listDateSecClosePrice(dateList);
-//    }
-//
-//    /**
-//     * 获取科创版股票行情
-//     *
-//     * @param endDate 当前时间
-//     * @return /
-//     */
-//    public List<SecClosePriceDO> listSciTechSecClosePrice(String startDate, String endDate) {
-//        return this.baseUnderlyingMapper.listSciTechSecClosePrice(startDate, endDate);
-//    }
-//
-//    public List<SecClosePriceDO> listSciTechSecClosePrice(List<String> dateList) {
-//        return this.baseUnderlyingMapper.listDateSciTechSecClosePrice(dateList);
-//    }
-//}

+ 0 - 58
src/main/java/com/smppw/analysis/domain/dao/PubliclyFundPositionDao.java

@@ -1,58 +0,0 @@
-//package com.smppw.analysis.domain.dao;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.smppw.analysis.domain.dataobject.FundPositionBaseInfoDO;
-//import com.smppw.analysis.domain.dataobject.FundPositionDetailDO;
-//import com.smppw.analysis.domain.dataobject.PubliclyFundHolderInfoDO;
-//import com.smppw.analysis.domain.dataobject.PubliclyFundStockChangeDO;
-//import com.smppw.analysis.domain.mapper.core.PubliclyFundExtInfoMapper;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//import java.util.stream.Collectors;
-//
-//@Component
-//public class PubliclyFundPositionDao {
-//    /**
-//     * 公募基金估值表合法报告日期,去除 03和09
-//     */
-//    private static final String[] PUBLICLY_VALID_DATES = new String[]{"-12-", "-06-"};
-//    private final PubliclyFundExtInfoMapper publiclyFundExtInfoMapper;
-//
-//    public PubliclyFundPositionDao(PubliclyFundExtInfoMapper publiclyFundExtInfoMapper) {
-//        this.publiclyFundExtInfoMapper = publiclyFundExtInfoMapper;
-//    }
-//
-//    public List<FundPositionBaseInfoDO> fundPositionBaseInfos(String fundId, String startDate, String endDate) {
-//        List<FundPositionBaseInfoDO> dataList = this.publiclyFundExtInfoMapper.queryPositionBaseInfos(this.getRealFundId(fundId), startDate, endDate);
-//        if (CollUtil.isNotEmpty(dataList)) {
-//            dataList = dataList.stream().filter(e -> StrUtil.containsAny(DateUtil.formatDate(e.getReportDate()),
-//                    PUBLICLY_VALID_DATES)).collect(Collectors.toList());
-//        }
-//        return dataList;
-//    }
-//
-//    public List<FundPositionDetailDO> positionDetailList(String fundId) {
-//        List<FundPositionDetailDO> dataList = this.publiclyFundExtInfoMapper.queryPositionDetails(this.getRealFundId(fundId));
-//        if (CollUtil.isNotEmpty(dataList)) {
-//            dataList = dataList.stream().filter(e -> StrUtil.containsAny(DateUtil.formatDate(e.getValuationDate()),
-//                    PUBLICLY_VALID_DATES)).collect(Collectors.toList());
-//        }
-//        return dataList;
-//    }
-//
-//    public List<PubliclyFundHolderInfoDO> mfHolderInfoList(String fundId, String startDate, String endDate) {
-//        return this.publiclyFundExtInfoMapper.mfHolderInfoList(this.getRealFundId(fundId), startDate, endDate);
-//    }
-//
-//    public List<PubliclyFundStockChangeDO> mfStockChangeList(String fundId, String startDate, String endDate) {
-//        return this.publiclyFundExtInfoMapper.mfStockChangeList(this.getRealFundId(fundId), startDate, endDate);
-//    }
-//
-//    private String getRealFundId(String fundId) {
-//        String relationFund = this.publiclyFundExtInfoMapper.getRelationFund(fundId);
-//        return StrUtil.isNotBlank(relationFund) ? relationFund : fundId;
-//    }
-//}

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

@@ -1,61 +0,0 @@
-//package com.smppw.analysis.domain.dao.nav;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveDo;
-//import com.smppw.analysis.domain.dataobject.nav.CompanyFittedCurveWeeklyDo;
-//import com.smppw.analysis.domain.dataobject.nav.CompanyNavDO;
-//import com.smppw.analysis.domain.mapper.core.CompanyFittedCurveMapper;
-//import com.smppw.analysis.domain.mapper.core.CompanyFittedCurveWeeklyMapper;
-//import com.smppw.common.cache.CaffeineLocalCache;
-//import com.smppw.common.pojo.enums.Frequency;
-//import org.apache.commons.lang3.StringUtils;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//import java.util.Map;
-//import java.util.stream.Collectors;
-//
-//@Component(NavConstants.COMPANY_NAV)
-//public class CompanyNavDao extends AbstractNavDao<CompanyNavDO> {
-//    private final CompanyFittedCurveMapper mapper;
-//    private final CompanyFittedCurveWeeklyMapper weeklyMapper;
-//
-//    public CompanyNavDao(CompanyFittedCurveMapper mapper, CompanyFittedCurveWeeklyMapper weeklyMapper) {
-//        this.mapper = mapper;
-//        this.weeklyMapper = weeklyMapper;
-//    }
-//
-//    @Override
-//    protected List<CompanyNavDO> listSecNav(List<String> secIds, String startDate, String endDate, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
-//        Map<Boolean, List<String>> monthWeekMap = secIds.stream().collect(Collectors.groupingBy(e -> Frequency.Weekly == secFrequencyMap.get(e)));
-//        List<String> monthSecIdList = monthWeekMap.getOrDefault(Boolean.FALSE, ListUtil.empty());
-//        List<String> weekSecIdList = monthWeekMap.getOrDefault(Boolean.TRUE, ListUtil.empty());
-//        List<CompanyNavDO> resultList = ListUtil.list(true);
-//        if (monthSecIdList.size() > 0) {
-//            String startDateMonth = null;
-//            if (StringUtils.isNotEmpty(startDate) && startDate.length() >= 7) {
-//                startDateMonth = startDate.substring(0, 7);
-//            }
-//            List<CompanyFittedCurveDo> tempList = this.mapper.listNavByTimeInterval(monthSecIdList, startDateMonth, endDate, curveTypeId, strategyId, false);
-//            if (CollUtil.isNotEmpty(tempList)) {
-//                resultList.addAll(tempList);
-//            }
-//        }
-//        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> tempList = this.weeklyMapper.listNavByTimeInterval(weekSecIdList, startYearWeek, endYearWeek, curveTypeId, strategyId, false);
-//            if (CollUtil.isNotEmpty(tempList)) {
-//                resultList.addAll(tempList);
-//            }
-//        }
-//        return resultList;
-//    }
-//}

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

@@ -1,61 +0,0 @@
-//package com.smppw.analysis.domain.dao.nav;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveDo;
-//import com.smppw.analysis.domain.dataobject.nav.FundManagerFittedCurveWeeklyDo;
-//import com.smppw.analysis.domain.dataobject.nav.FundManagerNavDO;
-//import com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveMapper;
-//import com.smppw.analysis.domain.mapper.core.FundManagerFittedCurveWeeklyMapper;
-//import com.smppw.common.cache.CaffeineLocalCache;
-//import com.smppw.common.pojo.enums.Frequency;
-//import org.apache.commons.lang3.StringUtils;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//import java.util.Map;
-//import java.util.stream.Collectors;
-//
-//@Component(NavConstants.MANAGER_NAV)
-//public class ManagerNavDao extends AbstractNavDao<FundManagerNavDO> {
-//    private final FundManagerFittedCurveMapper mapper;
-//    private final FundManagerFittedCurveWeeklyMapper weeklyMapper;
-//
-//    public ManagerNavDao(FundManagerFittedCurveMapper mapper, FundManagerFittedCurveWeeklyMapper weeklyMapper) {
-//        this.mapper = mapper;
-//        this.weeklyMapper = weeklyMapper;
-//    }
-//
-//    @Override
-//    protected List<FundManagerNavDO> listSecNav(List<String> secIds, String startDate, String endDate, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
-//        Map<Boolean, List<String>> monthWeekMap = secIds.stream().collect(Collectors.groupingBy(e -> Frequency.Weekly == secFrequencyMap.get(e)));
-//        List<String> monthSecIdList = monthWeekMap.getOrDefault(Boolean.FALSE, ListUtil.empty());
-//        List<String> weekSecIdList = monthWeekMap.getOrDefault(Boolean.TRUE, ListUtil.empty());
-//        List<FundManagerNavDO> resultList = ListUtil.list(true);
-//        if (monthSecIdList.size() > 0) {
-//            String startDateMonth = null;
-//            if (StringUtils.isNotEmpty(startDate) && startDate.length() >= 7) {
-//                startDateMonth = startDate.substring(0, 7);
-//            }
-//            List<FundManagerFittedCurveDo> tempList = this.mapper.listNavByTimeInterval(monthSecIdList, startDateMonth, endDate, curveTypeId, strategyId, false);
-//            if (CollUtil.isNotEmpty(tempList)) {
-//                resultList.addAll(tempList);
-//            }
-//        }
-//        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> tempList = this.weeklyMapper.listNavByTimeInterval(weekSecIdList, startYearWeek, endYearWeek, curveTypeId, strategyId, false);
-//            if (CollUtil.isNotEmpty(tempList)) {
-//                resultList.addAll(tempList);
-//            }
-//        }
-//        return resultList;
-//    }
-//}

+ 1 - 2
src/main/java/com/smppw/analysis/domain/dao/nav/NavConstants.java

@@ -8,9 +8,8 @@ package com.smppw.analysis.domain.dao.nav;
 public final class NavConstants {
     public static final String PUBLICLY_FUND_NAV = "publiclyFundNav";
     public static final String PRIVATELY_FUND_NAV = "privatelyFundNav";
+    public static final String PRIVATE_FUND_NAV = "privateFundNav";
     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";
 

+ 1 - 2
src/main/java/com/smppw/analysis/domain/dao/nav/NavFactory.java

@@ -13,12 +13,11 @@ public class NavFactory {
     private static final Map<String, NavDao> NAV_MAP = MapUtil.newHashMap(16);
 
     static {
+        SEC_NAV_MAP.put(SecType.PRIVATE_FUND, NavConstants.PRIVATE_FUND_NAV);
         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);
     }
 

+ 23 - 0
src/main/java/com/smppw/analysis/domain/dao/nav/PrivateFundNavDao.java

@@ -0,0 +1,23 @@
+package com.smppw.analysis.domain.dao.nav;
+
+import com.smppw.analysis.domain.dataobject.nav.CmNavDo;
+import com.smppw.analysis.domain.mapper.master.CmNavMapper;
+import com.smppw.common.pojo.enums.Frequency;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@Component(NavConstants.PRIVATE_FUND_NAV)
+public class PrivateFundNavDao extends AbstractNavDao<CmNavDo> {
+    private final CmNavMapper cmNavMapper;
+
+    public PrivateFundNavDao(CmNavMapper cmNavMapper) {
+        this.cmNavMapper = cmNavMapper;
+    }
+
+    @Override
+    protected List<CmNavDo> listSecNav(List<String> secIds, String startDate, String endDate, Integer curveTypeId, Integer strategyId, Map<String, Frequency> secFrequencyMap) {
+        return this.cmNavMapper.listNav(secIds, startDate, endDate);
+    }
+}

+ 0 - 21
src/main/java/com/smppw/analysis/domain/dataobject/FundSimilarDo.java

@@ -1,21 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//@Setter
-//@Getter
-//public class FundSimilarDo {
-//    private String fundId;
-//    private String fundName;
-//    private String strategy;
-//    private String subStrategy;
-//    private String thirdStrategy;
-//    private String retYtd;
-//    private String ret1y;
-//    private String retIncep;
-//    private String annualIncep;
-//    private String shapeIncep;
-//    private String maxdownIncep;
-//    private String stdDevIncep;
-//}

+ 0 - 237
src/main/java/com/smppw/analysis/domain/dataobject/FundStyleStatsDO.java

@@ -1,237 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-//import java.math.BigDecimal;
-//import java.util.Date;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 9:30
-// * @description 基金风格指标表DO
-// */
-//@Data
-//public class FundStyleStatsDO {
-//
-//    /**
-//     * 主键id
-//     */
-//    private Integer id;
-//
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//
-//    /**
-//     * 今年以来的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRetYtd;
-//
-//    /**
-//     * 最近半年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet6m;
-//
-//    /**
-//     * 最近一年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet1y;
-//
-//    /**
-//     * 最近两年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet2y;
-//
-//    /**
-//     * 最近三年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet3y;
-//
-//    /**
-//     * 最近四年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet4y;
-//
-//    /**
-//     * 最近五年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet5y;
-//
-//    /**
-//     * 最近十年的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRet10y;
-//
-//    /**
-//     * 成立以来的上行捕获收益率
-//     */
-//    private BigDecimal upsideCaptureRetIncep;
-//
-//    /**
-//     * 今年以来的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRetYtd;
-//
-//    /**
-//     * 最近半年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet6m;
-//
-//    /**
-//     * 最近一年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet1y;
-//
-//    /**
-//     * 最近两年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet2y;
-//
-//    /**
-//     * 最近三年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet3y;
-//
-//    /**
-//     * 最近四年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet4y;
-//
-//    /**
-//     * 最近五年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet5y;
-//
-//    /**
-//     * 最近十年的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRet10y;
-//
-//    /**
-//     * 成立以来的下行捕获收益率
-//     */
-//    private BigDecimal downsideCaptureRetIncep;
-//
-//    /**
-//     * 今年以来的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatioYtd;
-//
-//    /**
-//     * 最近半年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio6m;
-//
-//    /**
-//     * 最近一年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio1y;
-//
-//    /**
-//     * 最近两年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio2y;
-//
-//    /**
-//     * 最近三年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio3y;
-//
-//    /**
-//     * 最近四年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio4y;
-//
-//    /**
-//     * 最近五年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio5y;
-//
-//    /**
-//     * 最近十年的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatio10y;
-//
-//    /**
-//     * 成立以来的上行捕获率
-//     */
-//    private BigDecimal upsideCaptureRatioIncep;
-//
-//    /**
-//     * 今年以来的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatioYtd;
-//
-//    /**
-//     * 最近半年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio6m;
-//
-//    /**
-//     * 最近一年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio1y;
-//
-//    /**
-//     * 最近两年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio2y;
-//
-//    /**
-//     * 最近三年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio3y;
-//
-//    /**
-//     * 最近四年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio4y;
-//
-//    /**
-//     * 最近五年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio5y;
-//
-//    /**
-//     * 最近十年的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatio10y;
-//
-//    /**
-//     * 成立以来的下行捕获率
-//     */
-//    private BigDecimal downsideCaptureRatioIncep;
-//
-//    /**
-//     * 截止日期
-//     */
-//    private String endDate;
-//
-//    /**
-//     * 创建者id
-//     */
-//    private Integer creatorid;
-//
-//    /**
-//     * 创建时间
-//     */
-//    private Date createtime;
-//
-//    /**
-//     * 修改者id
-//     */
-//    private Integer updaterid;
-//
-//    /**
-//     * 修改时间
-//     */
-//    private Date updatetime;
-//
-//    /**
-//     * 记录的有效性;1-有效;0-无效;
-//     */
-//    private Integer isvalid;
-//
-//}
-//

+ 0 - 28
src/main/java/com/smppw/analysis/domain/dataobject/ManualFundAssetSizeDo.java

@@ -1,28 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 21:03
-// * @description 公募基金的经理在管的所有基金的某个日期的资产值
-// */
-//@Data
-//public class ManualFundAssetSizeDo {
-//
-//    /**
-//     * 日期
-//     */
-//    private String date;
-//
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//
-//    /**
-//     * 基金资产值
-//     */
-//    private Double fundAssetSize;
-//
-//}

+ 0 - 45
src/main/java/com/smppw/analysis/domain/dataobject/ManualFundFeeDo.java

@@ -1,45 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 14:30
-// * @description 公募基金费率信息
-// */
-//@Data
-//public class ManualFundFeeDo {
-//
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//    /**
-//     * 费率类别
-//     * 10210 - 认购费场外前端
-//     * 11010 - 日常申购费前端
-//     * 11210 - 日常申购费场外前端
-//     * 12000 - 日常赎回费
-//     * 12200 - 日常赎回费场外
-//     * 15000 - 管理费
-//     * 16000 - 托管费
-//     * 19000 - 营销费
-//     */
-//    private String chargeRateType;
-//
-//    /**
-//     * 费率描述
-//     */
-//    private String chargeRateDes;
-//
-//    /**
-//     * 费率划分标准范围Ⅰ起始数值
-//     */
-//    private Double stDivStand1;
-//
-//    /**
-//     * 费率划分标准范围Ⅰ截止数值
-//     */
-//    private Double enDivStand1;
-//
-//}

+ 0 - 33
src/main/java/com/smppw/analysis/domain/dataobject/ManualFundPurchaseRedeemDO.java

@@ -1,33 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-//
-///**
-// * @author wangzaijun
-// * @date 2023/5/24 16:03
-// * @description 公募基金的经理在管的所有基金的某个日期的资产值
-// */
-//@Data
-//public class ManualFundPurchaseRedeemDO {
-//
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//
-//    /**
-//     * 结束日期
-//     */
-//    private String endDate;
-//
-//    /**
-//     * 机构场外代销申购状态
-//     */
-//    private String applyingType;
-//
-//    /**
-//     * 机构场外代销赎回状态
-//     */
-//    private String redeemType;
-//}

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

@@ -1,38 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/18 14:00
-// * @description 私募基金基本信息
-// */
-//@Data
-//public class MfFundArchivesInfoDo {
-//
-//    /**
-//     * 交易场所
-//     */
-//    private Integer applyingMarket;
-//
-//    /**
-//     * 初始份额
-//     */
-//    private String initialShare;
-//
-//    /**
-//     * 初始份额日期
-//     */
-//    private String initialDate;
-//
-//    /**
-//     * 最低申购金额,文字+数值+日期展示
-//     */
-//    private String lowestApplyAmount;
-//
-//    /**
-//     * 最低赎回份额,文字+数值+日期展示
-//     */
-//    private String lowestSumRedemption;
-//
-//}

+ 0 - 37
src/main/java/com/smppw/analysis/domain/dataobject/MfManagerFundNumDo.java

@@ -1,37 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 19:30
-// * @description 公募基金的基金经理管理的基金信息
-// */
-//@Data
-//public class MfManagerFundNumDo {
-//
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//
-//    /**
-//     * 基金经理id
-//     */
-//    private String managerId;
-//
-//    /**
-//     * 基金管理开始时间
-//     */
-//    private String startDate;
-//
-//    /**
-//     * 基金管理结束时间
-//     */
-//    private String endDate;
-//
-//    /**
-//     * 基金运行状态:1-募集中、2-开放运行、3-封闭运行(已废弃)、4-提前清算、5-到期清算、6-发行失败、7-投顾协议已终止、 8-延期清算 -1-其他 9-非正常清算 10-已终止 11-已作废
-//     */
-//    private Integer status;
-//}

+ 0 - 219
src/main/java/com/smppw/analysis/domain/dataobject/PersonnelInformationDo.java

@@ -1,219 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.util.Date;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 15:30
-// * @description 人员信息
-// */
-//@Setter
-//@Getter
-//public class PersonnelInformationDo {
-//    /**
-//     * 人员id
-//     */
-//    private String personnelId;
-//
-//    /**
-//     * 姓名
-//     */
-//    private String personnelName;
-//
-//    /**
-//     * 性别
-//     */
-//    private Integer sex;
-//
-//    /**
-//     * 人员头像,93
-//     */
-//    private String avatar;
-//
-//    /**
-//     * 人员头像,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 - 38
src/main/java/com/smppw/analysis/domain/dataobject/PersonnelWorkExperienceDo.java

@@ -1,38 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 16:00
-// * @description 人员任职经历
-// */
-//@Data
-//public class PersonnelWorkExperienceDo {
-//
-//    /**
-//     * 人员id
-//     */
-//    private String personnelId;
-//
-//    /**
-//     * 任职公司
-//     */
-//    private String companyName;
-//
-//    /**
-//     * 任职开始时间
-//     */
-//    private String startDate;
-//
-//    /**
-//     * 任职结束时间
-//     */
-//    private String endDate;
-//
-//    /**
-//     * 任职期间职务
-//     */
-//    private String position;
-//
-//}

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

@@ -1,77 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.math.BigDecimal;
-//import java.util.Date;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/9 9:59
-// * @description 公募基金持有人结构数据库实体
-// */
-//@Setter
-//@Getter
-//public class PubliclyFundHolderInfoDO {
-//    /**
-//     *
-//     */
-//    private String fundId;
-//    /**
-//     *
-//     */
-//    private Date endDate;
-//    /**
-//     * 个人持有比例
-//     */
-//    private BigDecimal individualHoldRatio;
-//    /**
-//     * 个人持有份额
-//     */
-//    private BigDecimal individualHoldShares;
-//    /**
-//     * 机构持有比例
-//     */
-//    private BigDecimal institutionHoldRatio;
-//    /**
-//     * 机构持有份额
-//     */
-//    private BigDecimal institutionHoldShares;
-//    /**
-//     * ETF基金持有比例
-//     */
-//    private BigDecimal etfFeederHoldRatio;
-//    /**
-//     * ETF基金持有份额
-//     */
-//    private BigDecimal etfFeederHoldShares;
-//    /**
-//     * 内部持有比例
-//     */
-//    private BigDecimal professionalHoldRatio;
-//    /**
-//     * 内部持有份额
-//     */
-//    private BigDecimal professionalHoldShares;
-//    /**
-//     * 前十大持有人持有份额合计
-//     */
-//    private BigDecimal top10HolderAmount;
-//    /**
-//     * 前十大持有人持有比例合计
-//     */
-//    private BigDecimal top10HoldersProportion;
-//    /**
-//     * 户均持有份额
-//     */
-//    private BigDecimal averageHoldShares;
-//    /**
-//     * 持有人户数
-//     */
-//    private Integer holderAccountNumber;
-//    /**
-//     * 未明确投资者持有份额
-//     */
-//    private BigDecimal undefinedHoldShares;
-//}

+ 0 - 49
src/main/java/com/smppw/analysis/domain/dataobject/PubliclyFundStockChangeDO.java

@@ -1,49 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.math.BigDecimal;
-//import java.util.Date;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/9 9:59
-// * @description 持仓股票重大变动
-// */
-//@Setter
-//@Getter
-//public class PubliclyFundStockChangeDO {
-//    /**
-//     *
-//     */
-//    private String fundId;
-//    /**
-//     * 报告期
-//     */
-//    private Date reportDate;
-//    /**
-//     * 股票代码
-//     */
-//    private String secCode;
-//    /**
-//     * 股票名称
-//     */
-//    private String secName;
-//    /**
-//     * 交易方向
-//     */
-//    private Integer changeType;
-//    /**
-//     * 当期累计交易金额
-//     */
-//    private BigDecimal accumulatedTradeSum;
-//    /**
-//     * 占期初基金资产净值比例
-//     */
-//    private BigDecimal ratioInNvAtBegin;
-//    /**
-//     * 占期末基金净值比例
-//     */
-//    private BigDecimal ratioInNvAtEnd;
-//}

+ 0 - 24
src/main/java/com/smppw/analysis/domain/dataobject/SecClosePriceDO.java

@@ -1,24 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/20 21:39
-// * @description 股票行情表现
-// */
-//@Setter
-//@Getter
-//public class SecClosePriceDO {
-//    private String secCode;
-//    private String tradingDay;
-//    /**
-//     * 当前价格(收盘价)
-//     */
-//    private Double closePrice;
-//    /**
-//     * 近六月涨跌幅
-//     */
-//    private Double ret6m;
-//}

+ 0 - 34
src/main/java/com/smppw/analysis/domain/dataobject/SecLiquidityInfoDO.java

@@ -1,34 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/12 11:20
-// * @description
-// */
-//@Setter
-//@Getter
-//public class SecLiquidityInfoDO {
-//    /**
-//     * 交易日
-//     */
-//    private String tradingDay;
-//    /**
-//     * 高流动性的低点
-//     */
-//    private Double lowestOne;
-//    /**
-//     * 较高流动性的低点
-//     */
-//    private Double lowestTwo;
-//    /**
-//     * 一般流动性的低点
-//     */
-//    private Double lowestThree;
-//    /**
-//     * 较低流动性的低点
-//     */
-//    private Double lowestFour;
-//}

+ 0 - 28
src/main/java/com/smppw/analysis/domain/dataobject/SecStyleInfoDO.java

@@ -1,28 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import com.smppw.constants.Consts;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.io.Serializable;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 18:33
-// * @description
-// */
-//@Setter
-//@Getter
-//public class SecStyleInfoDO implements Serializable {
-//    private static final long serialVersionUID = Consts.DEFAULT_SERIAL_VERSION_UID;
-//    private String endDate;
-//    private String secCode;
-//    /**
-//     * 市场(大盘、中盘、小盘)
-//     */
-//    private Integer market;
-//    /**
-//     * 平衡(成长、价值、平衡)
-//     */
-//    private Integer balance;
-//}

+ 0 - 26
src/main/java/com/smppw/analysis/domain/dataobject/SecTurnoverInfoDO.java

@@ -1,26 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/12 11:20
-// * @description 五日平均换手率
-// */
-//@Setter
-//@Getter
-//public class SecTurnoverInfoDO {
-//    /**
-//     * 交易日
-//     */
-//    private String tradingDay;
-//    /**
-//     * 个股代码
-//     */
-//    private String secCode;
-//    /**
-//     * 五日平均换手率
-//     */
-//    private Double turnoverValue;
-//}

+ 0 - 21
src/main/java/com/smppw/analysis/domain/dataobject/SwSecIndustryInfoDO.java

@@ -1,21 +0,0 @@
-//package com.smppw.analysis.domain.dataobject;
-//
-//import com.smppw.constants.Consts;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.io.Serializable;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 18:33
-// * @description
-// */
-//@Setter
-//@Getter
-//public class SwSecIndustryInfoDO implements Serializable {
-//    private static final long serialVersionUID = Consts.DEFAULT_SERIAL_VERSION_UID;
-//    private String secCode;
-//    private String industryCode;
-//    private String industryName;
-//}

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

@@ -0,0 +1,112 @@
+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 CmNavDo extends BaseNavDO {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 基金id,'CF'开头(后加36进制编码格式,不足8位长度左补零) 例:CF00000001
+     */
+    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;
+
+    /**
+     * 是否排排网数据
+     */
+    private Byte isPpwData;
+
+    /**
+     * 虚拟净值
+     */
+    private BigDecimal virtualNav;
+
+    @Override
+    public String getRefId() {
+        return this.fundId;
+    }
+
+    @Override
+    public String getNavDate() {
+        return DateUtil.formatDate(this.priceDate);
+    }
+
+    @Override
+    public BigDecimal getNav() {
+        return this.nav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNav() {
+        return this.cumulativeNav;
+    }
+
+    @Override
+    public BigDecimal getCumulativeNavWithdrawal() {
+        return this.cumulativeNavWithdrawal;
+    }
+}

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

@@ -1,21 +0,0 @@
-//package com.smppw.analysis.domain.dataobject.nav;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * 投顾产品拟合净值信息
-// */
-//@Setter
-//@Getter
-//public class CompanyFittedCurveDo extends CompanyNavDO {
-//    /**
-//     * 拟合后月份
-//     */
-//    private String endDate;
-//
-//    @Override
-//    public String getNavDate() {
-//        return this.endDate;
-//    }
-//}

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

@@ -1,39 +0,0 @@
-//package com.smppw.analysis.domain.dataobject.nav;
-//
-//import com.smppw.common.cache.CaffeineLocalCache;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.util.Date;
-//
-///**
-// * 投顾产品周度拟合净值信息
-// */
-//@Setter
-//@Getter
-//public class CompanyFittedCurveWeeklyDo extends CompanyNavDO {
-//    /**
-//     * 拟合后净值年周
-//     */
-//    private String yearWeek;
-//
-//    /**
-//     * 拟合后净值所在年
-//     */
-//    private String endYear;
-//
-//    /**
-//     * 拟合后净值全年所在周
-//     */
-//    private Byte weekOfYear;
-//
-//    /**
-//     * 净值日期
-//     */
-//    private Date priceDate;
-//
-//    @Override
-//    public String getNavDate() {
-//        return CaffeineLocalCache.getLastTradeDateByYearWeek(this.getYearWeek());
-//    }
-//}

+ 0 - 89
src/main/java/com/smppw/analysis/domain/dataobject/nav/CompanyNavDO.java

@@ -1,89 +0,0 @@
-//package com.smppw.analysis.domain.dataobject.nav;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.math.BigDecimal;
-//import java.util.Date;
-//
-///**
-// * 投顾产品拟合净值信息
-// */
-//@Setter
-//@Getter
-//public abstract class CompanyNavDO 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 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 getRefId() {
-//        return this.getCompanyId();
-//    }
-//
-//    @Override
-//    public BigDecimal getNav() {
-//        return cumulativeNav;
-//    }
-//
-//    @Override
-//    public BigDecimal getCumulativeNavWithdrawal() {
-//        return cumulativeNav;
-//    }
-//}

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

@@ -1,21 +0,0 @@
-//package com.smppw.analysis.domain.dataobject.nav;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * 基金经理产品拟合净值信息
-// */
-//@Setter
-//@Getter
-//public class FundManagerFittedCurveDo extends FundManagerNavDO {
-//    /**
-//     * 拟合后净值月份
-//     */
-//    private String endDate;
-//
-//    @Override
-//    public String getNavDate() {
-//        return this.endDate;
-//    }
-//}

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

@@ -1,39 +0,0 @@
-//package com.smppw.analysis.domain.dataobject.nav;
-//
-//import com.smppw.common.cache.CaffeineLocalCache;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.util.Date;
-//
-///**
-// * 基金经理产品周度拟合净值信息
-// */
-//@Setter
-//@Getter
-//public class FundManagerFittedCurveWeeklyDo extends FundManagerNavDO {
-//    /**
-//     * 拟合后净值年周
-//     */
-//    private String yearWeek;
-//
-//    /**
-//     * 拟合后净值所在年
-//     */
-//    private String endYear;
-//
-//    /**
-//     * 拟合后净值全年所在周
-//     */
-//    private Byte weekOfYear;
-//
-//    /**
-//     * 净值日期
-//     */
-//    private Date priceDate;
-//
-//    @Override
-//    public String getNavDate() {
-//        return CaffeineLocalCache.getLastTradeDateByYearWeek(this.getYearWeek());
-//    }
-//}

+ 0 - 84
src/main/java/com/smppw/analysis/domain/dataobject/nav/FundManagerNavDO.java

@@ -1,84 +0,0 @@
-//package com.smppw.analysis.domain.dataobject.nav;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.math.BigDecimal;
-//import java.util.Date;
-//
-///**
-// * 基金经理产品拟合净值信息
-// */
-//@Setter
-//@Getter
-//public abstract class FundManagerNavDO extends BaseNavDO {
-//    /**
-//     * ID自增
-//     */
-//    private Integer id;
-//
-//    /**
-//     * 基金经理id
-//     */
-//    private String fundManagerId;
-//
-//    /**
-//     * 拟合类型 1-私募综合曲线 2-私募分策略曲线 3-私募权益类曲线 4-公募综合曲线 5-公募分策略曲线 6-公募权益类曲线
-//     */
-//    private Integer curveType;
-//
-//    /**
-//     * 策略id
-//     */
-//    private Integer strategy;
-//
-//    /**
-//     * 拟合净值
-//     */
-//    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 getRefId() {
-//        return this.fundManagerId;
-//    }
-//
-//    @Override
-//    public BigDecimal getNav() {
-//        return cumulativeNav;
-//    }
-//
-//    @Override
-//    public BigDecimal getCumulativeNavWithdrawal() {
-//        return cumulativeNav;
-//    }
-//}

+ 0 - 128
src/main/java/com/smppw/analysis/domain/dto/info/FundBaseFeeVO.java

@@ -1,128 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 11:25
-// * @description 私募基金费率信息
-// */
-//@Data
-//public class FundBaseFeeVO {
-//
-//    /**
-//     * 基金id
-//     */
-//    private String fundId;
-//
-//    /**
-//     * 认购起点
-//     */
-//    private String minInvestmentShare;
-//
-//    /**
-//     * 封闭期
-//     */
-//    private String lockupPeriod;
-//
-//    /**
-//     * 托管费
-//     */
-//    private String managementFeeBank;
-//
-//    /**
-//     * 投资顾问管理费
-//     */
-//    private String managementFeeConsult;
-//
-//    /**
-//     * 认购费率
-//     */
-//    private String subscriptionFee;
-//
-//    /**
-//     *
-//     */
-//    private String subscriptionFeeNote;
-//
-//    /**
-//     * 赎回费率
-//     */
-//    private String redemptionFee;
-//
-//    /**
-//     * 赎回费率说明
-//     */
-//    private String redemptionFeeNote;
-//
-//    /**
-//     * 存续期限
-//     */
-//    private String duration;
-//
-//    /**
-//     * 开放日
-//     */
-//    private String openDay;
-//
-//    /**
-//     * 管理费率
-//     */
-//    private String managementFee;
-//
-//    /**
-//     * 业绩报酬计提率
-//     */
-//    private String performanceFee;
-//
-//    /**
-//     * 业绩报酬说明
-//     */
-//    private String performanceFeeNote;
-//
-//    /**
-//     * 业绩报酬计提对象
-//     */
-//    private String accruedWay;
-//
-//    /**
-//     * 业绩报酬计提方式
-//     */
-//    private String accruedMethod;
-//
-//    /**
-//     * 业绩报酬计提频率
-//     */
-//    private String accruedFrequency;
-//
-//    /**
-//     * 预警线
-//     */
-//    private String guardLine;
-//
-//    /**
-//     * 业绩锁定期
-//     */
-//    private String lockPeriod;
-//
-//    /**
-//     * 赎回日
-//     */
-//    private String redemptionDay;
-//
-//    /**
-//     * 基础货币
-//     */
-//    private String baseCurrency;
-//
-//    /**
-//     * 追加起点
-//     */
-//    private String subsequentInvestmentShare;
-//
-//    /**
-//     * 止损线
-//     */
-//    private String stopLossLine;
-//
-//}

+ 0 - 57
src/main/java/com/smppw/analysis/domain/dto/info/FundManagerInfoVo.java

@@ -1,57 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import com.smppw.analysis.domain.dataobject.PersonnelWorkExperienceDo;
-//import lombok.Data;
-//
-//import java.util.List;
-//
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 15:00
-// * @description 私募基金详情页-基金经理
-// */
-//@Data
-//public class FundManagerInfoVo {
-//
-//    /**
-//     * 基金经理id
-//     */
-//    private String managerId;
-//
-//    /**
-//     * 基金经理名字
-//     */
-//    private String managerName;
-//
-//    /**
-//     * 任务头像1
-//     */
-//    private String avatar;
-//
-//    /**
-//     * 人物头像2
-//     */
-//    private String avatar2;
-//
-//    /**
-//     * 最新职务
-//     */
-//    private String latestPosition;
-//
-//    /**
-//     * 学历
-//     */
-//    private String education;
-//
-//    /**
-//     * 经理简历
-//     */
-//    private String profile;
-//
-//    /**
-//     * 基金经理工作履历
-//     */
-//    List<PersonnelWorkExperienceDo> managerWorkExperienceList;
-//
-//}

+ 0 - 31
src/main/java/com/smppw/analysis/domain/dto/info/FundOpenDayVO.java

@@ -1,31 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import lombok.Builder;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/18 15:00
-// * @description 开放日字段处理
-// */
-//@Getter
-//@Setter
-//@Builder
-//public class FundOpenDayVO {
-//
-//    /**
-//     * 类型
-//     */
-//    private String type;
-//
-//    /**
-//     * 开始日期
-//     */
-//    private String startDate;
-//
-//    /**
-//     * 结束日期
-//     */
-//    private String endDate;
-//}

+ 0 - 43
src/main/java/com/smppw/analysis/domain/dto/info/FundSimilarParams.java

@@ -1,43 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import com.smppw.common.pojo.enums.RaiseType;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/3/22 16:58
-// * @description 相似产品 接口请求参数
-// */
-//@Setter
-//@Getter
-//public class FundSimilarParams {
-//    public static final String DEFAULT_THRESHOLD = "0.85";
-//    private String appKey;
-//    /**
-//     * 基金id
-//     */
-//    private String secId;
-//    /**
-//     * 管理人id
-//     */
-//    private String trustId;
-//    /**
-//     * 1-市场同策略,2-管理人同策略
-//     */
-//    private Integer calcType = 2;
-//    /**
-//     * 相关性阈值,小数
-//     */
-//    private String threshold = DEFAULT_THRESHOLD;
-//
-//    private RaiseType raiseType;
-//    /**
-//     * 末级策略,head-info接口返回的
-//     */
-//    private String strategy;
-//
-//    private String benchmarkId;
-//
-//    private String startDate;
-//}

+ 0 - 22
src/main/java/com/smppw/analysis/domain/dto/info/FundSimilarVO.java

@@ -1,22 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//@Setter
-//@Getter
-//public class FundSimilarVO {
-//    private String fundId;
-//    private String fundName;
-//    private String strategy;
-//    private String subStrategy;
-//    private String thirdStrategy;
-//    private String retYtd;
-//    private String ret1y;
-//    private String retIncep;
-//    private String annualIncep;
-//    private String shapeIncep;
-//    private String maxdownIncep;
-//    private String stdDevIncep;
-//    private Double similar;
-//}

+ 0 - 46
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundFeeInfoVO.java

@@ -1,46 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import com.smppw.common.pojo.ValueLabelVO;
-//import lombok.Data;
-//
-//import java.util.List;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 14:30
-// * @description 公募基金费率信息
-// */
-//@Data
-//public class ManualFundFeeInfoVO {
-//
-//    /**
-//     * 认购费
-//     */
-//    private List<ValueLabelVO> subscriptionFee;
-//
-//    /**
-//     * 申购费
-//     */
-//    private List<ValueLabelVO> applyFee;
-//
-//    /**
-//     * 赎回费
-//     */
-//    private List<ValueLabelVO> redemptionFee;
-//
-//    /**
-//     * 管理费
-//     */
-//    private String managementFeeTrust;
-//
-//    /**
-//     * 托管费
-//     */
-//    private String managementFeeBank;
-//
-//    /**
-//     * 营销费
-//     */
-//    private String saleFee;
-//
-//}

+ 0 - 28
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundInvestInfoVO.java

@@ -1,28 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 09:25
-// * @description 投资类信息说明
-// */
-//@Data
-//public class ManualFundInvestInfoVO {
-//
-//    /**
-//     * 投资目标
-//     */
-//    private String investmentObjective;
-//
-//    /**
-//     * 投资策略
-//     */
-//    private String strategyDescription;
-//
-//    /**
-//     * 投资范围
-//     */
-//    private String investmentScope;
-//
-//}

+ 0 - 58
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundManagerChangeVO.java

@@ -1,58 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 17:00
-// * @description 公募基金的基金经理变更历史
-// */
-//@Data
-//public class ManualFundManagerChangeVO {
-//
-//    /**
-//     * 任内年化收益
-//     */
-//    private String annualRet;
-//
-//    /**
-//     * 任内卡玛比率
-//     */
-//    private String calmar;
-//
-//    /**
-//     * 任职日期
-//     */
-//    private String employDate;
-//
-//    /**
-//     * 任职天数
-//     */
-//    private String employDayNum;
-//
-//    /**
-//     * 任职期间收益
-//     */
-//    private String fundRet;
-//
-//    /**
-//     * 基金经理id
-//     */
-//    private String managerId;
-//
-//    /**
-//     * 基金经理名字
-//     */
-//    private String managerName;
-//
-//    /**
-//     * 任内最大回撤
-//     */
-//    private String maxDrawdown;
-//
-//    /**
-//     * 任内索提诺比率
-//     */
-//    private String sortino;
-//
-//}

+ 0 - 73
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundManagerInfoVO.java

@@ -1,73 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 19:10
-// * @description 公募基金详情页-基金经理
-// */
-//@Data
-//public class ManualFundManagerInfoVO {
-//
-//    /**
-//     * 头像1
-//     */
-//    private String avatar;
-//
-//    /**
-//     * 头像2
-//     */
-//    private String avatar2;
-//
-//    /**
-//     * 性别
-//     */
-//    private String gender;
-//
-//    /**
-//     * 任内年化收益率
-//     */
-//    private String annualRet;
-//
-//    /**
-//     * 任内基准增长率,基准区间收益率
-//     */
-//    private String benchmarkRet;
-//
-//    /**
-//     * 管理产品数量
-//     */
-//    private String fundNum;
-//
-//    /**
-//     * 基金经理id
-//     */
-//    private String managerId;
-//
-//    /**
-//     * 基金经理名字
-//     */
-//    private String managerName;
-//
-//    /**
-//     * 任内基金净值增长率,区间收益率
-//     */
-//    private String navChange;
-//
-//    /**
-//     * 存续产品数量
-//     */
-//    private String runningNum;
-//
-//    /**
-//     * 存续基金资产规模
-//     */
-//    private String runningScale;
-//
-//    /**
-//     * 任内夏普比率
-//     */
-//    private String sharpe;
-//
-//}

+ 0 - 44
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundNoticeInfoVO.java

@@ -1,44 +0,0 @@
-//package com.smppw.analysis.domain.dto.info;
-//
-//
-//import lombok.Data;
-//
-///**
-// * @author mozuwen
-// * @date 2023/8/9 09:25
-// * @description 公募基金公共信息
-// */
-//@Data
-//public class ManualFundNoticeInfoVO {
-//
-//    /**
-//     * 附件,附件图标可下载公告文档
-//     */
-//    private String attName;
-//
-//    /**
-//     * 地址
-//     */
-//    private String attUri;
-//
-//    /**
-//     * 时间
-//     */
-//    private String date;
-//
-//    /**
-//     * 公告来源
-//     */
-//    private String media;
-//
-//    /**
-//     * 公告标题
-//     */
-//    private String title;
-//
-//    /**
-//     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告
-//     */
-//    private String type;
-//}
-//

+ 0 - 20
src/main/java/com/smppw/analysis/domain/dto/performance/RankParams.java

@@ -1,20 +0,0 @@
-//package com.smppw.analysis.domain.dto.performance;
-//
-//import com.smppw.common.pojo.enums.Indicator;
-//import lombok.Getter;
-//import lombok.Setter;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/3/3 19:25
-// * @description 业绩排名接口请求参数
-// */
-//@Setter
-//@Getter
-//public class RankParams extends BaseParams {
-//    private String appKey;
-//    /**
-//     * 选择的指标
-//     */
-//    private Indicator indicator;
-//}

+ 0 - 97
src/main/java/com/smppw/analysis/domain/manager/performance/handler/RankHandler.java

@@ -1,97 +0,0 @@
-//package com.smppw.analysis.domain.manager.performance.handler;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.map.MapUtil;
-//import cn.hutool.core.text.CharSequenceUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.smppw.analysis.domain.dto.performance.RankParams;
-//import com.smppw.analysis.domain.manager.performance.AbstractPerformance;
-//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.enums.strategy.IStrategy;
-//import com.smppw.utils.StrategyHandleUtils;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.ArrayList;
-//import java.util.LinkedHashMap;
-//import java.util.List;
-//import java.util.Map;
-//
-//@Component(PerformanceConstants.RANK)
-//public class RankHandler extends AbstractPerformance<RankParams, Map<String, Object>> {
-//    public RankHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-//        super(baseInfoService, baseIndicatorServiceV2);
-//    }
-//
-//    @Override
-//    protected Map<String, Object> bizHandle(RankParams params) {
-//        String fundId = params.getRefIds().get(0);
-//        List<String> secIds = params.getRefIds();
-//        CollUtil.addAllIfNotContains(secIds, ListUtil.of(params.getBenchmarkId()));
-//        List<String> indexIds = params.getSecIds();
-//        CollUtil.addAllIfNotContains(secIds, indexIds);
-//        IStrategy strategy = StrategyHandleUtils.getStrategy(params.getStrategy());
-//        String rankDate = this.baseInfoService.getLatestRankRat(params.getAppKey());
-//        List<Map<String, Object>> tempList = this.baseInfoService.getFundRank(rankDate, fundId, indexIds, params.getIndicator());
-//        Map<String, String> mapper = this.baseInfoService.querySecName(secIds);
-//        Map<String, String> productMapper = MapUtil.<String, String>builder(MapUtil.newHashMap(true)).putAll(mapper)
-//                .put("rank", "同策略排名")
-//                .put("strategy_avg", "同策略平均")
-//                .put("strategy_avg_99", "同策略平均(1%-99%)")
-//                .put("strategy_best", "同策略最好")
-//                .put("strategy_worst", "同策略最差")
-//                .put("percent5", "5%分位数")
-//                .put("percent25", "25%分位数")
-//                .put("percent50", "50%分位数")
-//                .put("percent75", "75%分位数")
-//                .put("percent95", "95%分位数").build();
-//        Map<String, Object> extInfos = MapUtil.<String, Object>builder("strategy", strategy.getStrategyNameDesc()).build();
-//        List<Map<String, Object>> dataset = this.getRankDataset(tempList);
-//        return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productMapper).putAll(extInfos).build();
-//    }
-//
-//    private List<Map<String, Object>> getRankDataset(List<Map<String, Object>> tempList) {
-//        String rankFiled = "fund_rank";
-//        Map<String, Map<String, Object>> resMap = new LinkedHashMap<>();
-//        if (CollUtil.isEmpty(tempList)) {
-//            return CollUtil.newArrayList();
-//        }
-//        for (Map<String, Object> unit : tempList) {
-//            String classification = MapUtil.getStr(unit, "classification");
-//            String name = MapUtil.getStr(unit, "name");
-//            if (name == null && classification == null) {
-//                continue;
-//            }
-//            List<String> keys = new ArrayList<>(unit.keySet());
-//            keys.remove("name");
-//            keys.remove("classification");
-//            for (String key : keys) {
-//                if (!resMap.containsKey(key)) {
-//                    resMap.put(key, MapUtil.newHashMap(false));
-//                }
-//                if (classification.startsWith("strategy") || classification.startsWith("percen") || classification.equals(rankFiled)) {
-//                    name = classification;
-//                }
-//                resMap.get(key).put(name, unit.get(key));
-//            }
-//        }
-//        List<Map<String, Object>> dataset = ListUtil.list(false);
-//        resMap.forEach((k, v) -> dataset.add(MapUtil.<String, Object>builder("date", k).putAll(v).build()));
-//        dataset.forEach(e -> {
-//            String rank = MapUtil.getStr(e, rankFiled);
-//            String rankCnt = MapUtil.getStr(e, "strategy_rank_cnt");
-//            String strRank = null;
-//            if (CharSequenceUtil.isAllNotBlank(rank, rankCnt)) {
-//                strRank = StrUtil.subBefore(rank, ".", false) + "/"
-//                        + StrUtil.subBefore(rankCnt, ".", false);
-//            }
-//            e.put("rank", strRank);
-//            e.remove(rankFiled);
-//            e.remove("strategy_rank_cnt");
-//        });
-//        dataset.sort((o1, o2) -> MapUtil.getStr(o2, "date").compareTo(MapUtil.getStr(o1, "date")));
-//        return dataset;
-//    }
-//}

+ 0 - 218
src/main/java/com/smppw/analysis/domain/manager/position/AbstractAnalysisBizHandler.java

@@ -1,218 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.map.MapUtil;
-//import cn.hutool.core.text.CharSequenceUtil;
-//import com.smppw.analysis.domain.dto.position.*;
-//import com.smppw.analysis.domain.dto.position.stock.StockAllocationVO;
-//import com.smppw.analysis.domain.dataobject.IndexSecWeightInfoDO;
-//import com.smppw.analysis.domain.dataobject.SwSecIndustryInfoDO;
-//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.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;
-//
-//import java.math.BigDecimal;
-//import java.math.RoundingMode;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Objects;
-//import java.util.concurrent.Executor;
-//import java.util.concurrent.ForkJoinPool;
-//import java.util.concurrent.TimeUnit;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/7/14 18:14
-// * @description 有基准的业绩分析
-// */
-//public abstract class AbstractAnalysisBizHandler<P extends BaseAnalysisParams, R> extends AbstractNonSynthesizeBizHandler<P, R> {
-//    protected static final Executor DEFAULT_EXECUTOR = ForkJoinPool.commonPool();
-//    protected final PositionAnalysisDao analysisService;
-//
-//    public AbstractAnalysisBizHandler(AnalysisProperty property, CacheFactory cacheFactory,
-//                                      PositionLoadFactory factory, PositionAnalysisDao analysisService) {
-//        super(property, cacheFactory, factory);
-//        this.analysisService = analysisService;
-//    }
-//
-//    @Override
-//    protected void checkParams(P params) {
-//        super.checkParams(params);
-//        if (CharSequenceUtil.isBlankOrUndefined(params.getBenchmarkId())) {
-//            throw new APIException("基准不能为空!");
-//        }
-//    }
-//
-//    /**
-//     * 用来过滤大类的钩子函数,可以区分股票、期货和债券,以及后续可能新增的基金
-//     *
-//     * @return /
-//     */
-//    protected AssetCategoryEnum filterAsset() {
-//        return AssetCategoryEnum.STOCK;
-//    }
-//
-//    @Override
-//    protected R afterNonSynthesizeLoadData(P params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos) {
-//        this.current = System.currentTimeMillis();
-//        // 得到持仓信息
-//        List<FundPositionDetail> dataList = positionInfos.stream().filter(e -> SecType.PUBLICLY_OFFERED_FUNDS.equals(e.getFundType()) || (e.getLevel() != null && e.getLevel() >= 4))
-//                .filter(e -> this.filterAsset().name().equals(e.getAsset().getValue())).collect(Collectors.toList());
-//        if (CollUtil.isEmpty(positionInfos)) {
-//            return null;
-//        }
-//        String benchmarkId = params.getBenchmarkId();
-//        // 日期升序
-//        List<String> dateList = positionInfos.stream().map(FundPositionDetail::getDate).distinct().sorted().collect(Collectors.toList());
-//        // 基准每个估值日的权重数据
-//        Map<String, List<IndexSecWeightInfoDO>> indexSecWeightMap = this.getSecDateWeight(benchmarkId, dateList);
-//        // 数据处理
-//        return this.afterAnalysisLoadData(benchmarkId, dataList, indexSecWeightMap);
-//    }
-//
-//    /**
-//     * 获取行业与股票对应关系 (A股)
-//     *
-//     * @return /
-//     */
-//    protected Map<ValueLabelVO, List<String>> getIndustrySecMap() {
-//        String key = RedisConst.POSITION_STOCK_INDUSTRY_KEY;
-//        Object obj = this.cacheGateway.get(key);
-//        List<SwSecIndustryInfoDO> dataList = ListUtil.list(false);
-//        if (obj != null) {
-//            dataList = CommonUtils.convertList(obj, SwSecIndustryInfoDO.class);
-//        } else {
-//            List<SwSecIndustryInfoDO> industryInfos = this.analysisService.listSecIndustryInfo();
-//            if (industryInfos != null) {
-//                dataList.addAll(industryInfos);
-//            }
-//            SaveCacheEvent<List<SwSecIndustryInfoDO>> event = new SaveCacheEvent<>(key, industryInfos,
-//                    t -> this.cacheGateway.set(key, t, RedisConst.POSITION_DAY_TTL, TimeUnit.SECONDS));
-//            this.applicationContext.publishEvent(event);
-//        }
-//        return dataList.stream().collect(Collectors.groupingBy(e -> new ValueLabelVO(e.getIndustryCode(), e.getIndustryName()),
-//                Collectors.mapping(SwSecIndustryInfoDO::getSecCode, Collectors.toList())));
-//    }
-//
-//    /**
-//     * 获取指数权重
-//     *
-//     * @param benchmarkId 基准id
-//     * @param dateList    估值日期序列
-//     * @return 对应日期的指数成分股占比
-//     */
-//    private Map<String, List<IndexSecWeightInfoDO>> getSecDateWeight(String benchmarkId, List<String> dateList) {
-//        String key = RedisConst.POSITION_INDEX_WEIGHT_KEY + benchmarkId;
-//        Map<String, List<IndexSecWeightInfoDO>> indexSecDateWeightMap = MapUtil.newHashMap(dateList.size());
-//        Map<String, Object> hmget = this.cacheGateway.hget(key);
-//        hmget.forEach((k, v) -> {
-//            if (dateList.contains(k)) {
-//                List<IndexSecWeightInfoDO> tempList = CommonUtils.convertList(v, IndexSecWeightInfoDO.class);
-//                indexSecDateWeightMap.put(k, tempList);
-//            }
-//        });
-//
-//        // 过滤不存在的日期的数据,重新从数据库获取并放入缓存
-//        List<String> dates = hmget.keySet().stream().map(Object::toString).distinct().collect(Collectors.toList());
-//        List<String> realDates = CollUtil.subtractToList(dateList, dates);
-//        for (String date : realDates) {
-//            List<IndexSecWeightInfoDO> indexSecWeightList;
-//            Object hget = this.cacheGateway.hget(key, date);
-//            if (hget == null) {
-//                indexSecWeightList = this.analysisService.listIndexSecWeight(benchmarkId, date);
-//                SaveCacheEvent<List<IndexSecWeightInfoDO>> event = new SaveCacheEvent<>(key, indexSecWeightList,
-//                        t -> this.cacheGateway.hset(key, date, t, RedisConst.POSITION_MONTH_TTL, TimeUnit.SECONDS));
-//                this.applicationContext.publishEvent(event);
-//            } else {
-//                indexSecWeightList = CommonUtils.convertList(hget, IndexSecWeightInfoDO.class);
-//            }
-//            indexSecDateWeightMap.putIfAbsent(date, indexSecWeightList);
-//        }
-//        return indexSecDateWeightMap;
-//    }
-//
-//    /**
-//     * 得到数据化的逻辑处理
-//     *
-//     * @param benchmarkId     基准id
-//     * @param positionDetails 持仓详情
-//     * @param indexWeightMap  指数权重
-//     * @return /
-//     */
-//    protected abstract R afterAnalysisLoadData(String benchmarkId, List<FundPositionDetail> positionDetails,
-//                                               Map<String, List<IndexSecWeightInfoDO>> indexWeightMap);
-//
-//    /**
-//     * 构建分析结果集
-//     *
-//     * @param positionDetails 当前日期下的
-//     * @param total           股票总市值
-//     * @param categoryCodes   有分类的所有股票代码
-//     * @param secWeightList   指数成分占比
-//     * @param secCodes        分类下的所有股票代码
-//     * @return /
-//     */
-//    protected CategoryConstraint buildCategoryConstraint(List<FundPositionDetail> positionDetails, BigDecimal total, List<String> categoryCodes,
-//                                                         List<IndexSecWeightInfoDO> secWeightList, List<String> secCodes) {
-//        if (categoryCodes == null) {
-//            categoryCodes = ListUtil.list(false);
-//        }
-//        CategoryConstraint constraint = new CategoryConstraint();
-//        BigDecimal pupil = BigDecimal.ZERO;
-//        if (total != null && total.compareTo(BigDecimal.ZERO) > 0) {
-//            // 找到同风格的基金成分
-//            BigDecimal indexWeight = secWeightList.stream().filter(e -> secCodes.contains(e.getSecCode())).map(IndexSecWeightInfoDO::getWeight)
-//                    .reduce(BigDecimal::add).map(e -> e.divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP)).orElse(BigDecimal.ZERO);
-//            List<FundPositionDetail> collect = positionDetails.stream().filter(e -> secCodes.contains(e.getRef().getValue())).collect(Collectors.toList());
-//            categoryCodes.addAll(collect.stream().map(e -> e.getRef().getValue()).distinct().collect(Collectors.toList()));
-//            BigDecimal bull = collect.stream().filter(e -> Objects.equals(1, e.getSharesNature())).map(FundPositionDetail::getMarketValue)
-//                    .reduce(BigDecimal::add).map(e -> e.divide(total, 6, RoundingMode.HALF_UP)).orElse(BigDecimal.ZERO);
-//            BigDecimal bear = collect.stream().filter(e -> Objects.equals(2, e.getSharesNature())).map(FundPositionDetail::getMarketValue).reduce(BigDecimal::add)
-//                    .map(BigDecimal::abs).map(e -> BigDecimal.valueOf(-1).multiply(e)).map(e -> e.divide(total, 6, RoundingMode.HALF_UP)).orElse(BigDecimal.ZERO);
-//            constraint.setBull(bull);
-//            constraint.setBear(bear);
-//            // 多空
-//            pupil = bull.add(bear);
-//            constraint.setBenchmark(indexWeight);
-//        }
-//        constraint.setPupil(pupil);
-//        return constraint;
-//    }
-//
-//    /**
-//     * 返回归因分析结果,包括处理其他分类
-//     *
-//     * @param date               当前估值日期
-//     * @param positionDetails    当前估值日期的持仓数据
-//     * @param total              总市值
-//     * @param indexSecWeightList 指数成分占比
-//     * @param constraintList     分析结果集
-//     * @param categoryCodes      所有已有的分类股票代码集合,用来获取other代码
-//     * @return /
-//     */
-//    protected StockAllocationVO getStockAllocationVO(String date, List<FundPositionDetail> positionDetails,
-//                                                     BigDecimal total, List<IndexSecWeightInfoDO> indexSecWeightList,
-//                                                     List<CategoryConstraint> constraintList, List<String> categoryCodes) {
-//        List<String> secCodes = positionDetails.stream().map(e -> e.getRef().getValue()).distinct().collect(Collectors.toList());
-//        List<String> otherCodes = CollUtil.subtractToList(secCodes, categoryCodes);
-//        if (CollUtil.isNotEmpty(otherCodes)) {
-//            CategoryConstraint constraint = this.buildCategoryConstraint(positionDetails, total, categoryCodes, indexSecWeightList, otherCodes);
-//            constraint.setCategory(OTHER);
-//            constraintList.add(constraint);
-//        }
-//        // 按多空降序
-//        constraintList.sort(((o1, o2) -> o2.getPupil().compareTo(o1.getPupil())));
-//        StockAllocationVO vo = new StockAllocationVO();
-//        vo.setDate(date);
-//        vo.setIndustries(constraintList);
-//        return vo;
-//    }
-//}

+ 0 - 156
src/main/java/com/smppw/analysis/domain/manager/position/AbstractBizHandler.java

@@ -1,156 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.text.CharSequenceUtil;
-//import cn.hutool.json.JSONUtil;
-//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.dto.position.PositionConstants;
-//import com.smppw.analysis.domain.event.SaveCacheEvent;
-//import com.smppw.analysis.domain.gateway.CacheFactory;
-//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;
-//import org.springframework.beans.BeansException;
-//import org.springframework.context.ApplicationContext;
-//import org.springframework.context.ApplicationContextAware;
-//import org.springframework.lang.NonNull;
-//
-//import java.util.List;
-//import java.util.concurrent.TimeUnit;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/7 15:04
-// * @description 抽象的业务处理器,加载数据用本地缓存存储
-// */
-//public abstract class AbstractBizHandler<P extends BaseParams, R> implements BizHandler<P, R>, ApplicationContextAware {
-//    protected static final ValueLabelVO OTHER = PositionConstants.OTHER_ASSET;
-//    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
-//    protected final CacheGateway<Object> cacheGateway;
-//    protected final PositionLoadFactory factory;
-//    protected ApplicationContext applicationContext;
-//    protected long current;
-//    private long executeTime;
-//
-//    public AbstractBizHandler(AnalysisProperty property, CacheFactory cacheFactory, PositionLoadFactory factory) {
-//        this.factory = factory;
-//        this.cacheGateway = cacheFactory.getCacheGateway(property.getCacheType());
-//    }
-//
-//    @Override
-//    public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
-//        this.applicationContext = applicationContext;
-//    }
-//
-//    /**
-//     * 模板方法,是否返回所有数据,默认否。否的时候做时间过滤
-//     *
-//     * @return /
-//     */
-//    protected boolean isAllPositionData() {
-//        return false;
-//    }
-//
-//    @Override
-//    public long getExecuteTime() {
-//        return this.executeTime;
-//    }
-//
-//    /**
-//     * 参数校验,子类可以覆盖重写
-//     *
-//     * @param params 请求参数
-//     */
-//    protected void checkParams(P params) {
-//        if (CharSequenceUtil.isBlankOrUndefined(params.getFundId())) {
-//            throw new APIException("基金id不能为空!");
-//        }
-//        if (CharSequenceUtil.isBlankOrUndefined(params.getStartDate()) || CharSequenceUtil.isBlankOrUndefined(params.getEndDate())) {
-//            throw new APIException("时间区间不能为空!");
-//        }
-//    }
-//
-//
-//    /**
-//     * 接口业务处理
-//     *
-//     * @param params 请求参数
-//     * @return R类型数据
-//     */
-//    @Override
-//    public R bizHandle(P params) {
-//        this.current = System.currentTimeMillis();
-//        try {
-//            this.checkParams(params);
-//            List<FundPositionBaseInfo> fundPositionBaseInfos = this.loadFundPositionBaseInfo(params);
-//            List<FundPositionDetail> positionInfos = this.loadPositionData(params);
-//            if (!this.isAllPositionData() && CollUtil.isNotEmpty(positionInfos)) {
-//                // 数量变化处理后时段过滤
-//                positionInfos = positionInfos.stream().filter(e -> params.getStartDate().compareTo(e.getDate()) <= 0)
-//                        .filter(e -> params.getEndDate().compareTo(e.getDate()) >= 0).collect(Collectors.toList());
-//            }
-//            if (CollUtil.isNotEmpty(positionInfos)) {
-//                positionInfos = positionInfos.stream().filter(e -> e.getRef() != null).collect(Collectors.toList());
-//            }
-//            return this.afterLoadData(params, fundPositionBaseInfos, positionInfos);
-//        } catch (Exception e) {
-//            logger.warn(String.format("接口【%s】请求错误:%s", JSONUtil.toJsonStr(params), e.getMessage()));
-//            return null;
-//        } finally {
-//            // 会不会获取到别的线程的数据?
-//            this.executeTime = System.currentTimeMillis() - this.current;
-//        }
-//    }
-//
-//    /**
-//     * 提供给子类实现的数据转换逻辑接口
-//     *
-//     * @param params        请求参数
-//     * @param baseInfos     基金的基本持仓信息,总资产和净资产
-//     * @param positionInfos 获取到的所有持仓信息,过滤了资产大类为null、成分为null的数据
-//     * @return /
-//     */
-//    protected abstract R afterLoadData(P params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos);
-//
-//    /**
-//     * 同步的获取基金的持仓信息,获取后放入缓存
-//     * synchronized 关键字被优化过,所以这里可以直接使用。当并发特别大时可以考虑细化该锁
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    private synchronized List<FundPositionBaseInfo> loadFundPositionBaseInfo(P params) {
-//        PositionLoad loadInstance = this.factory.getPositionLoadInstance(params.getFundId());
-//        return loadInstance.getFundPositionBaseInfo(params);
-//    }
-//
-//    /**
-//     * 同步的获取基金的持仓信息,获取后放入缓存
-//     * synchronized 关键字被优化过,所以这里可以直接使用。当并发特别大时可以考虑细化该锁
-//     *
-//     * @param params 请求参数
-//     * @return /
-//     */
-//    private synchronized List<FundPositionDetail> loadPositionData(P params) {
-//        String key = RedisConst.POSITION_DETAIL_KEY;
-//        String item = params.getFundId();
-//        Object hget = this.cacheGateway.hget(key, item);
-//        if (hget != null) {
-//            return CommonUtils.convertList(hget, FundPositionDetail.class);
-//        }
-//        PositionLoad loadInstance = this.factory.getPositionLoadInstance(params.getFundId());
-//        List<FundPositionDetail> positionInfoList = loadInstance.loadPositionDetail(params);
-//        SaveCacheEvent<List<FundPositionDetail>> event = new SaveCacheEvent<>(key, positionInfoList,
-//                t -> this.cacheGateway.hset(key, item, t, 1, TimeUnit.DAYS));
-//        this.applicationContext.publishEvent(event);
-//        return positionInfoList;
-//    }
-//}

+ 0 - 73
src/main/java/com/smppw/analysis/domain/manager/position/AbstractNonSynthesizeBizHandler.java

@@ -1,73 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.map.MapUtil;
-//import com.smppw.analysis.domain.dto.position.BaseParams;
-//import com.smppw.analysis.domain.dto.position.CategoryConstraint;
-//import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.analysis.domain.gateway.CacheFactory;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import com.smppw.constants.SecType;
-//import com.smppw.utils.BigDecimalUtils;
-//
-//import java.math.BigDecimal;
-//import java.math.RoundingMode;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Objects;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/15 19:13
-// * @description 非综合类的组件抽象
-// */
-//public abstract class AbstractNonSynthesizeBizHandler<P extends BaseParams, R> extends AbstractBizHandler<P, R> {
-//    public AbstractNonSynthesizeBizHandler(AnalysisProperty property, CacheFactory cacheFactory, PositionLoadFactory factory) {
-//        super(property, cacheFactory, factory);
-//    }
-//
-//    @Override
-//    protected R afterLoadData(P params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos) {
-//        if (CollUtil.isNotEmpty(positionInfos)) {
-//            // 过滤掉没有识别到大类的、多空轧差后数量为null的和私募基金的subType!=20的
-//            positionInfos = positionInfos.stream().filter(e -> e.getAsset() != null).filter(e -> e.getNumber() != null)
-//                    .filter(e -> SecType.PUBLICLY_OFFERED_FUNDS.equals(e.getFundType()) || (e.getSubType() != null && e.getSubType() != 20))
-//                    .collect(Collectors.toList());
-//        }
-//        return this.afterNonSynthesizeLoadData(params, baseInfos, positionInfos);
-//    }
-//
-//    protected abstract R afterNonSynthesizeLoadData(P params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos);
-//
-//    @Deprecated
-//    protected CategoryConstraint calcCategoryWeight(BigDecimal total, Map<ValueLabelVO, List<Map<String, Object>>> indexStyleMap,
-//                                                    ValueLabelVO category, List<Map<String, Object>> categoryList) {
-//        // 同风格(行业、风格或流动性)指数成分权重汇总
-//        BigDecimal indexWeight = BigDecimal.ZERO;
-//        if (indexStyleMap != null && indexStyleMap.get(category) != null) {
-//            indexWeight = indexStyleMap.get(category).stream().map(e -> MapUtil.get(e, "weight", BigDecimal.class)).reduce(BigDecimal::add)
-//                    .map(e -> e.divide(new BigDecimal("100"), 18, RoundingMode.HALF_UP)).orElse(BigDecimal.ZERO);
-//        }
-//        // 同风格(行业、风格或流动性)多头市值汇总
-//        BigDecimal bullMv = categoryList.stream().filter(e -> Objects.equals("1", MapUtil.getStr(e, "sharesNature")))
-//                .map(e -> MapUtil.get(e, "marketValue", BigDecimal.class)).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-//        // 同风格(行业、风格或流动性)空头市值汇总,并取负数
-//        BigDecimal bearMv = categoryList.stream().filter(e -> Objects.equals("2", MapUtil.getStr(e, "sharesNature")))
-//                .map(e -> MapUtil.get(e, "marketValue", BigDecimal.class)).reduce(BigDecimal::add)
-//                .map(e -> BigDecimalUtils.toBigDecimal("-1").multiply(e)).orElse(BigDecimal.ZERO);
-//        CategoryConstraint temp = new CategoryConstraint();
-//        temp.setCategory(category);
-//        // 求权重
-//        BigDecimal bull = total == null || total.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : bullMv.divide(total, 6, RoundingMode.HALF_UP);
-//        BigDecimal bear = total == null || total.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : bearMv.divide(total, 6, RoundingMode.HALF_UP);
-//        temp.setBull(bull);
-//        temp.setBear(bear);
-//        // 多空
-//        temp.setPupil(bull.subtract(bear.abs()));
-//        temp.setBenchmark(indexWeight.setScale(6, RoundingMode.HALF_UP));
-//        return temp;
-//    }
-//}

+ 0 - 10
src/main/java/com/smppw/analysis/domain/manager/position/AbstractPositionLoad.java

@@ -1,10 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 9:23
-// * @description 抽象实现
-// */
-//public abstract class AbstractPositionLoad implements PositionLoad {
-//
-//}

+ 0 - 21
src/main/java/com/smppw/analysis/domain/manager/position/BizHandler.java

@@ -1,21 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import com.smppw.analysis.domain.dto.position.BaseParams;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/7/14 17:07
-// * @description 持仓分析业务处理接口
-// */
-//public interface BizHandler<P extends BaseParams, R> {
-//    R bizHandle(P params);
-//
-//    /**
-//     * 获取执行时长
-//     *
-//     * @return 时长,单位ms
-//     */
-//    default long getExecuteTime() {
-//        return 0L;
-//    }
-//}

+ 0 - 26
src/main/java/com/smppw/analysis/domain/manager/position/BizHandlerConstants.java

@@ -1,26 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/7/14 17:35
-// * @description 持仓分析服务名静态常量
-// */
-//public final class BizHandlerConstants {
-//    public static final String ASSET_ALLOCATION = "assetAllocation";
-//    public static final String LEVERAGE_CHANGE = "leverageChange";
-//    public static final String POSITION_LIST = "positionList";
-//    public static final String POSITION_PARAMS = "positionParams";
-//    public static final String CHANGE_NUMBER = "changeNumber";
-//    public static final String STOCK_CONCENTRATION = "stockConcentration";
-//    public static final String INDUSTRY_ALLOCATION = "industryAllocation";
-//    public static final String LIQUIDITY_ALLOCATION = "liquidityAllocation";
-//    public static final String RISK_EXPOSURE = "riskExposure";
-//    public static final String STOCK_PERFORMANCE_ATTRIBUTION = "stockPerformanceAttribution";
-//    public static final String STYLE_ALLOCATION = "styleAllocation";
-//    public static final String MARGINAL_RISK_CONTRIBUTION = "marginalRiskContribution";
-//    public static final String BOND_CONCENTRATION = "bondConcentration";
-//
-//    private BizHandlerConstants() {
-//
-//    }
-//}

+ 0 - 35
src/main/java/com/smppw/analysis/domain/manager/position/BizHandlerFactory.java

@@ -1,35 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import cn.hutool.core.map.MapUtil;
-//import cn.hutool.core.text.CharSequenceUtil;
-//import com.smppw.analysis.domain.dto.position.BaseParams;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.Map;
-//
-//@Component
-//public class BizHandlerFactory {
-//    private static final BizHandler<BaseParams, Object> EMPTY = p -> null;
-//    private static final Map<String, BizHandler<? extends BaseParams, ?>> BIZ_HANDLER_STRATEGY = MapUtil.newHashMap(16);
-//
-//    public BizHandlerFactory(Map<String, BizHandler<? extends BaseParams, ?>> bizHandlerMap) {
-//        BIZ_HANDLER_STRATEGY.putAll(bizHandlerMap);
-//    }
-//
-//    @SuppressWarnings("unchecked")
-//    public <P extends BaseParams, R> BizHandler<P, R> getBizHandlerInstance(String strategyKey) {
-//        BizHandler<P, R> empty = (BizHandler<P, R>) EMPTY;
-//        if (CharSequenceUtil.isBlank(strategyKey)) {
-//            return empty;
-//        }
-//        BizHandler<? extends BaseParams, ?> bizHandler = BIZ_HANDLER_STRATEGY.get(strategyKey);
-//        if (bizHandler == null) {
-//            return empty;
-//        }
-//        try {
-//            return (BizHandler<P, R>) bizHandler;
-//        } catch (Exception e) {
-//            return empty;
-//        }
-//    }
-//}

+ 0 - 32
src/main/java/com/smppw/analysis/domain/manager/position/PositionLoad.java

@@ -1,32 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//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 java.util.List;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/7 9:33
-// * @description 数据加载接口,提供统一的获取规定数据的接口
-// */
-//public interface PositionLoad {
-//    /**
-//     * 获取基金持仓基本信息,包括总资产、资产净值等
-//     *
-//     * @param params 请求参数
-//     * @param <P>    类型参数
-//     * @return 区间内每个估值日期的基本信息
-//     */
-//    <P extends BaseParams> List<FundPositionBaseInfo> getFundPositionBaseInfo(P params);
-//
-//    /**
-//     * 获取基金持仓详情,后续可以把市值、占比和标的提取出来,加快部分接口接口响应
-//     *
-//     * @param <P>    类型参数
-//     * @param params 请求参数
-//     * @return 区间内每个估值日期的成份持仓详情
-//     */
-//    <P extends BaseParams> List<FundPositionDetail> loadPositionDetail(P params);
-//}

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

@@ -1,25 +0,0 @@
-//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() {
-//    }
-//}

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

@@ -1,59 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.map.MapUtil;
-//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 org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/7 14:04
-// * @description 价值持仓数据的工厂
-// */
-//@Component
-//public class PositionLoadFactory {
-//    private static final Logger LOGGER = LoggerFactory.getLogger(PositionLoadFactory.class);
-//    private static final Map<String, PositionLoad> LOAD_STRATEGY = MapUtil.newHashMap(8);
-//    private final BaseInfoService secTypeService;
-//
-//    public PositionLoadFactory(Map<String, PositionLoad> loadMap, BaseInfoService secTypeService) {
-//        LOAD_STRATEGY.putAll(loadMap);
-//        this.secTypeService = secTypeService;
-//    }
-//
-//    /**
-//     * 提供一个根据基金id获取持仓数据加载接口的方法,没有找到的话返回一个空数据的策略接口并记录日志
-//     * 仅支持私有基金和公募基金,不支持私募基金了
-//     *
-//     * @param fundId 基金id
-//     * @return 数据加载策略
-//     */
-//    public PositionLoad getPositionLoadInstance(String fundId) {
-//        List<String> supportTypes = ListUtil.of(PositionLoadConstants.PUBLICLY_FUND);
-//        String secType = this.secTypeService.getSecType(fundId);
-//        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
-//                public <P extends BaseParams> List<FundPositionBaseInfo> getFundPositionBaseInfo(P params) {
-//                    return ListUtil.empty();
-//                }
-//                @Override
-//                public <P extends BaseParams> List<FundPositionDetail> loadPositionDetail(P params) {
-//                    return ListUtil.empty();
-//                }
-//            };
-//        } else {
-//            return LOAD_STRATEGY.get(type);
-//        }
-//    }
-//}

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

@@ -1,30 +0,0 @@
-//package com.smppw.fofapi.service.position;
-//
-//import com.smppw.fofapi.conts.SecType;
-//import com.smppw.analysis.domain.dto.position.BaseParams;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.fofapi.service.CmFundPositionService;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.List;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/7 9:52
-// * @description 私有基金持仓数据获取逻辑,直接继承私募基金处理接口
-// */
-//@Component(PositionLoadConstants.PRIVATE_FUND)
-//public class PrivatePositionLoad extends PrivatelyFundPositionLoad {
-//    public PrivatePositionLoad(CmFundPositionService cmFundPositionService) {
-//        super(cmFundPositionService);
-//    }
-//
-//    @Override
-//    public <P extends BaseParams> List<FundPositionDetail> loadPositionDetail(P params) {
-//        List<FundPositionDetail> dataList = super.loadPositionDetail(params);
-//        for (FundPositionDetail detail : dataList) {
-//            detail.setFundType(SecType.PRIVATE_FUND);
-//        }
-//        return dataList;
-//    }
-//}

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

@@ -1,126 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.smppw.analysis.domain.dto.position.*;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.List;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/7 9:52
-// * @description 私募基金持仓数据获取逻辑,私募基金的支持会在基础上做自建基金,不直接支持私募基金的持仓分析
-// */
-//@Component(PositionLoadConstants.PRIVATELY_OFFERED_FUND)
-//public class PrivatelyFundPositionLoad extends AbstractPositionLoad {
-//    private final CmFundPositionService cmFundPositionService;
-//
-//    public PrivatelyFundPositionLoad(CmFundPositionService cmFundPositionService) {
-//        this.cmFundPositionService = cmFundPositionService;
-//    }
-//
-//    @Override
-//    public <P extends BaseParams> List<FundPositionBaseInfo> getFundPositionBaseInfo(P params) {
-//        List<CmUserValuationTableDO> dataList = this.cmFundPositionService.fundPositionBaseInfos(params.getFundId(),
-//                params.getStartDate(), params.getEndDate());
-//        List<FundPositionBaseInfo> resultList = ListUtil.list(false);
-//        for (CmUserValuationTableDO temp : dataList) {
-//            if (temp == null || temp.getValuationDate() == null) {
-//                continue;
-//            }
-//            FundPositionBaseInfo info = new FundPositionBaseInfo();
-//            info.setFundId(temp.getFundId());
-//            info.setDate(DateUtil.formatDate(temp.getValuationDate()));
-//            info.setTotalAsset(temp.getTotalMarketValue());
-//            info.setAssetNv(temp.getNetAssetMarketValue());
-//            info.setIncrement(temp.getIncrement());
-//            resultList.add(info);
-//        }
-//        return resultList;
-//    }
-//
-//    @Override
-//    public <P extends BaseParams> List<FundPositionDetail> loadPositionDetail(P params) {
-//        List<CmFundPositionDetailDO> dataList = this.cmFundPositionService.fundPositionDetailList(params.getFundId());
-//        List<FundPositionDetail> resultList = ListUtil.list(false);
-//        for (CmFundPositionDetailDO temp : dataList) {
-//            if (temp == null || temp.getValuationDate() == null || temp.getSecuritiesCode() == null || temp.getSubType() == null) {
-//                continue;
-//            }
-//            FundPositionDetail detail = new FundPositionDetail();
-//            detail.setFundId(temp.getFundId());
-//            detail.setFundType(SecType.PRIVATELY_OFFERED_FUND);
-//            detail.setSubjectCode(temp.getSubjectCode());
-//            detail.setLevel(temp.getLevel());
-//            detail.setSubType(temp.getSubType());
-//            String date = DateUtil.formatDate(temp.getValuationDate());
-//            detail.setDate(date);
-//            detail.setRef(new ValueLabelVO(temp.getSecuritiesCode(), temp.getSecuritiesName()));
-//            detail.setAsset(this.buildAssetValueLabel(temp));
-//            detail.setMarketValue(temp.getMarketValue());
-//            detail.setRatioNv(temp.getMarketValueRatio());
-//            detail.setNumber(temp.getSecuritiesAmount());
-//            BigDecimal increment = temp.getIncrement();
-//            detail.setValueChange(increment);
-//            detail.setCost(temp.getNetCost());
-//            detail.setSuspension(temp.getHaltInfo());
-//            detail.setSharesNature(temp.getLongShort());
-//            detail.setSecId(temp.getSecId());
-//            resultList.add(detail);
-//        }
-//        // 分组合并数据,统一给私募基金做轧差处理
-////        List<FundPositionDetail> newResultList = ListUtil.list(false);
-////        List<FundPositionDetail> collect = resultList.stream()
-////                .filter(e -> e.getSubType() == null || e.getSubType() == 20).collect(Collectors.toList());
-////        if (CollUtil.isNotEmpty(collect)) {
-////            newResultList.addAll(collect);
-////        }
-////        resultList.stream().filter(e -> e.getSubType() != null && e.getSubType() != 20)
-////                .collect(Collectors.groupingBy(e -> e.getDate() + e.getRef().toString()))
-////                .forEach((ref, transfer) -> transfer.stream().reduce((a, b) -> {
-////                    a.setMarketValue(a.getMarketValue().add(b.getMarketValue()));
-////                    a.setRatioNv(a.getRatioNv().add(b.getRatioNv()));
-////                    a.setNumber(a.getNumber().add(b.getNumber()));
-////                    a.setValueChange(a.getValueChange().add(b.getValueChange()));
-////                    a.setCost(a.getCost().add(b.getCost()));
-////                    a.setSuspension(a.getSuspension());
-////                    a.setSharesNature(1); // 合并后全为1
-////                    a.setSecId(a.getSecId());
-////                    return a;
-////                }).ifPresent(newResultList::add));
-////        newResultList.sort(Comparator.comparing(FundPositionDetail::getDate));
-//        return resultList;
-//    }
-//
-//    /**
-//     * 构建资产类别关系映射
-//     *
-//     * @param detail 持仓详情信息
-//     * @return 资产类别关系映射
-//     */
-//    private ValueLabelVO buildAssetValueLabel(CmFundPositionDetailDO detail) {
-//        Integer secType = detail.getSecType();
-//        String subjectCode = detail.getSubjectCode();
-//        if (secType == null) {
-//            return null;
-//        }
-//        AssetCategoryEnum categoryEnum = null;
-//        if (secType == 0) {
-//            categoryEnum = AssetCategoryEnum.STOCK;
-//        } else if (secType == 1 && !StrUtil.containsAny(subjectCode, PositionConstants.SALE_CODES)) {
-//            // 去掉债券下的正回购和逆回购
-//            categoryEnum = AssetCategoryEnum.BOND;
-//        } else if (secType == 3 || secType == 7) {
-//            categoryEnum = AssetCategoryEnum.FUTURE;
-//        } else if (secType == 6) {
-//            categoryEnum = AssetCategoryEnum.FUND;
-//            // 去掉现金
-////        } else if (secType == 2) {
-////            categoryEnum = AssetCategoryEnum.CASH;
-//        }
-//        return AssetCategoryEnum.buildValueLabelByAsset(categoryEnum);
-//    }
-//}

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

@@ -1,92 +0,0 @@
-//package com.smppw.analysis.domain.manager.position;
-//
-//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.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;
-//
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/7 9:52
-// * @description 公募基金持仓数据获取逻辑
-// */
-//@Component(PositionLoadConstants.PUBLICLY_FUND)
-//public class PubliclyFundPositionLoad extends AbstractPositionLoad {
-//    private static final Map<Integer, AssetCategoryEnum> ASSET_TYPE_MAPPER = MapUtil.newHashMap();
-//
-//    static {
-//        ASSET_TYPE_MAPPER.put(0, AssetCategoryEnum.STOCK);
-//        ASSET_TYPE_MAPPER.put(1, AssetCategoryEnum.BOND);
-//        ASSET_TYPE_MAPPER.put(3, AssetCategoryEnum.FUTURE);
-//        ASSET_TYPE_MAPPER.put(6, AssetCategoryEnum.FUND); // 公募
-//        ASSET_TYPE_MAPPER.put(7, AssetCategoryEnum.FUND); // 私募
-//    }
-//
-//    private final PubliclyFundPositionDao publiclyFundPositionDao;
-//
-//    public PubliclyFundPositionLoad(PubliclyFundPositionDao publiclyFundPositionDao) {
-//        this.publiclyFundPositionDao = publiclyFundPositionDao;
-//    }
-//
-//    @Override
-//    public <P extends BaseParams> List<FundPositionBaseInfo> getFundPositionBaseInfo(P params) {
-//        List<FundPositionBaseInfoDO> doList = this.publiclyFundPositionDao.fundPositionBaseInfos(params.getFundId(),
-//                params.getStartDate(), params.getEndDate());
-//        List<FundPositionBaseInfo> resultList = ListUtil.list(false);
-//        for (FundPositionBaseInfoDO temp : doList) {
-//            if (temp == null || temp.getReportDate() == null) {
-//                continue;
-//            }
-//            String date = DateUtil.formatDate(temp.getReportDate());
-//            FundPositionBaseInfo info = new FundPositionBaseInfo();
-//            info.setFundId(temp.getFundId());
-//            info.setDate(date);
-//            info.setTotalAsset(temp.getTotalAsset());
-//            info.setAssetNv(temp.getAssetNv());
-//            resultList.add(info);
-//        }
-//        return resultList;
-//    }
-//
-//    @Override
-//    public <P extends BaseParams> List<FundPositionDetail> loadPositionDetail(P params) {
-//        List<FundPositionDetailDO> dataList = this.publiclyFundPositionDao.positionDetailList(params.getFundId());
-//        List<FundPositionDetail> resultList = ListUtil.list(false);
-//        for (FundPositionDetailDO temp : dataList) {
-//            if (temp == null || temp.getValuationDate() == null) {
-//                continue;
-//            }
-//            // 公募基金没有成本、估值增值、增值比例和停牌信息
-//            FundPositionDetail detail = new FundPositionDetail();
-//            detail.setFundId(temp.getFundId());
-//            detail.setFundType(SecType.PUBLICLY_OFFERED_FUNDS);
-//            detail.setDate(DateUtil.formatDate(temp.getValuationDate()));
-//            String secCode = temp.getSecuritiesCode();
-//            AssetCategoryEnum categoryEnum = ASSET_TYPE_MAPPER.get(temp.getSecType());
-//            ValueLabelVO ref = new ValueLabelVO(secCode, temp.getSecuritiesName());
-//            if (categoryEnum == AssetCategoryEnum.FUTURE && StrUtil.containsAny(secCode, PositionConstants.BOND_BREED_ARR)) {
-//                // 公募基金国债期货名称特殊处理
-//                ref = new ValueLabelVO(secCode, secCode);
-//            }
-//            detail.setRef(ref);
-//            detail.setAsset(AssetCategoryEnum.buildValueLabelByAsset(categoryEnum));
-//            detail.setMarketValue(temp.getMarketValue());
-//            detail.setRatioNv(temp.getMarketValueRatio());
-//            detail.setNumber(temp.getSecuritiesAmount());
-//            detail.setSharesNature(temp.getSharesNature());
-//            detail.setSecId(temp.getSecId());
-//            resultList.add(detail);
-//        }
-//        return resultList;
-//    }
-//}

+ 0 - 512
src/main/java/com/smppw/analysis/domain/manager/position/bond/BondPositionService.java

@@ -1,512 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.bond;
-//
-//import cn.hutool.core.collection.CollectionUtil;
-//import cn.hutool.core.collection.ListUtil;
-//import cn.hutool.core.date.DateUnit;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.map.MapUtil;
-//import com.smppw.analysis.domain.dto.position.MarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.RefMarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.bond.*;
-//import com.smppw.analysis.domain.dto.position.stock.ConcentrationVO;
-//import com.smppw.analysis.domain.dao.PubliclyFundPositionDao;
-//import com.smppw.analysis.domain.dataobject.*;
-//import com.smppw.analysis.domain.mapper.core.BondBasicInformationMapper;
-//import com.smppw.analysis.infrastructure.utils.BinarySearchUtil;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import com.smppw.utils.BigDecimalUtils;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Service;
-//
-//import java.math.BigDecimal;
-//import java.util.*;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author Rain
-// * @date 2023/6/12 10:05
-// * @description
-// */
-//@Service
-//@Slf4j
-//public class BondPositionService {
-//
-//    /**
-//     * 国债
-//     */
-//    private static final String COUNTRY_BOND = "countryBond";
-//    /**
-//     * 公司债
-//     */
-//    private static final String COMPANY_BOND = "companyBond";
-//    /**
-//     * 可转债
-//     */
-//    private static final String CONVERTIBLE_BOND = "convertibleBond";
-//    /**
-//     * 金融债
-//     */
-//    private static final String FINANCIAL_BOND = "financialBond";
-//    /**
-//     * 资产支持证券
-//     */
-//    private static final String ASSET_BACK_BOND = "assetBackBond";
-//    /**
-//     * 信用风险缓释工具
-//     */
-//    private static final String CREDIT_RISK_BOND = "creditRiskBond";
-//    /**
-//     * 其他
-//     */
-//    private static final String OTHERS = "others";
-//    private static final Map<String, List<Integer>> BOND_DESC_MAP = new HashMap<String, List<Integer>>() {
-//        private static final long serialVersionUID = -6269769194874256694L;
-//
-//        {
-//            put(COUNTRY_BOND, CollectionUtil.newArrayList(4, 5, 16));
-//            put(COMPANY_BOND, CollectionUtil.newArrayList(1, 6, 13, 14, 15, 17, 18, 19, 20, 22, 24, 26, 32, 33, 34, 35, 36, 40, 23, 31));
-//            put(CONVERTIBLE_BOND, CollectionUtil.newArrayList(10, 28, 29));
-//            put(FINANCIAL_BOND, CollectionUtil.newArrayList(2, 3, 9, 27, 39));
-//            put(ASSET_BACK_BOND, CollectionUtil.newArrayList(7, 8, 12, 21, 25));
-//            put(CREDIT_RISK_BOND, CollectionUtil.newArrayList(37, 38));
-//        }
-//    };
-//    private static final Map<Long, String> POSITION_NAME = MapUtil.newHashMap(true);
-//    private static final Map<Long, String> CREDIT_GRADING_NAME = MapUtil.newHashMap(true);
-//
-//    static {
-//        POSITION_NAME.put(1L, "最大持仓");
-//        POSITION_NAME.put(3L, "前三大持仓");
-//        POSITION_NAME.put(5L, "前五大持仓");
-//        POSITION_NAME.put(-1L, "债券持仓");
-//    }
-//
-//    static {
-//        CREDIT_GRADING_NAME.put(1000L, "AAA+");
-//        CREDIT_GRADING_NAME.put(999L, "AAA");
-//        CREDIT_GRADING_NAME.put(990L, "AAA-");
-//        CREDIT_GRADING_NAME.put(980L, "AA+");
-//        CREDIT_GRADING_NAME.put(970L, "AA");
-//        CREDIT_GRADING_NAME.put(960L, "AA-");
-//        CREDIT_GRADING_NAME.put(950L, "A+");
-//        CREDIT_GRADING_NAME.put(940L, "A");
-//        CREDIT_GRADING_NAME.put(930L, "A-");
-//        CREDIT_GRADING_NAME.put(899L, "BBB+");
-//        CREDIT_GRADING_NAME.put(895L, "BBB");
-//        CREDIT_GRADING_NAME.put(891L, "BBB-");
-//        CREDIT_GRADING_NAME.put(880L, "BB+");
-//        CREDIT_GRADING_NAME.put(870L, "BB");
-//        CREDIT_GRADING_NAME.put(860L, "BB-");
-//        CREDIT_GRADING_NAME.put(850L, "B+");
-//        CREDIT_GRADING_NAME.put(840L, "B");
-//        CREDIT_GRADING_NAME.put(830L, "B-");
-//        CREDIT_GRADING_NAME.put(799L, "CCC");
-//        CREDIT_GRADING_NAME.put(770L, "CC");
-//        CREDIT_GRADING_NAME.put(760L, "C");
-//
-//    }
-//
-//    private final Map<String, String> NAME_MAPPING = new HashMap<String, String>() {
-//        private static final long serialVersionUID = -8630175938931089463L;
-//
-//        {
-//            put(COUNTRY_BOND, "国债");
-//            put(COMPANY_BOND, "企业(公司)债");
-//            put(CONVERTIBLE_BOND, "可转债");
-//            put(FINANCIAL_BOND, "金融债");
-//            put(ASSET_BACK_BOND, "资产支持证券");
-//            put(CREDIT_RISK_BOND, "信用风险缓释工具");
-//            put(OTHERS, "其他");
-//        }
-//    };
-//    List<String> bondTypeList = CollectionUtil.newArrayList(COUNTRY_BOND, COMPANY_BOND, CONVERTIBLE_BOND, FINANCIAL_BOND, ASSET_BACK_BOND,
-//            CREDIT_RISK_BOND, OTHERS);
-////    @Autowired
-////    private SecTypeService secTypeService;
-////    @Autowired
-////    private CmFundPositionService cmFundPositionService;
-////    @Autowired
-////    private FundPositionBaseService fundPositionBaseService;
-//
-//    @Autowired
-//    private PubliclyFundPositionDao publiclyFundPositionDao;
-//    @Autowired
-//    private BondBasicInformationMapper bondBasicInformationMapper;
-//    @Autowired
-//    private ConcentrationBizBondHandler concentrationBizBondHandler;
-//
-//    public Map<String, Object> getBondSortAllocation(BondSortAllocationParam param) {
-//        List<BondBasicInformationDO> bondBasicInformationDOS = bondBasicInformationMapper.selectAllMappings();
-//        Map<String, Integer> collect = bondBasicInformationDOS.stream().collect(Collectors.toMap(BondBasicInformationDO::getSecId, BondBasicInformationDO::getBondNature, (p1, p2) -> p2));
-//        List<BondSortAssetDTO> list = CollectionUtil.newArrayList();
-//        List<FundPositionBaseInfoDO> fundPositionBaseInfoDOS = this.publiclyFundPositionDao.fundPositionBaseInfos(param.getFundId(),
-//                param.getStartDate(), param.getEndDate());
-//        if (CollectionUtil.isNotEmpty(fundPositionBaseInfoDOS)) {
-//            Map<String, BigDecimal> netMarketValueMap = fundPositionBaseInfoDOS.stream()
-//                    .collect(TreeMap::new, (map, item) -> map.put(DateUtil.formatDate(item.getReportDate()), item.getAssetNv()), TreeMap::putAll);
-//            List<FundPositionDetailDO> fundPositionDetailDOS = this.publiclyFundPositionDao.positionDetailList(param.getFundId());
-//            if (CollectionUtil.isNotEmpty(fundPositionBaseInfoDOS)) {
-//                handlePublicFundNetValue(collect, list, netMarketValueMap, fundPositionDetailDOS);
-//            }
-//            Map<String, List<BondSortAssetDTO>> treeMap = filterUnNeedKey(list);
-//            return MapUtil.<String, Object>builder().put("dataset", treeMap)
-//                    .put("productNameMapping", NAME_MAPPING)
-//                    .build();
-//        }
-//        return null;
-//    }
-//
-//    private void handlePublicFundNetValue(Map<String, Integer> collect, List<BondSortAssetDTO> list, Map<String, BigDecimal> netMarketValueMap, List<FundPositionDetailDO> fundPositionDetailDOS) {
-//        List<FundPositionDetailDO> filterPositionDetails = fundPositionDetailDOS.stream().filter(p -> p.getSecType() != null)
-//                .filter(p -> p.getSecType() == 1).collect(Collectors.toList());
-//        Map<String, List<FundPositionDetailDO>> filterByDateMap = filterPositionDetails.stream().collect(Collectors.groupingBy(p -> DateUtil.formatDate(p.getValuationDate()), TreeMap::new, Collectors.toList()));
-//        for (Map.Entry<String, BigDecimal> entry : netMarketValueMap.entrySet()) {
-//            String date = entry.getKey();
-//            List<FundPositionDetailDO> cmFundPositionDetailDOS1 = filterByDateMap.get(date);
-//            if (CollectionUtil.isNotEmpty(cmFundPositionDetailDOS1)) {
-//                // 判断是哪种类型
-//                for (FundPositionDetailDO cmFundPositionDetailDO : cmFundPositionDetailDOS1) {
-//                    String secId = cmFundPositionDetailDO.getSecId();
-//                    Integer integer = collect.get(secId);
-//                    String bondTypeBySecId = getBondTypeBySecId(integer);
-//                    cmFundPositionDetailDO.setBondType(bondTypeBySecId);
-//                }
-//                Map<String, List<FundPositionDetailDO>> bondTypeMap = cmFundPositionDetailDOS1.stream().collect(Collectors.groupingBy(p -> p.getBondType()));
-//                for (String type : bondTypeList) {
-//                    BondSortAssetDTO bondSortAssetDTO = new BondSortAssetDTO();
-//                    bondSortAssetDTO.setBondType(type);
-//                    bondSortAssetDTO.setValuationDate(date);
-//                    List<FundPositionDetailDO> cmFundPositionDetailDOS2 = bondTypeMap.get(type);
-//                    if (CollectionUtil.isNotEmpty(cmFundPositionDetailDOS2)) {
-//                        BigDecimal ratio = cmFundPositionDetailDOS2.stream()
-//                                .map(FundPositionDetailDO::getMarketValueRatio).filter(Objects::nonNull)
-//                                .reduce(BigDecimal::add).orElse(null);
-//                        bondSortAssetDTO.setNetValueRatio(ratio);
-//                        BigDecimal marketValue = cmFundPositionDetailDOS2.stream().map(FundPositionDetailDO::getMarketValue).filter(Objects::nonNull)
-//                                .reduce(BigDecimal::add).orElse(null);
-//                        bondSortAssetDTO.setMarketValue(marketValue);
-//                        list.add(bondSortAssetDTO);
-//                    } else {
-//                        bondSortAssetDTO.setMarketValue(null);
-//                        bondSortAssetDTO.setNetValueRatio(null);
-//                        list.add(bondSortAssetDTO);
-//                    }
-//
-//                }
-//            } else {
-//                handleEmptyBondAsset(list, date);
-//            }
-//        }
-//    }
-//
-//    private void handleEmptyBondAsset(List<BondSortAssetDTO> list, String date) {
-//        for (String type : bondTypeList) {
-//            BondSortAssetDTO bondSortAssetDTO = new BondSortAssetDTO();
-//            bondSortAssetDTO.setBondType(type);
-//            bondSortAssetDTO.setValuationDate(date);
-//            bondSortAssetDTO.setMarketValue(null);
-//            bondSortAssetDTO.setNetValueRatio(null);
-//            list.add(bondSortAssetDTO);
-//        }
-//    }
-//
-//    private Map<String, List<BondSortAssetDTO>> filterUnNeedKey(List<BondSortAssetDTO> list) {
-//        Map<String, List<BondSortAssetDTO>> treeMap = list.stream()
-//                .collect(Collectors.groupingBy(BondSortAssetDTO::getBondType, LinkedHashMap::new, Collectors.toList()));
-//        List<String> needFilterKey = CollectionUtil.newArrayList();
-//        for (Map.Entry<String, List<BondSortAssetDTO>> entry : treeMap.entrySet()) {
-//            String key = entry.getKey();
-//            List<BondSortAssetDTO> value = entry.getValue();
-//            if (CollectionUtil.isNotEmpty(value)) {
-//                int emptyCount = 0;
-//                for (BondSortAssetDTO bondSortAssetDTO : value) {
-//                    if (bondSortAssetDTO.getMarketValue() == null && bondSortAssetDTO.getNetValueRatio() == null) {
-//                        emptyCount++;
-//                    }
-//                }
-//                if (emptyCount == value.size()) {
-//                    needFilterKey.add(key);
-//                }
-//            }
-//        }
-//        if (CollectionUtil.isNotEmpty(needFilterKey)) {
-//            for (String key : needFilterKey) {
-//                treeMap.remove(key);
-//            }
-//        }
-//        return treeMap;
-//    }
-//
-//    private String getBondTypeBySecId(Integer secId) {
-//        if (secId == null) {
-//            return OTHERS;
-//        }
-//        for (Map.Entry<String, List<Integer>> entry : BOND_DESC_MAP.entrySet()) {
-//            String key = entry.getKey();
-//            List<Integer> value = entry.getValue();
-//            if (value.contains(secId)) {
-//                return key;
-//            }
-//        }
-//        return OTHERS;
-//    }
-//
-//    public Map<String, Object> getBondConcentration(BondSortAllocationParam param) {
-//        Map<String, Object> dataset = MapUtil.newHashMap();
-//        List<ConcentrationVO> concentrationVOS = concentrationBizBondHandler.bizHandle(param);
-//        List<ConcentrationBondVO> concentrationVOList = transfer2Bond(concentrationVOS);
-//        Set<String> bondIdSet = CollectionUtil.newHashSet();
-//        // 获取到所有的债券信息
-//        if (CollectionUtil.isNotEmpty(concentrationVOS)) {
-//            for (ConcentrationVO concentrationVO : concentrationVOS) {
-//                List<RefMarketValueRatio> position = concentrationVO.getPosition();
-//                if (CollectionUtil.isNotEmpty(position)) {
-//                    List<String> collect = position.stream().map(RefMarketValueRatio::getSecId).distinct().collect(Collectors.toList());
-//                    if (CollectionUtil.isNotEmpty(collect)) {
-//                        bondIdSet.addAll(collect);
-//                    }
-//                }
-//            }
-//        }
-//        Map<String, BondBasicInformationDO> collect = MapUtil.newHashMap();
-//        if (CollectionUtil.isNotEmpty(bondIdSet)) {
-//            List<BondBasicInformationDO> bondBasicInformationDOS = bondBasicInformationMapper.queryBondBasicInfo(CollectionUtil.newArrayList(bondIdSet));
-//            collect = bondBasicInformationDOS.stream()
-//                    .collect(Collectors.toMap(BondBasicInformationDO::getSecId, p -> p, (p1, p2) -> p2));
-//        }
-//
-//        Map<String, BondIndustryInfo> industryInfoMap = MapUtil.newHashMap();
-//        if (CollectionUtil.isNotEmpty(bondIdSet)) {
-//            List<BondIndustryInfo> bondIndustryInfos = bondBasicInformationMapper.queryBondIndustry(CollectionUtil.newArrayList(bondIdSet));
-//            if (CollectionUtil.isNotEmpty(bondIndustryInfos)) {
-//                industryInfoMap = bondIndustryInfos.stream().collect(Collectors.toMap(BondIndustryInfo::getSecId, p -> p, (p1, p2) -> p2));
-//            }
-//        }
-//
-//        for (ConcentrationBondVO concentrationBondVO : concentrationVOList) {
-//            List<RefBondMarketValueRatio> position = concentrationBondVO.getPosition();
-//            for (RefBondMarketValueRatio refBondMarketValueRatio : position) {
-//                String secId = refBondMarketValueRatio.getSecId();
-//                BondBasicInformationDO bondBasicInformationDO = collect.get(secId);
-//                if (bondBasicInformationDO != null) {
-//                    refBondMarketValueRatio.setBondType(bondBasicInformationDO.getBondType());
-//                    refBondMarketValueRatio.setNominalInterestRate(bondBasicInformationDO.getNominalInterestRate());
-//                    refBondMarketValueRatio.setCreditRating(bondBasicInformationDO.getCreditRating());
-//                    BondIndustryInfo bondIndustryInfo = industryInfoMap.get(secId);
-//                    refBondMarketValueRatio.setIndustryName(bondIndustryInfo == null ? null : bondIndustryInfo.getFirstIndustryName());
-//                    Date maturityDate = bondBasicInformationDO.getMaturityDate();
-//                    if (maturityDate != null) {
-//                        String date = concentrationBondVO.getDate();
-//                        long between = DateUtil.between(DateUtil.parse(date), maturityDate, DateUnit.DAY);
-//                        refBondMarketValueRatio.setRemainder(between / 365d);
-//                    }
-//                }
-//            }
-//        }
-//
-//        for (Long integer : POSITION_NAME.keySet()) {
-//            List<MarketValueRatio> tempList = ListUtil.list(true);
-//            for (ConcentrationBondVO vo : concentrationVOList) {
-//                MarketValueRatio mvr = new MarketValueRatio();
-//                mvr.setDate(vo.getDate());
-//                List<RefBondMarketValueRatio> resList = vo.getPosition();
-//                if (integer != -1L) {
-//                    // 不为-1时取前n条记录求和
-//                    resList = vo.getPosition().stream().limit(integer).collect(Collectors.toList());
-//                }
-//                BigDecimal marketValue = resList.stream().map(RefBondMarketValueRatio::getMarketValue)
-//                        .filter(Objects::nonNull).reduce(BigDecimal::add).orElse(null);
-//                BigDecimal ratio = resList.stream().map(RefBondMarketValueRatio::getRatio).filter(Objects::nonNull)
-//                        .reduce(BigDecimal::add).orElse(null);
-//                mvr.setMarketValue(marketValue);
-//                mvr.setRatio(ratio);
-//                tempList.add(mvr);
-//            }
-//            dataset.put(integer.toString(), tempList);
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset)
-//                .put("productNameMapping", POSITION_NAME).put("table", concentrationVOList).build();
-//
-//    }
-//
-//    private List<ConcentrationBondVO> transfer2Bond(List<ConcentrationVO> concentrationVOS) {
-//        List<ConcentrationBondVO> res = CollectionUtil.newArrayList();
-//        if (CollectionUtil.isNotEmpty(concentrationVOS)) {
-//            for (ConcentrationVO concentrationVO : concentrationVOS) {
-//                ConcentrationBondVO item = new ConcentrationBondVO();
-//                item.setAssetNv(concentrationVO.getAssetNv());
-//                item.setDate(concentrationVO.getDate());
-//                List<RefMarketValueRatio> position = concentrationVO.getPosition();
-//                List<RefBondMarketValueRatio> list = CollectionUtil.newArrayList();
-//                if (CollectionUtil.isNotEmpty(position)) {
-//                    Map<ValueLabelVO, List<RefMarketValueRatio>> collect = position.stream().collect(Collectors.groupingBy(p -> p.getRef()));
-//                    for (Map.Entry<ValueLabelVO, List<RefMarketValueRatio>> entry : collect.entrySet()) {
-//                        ValueLabelVO key = entry.getKey();
-//                        List<RefMarketValueRatio> value = entry.getValue();
-//                        if (CollectionUtil.isNotEmpty(value)) {
-//                            if (value.size() == 1) {
-//                                RefMarketValueRatio refMarketValueRatio = value.get(0);
-//                                RefBondMarketValueRatio refBondMarketValueRatio = new RefBondMarketValueRatio();
-//                                refBondMarketValueRatio.setMarketValue(refMarketValueRatio.getMarketValue());
-//                                refBondMarketValueRatio.setRatio(refMarketValueRatio.getRatio());
-//                                refBondMarketValueRatio.setRef(refMarketValueRatio.getRef());
-//                                refBondMarketValueRatio.setSecId(refMarketValueRatio.getSecId());
-//                                list.add(refBondMarketValueRatio);
-//                            } else {
-//                                // 需要轧差
-//                                BigDecimal totalMarket = null;
-//                                BigDecimal ratio = null;
-//                                for (RefMarketValueRatio refMarketValueRatio : value) {
-//                                    totalMarket = BigDecimalUtils.add(totalMarket, refMarketValueRatio.getMarketValue());
-//                                    ratio = BigDecimalUtils.add(ratio, refMarketValueRatio.getRatio());
-//                                }
-//                                RefBondMarketValueRatio refBondMarketValueRatio = new RefBondMarketValueRatio();
-//                                refBondMarketValueRatio.setMarketValue(totalMarket);
-//                                refBondMarketValueRatio.setRatio(ratio);
-//                                refBondMarketValueRatio.setRef(value.get(0).getRef());
-//                                refBondMarketValueRatio.setSecId(value.get(0).getSecId());
-//                                list.add(refBondMarketValueRatio);
-//                            }
-//                        }
-//                    }
-//                }
-//                list.sort(Comparator.comparing(RefBondMarketValueRatio::getMarketValue).reversed());
-//                item.setPosition(list);
-//                res.add(item);
-//            }
-//        }
-//        return res;
-//    }
-//
-//    public Map<String, Object> getBondCreditGrading(BondSortAllocationParam param) {
-//        Map<String, Object> dataset = MapUtil.newHashMap(true);
-//        List<ConcentrationVO> concentrationVOS = concentrationBizBondHandler.bizHandle(param);
-//        List<CreditGradingBondVO> creditGradingBondVOS = transfer2BondCreditGrading(concentrationVOS);
-//        // 获取到评级
-//        Set<String> bondIdSet = CollectionUtil.newHashSet();
-//        if (CollectionUtil.isNotEmpty(concentrationVOS)) {
-//            for (ConcentrationVO concentrationVO : concentrationVOS) {
-//                List<RefMarketValueRatio> position = concentrationVO.getPosition();
-//                if (CollectionUtil.isNotEmpty(position)) {
-//                    List<String> collect = position.stream().map(RefMarketValueRatio::getSecId).distinct().collect(Collectors.toList());
-//                    if (CollectionUtil.isNotEmpty(collect)) {
-//                        bondIdSet.addAll(collect);
-//                    }
-//                }
-//            }
-//        }
-//        Map<String, List<BondCreditGradingInfo>> collect = MapUtil.newHashMap();
-//        if (CollectionUtil.isNotEmpty(bondIdSet)) {
-//            List<BondCreditGradingInfo> bondCreditGradingInfos = bondBasicInformationMapper.queryCreditGradingByBondId(CollectionUtil.newArrayList(bondIdSet));
-//            if (CollectionUtil.isNotEmpty(bondCreditGradingInfos)) {
-//                collect = bondCreditGradingInfos.stream().collect(Collectors.groupingBy(BondCreditGradingInfo::getSecId));
-//            }
-//        }
-//        for (Map.Entry<String, List<BondCreditGradingInfo>> entry : collect.entrySet()) {
-//            entry.getValue().sort(Comparator.comparing(BondCreditGradingInfo::getCrDate));
-//        }
-//        Map<String, BondIndustryInfo> industryInfoMap = MapUtil.newHashMap();
-//        if (CollectionUtil.isNotEmpty(bondIdSet)) {
-//            List<BondIndustryInfo> bondIndustryInfos = bondBasicInformationMapper.queryBondIndustry(CollectionUtil.newArrayList(bondIdSet));
-//            if (CollectionUtil.isNotEmpty(bondIndustryInfos)) {
-//                industryInfoMap = bondIndustryInfos.stream().collect(Collectors.toMap(BondIndustryInfo::getSecId, p -> p, (p1, p2) -> p2));
-//            }
-//        }
-//        for (CreditGradingBondVO creditGradingBondVO : creditGradingBondVOS) {
-//            String date = creditGradingBondVO.getDate();
-//            List<RefCreditMarketValueRatio> position = creditGradingBondVO.getPosition();
-//            BigDecimal curTotal = position.stream().map(RefCreditMarketValueRatio::getMarketValue)
-//                    .filter(Objects::nonNull).reduce(BigDecimal::add).orElse(null);
-//            for (RefCreditMarketValueRatio item : position) {
-//                String secId = item.getSecId();
-//                item.setRatioPerBond(BigDecimalUtils.divide(item.getMarketValue(), curTotal));
-//                List<BondCreditGradingInfo> bondCreditGradingInfos1 = collect.get(secId);
-//                if (CollectionUtil.isNotEmpty(bondCreditGradingInfos1)) {
-//
-//                    List<String> dateList = bondCreditGradingInfos1.stream().map(BondCreditGradingInfo::getCrDate).collect(Collectors.toList());
-//                    Integer nearestIndex = BinarySearchUtil.getMostLeftLessNav(dateList, date);
-//                    int mostLeftLessNav = nearestIndex > 0 ? nearestIndex - 1 : nearestIndex;
-//                    BondCreditGradingInfo lastGradingInfo = bondCreditGradingInfos1.get(mostLeftLessNav);
-//                    BondCreditGradingInfo nearestGradingInfo = bondCreditGradingInfos1.get(nearestIndex);
-//                    item.setMainCode(lastGradingInfo.getMainCode());
-//                    item.setLastCrCode(lastGradingInfo.getCrCode());
-//                    item.setLastCrDate(lastGradingInfo.getCrDate());
-//                    if (lastGradingInfo.getCrCode() == null) {
-//                        item.setLastCrDesc(null);
-//                    } else {
-//                        item.setLastCrDesc(CREDIT_GRADING_NAME.getOrDefault(Long.parseLong(lastGradingInfo.getCrCode()), null));
-//                    }
-//                    item.setNearestCrCode(nearestGradingInfo.getCrCode());
-//                    item.setNearestCrDate(nearestGradingInfo.getCrDate());
-//                    if (nearestGradingInfo.getCrCode() == null) {
-//                        item.setNearestCrDesc(null);
-//                    } else {
-//                        item.setNearestCrDesc(CREDIT_GRADING_NAME.getOrDefault(Long.parseLong(nearestGradingInfo.getCrCode()), null));
-//                    }
-//                    item.setCrAnticipate(nearestGradingInfo.getCrAnticipate());
-//                    BondIndustryInfo bondIndustryInfo = industryInfoMap.get(secId);
-//                    if (bondIndustryInfo != null) {
-//                        item.setIndustryName(bondIndustryInfo.getFirstIndustryName());
-//                    }
-//                }
-//            }
-//        }
-//        // 处理汇总计算
-//        for (Long integer : CREDIT_GRADING_NAME.keySet()) {
-//            List<MarketValueRatio> tempList = ListUtil.list(true);
-//            for (CreditGradingBondVO vo : creditGradingBondVOS) {
-//                MarketValueRatio mvr = new MarketValueRatio();
-//                mvr.setDate(vo.getDate());
-//                List<RefCreditMarketValueRatio> resList = vo.getPosition();
-//                BigDecimal ratio = resList.stream().filter(Objects::nonNull).filter(p -> String.valueOf(integer).equals(p.getNearestCrCode()))
-//                        .map(RefCreditMarketValueRatio::getRatio)
-//                        .filter(Objects::nonNull).reduce(BigDecimal::add).orElse(null);
-//                mvr.setRatio(ratio);
-//                tempList.add(mvr);
-//            }
-//            // 过滤掉当天没有的评级
-//            int emptyCount = 0;
-//            for (MarketValueRatio marketValueRatio : tempList) {
-//                if (marketValueRatio.getMarketValue() == null && marketValueRatio.getRatio() == null) {
-//                    emptyCount++;
-//                }
-//            }
-//            if (emptyCount != tempList.size()) {
-//                dataset.put(integer.toString(), tempList);
-//            }
-//        }
-//        Map<Long, String> needCreditMapping = MapUtil.newHashMap(true);
-//        for (String code : dataset.keySet()) {
-//            needCreditMapping.put(Long.parseLong(code), CREDIT_GRADING_NAME.get(Long.parseLong(code)));
-//        }
-//        return MapUtil.<String, Object>builder().put("dataset", dataset)
-//                .put("productNameMapping", needCreditMapping).put("table", creditGradingBondVOS).build();
-//    }
-//
-//    private List<CreditGradingBondVO> transfer2BondCreditGrading(List<ConcentrationVO> concentrationVOS) {
-//        List<CreditGradingBondVO> res = CollectionUtil.newArrayList();
-//        if (CollectionUtil.isNotEmpty(concentrationVOS)) {
-//            for (ConcentrationVO concentrationVO : concentrationVOS) {
-//                CreditGradingBondVO item = new CreditGradingBondVO();
-//                item.setAssetNv(concentrationVO.getAssetNv());
-//                item.setDate(concentrationVO.getDate());
-//                List<RefMarketValueRatio> position = concentrationVO.getPosition();
-//                List<RefCreditMarketValueRatio> list = CollectionUtil.newArrayList();
-//                if (CollectionUtil.isNotEmpty(position)) {
-//                    for (RefMarketValueRatio refMarketValueRatio : position) {
-//                        RefCreditMarketValueRatio refBondMarketValueRatio = new RefCreditMarketValueRatio();
-//                        refBondMarketValueRatio.setMarketValue(refMarketValueRatio.getMarketValue());
-//                        refBondMarketValueRatio.setRatio(refMarketValueRatio.getRatio());
-//                        refBondMarketValueRatio.setRef(refMarketValueRatio.getRef());
-//                        refBondMarketValueRatio.setSecId(refMarketValueRatio.getSecId());
-//                        list.add(refBondMarketValueRatio);
-//                    }
-//                }
-//                item.setPosition(list);
-//                res.add(item);
-//            }
-//        }
-//        return res;
-//    }
-//}

+ 0 - 75
src/main/java/com/smppw/analysis/domain/manager/position/bond/ConcentrationBizBondHandler.java

@@ -1,75 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.bond;
-//
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dto.position.AssetCategoryEnum;
-//import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.analysis.domain.dto.position.RefMarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.bond.BondSortAllocationParam;
-//import com.smppw.analysis.domain.dto.position.stock.ConcentrationVO;
-//import com.smppw.analysis.domain.manager.position.AbstractNonSynthesizeBizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerConstants;
-//import com.smppw.analysis.domain.manager.position.PositionLoadFactory;
-//import com.smppw.analysis.domain.gateway.CacheFactory;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import org.apache.commons.lang3.StringUtils;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.Comparator;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Objects;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 14:07
-// * @description 股票集中度业务数据转换
-// */
-//@Component(BizHandlerConstants.BOND_CONCENTRATION)
-//public class ConcentrationBizBondHandler extends AbstractNonSynthesizeBizHandler<BondSortAllocationParam, List<ConcentrationVO>> {
-//    public ConcentrationBizBondHandler(AnalysisProperty property, CacheFactory cacheFactory, PositionLoadFactory factory) {
-//        super(property, cacheFactory, factory);
-//    }
-//
-//    @Override
-//    protected List<ConcentrationVO> afterNonSynthesizeLoadData(BondSortAllocationParam params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos) {
-//        String fundId = params.getFundId();
-//        if(StringUtils.isNotBlank(fundId)){
-//            if(fundId.startsWith("MF")){
-//                positionInfos = positionInfos.stream().filter(e -> AssetCategoryEnum.BOND.name().equals(e.getAsset().getValue()))
-//                        .collect(Collectors.toList());
-//            }else {
-//                positionInfos = positionInfos.stream().filter(e -> AssetCategoryEnum.BOND.name().equals(e.getAsset().getValue()))
-//                        .filter(p->Objects.nonNull(p.getLevel()))
-//                        .filter(p->p.getLevel()>=4)
-//                        .collect(Collectors.toList());
-//            }
-//        }
-//
-//        List<ConcentrationVO> resultList = ListUtil.list(false);
-//        // 按日期分组处理
-//        Map<String, List<FundPositionDetail>> collect = positionInfos.stream().collect(Collectors.groupingBy(FundPositionDetail::getDate));
-//        collect.forEach((k, v) -> {
-//            // 基金在当前日期的净资产值
-//            BigDecimal bigDecimal = baseInfos.stream().filter(e -> k.equals(e.getDate())).findFirst().map(FundPositionBaseInfo::getAssetNv).orElse(null);
-//            // 得到每个日期下的所有债券成分,按占比降序
-//            List<RefMarketValueRatio> position = v.stream().map(e -> {
-//                BigDecimal ratioNv = e.getRatioNv();
-//                if (ratioNv == null) {
-//                    return null;
-//                }
-//                return new RefMarketValueRatio(e.getRef(), e.getMarketValue(), ratioNv, e.getSecId());
-//            }).filter(Objects::nonNull).sorted((o1, o2) -> o2.getRatio().compareTo(o1.getRatio())).collect(Collectors.toList());
-//            ConcentrationVO vo = new ConcentrationVO();
-//            vo.setDate(k);
-//            vo.setAssetNv(bigDecimal);
-//            vo.setPosition(position);
-//            resultList.add(vo);
-//        });
-//        // 按日期升序
-//        resultList.sort(Comparator.comparing(ConcentrationVO::getDate));
-//        return resultList;
-//    }
-//}

File diff ditekan karena terlalu besar
+ 0 - 1074
src/main/java/com/smppw/analysis/domain/manager/position/future/FundFuturesOptionBaseService.java


+ 0 - 288
src/main/java/com/smppw/analysis/domain/manager/position/future/MarginalRiskContributionBizHandler.java

@@ -1,288 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.future;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.IterUtil;
-//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.AssetCategoryEnum;
-//import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.analysis.domain.dto.position.PositionConstants;
-//import com.smppw.analysis.domain.dto.position.future.FutureDailyRet;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContribution;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContributionParams;
-//import com.smppw.analysis.domain.dto.position.future.MarginalRiskContributionVO;
-//import com.smppw.analysis.domain.manager.position.AbstractBizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerConstants;
-//import com.smppw.analysis.domain.manager.position.PositionLoadFactory;
-//import com.smppw.analysis.domain.dataobject.FutureDailyPriceDO;
-//import com.smppw.analysis.domain.gateway.CacheFactory;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import com.smppw.analysis.infrastructure.exception.APIException;
-//import com.smppw.analysis.domain.mapper.core.BaseUnderlyingMapper;
-//import com.smppw.analysis.domain.mapper.core.IndexesTradeDateMapper;
-//import com.smppw.common.pojo.FundFuturesOption;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import com.smppw.utils.BigDecimalUtils;
-//import org.apache.commons.math3.linear.Array2DRowRealMatrix;
-//import org.apache.commons.math3.linear.RealMatrix;
-//import org.apache.commons.math3.stat.correlation.Covariance;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.*;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/19 11:23
-// * @description 私募基金期货边际风险贡献
-// */
-//@Component(BizHandlerConstants.MARGINAL_RISK_CONTRIBUTION)
-//public class MarginalRiskContributionBizHandler extends AbstractBizHandler<MarginalRiskContributionParams, List<MarginalRiskContributionVO>> {
-//    private final BaseUnderlyingMapper baseUnderlyingMapper;
-//    private final IndexesTradeDateMapper indexesTradeDateMapper;
-//
-//    public MarginalRiskContributionBizHandler(AnalysisProperty property, CacheFactory cacheFactory,
-//                                              BaseUnderlyingMapper baseUnderlyingMapper,
-//                                              PositionLoadFactory factory, IndexesTradeDateMapper indexesTradeDateMapper) {
-//        super(property, cacheFactory, factory);
-//        this.baseUnderlyingMapper = baseUnderlyingMapper;
-//        this.indexesTradeDateMapper = indexesTradeDateMapper;
-//    }
-//
-//    @Override
-//    protected List<MarginalRiskContributionVO> afterLoadData(MarginalRiskContributionParams params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos) {
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("持仓数据取数耗时:" + (System.currentTimeMillis() - this.current) + "ms");
-//        }
-//        String fundType = positionInfos.get(0).getFundType();
-//        if (!PositionConstants.PRIVATELY_TYPES.contains(fundType)) {
-//            throw new APIException(StrUtil.format("该产品【{}】不支持期货边际风险贡献功能!", params.getFundId()));
-//        }
-//        List<MarginalRiskContributionVO> resultList = ListUtil.list(false);
-//        // 得到期货持仓信息,必须是期货,不能包括期权
-//        positionInfos = positionInfos.stream().filter(e -> e.getLevel() != null && e.getLevel() >= 4).filter(e -> e.getAsset() != null)
-//                .filter(e -> PositionConstants.FUTURE_SECOND_TYPES.contains(e.getSubType()))
-//                .filter(e -> e.getNumber() != null && e.getNumber().compareTo(BigDecimal.ZERO) > 0)
-//                .filter(e -> AssetCategoryEnum.FUTURE.name().equals(e.getAsset().getValue())).collect(Collectors.toList());
-//        if (CollUtil.isEmpty(positionInfos)) {
-//            return resultList;
-//        }
-//        List<ValueLabelVO> breedNameList = this.baseUnderlyingMapper.getOptionTypeList();
-//        // 区分金融期货和商品期货,单独取数
-//        Map<ValueLabelVO, List<String>> financeRefMap = MapUtil.newHashMap();
-//        Map<ValueLabelVO, List<String>> commodityRefMap = MapUtil.newHashMap();
-//        this.distRef(breedNameList, positionInfos, financeRefMap, commodityRefMap);
-//        // 按日期分组
-//        Map<String, List<FundPositionDetail>> positionMap = positionInfos.stream().collect(Collectors.groupingBy(FundPositionDetail::getDate));
-//        Map<String, List<FutureDailyRet>> dateRetMap = MapUtil.newHashMap();
-//        positionMap.forEach((k, v) -> {
-//            List<String> dateList = this.getRetDates(k);
-//            String firstDate = dateList.stream().min(Comparator.naturalOrder()).orElse(k);
-//            // 所有品种的近31个交易日日收益率
-//            List<FutureDailyRet> dataList = this.getFutureDailyRets(k, dateList, firstDate, financeRefMap, commodityRefMap);
-//            dateRetMap.put(k, dataList);
-//        });
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("取数耗时:" + (System.currentTimeMillis() - this.current) + "ms");
-//        }
-//        positionMap.forEach((k, v) -> {
-//            List<String> dateList = getRetDates(k);
-//            // 所有品种的近31个交易日日收益率
-//            List<FutureDailyRet> dataList = dateRetMap.get(k);
-//            // 得到计算风险贡献的数据,计算风险贡献
-//            List<ValueLabelVO> breeds = ListUtil.list(true);
-//            List<Double> weightList = ListUtil.list(true);
-//            double[][] retsMatrix = new double[breedNameList.size()][dateList.size() - 1];
-//            this.getMatrixData(breedNameList, v, dateList, financeRefMap, commodityRefMap, dataList, breeds, weightList, retsMatrix);
-//            if (CollUtil.isNotEmpty(weightList)) {
-//                MarginalRiskContributionVO vo = this.calcRiskContAndBuildVo(k, breeds, weightList, retsMatrix);
-//                resultList.add(vo);
-//            }
-//        });
-//        // 按日期升序
-//        resultList.sort(Comparator.comparing(MarginalRiskContributionVO::getDate));
-//        return resultList;
-//    }
-//
-//    private List<String> getRetDates(String k) {
-//        String startDate = DateUtil.formatDate(DateUtil.offsetDay(DateUtil.parseDate(k), -90));
-//        return this.indexesTradeDateMapper.listTradeDates(startDate, k).stream()
-//                .sorted(Comparator.reverseOrder()).limit(31).sorted().collect(Collectors.toList());
-//    }
-//
-//    private MarginalRiskContributionVO calcRiskContAndBuildVo(String k, List<ValueLabelVO> breeds, List<Double> weightList, double[][] retsMatrix) {
-//        int size = weightList.size();
-//        double[][] covList = this.getCovByRet(retsMatrix);
-//        double[] realWeightList = new double[size];
-//        Double totalW = weightList.stream().reduce(Double::sum).orElse(0d);
-//        for (int i = 0; i < size; i++) {
-//            Double weight = weightList.get(i);
-//            realWeightList[i] = totalW.compareTo(0d) != 0 ? weight / totalW : 1.0d / size;
-//        }
-//        double std = this.getStd(covList, realWeightList);
-//        double[] riskContList = this.getBreedRiskContribution(covList, realWeightList);
-//
-//        List<MarginalRiskContribution> breedRiskContList = ListUtil.list(false);
-//        for (int i = 0; i < breeds.size(); i++) {
-//            ValueLabelVO breed = breeds.get(i);
-//            String breedValue = breed.getValue();
-//            ValueLabelVO asset;
-//            if (PositionConstants.BOND_BREEDS.contains(breedValue)) {
-//                asset = new ValueLabelVO(FundFuturesOption.Bond.getNameEnDesc(), FundFuturesOption.Bond.getNameDesc());
-//            } else if (PositionConstants.STOCK_INDEX_BREEDS.contains(breedValue)) {
-//                asset = new ValueLabelVO(FundFuturesOption.StockIndex.getNameEnDesc(), FundFuturesOption.StockIndex.getNameDesc());
-//            } else {
-//                asset = new ValueLabelVO(FundFuturesOption.Product.getNameEnDesc(), FundFuturesOption.Product.getNameDesc());
-//            }
-//            MarginalRiskContribution riskCont = new MarginalRiskContribution();
-//            riskCont.setAsset(asset);
-//            riskCont.setRef(new ValueLabelVO(breedValue, breed.getLabel()));
-//            riskCont.setMarketValue(null);
-//            riskCont.setRatio(BigDecimalUtils.toBigDecimal(weightList.get(i)));
-//            riskCont.setRiskCont(BigDecimalUtils.toBigDecimal(riskContList[i] / std));
-//            breedRiskContList.add(riskCont);
-//        }
-//        // 按贡献度降序
-//        breedRiskContList.sort((o1, o2) -> o2.getRiskCont().compareTo(o1.getRiskCont()));
-//        MarginalRiskContributionVO vo = new MarginalRiskContributionVO();
-//        vo.setDate(k);
-//        vo.setRiskContList(breedRiskContList);
-//        return vo;
-//    }
-//
-//    private void getMatrixData(List<ValueLabelVO> breedNameList, List<FundPositionDetail> v, List<String> dateList,
-//                               Map<ValueLabelVO, List<String>> financeRefMap, Map<ValueLabelVO, List<String>> commodityRefMap,
-//                               List<FutureDailyRet> dataList, List<ValueLabelVO> breeds, List<Double> weightList, double[][] retsMatrix) {
-//        for (int i = 0; i < breedNameList.size(); i++) {
-//            ValueLabelVO breed = breedNameList.get(i);
-//            List<String> refIds = ListUtil.list(false);
-//            List<String> finance = financeRefMap.getOrDefault(breed, ListUtil.empty());
-//            if (CollUtil.isNotEmpty(finance)) {
-//                refIds.addAll(finance);
-//            }
-//            List<String> commdiity = commodityRefMap.getOrDefault(breed, ListUtil.empty());
-//            if (CollUtil.isNotEmpty(commdiity)) {
-//                refIds.addAll(commdiity);
-//            }
-//            List<String> ids = refIds.stream().filter(Objects::nonNull).collect(Collectors.toList());
-//            if (CollUtil.isEmpty(ids)) {
-//                continue;
-//            }
-//            List<FundPositionDetail> details = v.stream().filter(e -> ids.contains(e.getRef().getValue()) || ids.contains(e.getSecId())).collect(Collectors.toList());
-//            // 品种总市值比之和
-//            Double weight = details.stream().map(FundPositionDetail::getRatioNv).map(BigDecimal::doubleValue).reduce(Double::sum).orElse(0d);
-//            if (weight.compareTo(0d) == 0) {
-//                continue;
-//            }
-//            List<FutureDailyRet> reteList = dataList.stream().filter(e -> ids.contains(e.getRefId())).collect(Collectors.toList());
-//            int size = dateList.size();
-//            double[] rets = new double[size - 1];
-//            for (int j = 1; j < size; j++) {
-//                String date = dateList.get(j);
-//                double ret = 0d;
-//                for (String refId : ids) {
-//                    Double refRet = reteList.stream().filter(e -> refId.equals(e.getRefId())).filter(e -> date.equals(e.getPriceDate()))
-//                            .findFirst().map(FutureDailyRet::getRet).orElse(0d);
-//                    double refWeight = details.stream().filter(e -> refId.equals(e.getSecId()) || refId.equals(e.getRef().getValue()))
-//                            .map(FundPositionDetail::getRatioNv).map(BigDecimal::doubleValue).reduce(Double::sum).orElse(0d);
-//                    double v1 = refWeight / weight;
-//                    ret += refRet * v1;
-//                }
-//                rets[j] = ret;
-//            }
-//            if (IterUtil.isAllNull(Collections.singleton(rets)) || rets.length != 30) {
-//                continue;
-//            }
-//            weightList.add(weight);
-//            retsMatrix[i] = rets;
-//            breeds.add(breed);
-//        }
-//    }
-//
-//    private List<FutureDailyRet> getFutureDailyRets(String k, List<String> dateList, String firstDate, Map<ValueLabelVO, List<String>> financeRefMap, Map<ValueLabelVO, List<String>> commodityRefMap) {
-//        List<FutureDailyRet> dataList = ListUtil.list(false);
-//        List<String> financeRefIds = financeRefMap.values().stream().flatMap(Collection::stream).distinct().collect(Collectors.toList());
-//        List<String> commodityRefIds = commodityRefMap.values().stream().flatMap(Collection::stream).distinct().collect(Collectors.toList());
-//        if (CollUtil.isNotEmpty(financeRefIds)) {
-//            // 金融期货直接取张跌幅
-//            List<FutureDailyPriceDO> tempList = this.baseUnderlyingMapper.getFinanceSecClosePrice(financeRefIds, firstDate, k);
-//            List<FutureDailyRet> collect = tempList.stream().map(e -> {
-//                Double ret = e.getClosePriceRet();
-//                if (ret != null) {
-//                    ret = ret / 100d;
-//                }
-//                return new FutureDailyRet(e.getRefId(), e.getPriceDate(), ret);
-//            }).collect(Collectors.toList());
-//            if (CollUtil.isNotEmpty(collect)) {
-//                dataList.addAll(collect);
-//            }
-//        }
-//        if (CollUtil.isNotEmpty(commodityRefIds)) {
-//            // 商品期货只能取收盘价实时计算
-//            List<FutureDailyPriceDO> tempList = this.baseUnderlyingMapper.getProductSecClosePrice(commodityRefIds, firstDate, k);
-//            if (CollUtil.isNotEmpty(tempList)) {
-//                Map<String, List<FutureDailyPriceDO>> collect = tempList.stream().collect(Collectors.groupingBy(FutureDailyPriceDO::getRefId));
-//                collect.forEach((refId, l) -> {
-//                    for (int i = 0; i < dataList.size(); i++) {
-//                        String date = dateList.get(i);
-//                        String prevDate = i == 0 ? dateList.get(i) : dateList.get(i - 1);
-//                        FutureDailyPriceDO temp = l.stream().filter(e -> date.equals(e.getPriceDate())).findFirst().orElse(null);
-//                        FutureDailyPriceDO temp1 = l.stream().filter(e -> prevDate.equals(e.getPriceDate())).findFirst().orElse(null);
-//                        double ret = 0;
-//                        if (i != 0 && temp != null && temp1 != null) {
-//                            ret = temp.getClosePrice() / temp1.getClosePrice() - 1;
-//                        }
-//                        dataList.add(new FutureDailyRet(refId, date, ret));
-//                    }
-//                });
-//            }
-//        }
-//        return dataList;
-//    }
-//
-//    private void distRef(List<ValueLabelVO> breedNameList, List<FundPositionDetail> v, Map<ValueLabelVO, List<String>> financeRefMap, Map<ValueLabelVO, List<String>> commodityRefMap) {
-//        // 遍历品种获取各品种下的合约
-//        breedNameList.forEach(breed -> {
-//            String breedValue = breed.getValue();
-//            List<FundPositionDetail> details = v.stream().filter(e -> {
-//                String futureCode = e.getRef().getValue();
-//                String tradingCode = futureCode.substring(0, 2);
-//                if (!tradingCode.matches("[A-Za-z]+")) {
-//                    tradingCode = tradingCode.substring(0, 1);
-//                }
-//                return breedValue.equals(tradingCode);
-//            }).collect(Collectors.toList());
-//            if (PositionConstants.STOCK_INDEX_BREEDS.contains(breedValue) || PositionConstants.BOND_BREEDS.contains(breedValue)) {
-//                List<String> refIds = details.stream().map(e -> e.getRef().getValue()).distinct().collect(Collectors.toList());
-//                financeRefMap.put(breed, refIds);
-//            } else {
-//                List<String> refIds = details.stream().map(FundPositionDetail::getSecId).distinct().collect(Collectors.toList());
-//                commodityRefMap.put(breed, refIds);
-//            }
-//        });
-//    }
-//
-//    private double[] getBreedRiskContribution(double[][] retsArr, double[] weightArr) {
-//        RealMatrix retsArrMatrix = new Array2DRowRealMatrix(retsArr);
-//        RealMatrix weightArrMatrix = new Array2DRowRealMatrix(weightArr);
-//        RealMatrix matrix = weightArrMatrix.transpose().multiply(retsArrMatrix);
-//        return matrix.getData()[0];
-//    }
-//
-//    private double getStd(double[][] retsMatrix, double[] weight) {
-//        RealMatrix retsArrMatrix = new Array2DRowRealMatrix(retsMatrix);
-//        RealMatrix weightArrMatrix = new Array2DRowRealMatrix(weight);
-//        RealMatrix matrix = weightArrMatrix.transpose().multiply(retsArrMatrix).multiply(weightArrMatrix);
-//        return Math.sqrt(matrix.getData()[0][0]);
-//    }
-//
-//    private double[][] getCovByRet(double[][] retsArr) {
-//        RealMatrix retsArrMatrix = new Array2DRowRealMatrix(retsArr);
-//        RealMatrix covMatrix = new Covariance(retsArrMatrix, true).getCovarianceMatrix();
-//        return covMatrix.getData();
-//    }
-//}

+ 0 - 69
src/main/java/com/smppw/analysis/domain/manager/position/stock/BarraSensitivityComponent.java

@@ -1,69 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.stock;
-//
-//import cn.hutool.core.map.MapUtil;
-//import cn.hutool.http.HttpUtil;
-//import cn.hutool.json.JSONObject;
-//import cn.hutool.json.JSONUtil;
-//import com.smppw.analysis.domain.dto.position.stock.BarraSensitivityParams;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import com.smppw.analysis.infrastructure.consts.BarraStyleRespEnum;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import com.smppw.common.pojo.enums.RaiseType;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.Arrays;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Set;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/12 16:46
-// * @description barra敏感度分析,这里仅支持公募
-// */
-//@Component
-//public class BarraSensitivityComponent {
-//    private static final Logger LOGGER = LoggerFactory.getLogger(BarraSensitivityComponent.class);
-//    private final String pyBaseUrl;
-//
-//    public BarraSensitivityComponent(AnalysisProperty property) {
-//        this.pyBaseUrl = property.getPyUrl();
-//    }
-//
-//    public Map<String, Object> bizHandle(BarraSensitivityParams params) {
-//        // 沪深300、中证500和中证1000
-//        Map<String, String> benchmarkMap = MapUtil.builder("IN00000008", "000300.SH")
-//                .put("IN0000007M", "000905.SH").put("IN0000008O", "000852.SH").build();
-//        try {
-//            RaiseType raiseType = RaiseType.Public;
-//            Map<String, Object> req = MapUtil.newHashMap();
-//            req.put("fundIds", params.getFundId());
-//            req.put("benchmarkId", benchmarkMap.get(params.getBenchmarkId()));
-//            req.put("valuationDate", params.getDate());
-//            req.put("raiseType", raiseType);
-//            String body = HttpUtil.post(this.pyBaseUrl + "GetBarraPosAttribution", JSONUtil.toJsonStr(req));
-//            JSONObject entries = JSONUtil.parseObj(body);
-//            JSONObject fund = entries.getJSONObject("fund");
-//            JSONObject index = entries.getJSONObject("index");
-//            JSONObject expose = entries.getJSONObject("expose");
-//            Set<String> strings = expose.keySet();
-//            Map<String, BigDecimal> exposure = MapUtil.newHashMap(false);
-//            for (String string : strings) {
-//                exposure.put(string, expose.getBigDecimal(string));
-//            }
-//            exposure = MapUtil.sortByValue(exposure, true);
-//
-//            List<ValueLabelVO> collect = Arrays.stream(BarraStyleRespEnum.values())
-//                    .map(e -> new ValueLabelVO(e.getName(), e.getYName())).collect(Collectors.toList());
-//            return MapUtil.<String, Object>builder().put("fund", fund).put("benchmark", index)
-//                    .put("exposure", exposure).put("productNameMapping", collect).build();
-//        } catch (Exception e) {
-//            LOGGER.error("持仓分析Barra敏感度错误!" + e.getMessage());
-//            return MapUtil.newHashMap();
-//        }
-//    }
-//}

+ 0 - 50
src/main/java/com/smppw/analysis/domain/manager/position/stock/ChangeNumberBizHandler.java

@@ -1,50 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.stock;
-//
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dto.position.AssetCategoryEnum;
-//import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.analysis.domain.dto.position.stock.ChangeNumberParams;
-//import com.smppw.analysis.domain.dto.position.stock.ChangeNumberVO;
-//import com.smppw.analysis.domain.manager.position.AbstractNonSynthesizeBizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerConstants;
-//import com.smppw.analysis.domain.manager.position.PositionLoadFactory;
-//import com.smppw.analysis.domain.gateway.CacheFactory;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import com.smppw.common.pojo.dto.NewDateValue;
-//import com.smppw.constants.SecType;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.Comparator;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 15:46
-// * @description 持股数量变动
-// */
-//@Component(BizHandlerConstants.CHANGE_NUMBER)
-//public class ChangeNumberBizHandler extends AbstractNonSynthesizeBizHandler<ChangeNumberParams, List<ChangeNumberVO>> {
-//    public ChangeNumberBizHandler(AnalysisProperty property, CacheFactory cacheFactory, PositionLoadFactory factory) {
-//        super(property, cacheFactory, factory);
-//    }
-//
-//    @Override
-//    protected List<ChangeNumberVO> afterNonSynthesizeLoadData(ChangeNumberParams params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos) {
-//        positionInfos = positionInfos.stream().filter(e -> SecType.PUBLICLY_OFFERED_FUNDS.equals(e.getFundType()) || (e.getLevel() != null && e.getLevel() >= 4))
-//                .filter(e -> AssetCategoryEnum.STOCK.name().equals(e.getAsset().getValue())).collect(Collectors.toList());
-//        List<ChangeNumberVO> resultList = ListUtil.list(false);
-//        Map<String, List<FundPositionDetail>> collect = positionInfos.stream().collect(Collectors.groupingBy(FundPositionDetail::getDate));
-//        collect.forEach((k, v) -> {
-//            long count = v.stream().map(FundPositionDetail::getRef).distinct().count();
-//            ChangeNumberVO vo = new ChangeNumberVO();
-//            vo.setDate(k);
-//            vo.setValue(String.valueOf(count));
-//            resultList.add(vo);
-//        });
-//        resultList.sort(Comparator.comparing(NewDateValue::getDate));
-//        return resultList;
-//    }
-//}

+ 0 - 71
src/main/java/com/smppw/analysis/domain/manager/position/stock/ConcentrationBizHandler.java

@@ -1,71 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.stock;
-//
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dto.position.AssetCategoryEnum;
-//import com.smppw.analysis.domain.dto.position.FundPositionBaseInfo;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.analysis.domain.dto.position.RefMarketValueRatio;
-//import com.smppw.analysis.domain.dto.position.stock.ConcentrationParams;
-//import com.smppw.analysis.domain.dto.position.stock.ConcentrationVO;
-//import com.smppw.analysis.domain.manager.position.AbstractNonSynthesizeBizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerConstants;
-//import com.smppw.analysis.domain.manager.position.PositionLoadFactory;
-//import com.smppw.analysis.domain.gateway.CacheFactory;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import com.smppw.constants.SecType;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.math.RoundingMode;
-//import java.util.Comparator;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 14:07
-// * @description 股票集中度业务数据转换
-// */
-//@Component(BizHandlerConstants.STOCK_CONCENTRATION)
-//public class ConcentrationBizHandler extends AbstractNonSynthesizeBizHandler<ConcentrationParams, List<ConcentrationVO>> {
-//
-//    public ConcentrationBizHandler(AnalysisProperty property, CacheFactory cacheFactory, PositionLoadFactory factory) {
-//        super(property, cacheFactory, factory);
-//    }
-//
-//    @Override
-//    protected List<ConcentrationVO> afterNonSynthesizeLoadData(ConcentrationParams params, List<FundPositionBaseInfo> baseInfos, List<FundPositionDetail> positionInfos) {
-//        positionInfos = positionInfos.stream().filter(e -> SecType.PUBLICLY_OFFERED_FUNDS.equals(e.getFundType()) || (e.getLevel() != null && e.getLevel() >= 4))
-//                .filter(e -> AssetCategoryEnum.STOCK.name().equals(e.getAsset().getValue())).collect(Collectors.toList());
-//        List<ConcentrationVO> resultList = ListUtil.list(false);
-//        // 按日期分组处理
-//        Map<String, List<FundPositionDetail>> collect = positionInfos.stream().collect(Collectors.groupingBy(FundPositionDetail::getDate));
-//        collect.forEach((k, v) -> {
-//            // 基金在当前日期的净资产值
-//            BigDecimal bigDecimal = baseInfos.stream().filter(e -> k.equals(e.getDate())).findFirst().map(FundPositionBaseInfo::getAssetNv).orElse(null);
-//            if (bigDecimal != null && bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
-//                // 按成分分组,多空轧差
-//                Map<ValueLabelVO, List<BigDecimal>> listMap = v.stream().collect(Collectors.groupingBy(FundPositionDetail::getRef,
-//                        Collectors.mapping(FundPositionDetail::getMarketValue, Collectors.toList())));
-//                List<RefMarketValueRatio> position = ListUtil.list(false);
-//                listMap.forEach((r, m) -> {
-//                    BigDecimal mv = m.stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-//                    RefMarketValueRatio mvr = new RefMarketValueRatio(r, mv, mv.divide(bigDecimal, 10, RoundingMode.HALF_UP));
-//                    position.add(mvr);
-//                });
-//                // 按占比降序
-//                position.sort((o1, o2) -> o2.getRatio().compareTo(o1.getRatio()));
-//                ConcentrationVO vo = new ConcentrationVO();
-//                vo.setDate(k);
-//                vo.setAssetNv(bigDecimal);
-//                vo.setPosition(position);
-//                resultList.add(vo);
-//            }
-//        });
-//        // 按日期升序
-//        resultList.sort(Comparator.comparing(ConcentrationVO::getDate));
-//        return resultList;
-//    }
-//}

+ 0 - 67
src/main/java/com/smppw/analysis/domain/manager/position/stock/IndustryAllocationBizHandler.java

@@ -1,67 +0,0 @@
-//package com.smppw.analysis.domain.manager.position.stock;
-//
-//import cn.hutool.core.collection.ListUtil;
-//import com.smppw.analysis.domain.dto.position.CategoryConstraint;
-//import com.smppw.analysis.domain.dto.position.FundPositionDetail;
-//import com.smppw.analysis.domain.dto.position.stock.StockAllocationParams;
-//import com.smppw.analysis.domain.dto.position.stock.StockAllocationVO;
-//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.gateway.CacheFactory;
-//import com.smppw.analysis.domain.dao.PositionAnalysisDao;
-//import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.Comparator;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Objects;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/6/8 17:19
-// * @description 行业配置
-// */
-//@Component(BizHandlerConstants.INDUSTRY_ALLOCATION)
-//public class IndustryAllocationBizHandler extends AbstractAnalysisBizHandler<StockAllocationParams, List<StockAllocationVO>> {
-//    public IndustryAllocationBizHandler(AnalysisProperty property, CacheFactory cacheFactory,
-//                                        PositionLoadFactory factory, PositionAnalysisDao analysisService) {
-//        super(property, cacheFactory, factory, analysisService);
-//    }
-//
-//    @Override
-//    protected List<StockAllocationVO> afterAnalysisLoadData(String benchmarkId, List<FundPositionDetail> positionDetails,
-//                                                            Map<String, List<IndexSecWeightInfoDO>> indexWeightMap) {
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("行业配置 数据准备耗时:" + (System.currentTimeMillis() - this.current) + "ms");
-//        }
-//        List<StockAllocationVO> resultList = ListUtil.list(false);
-//        // 行业与A股对应关系
-//        Map<ValueLabelVO, List<String>> secIndustryMap = this.getIndustrySecMap();
-//        // 日期分组
-//        Map<String, List<FundPositionDetail>> positionMap = positionDetails.stream().collect(Collectors.groupingBy(FundPositionDetail::getDate));
-//        positionMap.forEach((k, v) -> {
-//            // 股票市值
-//            BigDecimal total = v.stream().map(FundPositionDetail::getMarketValue).filter(Objects::nonNull)
-//                    .reduce(BigDecimal::add).map(BigDecimal::abs).orElse(null);
-//            List<IndexSecWeightInfoDO> indexSecWeightList = indexWeightMap.getOrDefault(k, ListUtil.empty());
-//            List<CategoryConstraint> constraintList = ListUtil.list(false);
-//            List<String> categoryCodes = ListUtil.list(false);
-//            secIndustryMap.forEach((c, l) -> {
-//                CategoryConstraint constraint = this.buildCategoryConstraint(v, total, categoryCodes, indexSecWeightList, l);
-//                constraint.setCategory(c);
-//                constraintList.add(constraint);
-//            });
-//            StockAllocationVO vo = this.getStockAllocationVO(k, v, total, indexSecWeightList, constraintList, categoryCodes);
-//            resultList.add(vo);
-//        });
-//        // 按日期升序
-//        resultList.sort(Comparator.comparing(StockAllocationVO::getDate));
-//        return resultList;
-//    }
-//}

+ 0 - 80
src/main/java/com/smppw/analysis/domain/manager/position/stock/IndustryAllocationPreferenceComponent.java

@@ -1,80 +0,0 @@
-//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.dto.position.CategoryConstraint;
-//import com.smppw.analysis.domain.dto.position.stock.IndustryAllocationPreferenceVO;
-//import com.smppw.analysis.domain.dto.position.stock.StockAllocationParams;
-//import com.smppw.analysis.domain.dto.position.stock.StockAllocationVO;
-//import com.smppw.analysis.domain.manager.position.BizHandler;
-//import com.smppw.analysis.domain.manager.position.BizHandlerFactory;
-//import com.smppw.common.pojo.ValueLabelVO;
-//import org.springframework.stereotype.Component;
-//
-//import java.math.BigDecimal;
-//import java.util.Comparator;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Optional;
-//import java.util.stream.Collectors;
-//
-//import static com.smppw.analysis.domain.manager.position.BizHandlerConstants.INDUSTRY_ALLOCATION;
-//
-///**
-// * @author wangzaijun
-// * @date 2023/7/14 17:36
-// * @description 行业配置业绩表现
-// */
-//@Component
-//public class IndustryAllocationPreferenceComponent {
-//    private final BizHandlerFactory factor;
-//
-//    public IndustryAllocationPreferenceComponent(BizHandlerFactory factor) {
-//        this.factor = factor;
-//    }
-//
-//    public List<IndustryAllocationPreferenceVO> bizHandle(StockAllocationParams params) {
-//        List<IndustryAllocationPreferenceVO> resultList = ListUtil.list(false);
-//        BizHandler<StockAllocationParams, List<StockAllocationVO>> bizHandler = this.factor.getBizHandlerInstance(INDUSTRY_ALLOCATION);
-//        List<StockAllocationVO> dataList = bizHandler.bizHandle(params);
-//        // 取所有行业
-//        List<ValueLabelVO> industryList = ListUtil.list(false);
-//        for (StockAllocationVO vo : dataList) {
-//            List<ValueLabelVO> collect = vo.getIndustries().stream().map(CategoryConstraint::getCategory).distinct().collect(Collectors.toList());
-//            CollUtil.addAllIfNotContains(industryList, collect);
-//        }
-//        boolean flag = true;
-//        // 每个日期数据处理
-//        for (StockAllocationVO temp : dataList) {
-//            List<BigDecimal> offsetList = ListUtil.list(false);
-//            Map<String, String> industryMap = MapUtil.newHashMap();
-//            // 处理所有行业的行业偏离
-//            for (ValueLabelVO industry : industryList) {
-//                CategoryConstraint categoryConstraint = temp.getIndustries().stream().filter(e -> industry.equals(e.getCategory())).findFirst().orElse(null);
-//                BigDecimal pupil = Optional.ofNullable(categoryConstraint).map(CategoryConstraint::getPupil).orElse(BigDecimal.ZERO);
-//                BigDecimal benchmark = Optional.ofNullable(categoryConstraint).map(CategoryConstraint::getBenchmark).orElse(BigDecimal.ZERO);
-//                BigDecimal offset = pupil.subtract(benchmark);
-//                industryMap.put(industry.getValue(), offset.toPlainString());
-//                offsetList.add(offset);
-//            }
-//            // 对应日期内按偏离度降序
-//            MapUtil.sortByValue(industryMap, true);
-//            // 求平均行业偏离
-//            double avg = offsetList.stream().mapToDouble(e -> Double.parseDouble(e.toPlainString())).average().orElse(0.0);
-//            IndustryAllocationPreferenceVO vo = new IndustryAllocationPreferenceVO();
-//            vo.setDate(temp.getDate());
-//            vo.setIndustryPreference(industryMap);
-//            vo.setAvg(String.valueOf(avg));
-//            // 第一个日期保存所有行业关系,方便取值
-//            if (flag) {
-//                vo.setIndustryList(industryList);
-//                flag = false;
-//            }
-//            resultList.add(vo);
-//        }
-//        // 按日期升序
-//        resultList.sort(Comparator.comparing(IndustryAllocationPreferenceVO::getDate));
-//        return resultList;
-//    }
-//}

+ 0 - 0
src/main/java/com/smppw/analysis/domain/manager/position/stock/NewLiquidityAllocationBizHandler.java


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini