Kaynağa Gözat

fix: 缺失任务开发与公司邮箱唯一性校验

chenjianhua 7 ay önce
ebeveyn
işleme
0f4e42116b

+ 38 - 0
service-base/src/main/java/com/simuwang/base/common/enums/Frequency.java

@@ -0,0 +1,38 @@
+package com.simuwang.base.common.enums;
+
+import java.util.stream.Stream;
+import java.util.zip.Inflater;
+
+/**
+ * FileName: Frequency
+ * Author:   chenjianhua
+ * Date:     2024/9/18 23:19
+ * Description: ${DESCRIPTION}
+ */
+public enum Frequency {
+
+    DAY(1, "日频"),WEEK(2, "周频"),MONTH(3, "月频"),QUARTER(4,"季频"),
+    HALF_YEAR(5,"半年"),YEAR(6,"年频"),OTHER(-1,"无固定");
+
+    private Integer code;
+
+    private String info;
+
+    Frequency(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+    public static Frequency getFrequencyByCode(Integer code) {
+        return Stream.of(Frequency.values()).filter(e -> e.code.equals(code)).findFirst().orElse(null);
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+}
+

+ 4 - 0
service-base/src/main/java/com/simuwang/base/mapper/DeletionInfoMapper.java

@@ -35,4 +35,8 @@ public interface DeletionInfoMapper {
     void updateRemark(@Param("fundId") String fundId, @Param("deletionType") Integer deletionType, @Param("remark")String remark);
 
     List<FundDeletionInfoDO> selectFundDeletionInfoVOList(@Param("fundIdList") List<String> fundIdList);
+
+    DeletionInfoDO getDeletionInfoDO(DeletionInfoDO deletionInfoDO);
+
+    void saveDeletionInfoDO(DeletionInfoDO deletionInfoDO);
 }

+ 2 - 0
service-base/src/main/java/com/simuwang/base/mapper/FundInfoMapper.java

@@ -37,4 +37,6 @@ public interface FundInfoMapper {
     String queryFundIdByName(@Param("fundName") String fundName);
 
     String getCompanyNameByFundId(@Param("fundId") String fundId);
+
+    String getInceptionDateByFundId(@Param("fundId")String fundId);
 }

+ 4 - 0
service-base/src/main/java/com/simuwang/base/mapper/NavMapper.java

@@ -22,4 +22,8 @@ public interface NavMapper {
     void updateNav(NavDO navDO);
 
     void deleteNav(@Param("fundId")String fundId, @Param("priceDate")String priceDate);
+
+    List<String> getAllFundId();
+
+    List<NavDO> selectNavByFundId(@Param("fundId")String fundId);
 }

+ 18 - 0
service-base/src/main/java/com/simuwang/base/mapper/TradeDateMapper.java

@@ -0,0 +1,18 @@
+package com.simuwang.base.mapper;
+
+import com.simuwang.base.pojo.dos.TradeDateDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * FileName: TradeDateMapper
+ * Author:   chenjianhua
+ * Date:     2024/9/18 23:08
+ * Description: ${DESCRIPTION}
+ */
+@Mapper
+public interface TradeDateMapper {
+    List<TradeDateDO> selectTradeDate(@Param("startDate") String inceptionDate,@Param("endDate")  String today);
+}

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

@@ -28,12 +28,12 @@ public class FundReportFrequencyDO {
     @TableField(value = "fund_id")
     private String fundId;
     /**
-     * 净值报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频
+     * 净值报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频,-1无固定
      */
     @TableField(value = "nav_frequency")
     private Integer navFrequency;
     /**
-     * 规模报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频
+     * 规模报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频,-1无固定
      */
     @TableField(value = "asset_frequency")
     private Integer assetFrequency;

+ 75 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/TradeDateDO.java

@@ -0,0 +1,75 @@
+package com.simuwang.base.pojo.dos;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * FileName: TradeDateDO
+ * Author:   chenjianhua
+ * Date:     2024/9/18 23:02
+ * Description: ${DESCRIPTION}
+ */
+@Data
+@TableName("pvn_trade_date")
+public class TradeDateDO {
+    /**
+     * 主键Id
+     */
+    @TableId(value = "id")
+    private Integer id;
+    /**
+     * 交易日
+     */
+    @TableField(value = "trade_date")
+    private Date tradeDate;
+    /**
+     * 截止年份
+     */
+    @TableField(value = "end_year")
+    private String endYear;
+    /**
+     * 年月
+     */
+    @TableField(value = "yearmonth")
+    private String yearmonth;
+    /**
+     * 全年第几周
+     */
+    @TableField(value = "week_of_year")
+    private Integer weekOfYear;
+    /**
+     * 年周
+     */
+    @TableField(value = "year_week")
+    private Integer yearWeek;
+    /**
+     * 周的第几天
+     */
+    @TableField(value = "day_of_week")
+    private Integer dayOfWeek;
+    /**
+     * 是否为交易日
+     */
+    @TableField(value = "isholiday")
+    private Integer isholiday;
+    /**
+     * 是否有效:0-无效,1-有效
+     */
+    @TableField(value = "isvalid")
+    private Integer isvalid;
+    /**
+     * 创建时间
+     */
+    @TableField(value = "createtime")
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @TableField(value = "updatetime")
+    private Date updateTime;
+}

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

@@ -100,6 +100,6 @@
     </select>
     <select id="selectEmailConfig"  resultMap="BaseResultMap">
         select id,company_id,company_name,email,open_status,remark from
-            PPW_EMAIL.company_email_config where isvalid =1 and company_id=#{companyId} and email=#{email}
+            PPW_EMAIL.company_email_config where isvalid =1 and company_id=#{companyId} and email=#{email} limit 1
     </select>
 </mapper>

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

@@ -16,6 +16,10 @@
         <result column="updaterid" property="updaterId"/>
         <result column="updatetime" property="updateTime"/>
     </resultMap>
+    <insert id="saveDeletionInfoDO" parameterType="com.simuwang.base.pojo.dos.DeletionInfoDO">
+        insert into PPW_EMAIL.deletion_info(fund_id,deletion_type,deletion_date,isvalid,createtime,updatetime)
+        values (#{fundId},#{deletionType},#{deletionDate},#{isvalid},#{createTime},#{updateTime})
+    </insert>
     <update id="update" parameterType="com.simuwang.base.pojo.dos.FundDeletionInfoDO">
         update PPW_EMAIL.deletion_info set fund_id=#{fundId},deletion_type=#{deletionType},deletion_date=#{deletionDate},remark=#{remark},updatetime=#{updateTime}
         where id=#{id} and isvalid=1
@@ -191,5 +195,11 @@
             </foreach>
         </if>
     </select>
+    <select id="getDeletionInfoDO" resultType="com.simuwang.base.pojo.dos.DeletionInfoDO"
+            parameterType="com.simuwang.base.pojo.dos.DeletionInfoDO">
+        select id,fund_id,deletion_type,deletion_date,remark,isvalid,creatorid,updaterid,createtime,updatetime
+        from PPW_EMAIL.deletion_info where isvalid=1 and remark is null
+        and fund_id=#{fundId} and deletion_date=#{deletionDate} and deletion_type=#{deletionType}
+    </select>
 
 </mapper>

+ 3 - 0
service-base/src/main/resources/mapper/FundInfoMapper.xml

@@ -156,5 +156,8 @@
         join PPW_EMAIL.pvn_fund_info info on info.trust_id=c.company_id
         where info.fund_id=#{fundId} and info.isvalid=1 and c.isvalid=1
     </select>
+    <select id="getInceptionDateByFundId" resultType="java.lang.String" parameterType="java.lang.String">
+        select inception_date from PPW_EMAIL.pvn_company_info where fund_id=#{fundId} and isvalid=1
+    </select>
 
 </mapper>

+ 11 - 0
service-base/src/main/resources/mapper/NavMapper.xml

@@ -79,6 +79,17 @@
           and fund_id = #{fundId}
           and price_date=#{priceDate}
     </select>
+    <select id="getAllFundId" resultType="java.lang.String">
+        select distinct fund_id from PPW_EMAIL.nav where isvalid=1
+    </select>
+    <select id="selectNavByFundId" resultMap="BaseResultMap"
+            parameterType="java.lang.String">
+        SELECT id, fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
+               isvalid, creatorid, createtime, updaterid, updatetime
+        from PPW_EMAIL.nav
+        where isvalid = 1
+          and fund_id = #{fundId}
+    </select>
 
 
 </mapper>

+ 23 - 0
service-base/src/main/resources/mapper/TradeDateMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.simuwang.base.mapper.TradeDateMapper">
+    <resultMap id="BaseResultMap" type="com.simuwang.base.pojo.dos.TradeDateDO">
+        <id column="id" property="id"/>
+        <result column="trade_date" property="tradeDate"/>
+        <result column="end_year" property="endYear"/>
+        <result column="yearmonth" property="yearmonth"/>
+        <result column="week_of_year" property="weekOfYear"/>
+        <result column="year_week" property="yearWeek"/>
+        <result column="day_of_week" property="dayOfWeek"/>
+        <result column="isholiday" property="isholiday"/>
+        <result column="isvalid" property="isvalid"/>
+        <result column="createtime" property="createTime"/>
+        <result column="updatetime" property="updateTime"/>
+    </resultMap>
+    <select id="selectTradeDate" resultMap="BaseResultMap">
+        select id,trade_date,end_year,yearmonth,week_of_year,year_week,day_of_week,isholiday,isvalid,createtime,updatetime
+        from PPW_EMAIL.pvn_trade_date where isvalid=1 and isholiday=0 and trade_date>=#{startDate} and trade_date <![CDATA[ <= ]]> #{endDate}
+    </select>
+
+
+</mapper>

+ 101 - 0
service-manage/src/main/java/com/simuwang/manage/task/FundDeletionTask.java

@@ -0,0 +1,101 @@
+//package com.simuwang.manage.task;
+//
+//import com.simuwang.base.common.enums.DeletionType;
+//import com.simuwang.base.common.enums.Frequency;
+//import com.simuwang.base.common.util.DateUtils;
+//import com.simuwang.base.common.util.StringUtil;
+//import com.simuwang.base.mapper.*;
+//import com.simuwang.base.pojo.dos.DeletionInfoDO;
+//import com.simuwang.base.pojo.dos.FundReportFrequencyDO;
+//import com.simuwang.base.pojo.dos.NavDO;
+//import com.simuwang.base.pojo.dos.TradeDateDO;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.scheduling.annotation.EnableScheduling;
+//import org.springframework.scheduling.annotation.Scheduled;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.List;
+//import java.util.Map;
+//import java.util.stream.Collectors;
+//
+///**
+// * FileName: FundDeletionTask
+// * Author:   chenjianhua
+// * Date:     2024/9/18 22:43
+// * Description: ${DESCRIPTION}
+// */
+//@EnableScheduling
+//@Component
+//public class FundDeletionTask {
+//
+//    @Autowired
+//    private NavMapper navMapper;
+//    @Autowired
+//    private FundInfoMapper fundInfoMapper;
+//
+//    @Autowired
+//    private FundReportFrequencyMapper fundReportFrequencyMapper;
+//
+//    @Autowired
+//    private TradeDateMapper tradeDateMapper;
+//
+//    @Autowired
+//    private DeletionInfoMapper deletionInfoMapper;
+//    @Scheduled(cron = "0 0 0/2 * * ?")
+//    public void computeDeletion(){
+//        List<String> fundIdList = navMapper.getAllFundId();
+//        for(String fundId : fundIdList){
+//            String inceptionDate = fundInfoMapper.getInceptionDateByFundId(fundId);
+//            if(inceptionDate == null){
+//                continue;
+//            }
+//            String today = DateUtils.getAroundToday(0);
+//            //获取基金对应的净值报送频率
+//            FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
+//            if(StringUtil.isNull(fundReportFrequencyDO)){
+//                continue;
+//            }
+//            List<NavDO> navDOList = navMapper.selectNavByFundId(fundId);
+//            //查询成立日到今天为止的交易日集合
+//            List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
+//            //只处理日月季频率
+//            if(Frequency.DAY == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
+//                Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
+//                Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getTradeDate(),DateUtils.YYYY_MM_DD)));
+//                for(String tradeDate : tradeListMap.keySet()){
+//                    if(navListMap.containsKey(tradeDate)){
+//                        continue;
+//                    }
+//                    //写入缺失信息表
+//                    saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
+//                }
+//            }
+//            if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
+//                Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
+//
+//                Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getWeekOfYear()));
+//                for(Integer weekOfYear : tradeListMap.keySet()){
+//                    if(navListMap.containsKey(tradeDate)){
+//                        continue;
+//                    }
+//                    //写入缺失信息表
+//                    saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
+//                }
+//            }
+//        }
+//    }
+//
+//    private void saveDeletionInfoDO(String fundId, String tradeDate, Integer code) {
+//        DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
+//        deletionInfoDO.setFundId(fundId);
+//        deletionInfoDO.setDeletionDate(tradeDate);
+//        deletionInfoDO.setDeletionType(code);
+//        DeletionInfoDO oldDeletionDO = deletionInfoMapper.getDeletionInfoDO(deletionInfoDO);
+//        if(StringUtil.isNull(oldDeletionDO)){
+//            deletionInfoDO.setIsvalid(1);
+//            deletionInfoDO.setUpdateTime(DateUtils.getNowDate());
+//            deletionInfoDO.setCreateTime(DateUtils.getNowDate());
+//            deletionInfoMapper.saveDeletionInfoDO(deletionInfoDO);
+//        }
+//    }
+//}