Bläddra i källkod

feat: 定时任务记录功能开发

chenjianhua 6 månader sedan
förälder
incheckning
08cb10c0ee

+ 12 - 0
service-base/src/main/java/com/simuwang/base/common/conts/TaskConst.java

@@ -0,0 +1,12 @@
+package com.simuwang.base.common.conts;
+
+/**
+ * FileName: ExcelConst
+ * Author:   chenjianhua
+ * Date:     2024/9/16 12:56
+ * Description: ${DESCRIPTION}
+ */
+public class TaskConst {
+    public final static String EMAIL_TASK = "邮件解析任务";
+
+}

+ 21 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailTaskInfoMapper.java

@@ -0,0 +1,21 @@
+package com.simuwang.base.mapper;
+
+import com.simuwang.base.pojo.dos.EmailFileInfoDO;
+import com.simuwang.base.pojo.dos.EmailParseDetailDO;
+import com.simuwang.base.pojo.dos.EmailTaskInfoDO;
+import com.simuwang.base.pojo.dto.query.EmailFileQuery;
+import com.simuwang.base.pojo.dto.query.FundFilePageQuery;
+import com.simuwang.base.pojo.vo.FundFileInfoVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+@Mapper
+public interface EmailTaskInfoMapper {
+
+    Integer insert(@Param("itemDo") EmailTaskInfoDO emailTaskInfoDO);
+
+    void updateTaskStatus(@Param("email") String email, @Param("startTime")Date startDate, @Param("endTime")Date endDate,@Param("taskStatus")Integer taskStatus);
+}

+ 74 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTaskInfoDO.java

