浏览代码

解析详情功能开发,包含解析统计,表格查询,详情

chenjianhua 7 月之前
父节点
当前提交
28f8e9cc2c

+ 33 - 0
service-base/src/main/java/com/simuwang/base/common/enums/ParseStatus.java

@@ -0,0 +1,33 @@
+package com.simuwang.base.common.enums;
+
+import java.util.stream.Stream;
+
+/**
+ * FileName: EMAIL_CRON
+ * Author:   chenjianhua
+ * Date:     2024/9/9 13:50
+ * Description: ${DESCRIPTION}
+ */
+public enum ParseStatus {
+    //解析状态:1-成功,2-净值缺失,3-未匹配基金,4-净值<=0,5-资产净值<=0
+    Success(1, "成功"), NavMiss(2, "净值缺失"),
+    FundMiss(3, "未匹配基金"), NavLessthanZero(4, "净值<=0"),
+    AssetLessthanZero(5, "资产净值<=0"),
+    Fail(-1, "失败");
+
+    private final Integer code;
+    private final String info;
+
+    ParseStatus(Integer code, String info){
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+}

+ 1 - 0
service-base/src/main/java/com/simuwang/base/config/ShiroConfig.java

@@ -147,6 +147,7 @@ public class ShiroConfig {
         map.put("/v1/rsa-key", "anon");
         map.put("/test/**", "anon");
         map.put("/company/**", "anon");
+        map.put("/parse/**", "anon");
         map.put("/fund/**", "anon");
         map.put("/email/**", "anon");
         map.put("/v1/**", "jwt");

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

@@ -1,13 +1,22 @@
 package com.simuwang.base.mapper;
 
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
+import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 @Mapper
 public interface EmailParseInfoMapper {
 
     Integer insert(@Param("itemDo") EmailParseInfoDO emailParseInfoDO);
 
     void updateParseStatus(@Param("id") Integer id, @Param("parseStatus") int parseStatus);
+
+    List<EmailParseInfoVO> searchEmailList(@Param("emailTitle") String emailTitle, @Param("emailType") Integer emailType, @Param("parseStatus")  Integer parseStatus);
+
+    EmailParseInfoVO searchEmailById(@Param("id") Integer id);
+
+    Integer searchEmailCount(@Param("parseDate") String parseDate, @Param("parseStatus")Integer parseStatus);
 }

+ 5 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailTypeRuleMapper.java

@@ -13,4 +13,9 @@ public interface EmailTypeRuleMapper {
      */
     EmailTypeRuleDO getEmailTypeRule();
 
+    void saveEmailType(EmailTypeRuleDO ruleDO);
+
+    void updateEmailType(EmailTypeRuleDO ruleDO);
+
+    EmailTypeRuleDO searchEmailType();
 }

+ 33 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailFileInfoVO.java

@@ -0,0 +1,33 @@
+package com.simuwang.base.pojo.vo;
+
+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;
+
+@Data
+public class EmailFileInfoVO {
+    /**
+     * 主键Id
+     */
+    private Integer id;
+    /**
+     * 邮件id(email_parse_info.id)
+     */
+    private Integer emailId;
+    /**
+     * 基金id
+     */
+    private Integer fundId;
+    /**
+     * 附件名称
+     */
+    private String fileName;
+    /**
+     * 附件路径
+     */
+    private String filePath;
+
+}

+ 42 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailParseInfoVO.java

@@ -0,0 +1,42 @@
+package com.simuwang.base.pojo.vo;
+
+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;
+import java.util.List;
+
+@Data
+public class EmailParseInfoVO {
+    /**
+     * 主键Id
+     */
+    private Integer id;
+    /**
+     * 邮箱地址
+     */
+    private String email;
+    /**
+     * 解析日期
+     */
+    private Date parseDate;
+    /**
+     * 邮件主题
+     */
+    private String emailTitle;
+    /**
+     * 邮件类型,1-净值,2-估值表,3-定期报告
+     */
+    private Integer emailType;
+    /**
+     * 解析状态
+     */
+    private Integer parseStatus;
+
+    /**
+     * 邮件附件列表
+     */
+    private List<EmailFileInfoVO> emailFileInfoList;
+}

+ 23 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailTypeRuleVO.java

@@ -0,0 +1,23 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class EmailTypeRuleVO {
+    /**
+     * 主键Id
+     */
+    private Integer id;
+    /**
+     * 净值类型识别规则(多个以英文逗号隔开)
+     */
+    private String nav;
+    /**
+     * 估值表类型识别规则(多个以英文逗号隔开)
+     */
+    private String valuation;
+    /**
+     * 报告类型识别规则(多个以英文逗号隔开)
+     */
+    private String report;
+}

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

@@ -53,7 +53,7 @@
         <result column="updatetime" property="updateTime"/>
         <result column="isvalid" property="isvalid"/>
     </resultMap>
-    <sql id="selectConfigDo">
+    <sql id="selectCompanyEmailConfigDo">
         select company_id, company_name, email, open_status, creatorid, createtime, updaterid, updatetime,isvalid
         from PPW_EMAIL.company_email_config
     </sql>
@@ -67,7 +67,7 @@
         </where>
     </sql>
     <select id="selectCompanyEmailConfigById" resultMap="BaseResultMap">
-        <include refid="selectConfigDo"/>
+        <include refid="selectCompanyEmailConfigDo"/>
         <include refid="sqlwhereSearch"/>
     </select>
 </mapper>

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

@@ -16,6 +16,7 @@
         <result column="updatetime" property="updateTime"/>
     </resultMap>
 
+
     <insert id="insert" parameterType="com.simuwang.base.pojo.dos.EmailParseInfoDO" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
         insert into PPW_EMAIL.email_parse_info(email, email_date, parse_date, email_title, email_type, parse_status,
                                      isvalid, creatorid, createtime, updaterid, updatetime)
@@ -29,5 +30,71 @@
         where isvalid = 1
           and id = #{id}
     </update>
+    <resultMap id="TableResultMap" type="com.simuwang.base.pojo.vo.EmailParseInfoVO">
+        <id column="id" property="id"/>
+        <result column="email" property="email"/>
+        <result column="parse_date" property="parseDate" />
+        <result column="email_title" property="emailTitle"/>
+        <result column="email_type" property="emailType"/>
+        <result column="parse_status" property="parseStatus"/>
+        <!--关联属性的映射关系-->
+        <collection property="emailFileInfoList" ofType="com.simuwang.base.pojo.vo.EmailFileInfoVO">
+            <id property="id" column="fid"/>
+            <result property="fileName" column="file_name"/>
+            <result property="filePath" column="file_path"/>
+            <result property="emailId" column="email_id"/>
+        </collection>
+    </resultMap>
+    <sql id="selectEmailParse">
+        SELECT
+            epi.id,
+            epi.email,
+            epi.email_date,
+            epi.parse_date,
+            epi.email_title,
+            epi.email_type,
+            epi.parse_status,
+            efi.id AS fid,
+            efi.file_name,
+            efi.file_path,
+            efi.email_id
+        FROM
+            PPW_EMAIL.email_parse_info epi
+                LEFT JOIN PPW_EMAIL.email_file_info efi
+                          ON epi.id = efi.email_id
+                              AND efi.isvalid = 1
+    </sql>
+    <!-- 查询条件 -->
+    <sql id="sqlwhereSearch">
+        <where>
+            epi.isvalid=1
+            <if test="emailTitle !=null and emailTitle !=''">
+                and epi.email_title like concat('%',#{emailTitle},'%')
+            </if>
+            <if test="emailType !=null and emailType != ''">
+                and epi.email_type = #{emailType}
+            </if>
+            <if test="parseStatus !=null and parseStatus != ''">
+                and epi.parse_status = #{parseStatus}
+            </if>
+        </where>
+    </sql>
+    <select id="searchEmailList" resultMap="TableResultMap">
+        <include refid="selectEmailParse"/>
+        <include refid="sqlwhereSearch"/>
+    </select>
+    <select id="searchEmailById" resultMap="TableResultMap">
+        <include refid="selectEmailParse"/>
+        where epi.isvalid =1 and epi.id =#{id}
+    </select>
+    <select id="searchEmailCount" resultType="java.lang.Integer">
+        select count(1) from PPW_EMAIL.email_parse_info where isvalid=1
+        <if test="parseStatus != null and parseStatus != -1">
+            and parse_status=#{parseStatus}
+        </if>
+        <if test="parseStatus != null and parseStatus == -1">
+            and parse_status != 1
+        </if>
+    </select>
 
 </mapper>

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

@@ -18,5 +18,14 @@
         from PPW_EMAIL.email_type_rule
         where isvalid = 1 limit 1
     </select>
-
+    <select id="searchEmailType" resultMap="BaseResultMap">
+        select id,nav,valuation,report,isvalid,creatorid,createtime,updaterid,updatetime from PPW_EMAIL.email_type_rule where isvalid =1
+    </select>
+    <insert id="saveEmailType">
+        insert into PPW_EMAIL.email_type_rule(nav,valuation,report,isvalid,creatorid,createtime,updaterid,updatetime)
+        values (#{nav},#{valuation},#{report},1,#{creatorId},#{createTime},#{updaterId},#{updateTime})
+    </insert>
+    <update id="updateEmailType">
+        update PPW_EMAIL.email_type_rule set nav=#{nav},valuation=#{valuation},report=#{report},updatetime=sysdate(),updaterid=#{updaterId} where id=#{id} and isvalid =1
+    </update>
 </mapper>

+ 1 - 1
service-deploy/src/main/resources/application.yml

@@ -23,7 +23,7 @@ spring:
       type: com.zaxxer.hikari.HikariDataSource
       driver-class-name: dm.jdbc.driver.DmDriver
       url: jdbc:dm://192.168.1.39:5236/?schema=PPW_EMAIL
-      username: SYSDBA
+      username: PPW_EMAIL
       password: Dmppw2024
       # hikari连接池配置 对应 HikariConfig 配置属性类
       hikari:

+ 98 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailController.java

@@ -0,0 +1,98 @@
+package com.simuwang.manage.api.email;
+
+import com.simuwang.base.common.page.TableDataInfo;
+import com.simuwang.base.common.result.AjaxResult;
+import com.simuwang.base.pojo.vo.EmailParseInfoVO;
+import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
+import com.simuwang.manage.api.base.BaseController;
+import com.simuwang.manage.service.ParseEmailService;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * FileName: ParseEmailController
+ * Author:   chenjianhua
+ * Date:     2024/9/10 11:21
+ * Description: ${DESCRIPTION}
+ */
+@RestController
+@RequestMapping("/parse")
+public class ParseEmailController extends BaseController {
+
+    @Autowired
+    private ParseEmailService parseEmailService;
+
+    /**
+     * 保存邮件类型识别配置
+     * @param emailTypeRuleVO
+     * @return
+     */
+    @PostMapping("/save-email-type")
+    public AjaxResult saveEmailType(@RequestBody EmailTypeRuleVO emailTypeRuleVO){
+        try{
+            parseEmailService.saveEmailType(emailTypeRuleVO);
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            return AjaxResult.error("保存失败");
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 查询邮件类型识别配置
+     * @param
+     * @return
+     */
+    @GetMapping("/search-email-type")
+    public AjaxResult searchEmailType(){
+        EmailTypeRuleVO emailTypeRuleVO = new EmailTypeRuleVO();
+        try{
+            emailTypeRuleVO = parseEmailService.searchEmailType();
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            return AjaxResult.error("查询失败");
+        }
+        return AjaxResult.success(emailTypeRuleVO);
+    }
+
+    /**
+     * 表格查询
+     * @param emailTitle
+     * @param emailType
+     * @param parseStatus
+     * @return
+     */
+    @GetMapping("/search-email-list")
+    public TableDataInfo searchEmailList(@RequestParam(value = "emailTitle",required = false)String emailTitle,
+                                         @RequestParam(value = "emailType",required = false)Integer emailType,
+                                         @RequestParam(value = "parseStatus",required = false)Integer parseStatus){
+        List<EmailParseInfoVO> result = parseEmailService.searchEmailList(emailTitle,emailType,parseStatus);
+        return getDataTable(result);
+    }
+
+    /**
+     * 详情查询
+     * @param id
+     * @return
+     */
+    @GetMapping("/{id}")
+    public AjaxResult searchEmail(@PathVariable("id") Integer id){
+        EmailParseInfoVO result = parseEmailService.searchEmailById(id);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 解析邮件数据统计
+     * @param parseDate
+     * @return
+     */
+    @GetMapping("/search-email-count")
+    public AjaxResult searchEmailCount(@RequestParam("parseDate") String parseDate){
+        Map<String,Integer> result = parseEmailService.searchEmailCount(parseDate);
+        return AjaxResult.success(result);
+    }
+}

+ 25 - 0
service-manage/src/main/java/com/simuwang/manage/service/ParseEmailService.java

@@ -0,0 +1,25 @@
+package com.simuwang.manage.service;
+
+import com.simuwang.base.pojo.vo.EmailParseInfoVO;
+import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * FileName: ParseEmailService
+ * Author:   chenjianhua
+ * Date:     2024/9/10 11:26
+ * Description: ${DESCRIPTION}
+ */
+public interface ParseEmailService {
+    void saveEmailType(EmailTypeRuleVO emailTypeRuleVO);
+
+    EmailTypeRuleVO searchEmailType();
+
+    List<EmailParseInfoVO> searchEmailList(String emailTitle, Integer emailType, Integer parseStatus);
+
+    EmailParseInfoVO searchEmailById(Integer id);
+
+    Map<String, Integer> searchEmailCount(String parseDate);
+}

+ 85 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailServiceImpl.java

@@ -0,0 +1,85 @@
+package com.simuwang.manage.service.impl;
+
+import com.simuwang.base.common.enums.ParseStatus;
+import com.simuwang.base.mapper.EmailParseInfoMapper;
+import com.simuwang.base.mapper.EmailTypeRuleMapper;
+import com.simuwang.base.pojo.dos.EmailParseInfoDO;
+import com.simuwang.base.pojo.dos.EmailTypeRuleDO;
+import com.simuwang.base.pojo.vo.EmailParseInfoVO;
+import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
+import com.simuwang.manage.service.ParseEmailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * FileName: ParseEmailServiceImpl
+ * Author:   chenjianhua
+ * Date:     2024/9/10 11:26
+ * Description: ${DESCRIPTION}
+ */
+@Service
+public class ParseEmailServiceImpl implements ParseEmailService {
+
+    @Autowired
+    private EmailTypeRuleMapper emailTypeRuleMapper;
+
+    @Autowired
+    private EmailParseInfoMapper emailParseInfoMapper;
+    @Override
+    public void saveEmailType(EmailTypeRuleVO emailTypeRuleVO) {
+        EmailTypeRuleDO  ruleDO = new EmailTypeRuleDO();
+        ruleDO.setId(emailTypeRuleVO.getId());
+        ruleDO.setNav(emailTypeRuleVO.getNav());
+        ruleDO.setReport(emailTypeRuleVO.getReport());
+        ruleDO.setValuation(emailTypeRuleVO.getValuation());
+        ruleDO.setUpdateTime(new Date());
+        if(ruleDO.getId() == null){
+            ruleDO.setCreateTime(new Date());
+            emailTypeRuleMapper.saveEmailType(ruleDO);
+        }else{
+            emailTypeRuleMapper.updateEmailType(ruleDO);
+        }
+    }
+
+    @Override
+    public EmailTypeRuleVO searchEmailType() {
+        EmailTypeRuleVO emailTypeRuleVO = new EmailTypeRuleVO();
+        EmailTypeRuleDO emailTypeRuleDO = emailTypeRuleMapper.searchEmailType();
+        if(emailTypeRuleDO == null){
+            return emailTypeRuleVO;
+        }
+        emailTypeRuleVO.setId(emailTypeRuleDO.getId());
+        emailTypeRuleVO.setNav(emailTypeRuleDO.getNav());
+        emailTypeRuleVO.setValuation(emailTypeRuleDO.getValuation());
+        emailTypeRuleVO.setReport(emailTypeRuleDO.getReport());
+        return emailTypeRuleVO;
+    }
+
+    @Override
+    public List<EmailParseInfoVO> searchEmailList(String emailTitle, Integer emailType, Integer parseStatus) {
+        List<EmailParseInfoVO> emailParseInfoDOList = emailParseInfoMapper.searchEmailList(emailTitle,emailType,parseStatus);
+        return emailParseInfoDOList;
+    }
+
+    @Override
+    public EmailParseInfoVO searchEmailById(Integer id) {
+        return emailParseInfoMapper.searchEmailById(id);
+    }
+
+    @Override
+    public Map<String, Integer> searchEmailCount(String parseDate) {
+        Map<String, Integer> result = new HashMap<>();
+        Integer parseTotal = emailParseInfoMapper.searchEmailCount(parseDate,null);
+        result.put("parseTotal",parseTotal);
+        Integer parseSuccess = emailParseInfoMapper.searchEmailCount(parseDate, ParseStatus.Success.getCode());
+        result.put("parseSuccess",parseSuccess);
+        Integer parseFail = emailParseInfoMapper.searchEmailCount(parseDate, ParseStatus.Fail.getCode());
+        result.put("parseFail",parseFail);
+        return result;
+    }
+}