Sfoglia il codice sorgente

Merge branch 'develop' of http://112.74.196.215:3000/Tech2/data-daq into develop

wangzaijun 7 mesi fa
parent
commit
85b0cc5e55
40 ha cambiato i file con 777 aggiunte e 424 eliminazioni
  1. 26 0
      service-base/src/main/java/com/simuwang/base/common/util/DateUtils.java
  2. 1 1
      service-base/src/main/java/com/simuwang/base/common/util/EmailUtil.java
  3. 1 1
      service-base/src/main/java/com/simuwang/base/common/util/ExcelUtil.java
  4. 2 3
      service-base/src/main/java/com/simuwang/base/common/util/NavDataUtil.java
  5. 0 22
      service-base/src/main/java/com/simuwang/base/common/util/StringUtil.java
  6. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/EmailTemplateInfoMapper.java
  7. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/EmailTemplateMappingMapper.java
  8. 8 5
      service-base/src/main/java/com/simuwang/base/mapper/system/SysConfigMapper.java
  9. 13 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateApplicationRuleDO.java
  10. 16 1
      service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateDataRuleDO.java
  11. 1 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateInfoDO.java
  12. 6 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateMappingDO.java
  13. 14 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/SysConfigDO.java
  14. 3 1
      service-base/src/main/java/com/simuwang/base/pojo/dto/TemplateDataRuleDTO.java
  15. 37 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/query/ConfigPageQuery.java
  16. 18 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/ConfigIdListVO.java
  17. 18 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/ConfigIdVO.java
  18. 2 5
      service-base/src/main/java/com/simuwang/base/pojo/vo/EmailTemplateDataRuleVO.java
  19. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/EmailTemplateMappingVO.java
  20. 21 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/StatusVO.java
  21. 2 2
      service-base/src/main/java/com/simuwang/base/pojo/vo/SysConfigVO.java
  22. 5 5
      service-base/src/main/resources/mapper/EmailTemplateApplicationRuleMapper.xml
  23. 9 9
      service-base/src/main/resources/mapper/EmailTemplateDataRuleMapper.xml
  24. 6 2
      service-base/src/main/resources/mapper/EmailTemplateInfoMapper.xml
  25. 24 16
      service-base/src/main/resources/mapper/EmailTemplateMappingMapper.xml
  26. 24 18
      service-base/src/main/resources/mapper/system/SysConfigMapper.xml
  27. 2 0
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java
  28. 193 138
      service-daq/src/main/java/com/simuwang/daq/service/EmailTemplateService.java
  29. 21 25
      service-daq/src/main/java/com/simuwang/daq/service/NavEmailParser.java
  30. 2 0
      service-deploy/src/main/resources/application.yml
  31. 13 1
      service-deploy/src/test/java/com/simuwang/ApplicationTest.java
  32. 75 103
      service-manage/src/main/java/com/simuwang/manage/api/system/SysConfigController.java
  33. 40 4
      service-manage/src/main/java/com/simuwang/manage/api/template/TemplateController.java
  34. 42 7
      service-manage/src/main/java/com/simuwang/manage/api/template/TemplateSettingController.java
  35. 5 0
      service-manage/src/main/java/com/simuwang/manage/service/EmailTemplateInfoService.java
  36. 5 0
      service-manage/src/main/java/com/simuwang/manage/service/EmailTemplateMappingService.java
  37. 36 3
      service-manage/src/main/java/com/simuwang/manage/service/impl/EmailTemplateInfoServiceImpl.java
  38. 23 2
      service-manage/src/main/java/com/simuwang/manage/service/impl/EmailTemplateMappingServiceImpl.java
  39. 47 42
      service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysConfigServiceImpl.java
  40. 8 8
      service-manage/src/main/java/com/simuwang/manage/service/system/SysConfigService.java

+ 26 - 0
service-base/src/main/java/com/simuwang/base/common/util/DateUtils.java

@@ -1,5 +1,8 @@
 package com.simuwang.base.common.util;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.simuwang.base.common.conts.DateConst;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
 
