Просмотр исходного кода

feat:调整中航证券基金净值衍生指标及排名结果明细表

mozuwen 5 месяцев назад
Родитель
Сommit
46a3cdfed7

+ 3 - 0
service-base/src/main/java/com/simuwang/base/mapper/CompanyInformationMapper.java

@@ -1,5 +1,6 @@
 package com.simuwang.base.mapper;
 
+import com.simuwang.base.pojo.dos.CompanyInformationDO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,4 +20,6 @@ public interface CompanyInformationMapper {
     String getCompanyNameByFundId(@Param("fundId") String fundId);
 
     Long countCompanyTotal();
+
+    List<CompanyInformationDO> quertAssetByCompanyId(@Param("companyIdList") List<String> companyIdList);
 }

+ 2 - 2
service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyInformationDO.java

@@ -148,10 +148,10 @@ public class CompanyInformationDO {
     @TableField(value = "paid_capital")
     private BigDecimal paidCapital;
     /**
-     * 实缴资本(万元)
+     * 实缴资本(万元)-- 公司规模:1:0-5亿 2:5-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上
      */
     @TableField(value = "company_asset_size")
-    private BigDecimal companyAssetSize;
+    private Integer companyAssetSize;
     /**
      * 员工人数
      */

+ 0 - 116
service-base/src/main/java/com/simuwang/base/pojo/dto/CompetitionBaseResultDTO.java

@@ -1,13 +1,7 @@
 package com.simuwang.base.pojo.dto;
 
-import com.alibaba.excel.annotation.ExcelIgnore;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import lombok.Data;
 
-import java.math.BigDecimal;
-
 /**
  * @author mozuwen
  * @date 2024-11-01
@@ -16,114 +10,4 @@ import java.math.BigDecimal;
 @Data
 public class CompetitionBaseResultDTO {
 
-    /**
-     * 策略
-     */
-    @HeadFontStyle(fontHeightInPoints = 10)
-    @ColumnWidth(15)
-    @ExcelProperty(value = "策略", index = 0)
-    private String strategyName;
-
-    /**
-     * 排名
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "排名", index = 1)
-    private Integer rank;
-
-    /**
-     * 综合得分
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "综合得分", index = 2)
-    private BigDecimal score;
-    /**
-     * 策略
-     */
-    @ExcelIgnore
-    private Integer strategy;
-
-    /**
-     * 产品
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "产品", index = 3)
-    private String fundId;
-
-    /**
-     * 产品备案编码
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "产品备案编码", index = 4)
-    private String registerNumber;
-
-    /**
-     * 产品全称
-     */
-    @ColumnWidth(25)
-    @ExcelProperty(value = "产品全称", index = 5)
-    private String fundName;
-
-    /**
-     * 产品简称
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "产品简称", index = 6)
-    private String fundShortName;
-
-    /**
-     * 公司
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "公司", index = 7)
-    private String companyId;
-
-    /**
-     * 公司备案编码
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "公司备案编码", index = 8)
-    private String companyRegisterNumber;
-
-    /**
-     * 公司全称
-     */
-    @ColumnWidth(25)
-    @ExcelProperty(value = "公司全称", index = 9)
-    private String companyName;
-
-    /**
-     * 公司简称
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "公司简称", index = 10)
-    private String companyShortName;
-
-    /**
-     * 期初净值日期
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "期初净值日期", index = 11)
-    private String startPriceDate;
-
-    /**
-     * 期初净值
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "期初净值", index = 12)
-    private String startCumulativeNavWithdrawal;
-
-    /**
-     * 期末净值日期
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "期末净值日期", index = 13)
-    private String endPriceDate;
-
-    /**
-     * 期末净值
-     */
-    @ColumnWidth(15)
-    @ExcelProperty(value = "期末净值", index = 14)
-    private String endCumulativeNavWithdrawal;
 }

+ 131 - 2
service-base/src/main/java/com/simuwang/base/pojo/dto/ZhzqCompetitionResultDTO.java

@@ -1,9 +1,12 @@
 package com.simuwang.base.pojo.dto;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
 import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -14,12 +17,131 @@ import java.math.BigDecimal;
  * @description 中航证券大赛排名榜单模板
  */
 @Data
