Переглянути джерело

feat:净值频率计算任务开发

chenjianhua 2 тижнів тому
батько
коміт
308b2b48f6

+ 2 - 1
service-base/src/main/java/com/simuwang/base/common/enums/TaskType.java

@@ -14,7 +14,8 @@ public enum TaskType {
     DELETION_COMPUTE(2, "缺失计算"),
     DELETION_NOTIFICATIONS(3, "缺失明细通知"),
     NAV_AMPLITUDE(4, "净值振幅检测任务"),
-    NAV_FREQUENCY(5, "净值频率计算任务");
+    NAV_FREQUENCY(5, "净值频率计算任务"),
+    PARSE_FAIL_EMAIL(6, "解析失败邮件汇总任务");
 
     private final int type;
     private final String info;

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

@@ -24,4 +24,6 @@ public interface ChannelMapper extends BaseMapper<ChannelInfoDO> {
     List<ChannelPageInfoDO> searchChannelPage(ChannelPageQuery channelPageQuery);
 
     long countChannelInfoPage(ChannelPageQuery channelPageQuery);
+
+    List<ChannelInfoDO> selectAllChannel();
 }

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

@@ -44,4 +44,6 @@ public interface EmailParseInfoMapper {
     void updateReviewStatus(@Param("idList")List<Integer> idList, @Param("reviewStatus")Integer reviewStatus,@Param("userId") Integer userId);
 
     List<EmailParseInfoDO> queryByEmail(@Param("senderEmail") String email);
+
+    List<EmailParseInfoDO> selectListByParseDate(@Param("email") String email, @Param("parseDate") String parseDate);
 }

+ 4 - 0
service-base/src/main/resources/mapper/daq/ChannelMapper.xml

@@ -94,4 +94,8 @@
             and channel_name like concat('%',#{channelName},'%')
         </if>
     </select>
+    <select id="selectAllChannel" resultMap="BaseResultMap">
+        select id,channel,email,channel_remark from channel_info
+        where isvalid=1
+    </select>
 </mapper>

+ 6 - 0
service-base/src/main/resources/mapper/daq/EmailParseInfoMapper.xml

@@ -312,5 +312,11 @@
         where isvalid = 1
           and sender_email = #{senderEmail}
     </select>
+    <select id="selectListByParseDate" resultMap="BaseResultMap">
+        select id, email, email_date, parse_date, email_title, email_type, sender_email,parse_status
+        from email_parse_info
+        where isvalid = 1
+          and email = #{email} and parse_date >=#{parseDate} and parse_status !=1
+    </select>
 
 </mapper>

+ 4 - 1
service-manage/src/main/java/com/simuwang/manage/task/NavFrequencyComputeTask.java

@@ -56,11 +56,14 @@ public class NavFrequencyComputeTask {
         String priceDate = DateUtils.getAroundToday(-35);
         for (String fundId : fundIdList) {
             FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
-            if(fundReportFrequencyDO != null){
+            if(fundReportFrequencyDO != null && fundReportFrequencyDO.getCreatorId() != null){
                 continue;
             }
             List<NavDO> navDOList = navMapper.selectNavByFundIdAndDate(fundId,priceDate);
             FundReportFrequencyDO fundReportFrequency = new FundReportFrequencyDO();
+            if(fundReportFrequencyDO != null){
+                fundReportFrequency.setId(fundReportFrequencyDO.getId());
+            }
             fundReportFrequency.setFundId(fundId);
             if(navDOList.size() >= 8){
                 fundReportFrequency.setNavFrequency(Frequency.DAY.getCode());

+ 88 - 0
service-manage/src/main/java/com/simuwang/manage/task/ParseEmailFailTask.java

@@ -0,0 +1,88 @@
+package com.simuwang.manage.task;
+
+import com.github.junrar.unpack.decode.LitDecode;
+import com.simuwang.base.common.enums.Frequency;
+import com.simuwang.base.common.enums.TaskType;
+import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.mapper.daq.*;
+import com.simuwang.base.pojo.dos.*;
+import com.simuwang.shiro.utils.UserUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * FileName: NavFrequencyComputeTask
+ * Author:   chenjianhua
+ * Date:     2024/12/9 15:46
+ * Description: ${DESCRIPTION}
+ */
+@Component
+public class ParseEmailFailTask {
+    private static final Logger log = LoggerFactory.getLogger(ParseEmailFailTask.class);
+    @Autowired
+    private EmailTaskInfoMapper emailTaskInfoMapper;
+    @Autowired
+    private EmailParseInfoMapper emailParseInfoMapper;
+    @Autowired
+    private ChannelMapper channelMapper;
+
+    /**
+     * 取近一月(35天)净值数量判断
+     * 净值数 >= 8, 设置为“日频”
+     * 2 < 净值数 < 8, 设置为“周频”
+     * 1 <= 净值数 <= 2, 设置为“月频”
+     * 不满足上述规则,默认为空。
+     */
+    public void emailParseFailTaskStaticis(){
+        EmailTaskInfoDO emailTaskInfoDO = startEmailTask(null, 1);
+        //获取净值振幅错误的数据总量
+        List<ChannelInfoDO> channelInfoDOList = channelMapper.selectAllChannel();
+        String parseDate = DateUtils.getAroundToday(-1);
+        for (ChannelInfoDO channelInfoDO : channelInfoDOList) {
+            String email = emailTaskInfoDO.getEmail();
+            List<EmailParseInfoDO> emailParseInfoDOList = emailParseInfoMapper.selectListByParseDate(email,parseDate);
+        }
+        endEmailTask(emailTaskInfoDO.getId(),2);
+    }
+
+    private EmailTaskInfoDO startEmailTask(String email,Integer taskStatus) {
+        EmailTaskInfoDO  emailTaskInfoDO = new EmailTaskInfoDO();
+        try{
+            emailTaskInfoDO.setTaskName(TaskType.PARSE_FAIL_EMAIL.getInfo());
+            emailTaskInfoDO.setTaskType(TaskType.PARSE_FAIL_EMAIL.getType());
+            emailTaskInfoDO.setTaskStatus(taskStatus);
+            emailTaskInfoDO.setStartTime(DateUtils.getNowDate());
+            emailTaskInfoDO.setIsvalid(1);
+            emailTaskInfoDO.setEmail(email);
+            emailTaskInfoDO.setCreateTime(DateUtils.getNowDate());
+            emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate());
+            try{
+                emailTaskInfoDO.setCreatorId(UserUtils.getLoginUser().getUserId());
+                emailTaskInfoDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
+            }catch (Exception e){
+                emailTaskInfoDO.setCreatorId(1);
+                emailTaskInfoDO.setUpdaterId(1);
+            }
+            emailTaskInfoMapper.insert(emailTaskInfoDO);
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }
+        return emailTaskInfoDO;
+    }
+    private void endEmailTask(Integer id, Integer taskStatus) {
+        try{
+            EmailTaskInfoDO emailTaskInfoDO = new EmailTaskInfoDO();
+            emailTaskInfoDO.setId(id);
+            emailTaskInfoDO.setTaskStatus(taskStatus);
+            emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate());
+            emailTaskInfoDO.setEndTime(DateUtils.getNowDate());
+            emailTaskInfoMapper.updateTaskStatusById(emailTaskInfoDO);
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }
+    }
+}