@@ -0,0 +1,74 @@
+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.util.Date;
+
+/**
+ * FileName: EmailTaskInfo
+ * Author:   chenjianhua
+ * Date:     2024/10/8 9:13
+ * Description: ${DESCRIPTION}
+ */
+@Data
+@TableName("email_task_info")
+public class EmailTaskInfoDO {
+    /**
+     * 主键Id
+     */
+    @TableId(value = "id")
+    private Integer id;
+    /**
+     * 任务名称
+     */
+    @TableField(value = "task_name")
+    private String taskName;
+    /**
+     * 邮箱地址
+     */
+    @TableField(value = "email")
+    private String email;
+    /**
+     * 开始时间
+     */
+    @TableField(value = "start_time")
+    private Date startTime;
+    /**
+     * 结束时间
+     */
+    @TableField(value = "end_time")
+    private Date endTime;
+    /**
+     * 任务状态,1-运行中,2-结束,-1-异常
+     */
+    @TableField(value = "task_status")
+    private Integer taskStatus;
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    @TableField(value = "isvalid")
+    private Integer isvalid;
+    /**
+     * 创建者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    @TableField(value = "creatorid")
+    private Integer creatorId;
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    @TableField(value = "updaterid")
+    private Integer updaterId;
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    @TableField(value = "createtime")
+    private Date createTime;
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    @TableField(value = "updatetime")
+    private Date updateTime;
+}

+ 29 - 0
service-base/src/main/resources/mapper/EmailTaskInfoMapper.xml

@@ -0,0 +1,29 @@
+<?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.EmailTaskInfoMapper">
+    <resultMap id="BaseResultMap" type="com.simuwang.base.pojo.dos.EmailTaskInfoDO">
+        <id column="id" property="id"/>
+        <result column="email" property="email"/>
+        <result column="task_name" property="taskName"/>
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="task_status" property="taskStatus"/>
+        <result column="isvalid" property="isvalid"/>
+        <result column="creatorid" property="creatorId"/>
+        <result column="createtime" property="createTime"/>
+        <result column="updaterid" property="updaterId"/>
+        <result column="updatetime" property="updateTime"/>
+    </resultMap>
+
+
+    <insert id="insert" parameterType="com.simuwang.base.pojo.dos.EmailTaskInfoDO" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
+        insert into PPW_EMAIL.email_task_info(email, task_name, start_time, end_time, task_status,
+                                     isvalid, creatorid, createtime, updaterid, updatetime)
+        values (#{itemDo.email}, #{itemDo.taskName}, #{itemDo.startTime}, #{itemDo.endTime}, #{itemDo.taskStatus},
+                #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})
+    </insert>
+    <update id="updateTaskStatus">
+        update PPW_EMAIL.email_task_info set task_status=#{taskStatus},updatetime=sysdate() where email=#{email} and start_time=#{startTime} and end_time=#{endTime}
+    </update>
+
+</mapper>

+ 54 - 2
service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiServiceImpl.java

@@ -6,15 +6,20 @@ import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.simuwang.base.common.conts.DateConst;
+import com.simuwang.base.common.conts.TaskConst;
+import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.EmailUtil;
 import com.simuwang.base.mapper.EmailFileInfoMapper;
 import com.simuwang.base.mapper.EmailParseInfoMapper;
+import com.simuwang.base.mapper.EmailTaskInfoMapper;
 import com.simuwang.base.pojo.dos.EmailFileInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
+import com.simuwang.base.pojo.dos.EmailTaskInfoDO;
 import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
 import com.simuwang.base.pojo.dto.EmailFundNavDTO;
 import com.simuwang.base.pojo.dto.EmailInfoDTO;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
+import com.simuwang.shiro.utils.UserUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -43,18 +48,65 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
     private final EmailParseInfoMapper emailParseInfoMapper;
     private final EmailFileInfoMapper emailFileInfoMapper;
     private final ThreadPoolTaskExecutor asyncExecutor;
+    private final EmailTaskInfoMapper emailTaskInfoMapper;
 
     public EmailParseApiServiceImpl(EmailParseService emailParseService, EmailParseInfoMapper emailParseInfoMapper,
-                                    EmailFileInfoMapper emailFileInfoMapper, @Qualifier("asyncExecutor") ThreadPoolTaskExecutor asyncExecutor) {
+                                    EmailFileInfoMapper emailFileInfoMapper, @Qualifier("asyncExecutor") ThreadPoolTaskExecutor asyncExecutor, EmailTaskInfoMapper emailTaskInfoMapper) {
         this.emailParseService = emailParseService;
         this.emailParseInfoMapper = emailParseInfoMapper;
         this.emailFileInfoMapper = emailFileInfoMapper;
         this.asyncExecutor = asyncExecutor;
+        this.emailTaskInfoMapper = emailTaskInfoMapper;
     }
 
     @Override
     public void parseEmail(MailboxInfoDTO mailboxInfoDTO, Date startDate, Date endDate) {
-        asyncExecutor.execute(() -> emailParseService.parseEmail(mailboxInfoDTO, startDate, endDate));
+        asyncExecutor.execute(new Runnable() {
+                  @Override
+                  public void run() {
+                      startEmailTask(mailboxInfoDTO, startDate, endDate,1);
+                      try{
+                          emailParseService.parseEmail(mailboxInfoDTO, startDate, endDate);
+                      }catch (Exception e){
+                          log.error(e.getMessage(),e);
+                          endEmailTask(mailboxInfoDTO,startDate,endDate,-1);
+                          return;
+                      }
+                      endEmailTask(mailboxInfoDTO,startDate,endDate,2);
+                  }
+              }
+        );
+    }
+
+    private void endEmailTask(MailboxInfoDTO mailboxInfoDTO, Date startDate, Date endDate,Integer taskStatus) {
+        try{
+            emailTaskInfoMapper.updateTaskStatus(mailboxInfoDTO.getAccount(),startDate,endDate,taskStatus);
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }
+    }
+
+    private void startEmailTask(MailboxInfoDTO mailboxInfoDTO, Date startDate, Date endDate,Integer taskStatus) {
+        try{
+            EmailTaskInfoDO  emailTaskInfoDO = new EmailTaskInfoDO();
+            emailTaskInfoDO.setTaskName(TaskConst.EMAIL_TASK);
+            emailTaskInfoDO.setTaskStatus(taskStatus);
+            emailTaskInfoDO.setStartTime(startDate);
+            emailTaskInfoDO.setEndTime(endDate);
+            emailTaskInfoDO.setIsvalid(1);
+            emailTaskInfoDO.setEmail(mailboxInfoDTO.getAccount());
+            emailTaskInfoDO.setCreateTime(DateUtils.getNowDate());
+            emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate());
+            try{
+                emailTaskInfoDO.setCreatorId(UserUtils.getLoginUser().getUserId());
+                emailTaskInfoDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
+            }catch (Exception e){
+
+            }
+            emailTaskInfoMapper.insert(emailTaskInfoDO);
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }
     }
 
     @Override