-public class ZhzqCompetitionResultDTO extends CompetitionBaseResultDTO {
+@HeadFontStyle(fontHeightInPoints = 10)
+@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT)
+public class ZhzqCompetitionResultDTO extends CompetitionBaseResultDTO{
+
+    /**
+     * 策略
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "策略")
+    private String strategyName;
+
+    /**
+     * 规模分组
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "规模分组")
+    private String assetGroupName;
+
+    /**
+     * 排名
+     */
+    @ColumnWidth(10)
+    @ExcelProperty(value = "排名")
+    private Integer rank;
+
+    /**
+     * 策略(该字段不在输出表格内)
+     */
+    @ExcelIgnore
+    private Integer strategy;
+
+    /**
+     * 产品ID
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "产品ID")
+    private String fundId;
+
+    /**
+     * 产品备案编码
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "产品备案编码")
+    private String registerNumber;
+
+    /**
+     * 产品全称
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "产品全称")
+    private String fundName;
+
+    /**
+     * 产品简称
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "产品简称")
+    private String fundShortName;
+
+    /**
+     * 公司ID
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "公司ID")
+    private String companyId;
+
+    /**
+     * 公司备案编码
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "公司备案编码")
+    private String companyRegisterNumber;
+
+    /**
+     * 公司全称
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "公司全称")
+    private String companyName;
+
+    /**
+     * 公司简称
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "公司简称")
+    private String companyShortName;
+
+    /**
+     * 期初净值日期
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "期初净值日期")
+    private String startPriceDate;
+
+    /**
+     * 期初净值
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "期初净值")
+    private String startCumulativeNavWithdrawal;
+
+    /**
+     * 期末净值日期
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "期末净值日期")
+    private String endPriceDate;
+
+    /**
+     * 期末净值
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "期末净值")
+    private String endCumulativeNavWithdrawal;
+
+    /**
+     * 综合得分
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "综合得分")
+    private BigDecimal score;
 
     /**
      * 收益率
      */
-    @HeadFontStyle(fontHeightInPoints = 10)
     @ColumnWidth(15)
     @ExcelProperty("收益率")
     private BigDecimal ret;
@@ -80,4 +202,11 @@ public class ZhzqCompetitionResultDTO extends CompetitionBaseResultDTO {
     @ExcelProperty("超额卡玛比率")
     private BigDecimal excessCalmarRatio;
 
+    /**
+     * 是否开户
+     */
+    @ColumnWidth(10)
+    @ExcelProperty(value = "是否开户")
+    private String isOpenAccount;
+
 }

+ 10 - 0
service-base/src/main/resources/mapper/CompanyInformationMapper.xml

@@ -59,4 +59,14 @@
         select count(1) from pvn_company_info where isvalid=1
     </select>
 
+    <select id="quertAssetByCompanyId" resultMap="BaseResultMap">
+        select company_id,
+               company_asset_size
+        from pvn_company_info
+        where isvalid = 1
+          and company_id in
+            <foreach collection="companyIdList" index="index" item="companyId" open="(" separator="," close=")">
+                #{companyId}
+            </foreach>
+    </select>
 </mapper>

+ 2 - 1
service-base/src/main/resources/mapper/RzZhzq2ResultMapper.xml

@@ -24,7 +24,8 @@
                info_ratio                as infoRation,
                excess_ret                as excessRet,
                excess_maxdown            as excessMaxdown,
-               excess_calmarratio        as excessCalmarratio
+               excess_calmarratio        as excessCalmarratio,
+               CASE WHEN is_open_account = 1 THEN '是' ELSE '否' END AS isOpenAccount
         from rz_zhzq2_res
         WHERE isvalid = 1
     </select>

+ 53 - 8
service-manage/src/main/java/com/simuwang/manage/service/competition/ZhzqCompetitionResult.java

@@ -1,8 +1,12 @@
 package com.simuwang.manage.service.competition;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import com.simuwang.base.mapper.CompanyInformationMapper;
 import com.simuwang.base.mapper.RzZhzq2ResultMapper;
+import com.simuwang.base.pojo.dos.CompanyInformationDO;
 import com.simuwang.base.pojo.dto.CompetitionBaseResultDTO;
 import com.simuwang.base.pojo.dto.ZhzqCompetitionResultDTO;
 import org.springframework.stereotype.Service;
@@ -15,6 +19,12 @@ import java.util.stream.Collectors;
 @Service
 public class ZhzqCompetitionResult extends AbstractCompetitionResult {
 
+    private static final String GROWTH_PARTNERSHIP_GROUP = "成长伙伴组";
+
+    private static final String STRATEGIC_PARTNERSHIP_GROUP = "战略伙伴组";
+
+    private static final List<Integer> GROWTH_PARTNERSHIP_STRATEGY_LIST = ListUtil.toList(1, 2, 3, 4);
+
     private static final Map<Integer, String> STRATEGY_ID_NAME_MAP = MapUtil.newHashMap();
 
     static {
@@ -27,8 +37,11 @@ public class ZhzqCompetitionResult extends AbstractCompetitionResult {
 
     private final RzZhzq2ResultMapper zhzqResultMapper;
 
-    public ZhzqCompetitionResult(RzZhzq2ResultMapper zhzqResultMapper) {
+    private final CompanyInformationMapper companyInformationMapper;
+
+    public ZhzqCompetitionResult(RzZhzq2ResultMapper zhzqResultMapper, CompanyInformationMapper companyInformationMapper) {
         this.zhzqResultMapper = zhzqResultMapper;
+        this.companyInformationMapper = companyInformationMapper;
     }
 
     @Override
@@ -42,28 +55,60 @@ public class ZhzqCompetitionResult extends AbstractCompetitionResult {
         if (CollUtil.isEmpty(competitionResultDTOList)) {
             return CollUtil.newArrayList();
         }
-        // 策略名称排名
-        Map<Integer, List<ZhzqCompetitionResultDTO>> strategyResultDTOList = competitionResultDTOList.stream().collect(Collectors.groupingBy(CompetitionBaseResultDTO::getStrategy));
+        // 策略名称排名
+        Map<Integer, List<ZhzqCompetitionResultDTO>> strategyResultDTOList = competitionResultDTOList.stream().collect(Collectors.groupingBy(ZhzqCompetitionResultDTO::getStrategy));
         for (Map.Entry<Integer, List<ZhzqCompetitionResultDTO>> resultEntry : strategyResultDTOList.entrySet()) {
             Integer strategy = resultEntry.getKey();
             String strategyName = STRATEGY_ID_NAME_MAP.get(strategy);
             List<ZhzqCompetitionResultDTO> resultDTOList = resultEntry.getValue();
 
             // 按照分数降序排序
-            resultDTOList.sort(Comparator.comparing(CompetitionBaseResultDTO::getScore, Comparator.nullsFirst(Comparator.naturalOrder())).reversed());
+            resultDTOList.sort(Comparator.comparing(ZhzqCompetitionResultDTO::getScore, Comparator.nullsFirst(Comparator.naturalOrder())).reversed());
             // 计算排名并设置
             int rank = 1;
             for (int i = 0; i < resultDTOList.size(); i++) {
-                CompetitionBaseResultDTO dto = resultDTOList.get(i);
-                dto.setRank(rank);
+                ZhzqCompetitionResultDTO dto = resultDTOList.get(i);
                 dto.setStrategyName(strategyName);
-                rank = i + 1;
+                if (dto.getScore() != null) {
+                    dto.setRank(rank);
+                    rank = i + 1;
+                } else {
+                    // 没有分数的基金排名为:999999
+                    dto.setRank(999999);
+                }
             }
         }
+
+        // 设置规模分组
+        settingAssetGroupName(competitionResultDTOList);
+
         // 策略分组和排名降序输出
         return competitionResultDTOList.stream()
-                .sorted(Comparator.comparing(CompetitionBaseResultDTO::getStrategyName).reversed().thenComparing(CompetitionBaseResultDTO::getRank))
+                .sorted(Comparator.comparing(ZhzqCompetitionResultDTO::getStrategyName).reversed().thenComparing(ZhzqCompetitionResultDTO::getRank))
                 .collect(Collectors.toList());
     }
 
+    private void settingAssetGroupName(List<ZhzqCompetitionResultDTO> competitionResultDTOList) {
+        if (CollUtil.isEmpty(competitionResultDTOList)) {
+            return;
+        }
+        List<String> companyIdList = competitionResultDTOList.stream().map(ZhzqCompetitionResultDTO::getCompanyId).filter(StrUtil::isNotBlank).distinct().toList();
+        if (CollUtil.isEmpty(companyIdList)) {
+            return;
+        }
+        // 获取公司规模 -> 1:0-5亿 2:5-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上
+        List<CompanyInformationDO> companyInfoDOList = companyInformationMapper.quertAssetByCompanyId(companyIdList);
+        Map<String, Integer> companyIdAssetMap = companyInfoDOList.stream().collect(Collectors.toMap(CompanyInformationDO::getCompanyId, CompanyInformationDO::getCompanyAssetSize));
+
+        competitionResultDTOList.forEach(e -> e.setAssetGroupName(getAssetGroupName(companyIdAssetMap.get(e.getCompanyId()), e.getStrategy())));
+    }
+
+    private String getAssetGroupName(Integer companyAssetSize, Integer strategyId) {
+        // 1:0-5亿 2:5-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上
+        if (GROWTH_PARTNERSHIP_STRATEGY_LIST.contains(strategyId)) {
+            return companyAssetSize != null && companyAssetSize >= 4 ? STRATEGIC_PARTNERSHIP_GROUP : GROWTH_PARTNERSHIP_GROUP;
+        } else {
+            return companyAssetSize != null && companyAssetSize >= 3 ? STRATEGIC_PARTNERSHIP_GROUP : GROWTH_PARTNERSHIP_GROUP;
+        }
+    }
 }