@@ -7,8 +10,10 @@ import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
+import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 时间工具类
@@ -32,6 +37,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
+    private static final List<String> DATE_FORMATS = Arrays.asList("yyyy-MM-dd","yyyy-M-d","yyyy-MM-d","yyyy-M-dd",
+            "yyyy/MM/dd", "yyyy/M/d","yyyy/MM/d","yyyy/M/dd",
+            "yyyyMMdd");
     /**
      * 获取当前Date型日期
      * 
@@ -215,4 +223,22 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    public static String stringToDate(String dateString) {
+        if (StrUtil.isBlank(dateString)) {
+            return null;
+        }
+        dateString = dateString.replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "-");
+        for (String format : DATE_FORMATS) {
+            SimpleDateFormat sdf = new SimpleDateFormat(format);
+            // 设置严格模式
+            sdf.setLenient(false);
+            try {
+                Date parse = sdf.parse(dateString);
+                return DateUtil.format(parse, DateConst.YYYY_MM_DD);
+            } catch (Exception e) {
+            }
+        }
+        return null;
+    }
 }

+ 1 - 1
service-base/src/main/java/com/simuwang/base/common/util/EmailUtil.java

@@ -189,7 +189,7 @@ public class EmailUtil {
      * @return 邮件类型:1-净值,2-估值表,3-定期报告 -> 兜底为净值类型
      */
     public static Integer getEmailTypeBySubject(String subject, Map<Integer, List<String>> emailTypeMap) {
-        if (MapUtil.isEmpty(emailTypeMap)) {
+        if (MapUtil.isEmpty(emailTypeMap) || StrUtil.isBlank(subject)) {
             return EmailTypeConst.NAV_EMAIL_TYPE;
         }
         for (Map.Entry<Integer, List<String>> emailTypeEntry : emailTypeMap.entrySet()) {

+ 1 - 1
service-base/src/main/java/com/simuwang/base/common/util/ExcelUtil.java

@@ -210,7 +210,7 @@ public class ExcelUtil {
                 break;
         }
         // 去掉换行符号
-        cellValue = StrUtil.isNotBlank(cellValue) ? cellValue.replaceAll("[\\r\\n]+", "") : "";
+        cellValue = StrUtil.isNotBlank(cellValue) ? cellValue.replaceAll("[\\r\\n]+", "").trim() : "";
         return cellValue;
     }
 

+ 2 - 3
service-base/src/main/java/com/simuwang/base/common/util/NavDataUtil.java

@@ -11,9 +11,8 @@ public class NavDataUtil {
 
     public static boolean navDataFormatCheck(EmailFundNavDTO fundNavDTO) {
         // 净值日期格式校验
-        boolean isvalidDate = StringUtil.isValidDate(fundNavDTO.getPriceDate());
-        if (!isvalidDate) {
-            log.warn("净值日期格式不正确 -> 解析到的数据:{}", fundNavDTO);
+        if (StrUtil.isBlank(fundNavDTO.getPriceDate())) {
+            log.warn("净值日期为空 -> 解析到的数据:{}", fundNavDTO);
             return false;
         }
         if(StrUtil.isBlank(fundNavDTO.getFundName()) && StrUtil.isBlank(fundNavDTO.getRegisterNumber())){

+ 0 - 22
service-base/src/main/java/com/simuwang/base/common/util/StringUtil.java

@@ -2,8 +2,6 @@ package com.simuwang.base.common.util;
 
 import cn.hutool.core.util.StrUtil;
 
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
 import java.util.List;
 
 import cn.hutool.core.text.StrFormatter;
@@ -15,8 +13,6 @@ import java.util.*;
 
 public class StringUtil {
 
-    private static final List<String> DATE_FORMATS = Arrays.asList("yyyy-MM-dd", "yyyy/MM/dd", "yyyyMMdd");
-
     /** 空字符串 */
     private static final String NULLSTR = "";
     private static final int STRING_BUILDER_SIZE = 256;
@@ -37,24 +33,6 @@ public class StringUtil {
         return value.replaceAll(regex, "");
     }
 
-    public static boolean isValidDate(String dateString) {
-        if (StrUtil.isBlank(dateString)) {
-            return false;
-        }
-        dateString = dateString.replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "-");
-        for (String format : DATE_FORMATS) {
-            SimpleDateFormat sdf = new SimpleDateFormat(format);
-            // 设置严格模式
-            sdf.setLenient(false);
-            try {
-                sdf.parse(dateString);
-                return true;
-            } catch (Exception e) {
-            }
-        }
-        return false;
-    }
-
     public static boolean isNumeric(String value) {
         if (StrUtil.isBlank(value)) {
             return false;

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

@@ -19,4 +19,6 @@ public interface EmailTemplateInfoMapper {
     Integer saveTemplateInfo(EmailTemplateInfoDO emailDeletionInfoDO);
 
     void updateTemplateInfo(EmailTemplateInfoDO emailDeletionInfoDO);
+
+    EmailTemplateInfoDO searchTemplateById(@Param("id") Integer id);
 }

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

@@ -22,4 +22,6 @@ public interface EmailTemplateMappingMapper {
     void updateEmailTemplateMappingDO(EmailTemplateMappingDO emailTemplateMappingDO);
 
     void saveEmailTemplateMappingDO(EmailTemplateMappingDO emailTemplateMappingDO);
+
+    EmailTemplateMappingDO searchTemplateById(@Param("id") Integer status);
 }

+ 8 - 5
service-base/src/main/java/com/simuwang/base/mapper/system/SysConfigMapper.java

@@ -1,6 +1,7 @@
 package com.simuwang.base.mapper.system;
 
 import com.simuwang.base.pojo.dos.SysConfigDO;
+import com.simuwang.base.pojo.dto.query.ConfigPageQuery;
 import com.simuwang.base.pojo.vo.SysConfigVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -29,15 +30,15 @@ public interface SysConfigMapper {
      * @param configId 参数ID
      * @return 参数配置信息
      */
-    public SysConfigDO selectConfigById(Long configId);
+    public SysConfigDO selectConfigById(@Param("configId") Integer configId);
 
     /**
      * 查询参数配置列表
      *
-     * @param config 参数配置信息
+     * @param query 参数配置信息
      * @return 参数配置集合
      */
-    public List<SysConfigDO> selectConfigList(SysConfigVO config);
+    public List<SysConfigDO> selectConfigList(ConfigPageQuery query);
 
     /**
      * 根据键名查询参数配置信息
@@ -69,7 +70,7 @@ public interface SysConfigMapper {
      * @param configId 参数ID
      * @return 结果
      */
-    public int deleteConfigById(@Param("configId") Long configId);
+    public int deleteConfigById(@Param("configId") Integer configId);
 
     /**
      * 批量删除参数信息
@@ -77,8 +78,10 @@ public interface SysConfigMapper {
      * @param configIds 需要删除的参数ID
      * @return 结果
      */
-    public int deleteConfigByIds(@Param("configIds") Long[] configIds);
+    public int deleteConfigByIds(@Param("configIds") List<Integer> configIds,@Param("userId") Integer userId);
 
 
     String selectConfigByKey(@Param("configKey") String configKey);
+
+    long countConfigList(ConfigPageQuery query);
 }

+ 13 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateApplicationRuleDO.java

@@ -3,6 +3,7 @@ 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 com.simuwang.base.pojo.vo.EmailTemplateApplicationRuleVO;
 import lombok.Data;
 
 import java.util.Date;
@@ -70,4 +71,16 @@ public class EmailTemplateApplicationRuleDO {
      */
     @TableField(value = "updatetime")
     private Date updateTime;
+
+    public EmailTemplateApplicationRuleVO toVO() {
+        EmailTemplateApplicationRuleVO vo = new EmailTemplateApplicationRuleVO();
+        vo.setId(this.id);
+        vo.setTemplateId(this.templateId);
+        vo.setRow(this.row);
+        vo.setType(this.type);
+        vo.setColumn(this.column);
+        vo.setContainKeyword(this.containKeyword);
+        vo.setNotContainKeyword(this.notContainKeyword);
+        return vo;
+    }
 }

+ 16 - 1
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateDataRuleDO.java

@@ -3,8 +3,10 @@ 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 com.simuwang.base.pojo.vo.EmailTemplateDataRuleVO;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
@@ -49,7 +51,7 @@ public class EmailTemplateDataRuleDO {
      * 单位转换
      */
     @TableId(value = "unit_convert")
-    private Integer unitConvert;
+    private BigDecimal unitConvert;
     /**
      * 是否有效:0-无效,1-有效
      */
@@ -75,4 +77,17 @@ public class EmailTemplateDataRuleDO {
      */
     @TableField(value = "updatetime")
     private Date updateTime;
+
+    public EmailTemplateDataRuleVO toVO() {
+        EmailTemplateDataRuleVO vo = new EmailTemplateDataRuleVO();
+        vo.setId(this.id);
+        vo.setTemplateId(this.templateId);
+        vo.setRow(this.row);
+        vo.setFieldRule(this.fieldRule);
+        vo.setColumn(this.column);
+        vo.setPosition(this.position);
+        vo.setUnitConvert(this.unitConvert);
+        vo.setFieldName(this.fieldName);
+        return vo;
+    }
 }

+ 1 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateInfoDO.java

@@ -84,6 +84,7 @@ public class EmailTemplateInfoDO {
         vo.setId(this.id);
         vo.setStatus(this.status);
         vo.setDescription(this.description);
+        vo.setDirection(this.direction);
         vo.setType(this.type);
         return vo;
     }

+ 6 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailTemplateMappingDO.java

@@ -32,6 +32,11 @@ public class EmailTemplateMappingDO {
     @TableId(value = "email")
     private String email;
     /**
+     * 公司ID
+     */
+    @TableId(value = "company_id")
+    private String companyId;
+    /**
      * 公司名称
      */
     @TableId(value = "company_name")
@@ -86,6 +91,7 @@ public class EmailTemplateMappingDO {
         vo.setTemplateName(this.templateName);
         vo.setStatus(this.status);
         vo.setEmail(this.email);
+        vo.setCompanyId(this.companyId);
         return vo;
     }
 }

+ 14 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/SysConfigDO.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.pojo.vo.SysConfigVO;
 import lombok.Data;
 
 import java.util.Date;
@@ -67,4 +69,16 @@ public class SysConfigDO
      */
     @TableField(value = "updatetime")
     private Date updateTime;
+
+    public SysConfigVO toVO() {
+        SysConfigVO vo = new SysConfigVO();
+        vo.setConfigId(this.configId);
+        vo.setConfigName(this.configName);
+        vo.setConfigKey(this.configKey);
+        vo.setConfigValue(this.configValue);
+        vo.setRemark(this.remark);
+        vo.setConfigType(this.configType);
+        vo.setUpdateTime(DateUtils.format(this.updateTime,DateUtils.YYYY_MM_DD_HH_MM_SS));
+        return vo;
+    }
 }

+ 3 - 1
service-base/src/main/java/com/simuwang/base/pojo/dto/TemplateDataRuleDTO.java

@@ -2,6 +2,8 @@ package com.simuwang.base.pojo.dto;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class TemplateDataRuleDTO {
     /**
@@ -27,5 +29,5 @@ public class TemplateDataRuleDTO {
     /**
      * 单位转换
      */
-    private Integer unitConvert;
+    private BigDecimal unitConvert;
 }

+ 37 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/ConfigPageQuery.java

@@ -0,0 +1,37 @@
+package com.simuwang.base.pojo.dto.query;
+
+import com.simuwang.base.common.support.query.PageQuery;
+
+/**
+ * FileName: ConfigPageQuery
+ * Author:   chenjianhua
+ * Date:     2024/9/26 14:52
+ * Description: ${DESCRIPTION}
+ */
+public class ConfigPageQuery extends PageQuery {
+
+    /**
+     * 参数名称
+     */
+    private String configName;
+    /**
+     * 参数键名
+     */
+    private String configKey;
+
+    public String getConfigName() {
+        return configName;
+    }
+
+    public void setConfigName(String configName) {
+        this.configName = configName;
+    }
+
+    public String getConfigKey() {
+        return configKey;
+    }
+
+    public void setConfigKey(String configKey) {
+        this.configKey = configKey;
+    }
+}

+ 18 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/ConfigIdListVO.java

@@ -0,0 +1,18 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * FileName: ConfigIdListVO
+ * Author:   chenjianhua
+ * Date:     2024/9/26 16:04
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class ConfigIdListVO {
+
+    private List<Integer> configIdList;
+
+}

+ 18 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/ConfigIdVO.java

@@ -0,0 +1,18 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * FileName: ConfigIdListVO
+ * Author:   chenjianhua
+ * Date:     2024/9/26 16:04
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class ConfigIdVO {
+
+    private Integer configId;
+
+}

+ 2 - 5
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailTemplateDataRuleVO.java

@@ -1,11 +1,8 @@
 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.math.BigDecimal;
 
 @Data
 public class EmailTemplateDataRuleVO {
@@ -40,6 +37,6 @@ public class EmailTemplateDataRuleVO {
     /**
      * 单位转换
      */
-    private Integer unitConvert;
+    private BigDecimal unitConvert;
 
 }

+ 4 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailTemplateMappingVO.java

@@ -30,6 +30,10 @@ public class EmailTemplateMappingVO {
      */
     private String email;
     /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
      * 公司名称
      */
     private String companyName;

+ 21 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/StatusVO.java

@@ -0,0 +1,21 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: OpenStatusVO
+ * Author:   chenjianhua
+ * Date:     2024/9/14 11:57
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class StatusVO {
+    /**
+     * 是否开启,0-不开启,1-开启
+     */
+    private Integer status;
+    /**
+     * 主键ID
+     */
+    private Integer id;
+}

+ 2 - 2
service-base/src/main/java/com/simuwang/base/pojo/vo/SysConfigVO.java

@@ -26,7 +26,7 @@ public class SysConfigVO
     /** 参数键值 */
     private String configValue;
 
-    /** 系统内置(Y是 N否) */
+    /** 系统内置(1是 0否) */
     private String configType;
 
     /** 备注 */
@@ -34,5 +34,5 @@ public class SysConfigVO
     /**
      * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
      */
-    private Date updateTime;
+    private String updateTime;
 }

+ 5 - 5
service-base/src/main/resources/mapper/EmailTemplateApplicationRuleMapper.xml

@@ -16,7 +16,7 @@
         <result column="updatetime" property="updateTime"/>
     </resultMap>
     <insert id="batchInsert">
-        insert into PPW_EMAIL.email_template_application_rule(template_id,type,row,column,contain_keyword,not_contain_keyword,isvalid,creatorid,createtime,updaterid,updatetime)
+        insert into PPW_EMAIL.email_template_application_rule(template_id,`TYPE`,`ROW`,`COLUMN`,contain_keyword,not_contain_keyword,isvalid,creatorid,createtime,updaterid,updatetime)
         values
         <foreach collection="itemDoList" item="itemDo" index="index" separator=",">
             (#{itemDo.templateId},#{itemDo.type},#{itemDo.row},#{itemDo.column},#{itemDo.containKeyword},#{itemDo.notContainKeyword},
@@ -28,9 +28,9 @@
             update PPW_EMAIL.email_template_application_rule
             <set>
                 template_id=#{itemDo.templateId},
-                type = #{itemDo.type},
-                row=#{itemDo.row},
-                column=#{itemDo.column},
+                `TYPE` = #{itemDo.type},
+                `ROW`=#{itemDo.row},
+                `COLUMN`=#{itemDo.column},
                 contain_keyword=#{itemDo.containKeyword},
                 not_contain_keyword=#{itemDo.notContainKeyword},
                 updatetime=#{itemDo.updateTime},
@@ -41,7 +41,7 @@
     </update>
     <update id="deleteByTemplateId">
         update PPW_EMAIL.email_template_application_rule set isvalid=0,updatetime=sysdate(),updaterid=#{userId}
-        and template_id in
+        where isvalid=1 and  template_id in
         <foreach collection="templateIdList" index="index" item="templateId" open="(" separator="," close=")">
             #{templateId}
         </foreach>

+ 9 - 9
service-base/src/main/resources/mapper/EmailTemplateDataRuleMapper.xml

@@ -17,7 +17,7 @@
         <result column="updatetime" property="updateTime"/>
     </resultMap>
     <insert id="batchInsert">
-        insert into PPW_EMAIL.email_template_data_rule(template_id,field_name,position,row,column,field_rule,unit_convert,isvalid,creatorid,createtime,updaterid,updatetime)
+        insert into PPW_EMAIL.email_template_data_rule(template_id,field_name,`POSITION`,`ROW`,`COLUMN`,field_rule,unit_convert,isvalid,creatorid,createtime,updaterid,updatetime)
         values
         <foreach collection="itemDoList" item="itemDo" index="index" separator=",">
             (#{itemDo.templateId},#{itemDo.fieldName},#{itemDo.position},#{itemDo.row},#{itemDo.column},#{itemDo.fieldRule},#{itemDo.unitConvert},
@@ -28,15 +28,15 @@
         <foreach collection="itemDoList" item="itemDo" index="index" open="" close="" separator=";">
             update PPW_EMAIL.email_template_data_rule
             <set>
-                template_id=#{itemDo.templateId},
+                template_id = #{itemDo.templateId},
                 field_name = #{itemDo.fieldName},
-                position=#{itemDo.position},
-                row=#{itemDo.row},
-                column=#{itemDo.column},
-                field_rule=#{itemDo.fieldRule},
-                unit_convert=#{itemDo.unitConvert},
-                updatetime=#{itemDo.updateTime},
-                updaterid=#{itemDo.updaterId}
+                `POSITION` = #{itemDo.position},
+                `ROW` = #{itemDo.row},
+                `COLUMN` = #{itemDo.column},
+                field_rule = #{itemDo.fieldRule},
+                unit_convert = #{itemDo.unitConvert},
+                updatetime = #{itemDo.updateTime},
+                updaterid = #{itemDo.updaterId}
             </set>
             where isvalid = 1 and id=#{itemDo.id}
         </foreach>

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

@@ -36,7 +36,7 @@
         select id,name,type,direction,start_index,end_index,description,status,isvalid,creatorid,createtime,updaterid,updatetime
         from PPW_EMAIL.email_template_info where isvalid=1
         <if test="name != null and name !=''">
-            and name =#{name}
+            and name like concat('%',#{name},'%')
         </if>
         <if test="type != null">
             and type =#{type}
@@ -51,7 +51,7 @@
         select count(1)
         from PPW_EMAIL.email_template_info where isvalid=1
         <if test="name != null and name !=''">
-            and name =#{name}
+            and name like concat('%',#{name},'%')
         </if>
         <if test="type != null">
             and type =#{type}
@@ -60,6 +60,10 @@
             and status =#{status}
         </if>
     </select>
+    <select id="searchTemplateById" resultMap="BaseResultMap">
+        select id,name,type,direction,start_index,end_index,description,status,isvalid,creatorid,createtime,updaterid,updatetime
+        from PPW_EMAIL.email_template_info where isvalid=1 and id=#{id}
+    </select>
 
 
 </mapper>

+ 24 - 16
service-base/src/main/resources/mapper/EmailTemplateMappingMapper.xml

@@ -7,6 +7,7 @@
         <result column="title" property="title"/>
         <result column="email" property="email"/>
         <result column="company_name" property="companyName"/>
+        <result column="company_id" property="companyId"/>
         <result column="status" property="status"/>
         <result column="isvalid" property="isvalid"/>
         <result column="creatorid" property="creatorId"/>
@@ -16,9 +17,9 @@
         <result column="template_name" property="templateName"/>
     </resultMap>
     <insert id="saveEmailTemplateMappingDO">
-        insert into PPW_EMAIL.email_template_mapping(template_id,title,email,company_name,status,isvalid,creatorid,createtime,updaterid,updatetime)
+        insert into PPW_EMAIL.email_template_mapping(template_id,title,email,company_name,company_id,status,isvalid,creatorid,createtime,updaterid,updatetime)
         values
-            (#{templateId},#{title},#{email},#{companyName},#{status},#{isvalid},#{creatorId},#{createTime},#{updaterId},#{updateTime})
+            (#{templateId},#{title},#{email},#{companyName},#{companyId},#{status},#{isvalid},#{creatorId},#{createTime},#{updaterId},#{updateTime})
     </insert>
     <update id="deleteTemplateSetting">
         update  PPW_EMAIL.email_template_mapping set isvalid=0,updatetime=sysdate(),updaterid=#{userId}
@@ -28,7 +29,7 @@
         </foreach>
     </update>
     <update id="updateEmailTemplateMappingDO">
-        update PPW_EMAIL.email_template_mapping set template_id=#{templateId},title=#{title},email=#{email},company_name=#{companyName},
+        update PPW_EMAIL.email_template_mapping set template_id=#{templateId},title=#{title},email=#{email},company_name=#{companyName},company_id=#{companyId},
                                                     status=#{status},updatetime=#{updateTime},updaterid=#{updaterId}
         where isvalid=1 and id=#{id}
     </update>
@@ -47,25 +48,25 @@
           and t2.status = 1
     </select>
     <select id="searchTemplateSettingList" resultMap="BaseResultMap">
-        select mapping.id,mapping.template_id,mapping.title,mapping.email,mapping.company_name,mapping.status,
+        select mapping.id,mapping.template_id,mapping.title,mapping.email,mapping.company_name,mapping.company_id,mapping.status,
         t.name as template_name
         from PPW_EMAIL.email_template_mapping mapping
             join PPW_EMAIL.email_template_info t on t.id = mapping.template_id and t.isvalid = 1 and t.status = 1
         where mapping.isvalid=1
         <if test="title != null and title != ''">
-            mapping.title like concat('%',#{title},'%')
+            and mapping.title like concat('%',#{title},'%')
         </if>
         <if test="email != null and email != ''">
-            mapping.email like concat('%',#{email},'%')
+            and mapping.email like concat('%',#{email},'%')
         </if>
         <if test="companyName != null and companyName != ''">
-            mapping.company_name like concat('%',#{companyName},'%')
+            and mapping.company_name like concat('%',#{companyName},'%')
         </if>
         <if test="templateName != null and templateName != ''">
-            t.name like concat('%',#{templateName},'%')
+            and t.name like concat('%',#{templateName},'%')
         </if>
-        <if test="status != null">
-            mapping.status=#{status}
+        <if test="status != null and status !=''">
+            and mapping.status=#{status}
         </if>
         limit #{offset},#{pageSize}
     </select>
@@ -75,20 +76,27 @@
         join PPW_EMAIL.email_template_info t on t.id = mapping.template_id and t.isvalid = 1 and t.status = 1
         where mapping.isvalid=1
         <if test="title != null and title != ''">
-            mapping.title like concat('%',#{title},'%')
+            and mapping.title like concat('%',#{title},'%')
         </if>
         <if test="email != null and email != ''">
-            mapping.email like concat('%',#{email},'%')
+            and mapping.email like concat('%',#{email},'%')
         </if>
         <if test="companyName != null and companyName != ''">
-            mapping.company_name like concat('%',#{companyName},'%')
+            and mapping.company_name like concat('%',#{companyName},'%')
         </if>
         <if test="templateName != null and templateName != ''">
-            t.name like concat('%',#{templateName},'%')
+            and t.name like concat('%',#{templateName},'%')
         </if>
-        <if test="status != null">
-            mapping.status=#{status}
+        <if test="status != null and status !=''">
+            and mapping.status=#{status}
         </if>
     </select>
+    <select id="searchTemplateById" resultMap="BaseResultMap">
+        select mapping.id,mapping.template_id,mapping.title,mapping.email,mapping.company_name,mapping.company_id,mapping.status,
+               t.name as template_name
+        from PPW_EMAIL.email_template_mapping mapping
+                 join PPW_EMAIL.email_template_info t on t.id = mapping.template_id and t.isvalid = 1 and t.status = 1
+        where mapping.isvalid=1 and mapping.id=#{id}
+    </select>
 
 </mapper>

+ 24 - 18
service-base/src/main/resources/mapper/system/SysConfigMapper.xml

@@ -5,11 +5,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 <mapper namespace="com.simuwang.base.mapper.system.SysConfigMapper">
     
     <resultMap type="com.simuwang.base.pojo.dos.SysConfigDO" id="SysConfigResult">
-    	<id     property="configId"      column="configId"      />
-        <result property="configName"    column="configName"    />
-        <result property="configKey"     column="configKey"     />
-        <result property="configValue"   column="configNalue"   />
-        <result property="configType"    column="configType"    />
+    	<id     property="configId"      column="config_id"      />
+        <result property="configName"    column="config_name"    />
+        <result property="configKey"     column="config_key"     />
+        <result property="configValue"   column="config_value"   />
+        <result property="configType"    column="config_type"    />
         <result property="creatorId"     column="creatorid"      />
         <result property="createTime"    column="createtime"    />
         <result property="updaterId"     column="updaterid"      />
@@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <!-- 查询条件 -->
 	<sql id="sqlwhereSearch">
 		<where>
+            isvalid=1
 			<if test="configId !=null">
 				and config_id = #{configId}
 			</if>
@@ -39,28 +40,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="sqlwhereSearch"/>
     </select>
     
-    <select id="selectConfigList" parameterType="com.simuwang.base.pojo.dos.SysConfigDO" resultMap="SysConfigResult">
+    <select id="selectConfigList" resultMap="SysConfigResult">
         <include refid="selectConfigDo"/>
         <where>
+            isvalid=1
 			<if test="configName != null and configName != ''">
 				AND config_name like concat('%', #{configName}, '%')
 			</if>
-			<if test="configType != null and configType != ''">
-				AND config_type = #{configType}
-			</if>
 			<if test="configKey != null and configKey != ''">
 				AND config_key like concat('%', #{configKey}, '%')
 			</if>
-			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-			</if>
-			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-			</if>
 		</where>
+		limit #{offset},#{pageSize}
     </select>
     
-    <select id="selectConfigById" parameterType="Long" resultMap="SysConfigResult">
+    <select id="selectConfigById" resultMap="SysConfigResult">
         <include refid="selectConfigDo"/>
         where config_id = #{configId} and isvalid =1
     </select>
@@ -72,6 +66,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectConfigByKey" resultType="java.lang.String">
 
     </select>
+    <select id="countConfigList" resultType="java.lang.Long">
+        select count(1) from PPW_EMAIL.sys_config
+        <where>
+            isvalid=1
+            <if test="configName != null and configName != ''">
+                AND config_name like concat('%', #{configName}, '%')
+            </if>
+            <if test="configKey != null and configKey != ''">
+                AND config_key like concat('%', #{configKey}, '%')
+            </if>
+        </where>
+    </select>
 
     <insert id="insertConfig" parameterType="com.simuwang.base.pojo.dos.SysConfigDO">
         insert into sys_config (
@@ -84,7 +90,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="remark != null and remark != ''">remark,</if>
             isvalid,
  			createtime,
-            updatetime,
+            updatetime
         )values(
 			<if test="configName != null and configName != ''">#{configName},</if>
 			<if test="configKey != null and configKey != ''">#{configKey},</if>
@@ -118,7 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
     
     <delete id="deleteConfigByIds" parameterType="Long">
-        UPDATE sys_config SET isvalid=0 where config_id in
+        UPDATE sys_config SET isvalid=0,updaterid=#{userId} where config_id in
         <foreach item="configId" collection="configIds" open="(" separator="," close=")">
         	#{configId}
         </foreach>

+ 2 - 0
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -645,6 +645,7 @@ public class EmailParseService {
                     EmailContentInfoDTO emailContentInfoDTO = new EmailContentInfoDTO();
                     emailContentInfoDTO.setEmailContent(content.toString());
                     emailContentInfoDTO.setEmailDate(emailDateStr);
+                    emailContentInfoDTO.setEmailTitle(message.getSubject());
                     String fileName = message.getSubject() + DateUtil.format(emailDate, DateConst.YYYYMMDDHHMMSS24);
                     String filePath = path + mailboxInfoDTO.getAccount() + "/" + DateUtil.format(emailDate, DateConst.YYYY_MM_DD) + "/" + fileName + ".html";
                     File saveFile = new File(filePath);
@@ -657,6 +658,7 @@ public class EmailParseService {
                     }
                     FileUtil.writeFile(filePath, content.toString());
                     emailContentInfoDTO.setFilePath(filePath);
+                    emailContentInfoDTO.setFileName(fileName);
                     emailContentInfoDTOList.add(emailContentInfoDTO);
                 }
                 if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {

+ 193 - 138
service-daq/src/main/java/com/simuwang/daq/service/EmailTemplateService.java

@@ -9,6 +9,7 @@ import cn.hutool.core.util.StrUtil;
 import com.simuwang.base.common.conts.ApplicationRuleFileConst;
 import com.simuwang.base.common.conts.EmailDataDirectionConst;
 import com.simuwang.base.common.conts.EmailFieldConst;
+import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.ExcelUtil;
 import com.simuwang.base.common.util.NavDataUtil;
 import com.simuwang.base.mapper.EmailTemplateApplicationRuleMapper;
@@ -34,6 +35,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -72,7 +74,6 @@ public class EmailTemplateService {
         this.emailTemplateDataRuleMapper = emailTemplateDataRuleMapper;
     }
 
-
     public List<EmailFundNavDTO> parseUsingTemplate(EmailContentInfoDTO emailContentInfoDTO) {
         // 考虑文件为PDF,html,zip等情况 -> 将正文html和pdf文件转成Excel
         List<EmailFileContentDTO> emailFileContentDTOList = getRealFilePath(emailContentInfoDTO.getFilePath(), emailContentInfoDTO.getEmailContent());
@@ -83,29 +84,39 @@ public class EmailTemplateService {
         for (EmailFileContentDTO emailFileContentDTO : emailFileContentDTOList) {
             String filePath = emailFileContentDTO.getFilePath();
             String textContent = emailFileContentDTO.getContent();
+            // 获取模板信息
             List<TemplateDetailDTO> templateDetailDTOList = getTemplateDetail(emailContentInfoDTO, textContent, filePath);
             if (CollUtil.isEmpty(templateDetailDTOList)) {
+                log.info("未匹配模板 -> 参数:{}", emailFileContentDTO);
                 return CollUtil.newArrayList();
             }
             // 按照模板分别进行解析
             for (TemplateDetailDTO templateDetailDTO : templateDetailDTOList) {
                 try {
-                    // 按照模板配置规则解析
                     List<EmailFundNavDTO> fundNavDTOList = extraFundNav(filePath, textContent, templateDetailDTO);
                     fundNavDTOList = fundNavDTOList.stream().filter(NavDataUtil::navDataFormatCheck).toList();
                     if (CollUtil.isNotEmpty(fundNavDTOList)) {
-                        fundNavDTOList.forEach(e->e.setTemplateId(templateDetailDTO.getTemplateId()));
+                        fundNavDTOList.forEach(e -> e.setTemplateId(templateDetailDTO.getTemplateId()));
                         emailFundNavDTOList.addAll(fundNavDTOList);
                     }
+                    log.info("模板配置规则解析不到数据 -> 模板id:{}", templateDetailDTO.getTemplateId());
                 } catch (Exception e) {
                     log.error("净值模板解析报错 -> 模板id:{},文件:{},堆栈信息:{}", templateDetailDTO.getTemplateId(), filePath, ExceptionUtil.stacktraceToString(e));
                 }
             }
         }
-        // 过滤掉相同的数据
+        // 过滤掉相同的数据(考虑到多个模板解析到相同数据的情况)
         return emailFundNavDTOList.stream().distinct().toList();
     }
 
+    /**
+     * 根据模板信息提取净值数据
+     *
+     * @param filePath          文件路径(excel类型)
+     * @param textContent       邮件正文内容
+     * @param templateDetailDTO 模板配置信息
+     * @return 净值数据
+     */
     private List<EmailFundNavDTO> extraFundNav(String filePath, String textContent, TemplateDetailDTO templateDetailDTO) {
         List<TemplateDataRuleDTO> dataRuleDetailList = templateDetailDTO.getDataRuleDetailList();
         Map<String, String> fieldValueMap = MapUtil.newHashMap(8);
@@ -116,10 +127,12 @@ public class EmailTemplateService {
         for (TemplateDataRuleDTO templateDataRuleDTO : dataRuleDetailList) {
             Integer fieldName = templateDataRuleDTO.getFieldName();
             Integer position = templateDataRuleDTO.getPosition();
+            // 提取位置-正文
             if (position == 1) {
                 String valueByPattern = getValueByPattern(textContent, templateDataRuleDTO.getFieldRule());
                 fieldValueMap.put(FILE_TYPE_MAP.get(fieldName), valueByPattern);
             }
+            // 提取位置-正文表格或附件表格(表格数据提取一次后不再提取)
             if (position == 2 && !hasParsedTableData) {
                 hasParsedTableData = true;
                 List<TemplateDataRuleDTO> dataRuleDTOS = dataRuleDetailList.stream().filter(e -> e.getPosition() == 2).toList();
@@ -129,6 +142,14 @@ public class EmailTemplateService {
         return buildEmailFundNavDTO(fieldValueMap, fieldValueMapList);
     }
 
+    /**
+     * 根据数据提取规则提取数据
+     *
+     * @param filePath     文件路径(excel类型)
+     * @param direction    数据方向:1-行,2-列,3-其他(无规律)
+     * @param dataRuleDTOS 数据提取规则
+     * @return 数据字段-字段值映射关系
+     */
     private List<Map<String, String>> parsedTableData(String filePath, Integer direction, List<TemplateDataRuleDTO> dataRuleDTOS) {
         if (StrUtil.isBlank(filePath) || CollUtil.isEmpty(dataRuleDTOS)) {
             return CollUtil.newArrayList();
@@ -138,9 +159,9 @@ public class EmailTemplateService {
             return CollUtil.newArrayList();
         }
 
-        List<Map<String, String>> fieldValueMapList = CollUtil.newArrayList();
         Map<String, Pair<Integer, Integer>> fieldPositionMap = MapUtil.newHashMap();
-        Map<String, String> fieldPatternMap = MapUtil.newHashMap();
+        Map<String, String> fieldPatternMap = MapUtil.newHashMap(8);
+        Map<String, BigDecimal> fieldUnitConvertMap = MapUtil.newHashMap(8);
         for (TemplateDataRuleDTO dataRuleDTO : dataRuleDTOS) {
             Integer row = dataRuleDTO.getRow() - 1;
             int column = columnLetterToIndex(dataRuleDTO.getColumn());
@@ -149,7 +170,12 @@ public class EmailTemplateService {
             if (StrUtil.isNotBlank(dataRuleDTO.getFieldRule())) {
                 fieldPatternMap.put(FILE_TYPE_MAP.get(dataRuleDTO.getFieldName()), dataRuleDTO.getFieldRule());
             }
+            if (dataRuleDTO.getUnitConvert() != null) {
+                fieldUnitConvertMap.put(FILE_TYPE_MAP.get(dataRuleDTO.getFieldName()), dataRuleDTO.getUnitConvert());
+            }
         }
+
+        List<Map<String, String>> fieldValueMapList = CollUtil.newArrayList();
         if (direction.equals(EmailDataDirectionConst.ROW_DIRECTION_TYPE)) {
             int startRow = fieldPositionMap.values().stream().map(Pair::getKey).min(Integer::compareTo).orElse(0);
             for (int i = startRow + 1; i <= sheet.getLastRowNum(); i++) {
@@ -160,10 +186,13 @@ public class EmailTemplateService {
                 }
                 for (Map.Entry<String, Pair<Integer, Integer>> fieldEntry : fieldPositionMap.entrySet()) {
                     String fieldName = fieldEntry.getKey();
-                    String fieldRule = fieldPatternMap.get(fieldName);
                     int columnIndex = fieldEntry.getValue().getValue();
                     Cell cell = row.getCell(columnIndex);
+                    String fieldRule = fieldPatternMap.get(fieldName);
                     String cellValue = getValueByPattern(ExcelUtil.getCellValue(cell), fieldRule);
+
+                    BigDecimal unitConvert = fieldUnitConvertMap.get(fieldName);
+                    cellValue = getValueAfterUnitConvert(cellValue, unitConvert);
                     fieldValueMap.put(fieldName, cellValue);
                 }
                 fieldValueMapList.add(fieldValueMap);
@@ -175,15 +204,18 @@ public class EmailTemplateService {
                 Map<String, String> fieldValueMap = MapUtil.newHashMap();
                 for (Map.Entry<String, Pair<Integer, Integer>> fieldEntry : fieldPositionMap.entrySet()) {
                     String fieldName = fieldEntry.getKey();
-                    String fieldRule = fieldPatternMap.get(fieldName);
                     Integer rowIndex = fieldEntry.getValue().getKey();
-                    Integer columnIndex = fieldEntry.getValue().getValue();
                     Row row = sheet.getRow(rowIndex);
                     if (row == null) {
                         continue;
                     }
+                    Integer columnIndex = fieldEntry.getValue().getValue();
                     Cell cell = row.getCell(columnIndex);
+                    String fieldRule = fieldPatternMap.get(fieldName);
                     String cellValue = getValueByPattern(ExcelUtil.getCellValue(cell), fieldRule);
+
+                    BigDecimal unitConvert = fieldUnitConvertMap.get(fieldName);
+                    cellValue = getValueAfterUnitConvert(cellValue, unitConvert);
                     fieldValueMap.put(fieldName, cellValue);
                 }
                 fieldValueMapList.add(fieldValueMap);
@@ -194,7 +226,7 @@ public class EmailTemplateService {
             Map<String, String> fieldValueMap = MapUtil.newHashMap();
             for (Map.Entry<String, Pair<Integer, Integer>> fieldEntry : fieldPositionMap.entrySet()) {
                 String fieldName = fieldEntry.getKey();
-                String fieldRule = fieldPatternMap.get(fieldName);
+
                 Integer rowIndex = fieldEntry.getValue().getKey();
                 Integer columnIndex = fieldEntry.getValue().getValue();
                 Row row = sheet.getRow(rowIndex);
@@ -202,35 +234,19 @@ public class EmailTemplateService {
                     continue;
                 }
                 Cell cell = row.getCell(columnIndex);
+                String fieldRule = fieldPatternMap.get(fieldName);
                 String cellValue = getValueByPattern(ExcelUtil.getCellValue(cell), fieldRule);
+
+                BigDecimal unitConvert = fieldUnitConvertMap.get(fieldName);
+                cellValue = getValueAfterUnitConvert(cellValue, unitConvert);
                 fieldValueMap.put(fieldName, cellValue);
             }
             fieldValueMapList.add(fieldValueMap);
         }
-
         return fieldValueMapList;
     }
 
     /**
-     * 根据正则表达式提取内容
-     *
-     * @param text      文本
-     * @param fieldRule 正则表达式
-     * @return 内容
-     */
-    private String getValueByPattern(String text, String fieldRule) {
-        if (StrUtil.isBlank(text) || StrUtil.isBlank(fieldRule)) {
-            return text;
-        }
-        Pattern pattern = Pattern.compile(fieldRule);
-        Matcher matcher = pattern.matcher(text);
-        while (matcher.find()) {
-            return matcher.group(1);
-        }
-        return null;
-    }
-
-    /**
      * 封装解析的数据为净值数据
      *
      * @param textFieldValueMap      从正文表格中解析到的数据
@@ -253,34 +269,14 @@ public class EmailTemplateService {
         return fundNavDTOList;
     }
 
-    private EmailFundNavDTO buildEmailFundNavDTO(Map<String, String> excelFieldValueMap, Map<String, String> textFieldValueMap) {
-        EmailFundNavDTO fundNavDTO = new EmailFundNavDTO();
-        String registerNumber = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.REGISTER_NUMBER))
-                ? excelFieldValueMap.get(EmailFieldConst.REGISTER_NUMBER) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.REGISTER_NUMBER) : null;
-        String fundName = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.FUND_NAME))
-                ? excelFieldValueMap.get(EmailFieldConst.FUND_NAME) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.FUND_NAME) : null;
-        String priceDate = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.PRICE_DATE))
-                ? excelFieldValueMap.get(EmailFieldConst.PRICE_DATE) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.PRICE_DATE) : null;
-        String nav = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.NAV))
-                ? excelFieldValueMap.get(EmailFieldConst.NAV) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.NAV) : null;
-        String cumulativeNavWithdrawal = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL))
-                ? excelFieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL) : null;
-        String assetShare = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.ASSET_SHARE))
-                ? excelFieldValueMap.get(EmailFieldConst.ASSET_SHARE) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.ASSET_SHARE) : null;
-        String assetNet = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.ASSET_NET))
-                ? excelFieldValueMap.get(EmailFieldConst.ASSET_NET) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.ASSET_NET) : null;
-
-        fundNavDTO.setRegisterNumber(registerNumber);
-        fundNavDTO.setFundName(fundName);
-        fundNavDTO.setPriceDate(priceDate);
-        fundNavDTO.setNav(nav);
-        fundNavDTO.setCumulativeNavWithdrawal(cumulativeNavWithdrawal);
-        fundNavDTO.setAssetShare(assetShare);
-        fundNavDTO.setAssetNet(assetNet);
-        return fundNavDTO;
-    }
-
-
+    /**
+     * 获取模板配置信息
+     *
+     * @param emailContentInfoDTO 采集到的邮件原始信息
+     * @param textContent         邮件正文内容
+     * @param filePath            文件路径(excel类型)
+     * @return 模板配置信息列表
+     */
     public List<TemplateDetailDTO> getTemplateDetail(EmailContentInfoDTO emailContentInfoDTO, String textContent, String filePath) {
         List<TemplateDetailDTO> templateDetailDTOList = CollUtil.newArrayList();
         String senderEmail = emailContentInfoDTO.getSenderEmail();
@@ -291,11 +287,12 @@ public class EmailTemplateService {
         int type = StrUtil.isNotBlank(emailContentInfoDTO.getFilePath()) && ExcelUtil.isHTML(emailContentInfoDTO.getFilePath()) ? 2 : 1;
         // 查询邮箱配置的模板Id
         List<EmailTemplateInfoDO> emailTemplateInfoDOList = emailTemplateMappingMapper.queryByEmail(senderEmail, type);
-        List<Integer> templateIdList = emailTemplateInfoDOList.stream().map(EmailTemplateInfoDO::getId).collect(Collectors.toList());
+        List<Integer> templateIdList = emailTemplateInfoDOList.stream().map(EmailTemplateInfoDO::getId).distinct().collect(Collectors.toList());
         if (CollUtil.isEmpty(templateIdList)) {
             return templateDetailDTOList;
         }
-        Map<Integer, EmailTemplateInfoDO> templateIdDirectionMap = emailTemplateInfoDOList.stream().collect(Collectors.toMap(EmailTemplateInfoDO::getId, v -> v));
+        Map<Integer, EmailTemplateInfoDO> templateIdDirectionMap = emailTemplateInfoDOList.stream()
+                .collect(Collectors.toMap(EmailTemplateInfoDO::getId, v -> v, (oldValue, newValue) -> newValue));
         // 查询模版适用性规则 -> 判断邮件是否满足模板适用性规则
         List<EmailTemplateApplicationRuleDO> templateApplicationRuleDOList = emailTemplateApplicationRuleMapper.queryByTemplateId(templateIdList);
         if (CollUtil.isEmpty(templateApplicationRuleDOList)) {
@@ -330,53 +327,6 @@ public class EmailTemplateService {
         return templateDetailDTOList;
     }
 
-    public List<EmailFileContentDTO> getRealFilePath(String filePath, String content) {
-        List<EmailFileContentDTO> emailFileContentDTOList = CollUtil.newArrayList();
-        if (StrUtil.isBlank(filePath)) {
-            return emailFileContentDTOList;
-        }
-        if (ExcelUtil.isExcel(filePath)) {
-            emailFileContentDTOList.add(new EmailFileContentDTO(filePath, null));
-        } else if (ExcelUtil.isHTML(filePath)) {
-            String excelFilePath = filePath.replace(".html", ".xlsx");
-            excelFilePath = ExcelUtil.contentConvertToExcel(content, excelFilePath);
-            emailFileContentDTOList.add(new EmailFileContentDTO(excelFilePath, getTextFromHtml(content)));
-        } else if (ExcelUtil.isPdf(filePath)) {
-            String excelFilePath = filePath.replace(".pdf", ".xlsx").replace(".PDF", ".xlsx");
-            excelFilePath = ExcelUtil.pdfConvertToExcel(filePath, excelFilePath);
-            emailFileContentDTOList.add(new EmailFileContentDTO(excelFilePath, null));
-        } else if (ExcelUtil.isZip(filePath)) {
-
-            String destPath = filePath.replaceAll(".zip", "").replaceAll(".ZIP", "");
-            List<String> dir = ExcelUtil.extractCompressedFiles(filePath, destPath);
-            for (String zipFilePath : dir) {
-                File file = new File(zipFilePath);
-                if (file.isDirectory()) {
-                    for (String navFilePath : Objects.requireNonNull(file.list())) {
-                        Optional.ofNullable(getRealFilePath(navFilePath, null)).ifPresent(emailFileContentDTOList::addAll);
-                    }
-                } else {
-                    Optional.ofNullable(getRealFilePath(zipFilePath, null)).ifPresent(emailFileContentDTOList::addAll);
-                }
-            }
-        }
-        return emailFileContentDTOList;
-    }
-
-    private String getTextFromHtml(String htmlContent) {
-        if (StrUtil.isBlank(htmlContent)) {
-            return null;
-        }
-        Document doc = Jsoup.parse(htmlContent);
-        if (doc == null) {
-            return htmlContent;
-        }
-        Elements allElements = doc.getAllElements();
-        String textContent = allElements.stream().map(Element::ownText).collect(Collectors.joining("\n"));
-
-        return textContent.trim();
-    }
-
     /**
      * 判断邮件是否满足模板的适用性规则
      *
@@ -442,16 +392,143 @@ public class EmailTemplateService {
         return isMatch;
     }
 
-    private Map<String, Pair<Integer, Integer>> getFieldPosition(List<EmailTemplateDataRuleDO> emailTemplateDataRuleDOList) {
-        Map<String, Pair<Integer, Integer>> fieldPositionMap = new HashMap<>();
-        for (EmailTemplateDataRuleDO templateDataRuleDO : emailTemplateDataRuleDOList) {
-            Integer fieldName = templateDataRuleDO.getFieldName();
-            String fieldValue = FILE_TYPE_MAP.get(fieldName);
-            int column = columnLetterToIndex(templateDataRuleDO.getColumn());
-            Pair<Integer, Integer> pair = new Pair<>(templateDataRuleDO.getRow() - 1, column);
-            fieldPositionMap.put(fieldValue, pair);
+    /**
+     * 判断字符串是否包含指定的关键词列表,并且不包含指定的排除关键词列表。
+     *
+     * @param emailTitle        要检查的字符串
+     * @param containKeyword    逗号分隔的必须包含的关键词列表
+     * @param notContainKeyword 逗号分隔的必须不包含的关键词列表
+     * @return true or false
+     */
+    public boolean iskeywordMatch(String emailTitle, String containKeyword, String notContainKeyword) {
+        boolean isMatch = true;
+        if (StrUtil.isNotBlank(containKeyword)) {
+            isMatch &= Arrays.stream(containKeyword.split(","))
+                    .allMatch(emailTitle::contains);
+        }
+        if (StrUtil.isNotBlank(notContainKeyword)) {
+            isMatch &= Arrays.stream(notContainKeyword.split(","))
+                    .noneMatch(emailTitle::contains);
+        }
+        return isMatch;
+    }
+
+    /**
+     * 进行单位转换
+     *
+     * @param cellValue   待进行单位转换的值
+     * @param unitConvert 转换单位
+     * @return 单位转换后的值
+     */
+    private String getValueAfterUnitConvert(String cellValue, BigDecimal unitConvert) {
+        if (unitConvert == null) {
+            return cellValue;
+        }
+        try {
+            BigDecimal bigDecimal = new BigDecimal(cellValue);
+            return String.valueOf(bigDecimal.multiply(unitConvert));
+        } catch (Exception e) {
+            return cellValue;
+        }
+    }
+
+    /**
+     * 根据正则表达式提取内容
+     *
+     * @param text      文本
+     * @param fieldRule 正则表达式
+     * @return 内容
+     */
+    private String getValueByPattern(String text, String fieldRule) {
+        if (StrUtil.isBlank(text) || StrUtil.isBlank(fieldRule)) {
+            return text;
+        }
+        Pattern pattern = Pattern.compile(fieldRule);
+        Matcher matcher = pattern.matcher(text);
+        while (matcher.find()) {
+            return matcher.group(1);
+        }
+        return null;
+    }
+
+    private EmailFundNavDTO buildEmailFundNavDTO(Map<String, String> excelFieldValueMap, Map<String, String> textFieldValueMap) {
+        EmailFundNavDTO fundNavDTO = new EmailFundNavDTO();
+        String registerNumber = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.REGISTER_NUMBER))
+                ? excelFieldValueMap.get(EmailFieldConst.REGISTER_NUMBER) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.REGISTER_NUMBER) : null;
+        String fundName = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.FUND_NAME))
+                ? excelFieldValueMap.get(EmailFieldConst.FUND_NAME) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.FUND_NAME) : null;
+        String priceDate = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.PRICE_DATE))
+                ? excelFieldValueMap.get(EmailFieldConst.PRICE_DATE) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.PRICE_DATE) : null;
+        priceDate = DateUtils.stringToDate(priceDate);
+        String nav = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.NAV))
+                ? excelFieldValueMap.get(EmailFieldConst.NAV) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.NAV) : null;
+        String cumulativeNavWithdrawal = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL))
+                ? excelFieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL) : null;
+        String assetShare = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.ASSET_SHARE))
+                ? excelFieldValueMap.get(EmailFieldConst.ASSET_SHARE) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.ASSET_SHARE) : null;
+        String assetNet = MapUtil.isNotEmpty(excelFieldValueMap) && StrUtil.isNotBlank(excelFieldValueMap.get(EmailFieldConst.ASSET_NET))
+                ? excelFieldValueMap.get(EmailFieldConst.ASSET_NET) : MapUtil.isNotEmpty(textFieldValueMap) ? textFieldValueMap.get(EmailFieldConst.ASSET_NET) : null;
+
+        fundNavDTO.setRegisterNumber(registerNumber);
+        fundNavDTO.setFundName(fundName);
+        fundNavDTO.setPriceDate(priceDate);
+        fundNavDTO.setNav(nav);
+        fundNavDTO.setCumulativeNavWithdrawal(cumulativeNavWithdrawal);
+        fundNavDTO.setAssetShare(assetShare);
+        fundNavDTO.setAssetNet(assetNet);
+        return fundNavDTO;
+    }
+
+    public List<EmailFileContentDTO> getRealFilePath(String filePath, String content) {
+        List<EmailFileContentDTO> emailFileContentDTOList = CollUtil.newArrayList();
+        if (StrUtil.isBlank(filePath)) {
+            return emailFileContentDTOList;
+        }
+        if (ExcelUtil.isExcel(filePath)) {
+            emailFileContentDTOList.add(new EmailFileContentDTO(filePath, null));
+        } else if (ExcelUtil.isHTML(filePath)) {
+            String excelFilePath = filePath.replace(".html", ".xlsx");
+            excelFilePath = ExcelUtil.contentConvertToExcel(content, excelFilePath);
+            emailFileContentDTOList.add(new EmailFileContentDTO(excelFilePath, getTextFromHtml(content)));
+        } else if (ExcelUtil.isPdf(filePath)) {
+            String excelFilePath = filePath.replace(".pdf", ".xlsx").replace(".PDF", ".xlsx");
+            excelFilePath = ExcelUtil.pdfConvertToExcel(filePath, excelFilePath);
+            emailFileContentDTOList.add(new EmailFileContentDTO(excelFilePath, null));
+        } else if (ExcelUtil.isZip(filePath)) {
+            String destPath = filePath.replaceAll(".zip", "").replaceAll(".ZIP", "");
+            List<String> dir = ExcelUtil.extractCompressedFiles(filePath, destPath);
+            for (String zipFilePath : dir) {
+                File file = new File(zipFilePath);
+                if (file.isDirectory()) {
+                    for (String navFilePath : Objects.requireNonNull(file.list())) {
+                        Optional.ofNullable(getRealFilePath(navFilePath, null)).ifPresent(emailFileContentDTOList::addAll);
+                    }
+                } else {
+                    Optional.ofNullable(getRealFilePath(zipFilePath, null)).ifPresent(emailFileContentDTOList::addAll);
+                }
+            }
+        }
+        return emailFileContentDTOList;
+    }
+
+    /**
+     * 获取html所有文本内容
+     *
+     * @param htmlContent 内容(html格式)
+     * @return 文本内容
+     */
+    private String getTextFromHtml(String htmlContent) {
+        if (StrUtil.isBlank(htmlContent)) {
+            return null;
         }
-        return fieldPositionMap;
+        Document doc = Jsoup.parse(htmlContent);
+        if (doc == null) {
+            return htmlContent;
+        }
+        Elements allElements = doc.getAllElements();
+        String textContent = allElements.stream().map(Element::ownText).collect(Collectors.joining("\n"));
+
+        return textContent.trim();
     }
 
     /**
@@ -473,26 +550,4 @@ public class EmailTemplateService {
         }
         return columnIndex;
     }
-
-    /**
-     * 判断字符串是否包含指定的关键词列表,并且不包含指定的排除关键词列表。
-     *
-     * @param emailTitle        要检查的字符串
-     * @param containKeyword    逗号分隔的必须包含的关键词列表
-     * @param notContainKeyword 逗号分隔的必须不包含的关键词列表
-     * @return true or false
-     */
-    public boolean iskeywordMatch(String emailTitle, String containKeyword, String notContainKeyword) {
-        boolean isMatch = true;
-        if (StrUtil.isNotBlank(containKeyword)) {
-            isMatch &= Arrays.stream(containKeyword.split(","))
-                    .allMatch(emailTitle::contains);
-        }
-        if (StrUtil.isNotBlank(notContainKeyword)) {
-            isMatch &= Arrays.stream(notContainKeyword.split(","))
-                    .noneMatch(emailTitle::contains);
-        }
-        return isMatch;
-    }
-
 }

+ 21 - 25
service-daq/src/main/java/com/simuwang/daq/service/NavEmailParser.java

@@ -1,14 +1,14 @@
 package com.simuwang.daq.service;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.lang.Pair;
 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.EmailDataDirectionConst;
 import com.simuwang.base.common.conts.EmailFieldConst;
 import com.simuwang.base.common.conts.EmailTypeConst;
+import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.ExcelUtil;
 import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
@@ -39,6 +39,9 @@ public class NavEmailParser extends AbstractEmailParser {
     @Value("${email.file.path}")
     private String path;
 
+    @Value("${email.parse.force-template-enable}")
+    private boolean forceTemplateEnable;
+
     private final ValuationEmailParser valuationEmailParser;
     private final EmailTemplateService emailTemplateService;
 
@@ -90,12 +93,12 @@ public class NavEmailParser extends AbstractEmailParser {
             }
         }
         // email_fund_nav增加template_id字段
-        if (CollUtil.isEmpty(emailFundNavDTOList)) {
+        if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
             emailFundNavDTOList.forEach(e -> e.setTemplateId(0));
         }
 
         // 通用模版解析 -> 根据配置的模板进行解析
-        if (CollUtil.isEmpty(emailFundNavDTOList)) {
+        if (CollUtil.isEmpty(emailFundNavDTOList) || forceTemplateEnable) {
             emailFundNavDTOList = emailTemplateService.parseUsingTemplate(emailContentInfoDTO);
         }
         return emailFundNavDTOList;
@@ -162,7 +165,7 @@ public class NavEmailParser extends AbstractEmailParser {
             return CollUtil.newArrayList();
         }
         // 2.解析sheet中的净值数据
-        List<EmailFundNavDTO> emailFundNavDTOList = parseSheetData(sheet, fieldPositionMap, null);
+        List<EmailFundNavDTO> emailFundNavDTOList = parseSheetData(filePath, sheet, fieldPositionMap, null);
         // 3.校验净值数据格式
         if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
             emailFundNavDTOList = emailFundNavDTOList.stream().filter(super::dataFormat).collect(Collectors.toList());
@@ -188,12 +191,13 @@ public class NavEmailParser extends AbstractEmailParser {
     /**
      * 根据字段所在表格的位置提取净值数据
      *
+     * @param filePath         文件路径·
      * @param sheet            表格中的sheet页
      * @param fieldPositionMap 字段所在表格中的位置
      * @param direction        表格数据的形式:1-行,2-列
      * @return 净值数据
      */
-    private List<EmailFundNavDTO> parseSheetData(Sheet sheet, Map<String, Pair<Integer, Integer>> fieldPositionMap, Integer direction) {
+    private List<EmailFundNavDTO> parseSheetData(String filePath, Sheet sheet, Map<String, Pair<Integer, Integer>> fieldPositionMap, Integer direction) {
         List<EmailFundNavDTO> fundNavDTOList = CollUtil.newArrayList();
         // 通过表头所在位置判断是行数据还是列数据
         Integer dataDirectionType = direction != null ? direction : ExcelUtil.detectDataDirection(fieldPositionMap);
@@ -208,7 +212,11 @@ public class NavEmailParser extends AbstractEmailParser {
             // 遍历可能的数据行
             for (int rowNum = initRow + 1; rowNum <= lastRowNum; rowNum++) {
                 Row sheetRow = sheet.getRow(rowNum);
-                Optional.ofNullable(readSheetRowData(sheetRow, fieldColumnMap)).ifPresent(fundNavDTOList::addAll);
+                try {
+                    Optional.ofNullable(readSheetRowData(sheetRow, fieldColumnMap)).ifPresent(fundNavDTOList::addAll);
+                } catch (Exception e) {
+                    log.error("读取行数据报错 -> 行号:{},文件路径:{},堆栈信息:{}", rowNum, filePath, ExceptionUtil.stacktraceToString(e));
+                }
             }
         }
         if (dataDirectionType.equals(EmailDataDirectionConst.COLUMN_DIRECTION_TYPE)) {
@@ -264,10 +272,9 @@ public class NavEmailParser extends AbstractEmailParser {
                     priceDateMap.put(1, date);
                     continue;
                 }
-                boolean isValidDate = StringUtil.isValidDate(cellValue);
-                if (isValidDate) {
-                    String date = cellValue.replaceAll("年", "-").replaceAll("月", "-");
-                    priceDateMap.put(2, date);
+                String priceDate = DateUtils.stringToDate(cellValue);
+                if (StrUtil.isNotBlank(priceDate)) {
+                    priceDateMap.put(2, priceDate);
                 }
             }
         }
@@ -285,7 +292,7 @@ public class NavEmailParser extends AbstractEmailParser {
         EmailFundNavDTO fundNavDTO = new EmailFundNavDTO();
         fundNavDTO.setFundName(fieldValueMap.get(EmailFieldConst.FUND_NAME));
         fundNavDTO.setRegisterNumber(fieldValueMap.get(EmailFieldConst.REGISTER_NUMBER));
-        fundNavDTO.setPriceDate(fieldValueMap.get(EmailFieldConst.PRICE_DATE));
+        fundNavDTO.setPriceDate(DateUtils.stringToDate(fieldValueMap.get(EmailFieldConst.PRICE_DATE)));
         fundNavDTO.setNav(fieldValueMap.get(EmailFieldConst.NAV));
         fundNavDTO.setCumulativeNavWithdrawal(fieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL));
 
@@ -316,18 +323,13 @@ public class NavEmailParser extends AbstractEmailParser {
         EmailFundNavDTO emailFundNavDTO = new EmailFundNavDTO();
         String priceDate = columnFieldMap.get(EmailFieldConst.PRICE_DATE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PRICE_DATE)) != null ?
                 ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PRICE_DATE))) : null;
-        priceDate = StringUtil.isValidDate(priceDate) ? priceDate : null;
+        priceDate = DateUtils.stringToDate(priceDate);
+
         // 份额基金净值文件格式
         long parentFiledCount = columnFieldMap.keySet().stream().filter(e -> e.contains("parent")).count();
         if (parentFiledCount >= 1) {
             Optional.ofNullable(buildParentNav(sheetRow, columnFieldMap, priceDate)).ifPresent(fundNavDTOList::add);
         }
-        // 正常净值文件格式
-        if (StrUtil.isNotBlank(priceDate) && !priceDate.contains("-")) {
-            // 处理日期yyyyMMdd格式 -> 转成yyyy-MM-dd
-            priceDate = priceDate.replace("年", "").replace("月", "").replace("日", "");
-            priceDate = DateUtil.format(DateUtil.parse(priceDate, DateConst.YYYYMMDD), DateConst.YYYY_MM_DD);
-        }
         emailFundNavDTO.setPriceDate(priceDate);
         String fundName = ExcelUtil.getPriorityFieldValue(sheetRow, columnFieldMap.get(EmailFieldConst.LEVEL_FUND_NAME), columnFieldMap.get(EmailFieldConst.FUND_NAME));
         emailFundNavDTO.setFundName(fundName);
@@ -341,7 +343,6 @@ public class NavEmailParser extends AbstractEmailParser {
                 ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.VIRTUAL_NAV))) : null;
         emailFundNavDTO.setVirtualNav(virtualNav);
 
-
         emailFundNavDTO.setAssetNet(ExcelUtil.numberDataStripCommas(assetNet));
 
         String assetShares = columnFieldMap.get(EmailFieldConst.ASSET_SHARE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_SHARE)) != null ?
@@ -361,11 +362,6 @@ public class NavEmailParser extends AbstractEmailParser {
         if (StrUtil.isBlank(nav) && StrUtil.isBlank(cumulativeNavWithdrawal)) {
             return null;
         }
-        if (StrUtil.isNotBlank(priceDate) && !priceDate.contains("-")) {
-            // 处理日期yyyyMMdd格式 -> 转成yyyy-MM-dd
-            priceDate = priceDate.replace("年", "").replace("月", "").replace("日", "");
-            priceDate = DateUtil.format(DateUtil.parse(priceDate, DateConst.YYYYMMDD), DateConst.YYYY_MM_DD);
-        }
         emailFundNavDTO.setPriceDate(priceDate);
         String fundName = columnFieldMap.get(EmailFieldConst.PARENT_FUND_NAME) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_FUND_NAME)).getStringCellValue() != null ?
                 ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_FUND_NAME))) : null;

+ 2 - 0
service-deploy/src/main/resources/application.yml

@@ -70,6 +70,8 @@ email-rule:
 email:
   file:
     path: /data/file/nav
+  parse:
+    force-template-enable: true
 
 # 配置
 simuwang:

+ 13 - 1
service-deploy/src/test/java/com/simuwang/ApplicationTest.java

@@ -3,6 +3,7 @@ package com.simuwang;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
 import com.simuwang.base.common.conts.DateConst;
+import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
 import com.simuwang.daq.service.EmailParseApiService;
 import com.simuwang.daq.service.EmailParseService;
@@ -10,6 +11,7 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.util.ArrayList;
 import java.util.Date;
 
 @SpringBootTest(classes = Application.class)
@@ -58,6 +60,16 @@ public class ApplicationTest {
 
     @Test
     public void testReparseFile() {
-        emailParseApiService.reparseFile(ListUtil.toList(40,43));
+        emailParseApiService.reparseFile(ListUtil.toList(40, 43));
+    }
+
+    @Test
+    public void testDateFormat() {
+        ArrayList<String> list = ListUtil.toList("20240705", "2024年07月05日", "2024年7月5日", "2024-07-05", "2024-7-5", "2024/07/05", "2024/7/5", "20240712",
+                "2024年07月12日", "2024年7月12日", "2024-07-12", "2024-7-12", "2024/07/12", "2024/7/12", "20241005", "2024年10月05日", "2024年10月5日", "2024-10-05", "2024-10-5", "2024/10/05", "2024/10/5");
+        for (String dateString : list) {
+            String date = DateUtils.stringToDate(dateString);
+            System.out.println(dateString + ": -> " + date);
+        }
     }
 }

+ 75 - 103
service-manage/src/main/java/com/simuwang/manage/api/system/SysConfigController.java

@@ -1,103 +1,75 @@
-//package com.simuwang.manage.api.system;
-//
-//import com.simuwang.base.common.result.AjaxResult;
-//import com.simuwang.base.pojo.dos.SysConfigDO;
-//import com.simuwang.base.pojo.vo.SysConfigVO;
-//import com.simuwang.manage.service.system.SysConfigService;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Controller;
-//import org.springframework.ui.ModelMap;
-//import org.springframework.validation.annotation.Validated;
-//import org.springframework.web.bind.annotation.*;
-//
-//import java.util.List;
-//
-///**
-// * 参数配置 信息操作处理
-// *
-// * @author ruoyi
-// */
-//@Controller
-//@RequestMapping("/v1/system/config")
-//public class SysConfigController
-//{
-//    private String prefix = "system/config";
-//
-//    @Autowired
-//    private SysConfigService configService;
-//
-//    @GetMapping()
-//    public String config()
-//    {
-//        return prefix + "/config";
-//    }
-//
-//
-//    /**
-//     * 新增参数配置
-//     */
-//    @GetMapping("/add")
-//    public String add()
-//    {
-//        return prefix + "/add";
-//    }
-//
-//    /**
-//     * 新增保存参数配置
-//     */
-//    @PostMapping("/add")
-//    @ResponseBody
-//    public AjaxResult addSave(@Validated SysConfigVO config)
-//    {
-//        if (!configService.checkConfigKeyUnique(config))
-//        {
-//            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
-//        }
-//        return toAjax(configService.insertConfig(config));
-//    }
-//
-//    /**
-//     * 修改参数配置
-//     */
-//    @GetMapping("/edit/{configId}")
-//    public String edit(@PathVariable("configId") Long configId, ModelMap mmap)
-//    {
-//        mmap.put("config", configService.selectConfigById(configId));
-//        return prefix + "/edit";
-//    }
-//
-//    /**
-//     * 修改保存参数配置
-//     */
-//    @PostMapping("/edit")
-//    @ResponseBody
-//    public AjaxResult editSave(@Validated SysConfigVO config)
-//    {
-//        if (!configService.checkConfigKeyUnique(config))
-//        {
-//            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
-//        }
-//        return toAjax(configService.updateConfig(config));
-//    }
-//
-//    /**
-//     * 删除参数配置
-//     */
-//    @PostMapping("/remove")
-//    @ResponseBody
-//    public AjaxResult remove(String ids)
-//    {
-//        configService.deleteConfigByIds(ids);
-//        return success();
-//    }
-//
-//    /**
-//     * 校验参数键名
-//     */
-//    @PostMapping("/checkConfigKeyUnique")
-//    @ResponseBody
-//    public boolean checkConfigKeyUnique(SysConfigVO config)
-//    {
-//        return configService.checkConfigKeyUnique(config);
-//    }
-//}
+package com.simuwang.manage.api.system;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.query.ConfigPageQuery;
+import com.simuwang.base.pojo.vo.ConfigIdListVO;
+import com.simuwang.base.pojo.vo.ConfigIdVO;
+import com.simuwang.base.pojo.vo.SysConfigVO;
+import com.simuwang.logging.SystemLog;
+import com.simuwang.manage.service.system.SysConfigService;
+import com.smppw.common.pojo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 参数配置
+ * @author ruoyi
+ */
+@SystemLog(value = "参数配置管理")
+@RestController
+@RequestMapping("/v1/sys/config")
+public class SysConfigController
+{
+    @Autowired
+    private SysConfigService configService;
+
+    /**
+     * 查询参数配置列表
+     * @param query
+     * @return
+     */
+    @SystemLog("查询参数配置列表")
+    @GetMapping("/search-config-list")
+    public MybatisPage<SysConfigVO> searchConfigList(ConfigPageQuery query) {
+        return configService.searchConfigList(query);
+    }
+
+    /**
+     * 批量删除参数配置
+     * @param configIdListVO
+     * @return
+     */
+    @SystemLog("批量删除参数配置")
+    @PostMapping("/delete-config-list")
+    public boolean deleteConfigList(@RequestBody ConfigIdListVO configIdListVO) {
+        configService.deleteConfigList(configIdListVO.getConfigIdList());
+        return true;
+    }
+
+    /**
+     * 编辑查询
+     * @param configIdVO
+     * @return
+     */
+    @SystemLog("编辑查询")
+    @GetMapping("/search-config")
+    public ResultVo searchConfigList(ConfigIdVO configIdVO) {
+        SysConfigVO sysConfigVO = configService.searchConfigById(configIdVO.getConfigId());
+        return new ResultVo(sysConfigVO==null?false:sysConfigVO);
+    }
+
+    /**
+     * 保存参数配置
+     * @param sysConfigVO
+     * @return
+     */
+    @SystemLog("保存参数配置")
+    @PostMapping("/save-config")
+    public ResultVo saveConfig(@RequestBody SysConfigVO sysConfigVO) {
+        ResultVo vo = configService.saveConfig(sysConfigVO);
+        return vo;
+    }
+
+}

+ 40 - 4
service-manage/src/main/java/com/simuwang/manage/api/template/TemplateController.java

@@ -6,10 +6,10 @@ import com.simuwang.base.pojo.dto.query.EmailTemplateInfoPageQuery;
 import com.simuwang.base.pojo.vo.*;
 import com.simuwang.logging.SystemLog;
 import com.simuwang.manage.service.EmailTemplateInfoService;
+import com.smppw.common.pojo.ResultVo;
+import com.smppw.common.pojo.enums.status.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 模版管理
@@ -50,9 +50,26 @@ public class TemplateController {
         return true;
     }
 
+    /**
+     * 开启关闭状态
+     * @param statusVO
+     * @return
+     */
+    @SystemLog(value = "开启关闭状态", type = SystemLog.Type.UPDATE)
+    @PostMapping("control-template-status")
+    public ResultVo controlTemplateConfig(@RequestBody StatusVO statusVO){
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        try{
+            emailTemplateInfoService.controlTemplateConfig(statusVO);
+            vo.setData(true);
+        }catch (Exception e){
+            vo.setCode(ResultCode.SAVE_FAILED.getCode());
+        }
+        return vo;
+    }
 
     /**
-     * 保存模版
+     * 保存模版信息
      * @param saveTemplateInfoVO
      * @return
      */
@@ -75,4 +92,23 @@ public class TemplateController {
         return true;
     }
 
+    /**
+     * 模版编辑查询
+     * @param idVO
+     * @return
+     */
+    @SystemLog(value = "模版编辑查询")
+    @GetMapping("search-template-info")
+    public ResultVo searchTemplateInfo(IdVO idVO){
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        try{
+            SaveTemplateInfoVO saveTemplateInfoVO = emailTemplateInfoService.searchTemplateInfo(idVO.getId());
+            vo.setData(saveTemplateInfoVO);
+        }catch (Exception e){
+            vo.setCode(ResultCode.SAVE_FAILED.getCode());
+            vo.setData(false);
+        }
+        return vo;
+    }
+
 }

+ 42 - 7
service-manage/src/main/java/com/simuwang/manage/api/template/TemplateSettingController.java

@@ -3,17 +3,14 @@ package com.simuwang.manage.api.template;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.EmailTemplateInfoPageQuery;
 import com.simuwang.base.pojo.dto.query.EmailTemplateSettingPageQuery;
-import com.simuwang.base.pojo.vo.EmailTemplateInfoVO;
-import com.simuwang.base.pojo.vo.EmailTemplateMappingVO;
-import com.simuwang.base.pojo.vo.IdListVO;
-import com.simuwang.base.pojo.vo.SaveTemplateInfoVO;
+import com.simuwang.base.pojo.vo.*;
 import com.simuwang.logging.SystemLog;
 import com.simuwang.manage.service.EmailTemplateInfoService;
 import com.simuwang.manage.service.EmailTemplateMappingService;
+import com.smppw.common.pojo.ResultVo;
+import com.smppw.common.pojo.enums.status.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 模版设置
@@ -66,4 +63,42 @@ public class TemplateSettingController {
         emailTemplateMappingService.saveTemplateSetting(emailTemplateMappingVO);
         return true;
     }
+
+    /**
+     * 开启关闭状态
+     * @param statusVO
+     * @return
+     */
+    @SystemLog(value = "开启关闭状态", type = SystemLog.Type.UPDATE)
+    @PostMapping("control-template-status")
+    public ResultVo controlTemplateSetting(@RequestBody StatusVO statusVO){
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        try{
+            emailTemplateMappingService.controlTemplateConfig(statusVO);
+            vo.setData(true);
+        }catch (Exception e){
+            vo.setCode(ResultCode.SAVE_FAILED.getCode());
+            vo.setData(false);
+        }
+        return vo;
+    }
+
+    /**
+     * 模版设置编辑查询
+     * @param idVO
+     * @return
+     */
+    @SystemLog(value = "模版设置编辑查询")
+    @GetMapping("search-template-setting")
+    public ResultVo searchTemplateSetting(IdVO idVO){
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        try{
+            EmailTemplateMappingVO emailTemplateMappingVO = emailTemplateMappingService.searchTemplateSetting(idVO.getId());
+            vo.setData(emailTemplateMappingVO);
+        }catch (Exception e){
+            vo.setCode(ResultCode.SAVE_FAILED.getCode());
+            vo.setData(false);
+        }
+        return vo;
+    }
 }

+ 5 - 0
service-manage/src/main/java/com/simuwang/manage/service/EmailTemplateInfoService.java

@@ -5,6 +5,7 @@ import com.simuwang.base.pojo.dto.query.EmailTemplateInfoPageQuery;
 import com.simuwang.base.pojo.vo.EmailTemplateInfoVO;
 import com.simuwang.base.pojo.vo.IdListVO;
 import com.simuwang.base.pojo.vo.SaveTemplateInfoVO;
+import com.simuwang.base.pojo.vo.StatusVO;
 
 /**
  * FileName: EmailTemplateInfoService
@@ -20,4 +21,8 @@ public interface EmailTemplateInfoService {
     void saveTemplateList(SaveTemplateInfoVO saveTemplateInfoVO);
 
     void deleteApplicationRuleList(IdListVO idListVO);
+
+    void controlTemplateConfig(StatusVO statusVO);
+
+    SaveTemplateInfoVO searchTemplateInfo(Integer id);
 }

+ 5 - 0
service-manage/src/main/java/com/simuwang/manage/service/EmailTemplateMappingService.java

@@ -4,6 +4,7 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.EmailTemplateSettingPageQuery;
 import com.simuwang.base.pojo.vo.EmailTemplateMappingVO;
 import com.simuwang.base.pojo.vo.IdListVO;
+import com.simuwang.base.pojo.vo.StatusVO;
 
 /**
  * FileName: EmailTemplateMappingService
@@ -17,4 +18,8 @@ public interface EmailTemplateMappingService {
     void deleteTemplateSetting(IdListVO idListVO);
 
     void saveTemplateSetting(EmailTemplateMappingVO emailTemplateMappingVO);
+
+    void controlTemplateConfig(StatusVO statusVO);
+
+    EmailTemplateMappingVO searchTemplateSetting(Integer id);
 }

+ 36 - 3
service-manage/src/main/java/com/simuwang/manage/service/impl/EmailTemplateInfoServiceImpl.java

@@ -62,7 +62,8 @@ public class EmailTemplateInfoServiceImpl implements EmailTemplateInfoService {
         Integer templateId;
         if(StringUtil.isNull(emailDeletionInfoDO.getId())){
             //保存
-            templateId = emailTemplateInfoMapper.saveTemplateInfo(emailDeletionInfoDO);
+            emailTemplateInfoMapper.saveTemplateInfo(emailDeletionInfoDO);
+            templateId = emailDeletionInfoDO.getId();
             List<EmailTemplateDataRuleVO> emailTemplateDataRuleVOList = saveTemplateInfoVO.getEmailTemplateDataRuleVOList();
             if(emailTemplateDataRuleVOList.size() > 0){
                 emailTemplateDataRuleVOList.forEach(e -> e.setTemplateId(templateId));
@@ -87,6 +88,7 @@ public class EmailTemplateInfoServiceImpl implements EmailTemplateInfoService {
             templateId = emailDeletionInfoDO.getId();
             emailTemplateInfoMapper.updateTemplateInfo(emailDeletionInfoDO);
             List<EmailTemplateDataRuleVO> emailTemplateDataRuleVOList = saveTemplateInfoVO.getEmailTemplateDataRuleVOList();
+            emailTemplateDataRuleVOList = emailTemplateDataRuleVOList.stream().filter(e -> StringUtil.isNotEmpty(e.getColumn()) || e.getRow()!=null || StringUtil.isNotEmpty(e.getFieldRule())).collect(Collectors.toList());
             if(emailTemplateDataRuleVOList.size() > 0){
                 emailTemplateDataRuleVOList.forEach(e -> e.setTemplateId(templateId));
                 List<EmailTemplateDataRuleDO> addList = new ArrayList<>();
@@ -96,14 +98,14 @@ public class EmailTemplateInfoServiceImpl implements EmailTemplateInfoService {
                     if(StringUtil.isNull(emailTemplateDataRuleDO.getId())){
                         addList.add(emailTemplateDataRuleDO);
                     }else{
-                        addList.add(emailTemplateDataRuleDO);
+                        editList.add(emailTemplateDataRuleDO);
                     }
                 }
                 if(addList.size() > 0){
                     emailTemplateDataRuleMapper.batchInsert(addList);
                 }
                 if(editList.size() > 0){
-                    emailTemplateDataRuleMapper.batchUpdate(editList);
+                    emailTemplateDataRuleMapper.batchUpdate(editList.subList(0,1));
                 }
             }
             List<EmailTemplateApplicationRuleVO> emailTemplateApplicationRuleVOList = saveTemplateInfoVO.getEmailTemplateApplicationRuleVOList();
@@ -136,6 +138,32 @@ public class EmailTemplateInfoServiceImpl implements EmailTemplateInfoService {
         emailTemplateApplicationRuleMapper.deleteByIdList(idListVO.getIdList(),userId);
     }
 
+    @Override
+    public void controlTemplateConfig(StatusVO statusVO) {
+        EmailTemplateInfoDO emailTemplateInfoDO = emailTemplateInfoMapper.searchTemplateById(statusVO.getId());
+        emailTemplateInfoDO.setStatus(statusVO.getStatus());
+        Integer userId = UserUtils.getLoginUser().getUserId();
+        emailTemplateInfoDO.setUpdaterId(userId);
+        emailTemplateInfoDO.setUpdateTime(DateUtils.getNowDate());
+        emailTemplateInfoMapper.updateTemplateInfo(emailTemplateInfoDO);
+    }
+
+    @Override
+    public SaveTemplateInfoVO searchTemplateInfo(Integer id) {
+        SaveTemplateInfoVO vo = new SaveTemplateInfoVO();
+        EmailTemplateInfoDO emailTemplateInfoDO = emailTemplateInfoMapper.searchTemplateById(id);
+        vo.setEmailTemplateInfoVO(emailTemplateInfoDO.toVO());
+        List<Integer> idList = new ArrayList<>();
+        idList.add(id);
+        List<EmailTemplateDataRuleDO> ruleDOList = emailTemplateDataRuleMapper.queryByTemplateId(idList);
+        List<EmailTemplateDataRuleVO> ruleVOList = ruleDOList.stream().map(EmailTemplateDataRuleDO::toVO).collect(Collectors.toList());
+        vo.setEmailTemplateDataRuleVOList(ruleVOList);
+        List<EmailTemplateApplicationRuleDO> applicationRuleDOList = emailTemplateApplicationRuleMapper.queryByTemplateId(idList);
+        List<EmailTemplateApplicationRuleVO> applicationRuleVOList = applicationRuleDOList.stream().map(EmailTemplateApplicationRuleDO::toVO).collect(Collectors.toList());
+        vo.setEmailTemplateApplicationRuleVOList(applicationRuleVOList);
+        return vo;
+    }
+
     private EmailTemplateApplicationRuleDO toEmailTemplateApplicationRuleDO(EmailTemplateApplicationRuleVO applicationRuleVO) {
         Integer userId = UserUtils.getLoginUser().getUserId();
         EmailTemplateApplicationRuleDO applicationRuleDO = new EmailTemplateApplicationRuleDO();
@@ -166,6 +194,7 @@ public class EmailTemplateInfoServiceImpl implements EmailTemplateInfoService {
         emailTemplateDataRuleDO.setRow(dataRuleVO.getRow());
         emailTemplateDataRuleDO.setPosition(dataRuleVO.getPosition());
         emailTemplateDataRuleDO.setUnitConvert(dataRuleVO.getUnitConvert());
+        emailTemplateDataRuleDO.setFieldName(dataRuleVO.getFieldName());
         emailTemplateDataRuleDO.setIsvalid(1);
         emailTemplateDataRuleDO.setUpdaterId(userId);
         emailTemplateDataRuleDO.setUpdateTime(DateUtils.getNowDate());
@@ -182,7 +211,11 @@ public class EmailTemplateInfoServiceImpl implements EmailTemplateInfoService {
         emailDeletionInfoDO.setId(emailTemplateInfoVO.getId());
         emailDeletionInfoDO.setName(emailTemplateInfoVO.getName());
         emailDeletionInfoDO.setStatus(emailTemplateInfoVO.getStatus());
+        emailDeletionInfoDO.setDirection(emailTemplateInfoVO.getDirection());
+        emailDeletionInfoDO.setStartIndex(emailTemplateInfoVO.getStartIndex());
+        emailDeletionInfoDO.setEndIndex(emailTemplateInfoVO.getEndIndex());
         emailDeletionInfoDO.setDescription(emailTemplateInfoVO.getDescription());
+        emailDeletionInfoDO.setType(emailTemplateInfoVO.getType());
         emailDeletionInfoDO.setIsvalid(1);
         emailDeletionInfoDO.setUpdateTime(DateUtils.getNowDate());
         emailDeletionInfoDO.setUpdaterId(userId);

+ 23 - 2
service-manage/src/main/java/com/simuwang/manage/service/impl/EmailTemplateMappingServiceImpl.java

@@ -4,10 +4,12 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.EmailTemplateMappingMapper;
+import com.simuwang.base.pojo.dos.EmailTemplateInfoDO;
 import com.simuwang.base.pojo.dos.EmailTemplateMappingDO;
 import com.simuwang.base.pojo.dto.query.EmailTemplateSettingPageQuery;
 import com.simuwang.base.pojo.vo.EmailTemplateMappingVO;
 import com.simuwang.base.pojo.vo.IdListVO;
+import com.simuwang.base.pojo.vo.StatusVO;
 import com.simuwang.manage.service.EmailTemplateMappingService;
 import com.simuwang.shiro.utils.UserUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,12 +47,30 @@ public class EmailTemplateMappingServiceImpl implements EmailTemplateMappingServ
     public void saveTemplateSetting(EmailTemplateMappingVO emailTemplateMappingVO) {
         EmailTemplateMappingDO emailTemplateMappingDO = toEmailTemplateMappingDO(emailTemplateMappingVO);
         if(StringUtil.isNull(emailTemplateMappingDO.getId())){
-            emailTemplateMappingMapper.updateEmailTemplateMappingDO(emailTemplateMappingDO);
-        }else{
             emailTemplateMappingMapper.saveEmailTemplateMappingDO(emailTemplateMappingDO);
+        }else{
+            emailTemplateMappingMapper.updateEmailTemplateMappingDO(emailTemplateMappingDO);
         }
     }
 
+
+    @Override
+    public void controlTemplateConfig(StatusVO statusVO) {
+        EmailTemplateMappingDO emailTemplateMappingDO = emailTemplateMappingMapper.searchTemplateById(statusVO.getId());
+        emailTemplateMappingDO.setStatus(statusVO.getStatus());
+        Integer userId = UserUtils.getLoginUser().getUserId();
+        emailTemplateMappingDO.setUpdaterId(userId);
+        emailTemplateMappingDO.setUpdateTime(DateUtils.getNowDate());
+        emailTemplateMappingMapper.updateEmailTemplateMappingDO(emailTemplateMappingDO);
+    }
+
+    @Override
+    public EmailTemplateMappingVO searchTemplateSetting(Integer id) {
+        EmailTemplateMappingDO emailTemplateMappingDO = emailTemplateMappingMapper.searchTemplateById(id);
+        EmailTemplateMappingVO vo = emailTemplateMappingDO.toVO();
+        return vo;
+    }
+
     private EmailTemplateMappingDO toEmailTemplateMappingDO(EmailTemplateMappingVO vo) {
         Integer userId = UserUtils.getLoginUser().getUserId();
         EmailTemplateMappingDO emailTemplateMappingDO = new EmailTemplateMappingDO();
@@ -61,6 +81,7 @@ public class EmailTemplateMappingServiceImpl implements EmailTemplateMappingServ
         emailTemplateMappingDO.setStatus(vo.getStatus());
         emailTemplateMappingDO.setTitle(vo.getTitle());
         emailTemplateMappingDO.setCompanyName(vo.getCompanyName());
+        emailTemplateMappingDO.setCompanyId(vo.getCompanyId());
         emailTemplateMappingDO.setUpdateTime(DateUtils.getNowDate());
         emailTemplateMappingDO.setIsvalid(1);
         emailTemplateMappingDO.setUpdaterId(userId);

+ 47 - 42
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysConfigServiceImpl.java

@@ -2,17 +2,24 @@ package com.simuwang.manage.service.impl.system;
 
 import com.simuwang.base.common.conts.UserConstants;
 import com.simuwang.base.common.exception.ServiceException;
+import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.text.Convert;
+import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.system.SysConfigMapper;
 import com.simuwang.base.pojo.dos.SysConfigDO;
+import com.simuwang.base.pojo.dto.query.ConfigPageQuery;
 import com.simuwang.base.pojo.vo.SysConfigVO;
 import com.simuwang.manage.service.system.SysConfigService;
+import com.simuwang.shiro.utils.UserUtils;
+import com.smppw.common.pojo.ResultVo;
+import com.smppw.common.pojo.enums.status.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * FileName: SysConfigServiceImpl
@@ -24,21 +31,6 @@ import java.util.List;
 public class SysConfigServiceImpl implements SysConfigService {
     @Autowired
     private SysConfigMapper sysConfigMapper;
-    @Override
-    public List<SysConfigDO> selectConfigList(SysConfigVO config) {
-        return sysConfigMapper.selectConfigList(config);
-    }
-
-    @Override
-    public int insertConfig(SysConfigVO config) {
-        return 0;
-    }
-
-    @Override
-    public SysConfigDO selectConfigById(Long configId) {
-        SysConfigDO sysConfigDO = sysConfigMapper.selectConfigById(configId);
-        return sysConfigDO;
-    }
 
     @Override
     public boolean checkConfigKeyUnique(SysConfigVO config) {
@@ -51,41 +43,54 @@ public class SysConfigServiceImpl implements SysConfigService {
         return UserConstants.UNIQUE;
     }
 
+    @Override
+    public MybatisPage<SysConfigVO> searchConfigList(ConfigPageQuery query) {
+        List<SysConfigDO> sysConfigDOList = sysConfigMapper.selectConfigList(query);
+        List<SysConfigVO> sysConfigVOList = sysConfigDOList.stream().map(SysConfigDO::toVO).collect(Collectors.toList());
+        long total = sysConfigMapper.countConfigList(query);
+        return MybatisPage.of(total,sysConfigVOList);
+    }
 
     @Override
-    public void deleteConfigByIds(String ids) {
-        Long[] configIds = Convert.toLongArray(ids);
-        for (Long configId : configIds)
-        {
-            SysConfigDO config = selectConfigById(configId);
-            if (StringUtil.equals(UserConstants.YES, config.getConfigType()))
-            {
-                throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
-            }
-            sysConfigMapper.deleteConfigById(configId);
-        }
+    public void deleteConfigList(List<Integer> configIdList) {
+        Integer userId = UserUtils.getLoginUser().getUserId();
+        sysConfigMapper.deleteConfigByIds(configIdList,userId);
     }
 
     @Override
-    public int updateConfig(SysConfigVO config) {
-        SysConfigDO temp = sysConfigMapper.selectConfigById(config.getConfigId());
-        temp.setUpdateTime(new Date());
-        temp.setConfigKey(config.getConfigKey());
-        temp.setConfigType(config.getConfigType());
-        temp.setConfigValue(config.getConfigValue());
-        temp.setConfigName(config.getConfigName());
-        return sysConfigMapper.updateConfig(temp);
+    public SysConfigVO searchConfigById(Integer configId) {
+        SysConfigDO SysConfigVO = sysConfigMapper.selectConfigById(configId);
+        return SysConfigVO.toVO();
     }
 
     @Override
-    public String getKey(String configKey) {
-        SysConfigVO config = new SysConfigVO();
-        config.setConfigKey(configKey);
-        SysConfigDO retConfig = sysConfigMapper.selectConfig(config);
-        if (StringUtil.isNotNull(retConfig))
-        {
-            return retConfig.getConfigValue();
+    public ResultVo saveConfig(SysConfigVO sysConfigVO) {
+        Integer userId = UserUtils.getLoginUser().getUserId();
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS);
+        vo.setData(true);
+        if(sysConfigVO.getConfigId() == null && !checkConfigKeyUnique(sysConfigVO)){
+            vo.setMsg("已存在相同的参数配置信息,无须重复添加");
+            vo.setData(false);
+            return vo;
+        }
+        SysConfigDO sysConfigDO = new SysConfigDO();
+        sysConfigDO.setConfigId(sysConfigVO.getConfigId());
+        sysConfigDO.setConfigValue(sysConfigVO.getConfigValue());
+        sysConfigDO.setConfigName(sysConfigVO.getConfigName());
+        sysConfigDO.setConfigKey(sysConfigVO.getConfigKey());
+        sysConfigDO.setIsvalid(1);
+        sysConfigDO.setConfigType(sysConfigVO.getConfigType());
+        sysConfigDO.setRemark(sysConfigVO.getRemark());
+        sysConfigDO.setUpdaterId(userId);
+        sysConfigDO.setUpdateTime(DateUtils.getNowDate());
+        if(sysConfigVO.getConfigId() == null){
+            sysConfigDO.setCreatorId(userId);
+            sysConfigDO.setCreateTime(DateUtils.getNowDate());
+            sysConfigMapper.insertConfig(sysConfigDO);
+        }else{
+            sysConfigMapper.updateConfig(sysConfigDO);
         }
-        return StringUtil.EMPTY;
+        return vo;
     }
+
 }

+ 8 - 8
service-manage/src/main/java/com/simuwang/manage/service/system/SysConfigService.java

@@ -1,7 +1,10 @@
 package com.simuwang.manage.service.system;
 
+import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dos.SysConfigDO;
+import com.simuwang.base.pojo.dto.query.ConfigPageQuery;
 import com.simuwang.base.pojo.vo.SysConfigVO;
+import com.smppw.common.pojo.ResultVo;
 
 import java.util.List;
 
@@ -12,17 +15,14 @@ import java.util.List;
  * Description: ${DESCRIPTION}
  */
 public interface SysConfigService {
-    List<SysConfigDO> selectConfigList(SysConfigVO config);
-
-    int insertConfig(SysConfigVO config);
-
-    SysConfigDO selectConfigById(Long configId);
 
     boolean checkConfigKeyUnique(SysConfigVO config);
 
-    void deleteConfigByIds(String ids);
+    MybatisPage<SysConfigVO> searchConfigList(ConfigPageQuery query);
+
+    void deleteConfigList(List<Integer> configIdList);
 
-    int updateConfig(SysConfigVO config);
+    SysConfigVO searchConfigById(Integer configId);
 
-    String getKey(String configKey);
+    ResultVo saveConfig(SysConfigVO sysConfigVO);
 }