Browse Source

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

wangzaijun 7 months ago
parent
commit
532d3cbfed
40 changed files with 612 additions and 93 deletions
  1. 5 5
      service-base/src/main/java/com/simuwang/base/common/enums/EmailCron.java
  2. 2 2
      service-base/src/main/java/com/simuwang/base/config/ShiroConfig.java
  3. 18 1
      service-base/src/main/java/com/simuwang/base/config/ThreadPoolConfig.java
  4. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/AssetMapper.java
  5. 3 0
      service-base/src/main/java/com/simuwang/base/mapper/EmailParseInfoMapper.java
  6. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/FundAliasMapper.java
  7. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/MailboxInfoMapper.java
  8. 1 0
      service-base/src/main/java/com/simuwang/base/mapper/NavMapper.java
  9. 19 2
      service-base/src/main/java/com/simuwang/base/pojo/dos/MailboxInfoDO.java
  10. 46 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/EmailInfoDTO.java
  11. 2 2
      service-base/src/main/java/com/simuwang/base/pojo/valuation/AssetsValuationDetails.java
  12. 31 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundAssetVO.java
  13. 31 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundNavVO.java
  14. 2 2
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundReportFrequencyVO.java
  15. 1 1
      service-base/src/main/java/com/simuwang/base/pojo/vo/MailboxInfoTableVO.java
  16. 1 1
      service-base/src/main/java/com/simuwang/base/pojo/vo/MailboxInfoVO.java
  17. 17 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/OpenStatusVO.java
  18. 6 0
      service-base/src/main/resources/mapper/AssetMapper.xml
  19. 18 0
      service-base/src/main/resources/mapper/EmailParseInfoMapper.xml
  20. 5 1
      service-base/src/main/resources/mapper/FundAliasMapper.xml
  21. 5 0
      service-base/src/main/resources/mapper/MailBoxInfoMapper.xml
  22. 9 0
      service-base/src/main/resources/mapper/NavMapper.xml
  23. 9 0
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiService.java
  24. 74 14
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiServiceImpl.java
  25. 15 1
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java
  26. 7 3
      service-daq/src/main/java/com/simuwang/daq/service/FundService.java
  27. 2 1
      service-daq/src/main/java/com/simuwang/daq/service/ValuationEmailParser.java
  28. 14 6
      service-daq/src/main/java/com/simuwang/daq/service/ValuationParseService.java
  29. 7 0
      service-deploy/src/main/test/java/com/simuwang/datadaq/DataTrusteeApplicationTests.java
  30. 38 0
      service-manage/src/main/java/com/simuwang/manage/api/email/EmailAssetDetailController.java
  31. 41 10
      service-manage/src/main/java/com/simuwang/manage/api/email/EmailConfigController.java
  32. 3 12
      service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailDetailController.java
  33. 42 0
      service-manage/src/main/java/com/simuwang/manage/api/email/NavController.java
  34. 4 7
      service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailController.java
  35. 18 0
      service-manage/src/main/java/com/simuwang/manage/api/fund/FunAliasController.java
  36. 1 3
      service-manage/src/main/java/com/simuwang/manage/api/fund/FundInformationController.java
  37. 8 2
      service-manage/src/main/java/com/simuwang/manage/service/EmailConfigService.java
  38. 6 0
      service-manage/src/main/java/com/simuwang/manage/service/ParseEmailDetailService.java
  39. 32 8
      service-manage/src/main/java/com/simuwang/manage/service/impl/EmailConfigServiceImpl.java
  40. 63 9
      service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailDetailServiceImpl.java

+ 5 - 5
service-base/src/main/java/com/simuwang/base/common/enums/EmailCron.java

@@ -9,18 +9,18 @@ import java.util.stream.Stream;
  * Description: ${DESCRIPTION}
  * Description: ${DESCRIPTION}
  */
  */
 public enum EmailCron {
 public enum EmailCron {
-    EVERY_HOUR("1", "0 0 0/1 * * *"), ONE_AM("2", "0 0 13 * * *");
+    EVERY_HOUR(1, "0 0 0/1 * * *"), ONE_AM(2, "0 0 1 * * *");
 
 
-    private final String text;
+    private final Integer text;
     private final String cron;
     private final String cron;
 
 
-    EmailCron(String text, String cron)
+    EmailCron(Integer text, String cron)
     {
     {
         this.text = text;
         this.text = text;
         this.cron = cron;
         this.cron = cron;
     }
     }
 
 
-    public static EmailCron getEmailCronByText(String text) {
+    public static EmailCron getEmailCronByText(Integer text) {
         if (null == text){
         if (null == text){
             return null;
             return null;
         }
         }
@@ -36,7 +36,7 @@ public enum EmailCron {
         return Stream.of(EmailCron.values()).filter(e -> e.cron.equals(cron)).findFirst().orElse(null);
         return Stream.of(EmailCron.values()).filter(e -> e.cron.equals(cron)).findFirst().orElse(null);
     }
     }
 
 
-    public String getText()
+    public Integer getText()
     {
     {
         return text;
         return text;
     }
     }

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

@@ -149,8 +149,8 @@ public class ShiroConfig {
         map.put("/v1/login", "anon");
         map.put("/v1/login", "anon");
         map.put("/v1/rsa-key", "anon");
         map.put("/v1/rsa-key", "anon");
         map.put("/test/**", "anon");
         map.put("/test/**", "anon");
-        map.put("/v1/**", "jwt");
-        map.put("/**", "jwt");
+        map.put("/v1/**", "anon");
+        map.put("/**", "anon");
         return map;
         return map;
     }
     }
 
 

+ 18 - 1
service-base/src/main/java/com/simuwang/base/config/ThreadPoolConfig.java

@@ -15,7 +15,7 @@ public class ThreadPoolConfig {
     public ThreadPoolTaskExecutor valuationExecutor() {
     public ThreadPoolTaskExecutor valuationExecutor() {
         ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
         ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
         int cpuSize = Runtime.getRuntime().availableProcessors();
         int cpuSize = Runtime.getRuntime().availableProcessors();
-        cpuSize = Math.max(cpuSize, 1);
+        cpuSize = Math.max(cpuSize/2, 1);
 
 
         taskExecutor.setCorePoolSize(cpuSize);
         taskExecutor.setCorePoolSize(cpuSize);
         taskExecutor.setMaxPoolSize(50);
         taskExecutor.setMaxPoolSize(50);
@@ -32,4 +32,21 @@ public class ThreadPoolConfig {
         return taskExecutor;
         return taskExecutor;
     }
     }
 
 
+    @Bean("asyncExecutor")
+    public ThreadPoolTaskExecutor asyncExecutor() {
+        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+        taskExecutor.setCorePoolSize(2);
+        taskExecutor.setMaxPoolSize(50);
+        taskExecutor.setQueueCapacity(50);
+        taskExecutor.setKeepAliveSeconds(60);
+        taskExecutor.setThreadNamePrefix("asyncExecutor--");
+        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+        taskExecutor.setAwaitTerminationSeconds(60);
+
+        // 修改拒绝策略为使用当前线程执行
+        taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 初始化线程池
+        taskExecutor.initialize();
+        return taskExecutor;
+    }
 }
 }

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

@@ -1,6 +1,7 @@
 package com.simuwang.base.mapper;
 package com.simuwang.base.mapper;
 
 
 import com.simuwang.base.pojo.dos.AssetDO;
 import com.simuwang.base.pojo.dos.AssetDO;
+import com.simuwang.base.pojo.vo.FundAssetVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -15,4 +16,5 @@ public interface AssetMapper {
 
 
     List<String> queryFundNavByDate(@Param("fundId") String fundId, @Param("priceDateList") List<String> priceDateList);
     List<String> queryFundNavByDate(@Param("fundId") String fundId, @Param("priceDateList") List<String> priceDateList);
 
 
+    AssetDO queryFundAsset(AssetDO fundAssetVO);
 }
 }

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

@@ -1,6 +1,7 @@
 package com.simuwang.base.mapper;
 package com.simuwang.base.mapper;
 
 
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
+import com.simuwang.base.pojo.dto.EmailInfoDTO;
 import com.simuwang.base.pojo.dto.query.EmailParseQuery;
 import com.simuwang.base.pojo.dto.query.EmailParseQuery;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -27,4 +28,6 @@ public interface EmailParseInfoMapper {
     long countEmailList(EmailParseQuery emailParseQuery);
     long countEmailList(EmailParseQuery emailParseQuery);
 
 
     void updateParseTime(@Param("id") Integer id, @Param("parseDate") Date parseDate);
     void updateParseTime(@Param("id") Integer id, @Param("parseDate") Date parseDate);
+
+    List<EmailInfoDTO> queryValuationEmailByFileId(@Param("fileIdList") List<Integer> fileIdList);
 }
 }

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

@@ -14,4 +14,6 @@ public interface FundAliasMapper {
     List<FundAliasDO> queryFundByName(@Param("fundName") String fundName);
     List<FundAliasDO> queryFundByName(@Param("fundName") String fundName);
 
 
     List<FundAliasDO> queryFundByRegisterNumber(@Param("registerNumber") String registerNumber);
     List<FundAliasDO> queryFundByRegisterNumber(@Param("registerNumber") String registerNumber);
+
+    void insert(@Param("fundName") String fundName, @Param("registerNumber") String registerNumber);
 }
 }

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

@@ -26,4 +26,6 @@ public interface MailboxInfoMapper extends BaseMapper<MailboxInfoDO> {
     MailboxInfoDO checkEmailUnique(@Param("email") String email);
     MailboxInfoDO checkEmailUnique(@Param("email") String email);
 
 
     long countEmailConfig(EmailPageQuery emailPageQuery);
     long countEmailConfig(EmailPageQuery emailPageQuery);
+
+    MailboxInfoDO searchEmailConfigById(@Param("id")Integer id);
 }
 }

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

@@ -15,4 +15,5 @@ public interface NavMapper {
 
 
     List<String> queryFundNavByDate(@Param("fundId") String fundId, @Param("priceDateList") List<String> priceDateList);
     List<String> queryFundNavByDate(@Param("fundId") String fundId, @Param("priceDateList") List<String> priceDateList);
 
 
+    NavDO queryFundNav(NavDO navDO);
 }
 }

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

@@ -3,7 +3,9 @@ package com.simuwang.base.pojo.dos;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.simuwang.base.common.enums.EmailCron;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
+import com.simuwang.base.pojo.vo.MailboxInfoVO;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.util.Date;
 import java.util.Date;
@@ -93,13 +95,28 @@ public class MailboxInfoDO {
     private Date updateTime;
     private Date updateTime;
 
 
 
 
-    public MailboxInfoTableVO toVo() {
+    public MailboxInfoTableVO toTableVo() {
         MailboxInfoTableVO vo =new MailboxInfoTableVO();
         MailboxInfoTableVO vo =new MailboxInfoTableVO();
-        vo.setCron(this.cron);
+        vo.setCron(EmailCron.getEmailCronByCron(this.cron).getText());
         vo.setId(this.id);
         vo.setId(this.id);
         vo.setEmail(this.email);
         vo.setEmail(this.email);
         vo.setDescription(this.description);
         vo.setDescription(this.description);
         vo.setOpenStatus(this.openStatus);
         vo.setOpenStatus(this.openStatus);
         return vo;
         return vo;
     }
     }
+
+    public MailboxInfoVO toVo() {
+        MailboxInfoVO vo =new MailboxInfoVO();
+        vo.setCron(EmailCron.getEmailCronByCron(this.cron).getText());
+        vo.setId(this.id);
+        vo.setEmail(this.email);
+        vo.setDescription(this.description);
+        vo.setOpenStatus(this.openStatus);
+        vo.setPort(this.port);
+        vo.setServer(this.server);
+        vo.setProtocol(this.protocol);
+        vo.setType(this.type);
+        vo.setPassword(this.password);
+        return vo;
+    }
 }
 }

+ 46 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/EmailInfoDTO.java

@@ -0,0 +1,46 @@
+package com.simuwang.base.pojo.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class EmailInfoDTO {
+    /**
+     * 邮件id
+     */
+    private Integer id;
+    /**
+     * 文件id
+     */
+    private Integer fileId;
+    /**
+     * 邮箱地址
+     */
+    private String email;
+    /**
+     * 邮箱日期
+     */
+    private Date emailDate;
+    /**
+     * 邮件主题
+     */
+    private String emailTitle;
+    /**
+     * 邮件类型,1-净值,2-估值表,3-定期报告
+     */
+    private Integer emailType;
+    /**
+     * 解析状态
+     */
+    private Integer parseStatus;
+    /**
+     * 文件名称
+     */
+    private String fileName;
+
+    /**
+     * 文件地址
+     */
+    private String filePath;
+}

+ 2 - 2
service-base/src/main/java/com/simuwang/base/pojo/valuation/AssetsValuationDetails.java

@@ -135,7 +135,7 @@ public class AssetsValuationDetails {
 		this.type = type;
 		this.type = type;
 	}
 	}
 
 
-	public double getTotalMarketValue() {
+	public Double getTotalMarketValue() {
 		return totalMarketValue;
 		return totalMarketValue;
 	}
 	}
 
 
@@ -143,7 +143,7 @@ public class AssetsValuationDetails {
 		this.totalMarketValue = totalMarketValue;
 		this.totalMarketValue = totalMarketValue;
 	}
 	}
 
 
-	public double getNetAssetsValue() {
+	public Double getNetAssetsValue() {
 		return netAssetsValue;
 		return netAssetsValue;
 	}
 	}
 
 

+ 31 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/FundAssetVO.java

@@ -0,0 +1,31 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * FileName: NavAssetVo
+ * Author:   chenjianhua
+ * Date:     2024/9/14 11:11
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class FundAssetVO {
+    /**
+     * 基金id
+     */
+    private String fundId;
+    /**
+     * 规模日期
+     */
+    private String priceDate;
+    /**
+     * 资产份额
+     */
+    private BigDecimal assetShare;
+    /**
+     * 资产净值(基金规模)
+     */
+    private BigDecimal assetNet;
+}

+ 31 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/FundNavVO.java

@@ -0,0 +1,31 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * FileName: NavAssetVo
+ * Author:   chenjianhua
+ * Date:     2024/9/14 11:11
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class FundNavVO {
+    /**
+     * 基金id
+     */
+    private String fundId;
+    /**
+     * 规模日期
+     */
+    private String priceDate;
+    /**
+     * 单位净值
+     */
+    private BigDecimal nav;
+    /**
+     * 累计单位净值
+     */
+    private BigDecimal cumulativeNavWithdrawal;
+}

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

@@ -20,11 +20,11 @@ public class FundReportFrequencyVO {
      */
      */
     private String fundId;
     private String fundId;
     /**
     /**
-     * 净值报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频
+     * 净值报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频,-1无固定
      */
      */
     private Integer navFrequency;
     private Integer navFrequency;
     /**
     /**
-     * 规模报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频
+     * 规模报送频率,1-日频,2-周频,3-月频,4-季频,5-半年,6-年频,-1无固定
      */
      */
     private Integer assetFrequency;
     private Integer assetFrequency;
     /**
     /**

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/vo/MailboxInfoTableVO.java

@@ -15,7 +15,7 @@ public class MailboxInfoTableVO {
     /**
     /**
      * cron表达式
      * cron表达式
      */
      */
-    private String cron;
+    private Integer cron;
     /**
     /**
      * 是否开启,0-不开启,1-开启
      * 是否开启,0-不开启,1-开启
      */
      */

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/vo/MailboxInfoVO.java

@@ -40,7 +40,7 @@ public class MailboxInfoVO {
     /**
     /**
      * cron表达式
      * cron表达式
      */
      */
-    private String cron;
+    private Integer cron;
     /**
     /**
      * 是否开启,0-不开启,1-开启
      * 是否开启,0-不开启,1-开启
      */
      */

+ 17 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/OpenStatusVO.java

@@ -0,0 +1,17 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: OpenStatusVO
+ * Author:   chenjianhua
+ * Date:     2024/9/14 11:57
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class OpenStatusVO {
+
+    private Integer openStatus;
+
+    private Integer id;
+}

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

@@ -48,5 +48,11 @@
             #{priceDate}
             #{priceDate}
         </foreach>
         </foreach>
     </select>
     </select>
+    <select id="queryFundAsset" resultMap="BaseResultMap"
+            parameterType="com.simuwang.base.pojo.dos.AssetDO">
+        select id,fund_id,price_date,asset_net,asset_share,
+               isvalid, creatorid, createtime, updaterid, updatetime
+        from PPW_EMAIL.asset where isvalid=1 and fund_id=#{fundId} and price_date=#{priceDate}
+    </select>
 
 
 </mapper>
 </mapper>

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

@@ -124,5 +124,23 @@
           and id = #{id}
           and id = #{id}
     </update>
     </update>
 
 
+    <select id="queryValuationEmailByFileId" resultType="com.simuwang.base.pojo.dto.EmailInfoDTO">
+        select t1.id as id,
+               t1.email as email,
+               t1.email_date as emailDate,
+               t1.email_title as emailTitle,
+               t1.email_type as emailType,
+               t2.id as fileId,
+               t2.file_name as fileName,
+               t2.file_path as filePath
+        from PPW_EMAIL.email_parse_info t1
+        join PPW_EMAIL.email_file_info t2 on t1.id = t2.email_id and t2.isvalid = 1
+        where t1.isvalid = 1
+          and t1.email_type = 2
+          and t2.id in
+        <foreach collection="fileIdList" item="fileId" index="index" open="(" separator="," close=")">
+        #{fileId}
+        </foreach>
+    </select>
 
 
 </mapper>
 </mapper>

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

@@ -15,7 +15,6 @@
         <result column="updatetime" property="updateTime"/>
         <result column="updatetime" property="updateTime"/>
     </resultMap>
     </resultMap>
 
 
-
     <select id="queryFundByNameAndRegisterNumber" resultMap="BaseResultMap">
     <select id="queryFundByNameAndRegisterNumber" resultMap="BaseResultMap">
         select target_fund_id, target_fund_name, target_register_number
         select target_fund_id, target_fund_name, target_register_number
         from PPW_EMAIL.fund_alias
         from PPW_EMAIL.fund_alias
@@ -38,4 +37,9 @@
           and source_register_number = #{registerNumber}
           and source_register_number = #{registerNumber}
     </select>
     </select>
 
 
+    <insert id="insert">
+        insert into PPW_EMAIL.fund_alias(source_fund_name, source_register_number)
+        values (#{fundName}, #{registerNumber})
+    </insert>
+
 </mapper>
 </mapper>

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

@@ -55,5 +55,10 @@
             and email like concat('%',#{email},'%')
             and email like concat('%',#{email},'%')
         </if>
         </if>
     </select>
     </select>
+    <select id="searchEmailConfigById" resultMap="BaseResultMap"
+            parameterType="java.lang.Integer">
+        <include refid="selectConfigVo"/>
+        where id = #{id}
+    </select>
 
 
 </mapper>
 </mapper>

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

@@ -50,6 +50,15 @@
             #{priceDate}
             #{priceDate}
         </foreach>
         </foreach>
     </select>
     </select>
+    <select id="queryFundNav" resultMap="BaseResultMap"
+            parameterType="com.simuwang.base.pojo.dos.NavDO">
+        SELECT id, fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
+               isvalid, creatorid, createtime, updaterid, updatetime
+        from PPW_EMAIL.nav
+        where isvalid = 1
+          and fund_id = #{fundId}
+          and price_date=#{priceDate}
+    </select>
 
 
 
 
 </mapper>
 </mapper>

+ 9 - 0
service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiService.java

@@ -3,6 +3,7 @@ package com.simuwang.daq.service;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
 
 
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * @author mozuwen
  * @author mozuwen
@@ -27,4 +28,12 @@ public interface EmailParseApiService {
      */
      */
     void reparseEmail(Integer emailId);
     void reparseEmail(Integer emailId);
 
 
+
+    /**
+     * 重新解析指定估值表文件
+     *
+     * @param fileIdList 文件id列表
+     */
+    void reparseFile(List<Integer> fileIdList);
+
 }
 }

+ 74 - 14
service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiServiceImpl.java

@@ -13,9 +13,12 @@ import com.simuwang.base.pojo.dos.EmailFileInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
 import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
 import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
 import com.simuwang.base.pojo.dto.EmailFundNavDTO;
 import com.simuwang.base.pojo.dto.EmailFundNavDTO;
+import com.simuwang.base.pojo.dto.EmailInfoDTO;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.io.BufferedReader;
 import java.io.BufferedReader;
@@ -24,6 +27,7 @@ import java.io.IOException;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @author mozuwen
  * @author mozuwen
@@ -38,12 +42,14 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
     private final EmailParseService emailParseService;
     private final EmailParseService emailParseService;
     private final EmailParseInfoMapper emailParseInfoMapper;
     private final EmailParseInfoMapper emailParseInfoMapper;
     private final EmailFileInfoMapper emailFileInfoMapper;
     private final EmailFileInfoMapper emailFileInfoMapper;
+    private final ThreadPoolTaskExecutor asyncExecutor;
 
 
     public EmailParseApiServiceImpl(EmailParseService emailParseService, EmailParseInfoMapper emailParseInfoMapper,
     public EmailParseApiServiceImpl(EmailParseService emailParseService, EmailParseInfoMapper emailParseInfoMapper,
-                                    EmailFileInfoMapper emailFileInfoMapper) {
+                                    EmailFileInfoMapper emailFileInfoMapper, @Qualifier("asyncExecutor") ThreadPoolTaskExecutor asyncExecutor) {
         this.emailParseService = emailParseService;
         this.emailParseService = emailParseService;
         this.emailParseInfoMapper = emailParseInfoMapper;
         this.emailParseInfoMapper = emailParseInfoMapper;
         this.emailFileInfoMapper = emailFileInfoMapper;
         this.emailFileInfoMapper = emailFileInfoMapper;
+        this.asyncExecutor = asyncExecutor;
     }
     }
 
 
     @Override
     @Override
@@ -74,24 +80,78 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
 
 
         List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
         List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
         Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
         Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
-        for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
-            try {
-                List<EmailFundNavDTO> fundNavDTOList = emailParseService.parseEmail(emailContentInfoDTO, emailFieldMap);
-                fileNameNavMap.put(emailContentInfoDTO, fundNavDTOList);
-                emailFundNavDTOList.addAll(fundNavDTOList);
-            } catch (Exception e) {
-                log.error("重新解析邮件失败,邮件id:{},堆栈信息:{}", emailId, ExceptionUtil.stacktraceToString(e));
+        asyncExecutor.execute(() -> {
+            for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
+                try {
+                    List<EmailFundNavDTO> fundNavDTOList = emailParseService.parseEmail(emailContentInfoDTO, emailFieldMap);
+                    fileNameNavMap.put(emailContentInfoDTO, fundNavDTOList);
+                    emailFundNavDTOList.addAll(fundNavDTOList);
+                } catch (Exception e) {
+                    log.error("重新解析邮件失败,邮件id:{},堆栈信息:{}", emailId, ExceptionUtil.stacktraceToString(e));
+                }
             }
             }
+            // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
+            emailParseService.saveRelatedTable(emailParseInfoDO.getEmail(), emailContentInfoDTOList, fileNameNavMap);
+        });
+    }
+
+    @Override
+    public void reparseFile(List<Integer> fileIdList) {
+        if (CollUtil.isEmpty(fileIdList)) {
+            return;
+        }
+        List<EmailInfoDTO> emailParseInfoDOList = emailParseInfoMapper.queryValuationEmailByFileId(fileIdList);
+        if (CollUtil.isEmpty(emailParseInfoDOList)) {
+            return;
         }
         }
-        // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
-        emailParseService.saveRelatedTable(emailParseInfoDO.getEmail(), emailContentInfoDTOList, fileNameNavMap);
+        asyncExecutor.execute(() -> {
+            Map<Integer, List<EmailInfoDTO>> emailIdFileMap = emailParseInfoDOList.stream().collect(Collectors.groupingBy(EmailInfoDTO::getId));
+            for (Map.Entry<Integer, List<EmailInfoDTO>> entry : emailIdFileMap.entrySet()) {
+                Integer emailId = entry.getKey();
+                List<EmailInfoDTO> emailInfoDTOList = entry.getValue();
+                String emailAddress = emailInfoDTOList.get(0).getEmail();
+                List<EmailContentInfoDTO> emailContentInfoDTOList = emailInfoDTOList.stream().map(this::buildEmailContentInfoDTO).collect(Collectors.toList());
+
+                List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
+                Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
+                for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
+                    try {
+                        log.info("开始重新解析文件 -> 文件id:{}", emailContentInfoDTO.getFielId());
+                        List<EmailFundNavDTO> fundNavDTOList = emailParseService.parseEmail(emailContentInfoDTO, MapUtil.newHashMap());
+                        fileNameNavMap.put(emailContentInfoDTO, fundNavDTOList);
+                        emailFundNavDTOList.addAll(fundNavDTOList);
+                    } catch (Exception e) {
+                        log.error("重新解析文件失败,邮件id:{},文件id:{},堆栈信息:{}", emailId, emailContentInfoDTO.getFielId(), ExceptionUtil.stacktraceToString(e));
+                    }
+                }
+                // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
+                emailParseService.saveRelatedTable(emailAddress, emailContentInfoDTOList, fileNameNavMap);
+            }
+            log.info("重新解析文件结束... -> 文件id:{}", fileIdList);
+        });
+    }
+
+    private EmailContentInfoDTO buildEmailContentInfoDTO(EmailInfoDTO emailInfoDTO) {
+        String emailDate = DateUtil.format(emailInfoDTO.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS);
+        String parseDate = DateUtil.format(new Date(), DateConst.YYYY_MM_DD_HH_MM_SS);
+        EmailContentInfoDTO contentInfoDTO = new EmailContentInfoDTO();
+        contentInfoDTO.setEmailId(emailInfoDTO.getId());
+        contentInfoDTO.setFielId(emailInfoDTO.getFileId());
+        contentInfoDTO.setEmailAddress(emailInfoDTO.getEmail());
+        contentInfoDTO.setEmailDate(emailDate);
+        contentInfoDTO.setEmailTitle(emailInfoDTO.getEmailTitle());
+        contentInfoDTO.setParseDate(parseDate);
+        contentInfoDTO.setFileName(emailInfoDTO.getFileName());
+        contentInfoDTO.setFilePath(emailInfoDTO.getFilePath());
+        contentInfoDTO.setEmailType(emailInfoDTO.getEmailType());
+        return contentInfoDTO;
     }
     }
 
 
-    private List<EmailContentInfoDTO> buildEmailContentInfoDTO(Integer emailId, EmailParseInfoDO emailParseInfoDO, List<EmailFileInfoDO> emailParseInfoDOList, Map<Integer, List<String>> emailTypeMap) {
+    private List<EmailContentInfoDTO> buildEmailContentInfoDTO(Integer emailId, EmailParseInfoDO emailParseInfoDO, List<EmailFileInfoDO> emailFileInfoDOList, Map<Integer, List<String>> emailTypeMap) {
         List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
         List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
         String emailDate = DateUtil.format(emailParseInfoDO.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS);
         String emailDate = DateUtil.format(emailParseInfoDO.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS);
         String parseDate = DateUtil.format(new Date(), DateConst.YYYY_MM_DD_HH_MM_SS);
         String parseDate = DateUtil.format(new Date(), DateConst.YYYY_MM_DD_HH_MM_SS);
-        for (EmailFileInfoDO fileInfoDO : emailParseInfoDOList) {
+        for (EmailFileInfoDO fileInfoDO : emailFileInfoDOList) {
             EmailContentInfoDTO contentInfoDTO = new EmailContentInfoDTO();
             EmailContentInfoDTO contentInfoDTO = new EmailContentInfoDTO();
             contentInfoDTO.setEmailId(emailId);
             contentInfoDTO.setEmailId(emailId);
             contentInfoDTO.setFielId(fileInfoDO.getId());
             contentInfoDTO.setFielId(fileInfoDO.getId());
@@ -103,14 +163,14 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
             contentInfoDTO.setFilePath(fileInfoDO.getFilePath());
             contentInfoDTO.setFilePath(fileInfoDO.getFilePath());
             Integer emailType = EmailUtil.getEmailTypeBySubject(emailParseInfoDO.getEmailTitle(), emailTypeMap);
             Integer emailType = EmailUtil.getEmailTypeBySubject(emailParseInfoDO.getEmailTitle(), emailTypeMap);
             contentInfoDTO.setEmailType(emailType);
             contentInfoDTO.setEmailType(emailType);
-            String emailContent = getEmailContent(fileInfoDO.getFilePath());
+            String emailContent = readHtmlFileContent(fileInfoDO.getFilePath());
             contentInfoDTO.setEmailContent(emailContent);
             contentInfoDTO.setEmailContent(emailContent);
             emailContentInfoDTOList.add(contentInfoDTO);
             emailContentInfoDTOList.add(contentInfoDTO);
         }
         }
         return emailContentInfoDTOList;
         return emailContentInfoDTOList;
     }
     }
 
 
-    public static String getEmailContent(String filePath) {
+    public static String readHtmlFileContent(String filePath) {
         if (StrUtil.isNotBlank(filePath) && filePath.endsWith("html")) {
         if (StrUtil.isNotBlank(filePath) && filePath.endsWith("html")) {
             StringBuilder content = new StringBuilder();
             StringBuilder content = new StringBuilder();
             try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
             try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {

+ 15 - 1
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -59,12 +59,14 @@ public class EmailParseService {
     private final AssetMapper assetMapper;
     private final AssetMapper assetMapper;
     private final NavMapper navMapper;
     private final NavMapper navMapper;
     private final FundService fundService;
     private final FundService fundService;
+    private final FundAliasMapper fundAliasMapper;
 
 
     public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
     public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
                              EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
                              EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
                              EmailParseInfoMapper emailParseInfoMapper, EmailFileInfoMapper emailFileInfoMapper,
                              EmailParseInfoMapper emailParseInfoMapper, EmailFileInfoMapper emailFileInfoMapper,
                              EmailFundNavMapper emailFundNavMapper, EmailFundAssetMapper emailFundAssetMapper,
                              EmailFundNavMapper emailFundNavMapper, EmailFundAssetMapper emailFundAssetMapper,
-                             AssetMapper assetMapper, NavMapper navMapper, FundService fundService) {
+                             AssetMapper assetMapper, NavMapper navMapper, FundService fundService,
+                             FundAliasMapper fundAliasMapper) {
         this.emailTypeRuleMapper = emailTypeRuleMapper;
         this.emailTypeRuleMapper = emailTypeRuleMapper;
         this.emailRuleConfig = emailRuleConfig;
         this.emailRuleConfig = emailRuleConfig;
         this.emailFieldMapper = emailFieldMapper;
         this.emailFieldMapper = emailFieldMapper;
@@ -76,6 +78,7 @@ public class EmailParseService {
         this.assetMapper = assetMapper;
         this.assetMapper = assetMapper;
         this.navMapper = navMapper;
         this.navMapper = navMapper;
         this.fundService = fundService;
         this.fundService = fundService;
+        this.fundAliasMapper = fundAliasMapper;
     }
     }
 
 
     /**
     /**
@@ -359,6 +362,8 @@ public class EmailParseService {
         if (CollUtil.isEmpty(fundNavDTO.getFundIdList())) {
         if (CollUtil.isEmpty(fundNavDTO.getFundIdList())) {
             List<String> fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
             List<String> fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
             if (CollUtil.isEmpty(fundIdList)) {
             if (CollUtil.isEmpty(fundIdList)) {
+                // 判断是否写入别名管理表fund_alias
+                saveFundAlias(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
                 fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
                 fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
                 return;
                 return;
             }
             }
@@ -381,6 +386,15 @@ public class EmailParseService {
         fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
         fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
     }
     }
 
 
+    private void saveFundAlias(String fundName, String registerNumber) {
+        List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
+        if (CollUtil.isNotEmpty(fundAliasDOList)) {
+            return;
+        }
+        log.info("写入别名表 -> 基金名称:{},备案编码:{}", fundName, registerNumber);
+        fundAliasMapper.insert(fundName, registerNumber);
+    }
+
     private Integer saveEmailParseInfo(EmailParseInfoDO emailParseInfoDO) {
     private Integer saveEmailParseInfo(EmailParseInfoDO emailParseInfoDO) {
         if (emailParseInfoDO == null) {
         if (emailParseInfoDO == null) {
             return null;
             return null;

+ 7 - 3
service-daq/src/main/java/com/simuwang/daq/service/FundService.java

@@ -9,6 +9,7 @@ import com.simuwang.base.pojo.dos.FundInfoDO;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @Service
 @Service
@@ -49,7 +50,7 @@ public class FundService {
         }
         }
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
         if (CollUtil.isNotEmpty(fundAliasDOList)) {
         if (CollUtil.isNotEmpty(fundAliasDOList)) {
-            return fundAliasDOList.stream().map(this::convertToFundInfoDO).collect(Collectors.toList());
+            return fundAliasDOList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
         }
         }
         // 2.基金名称匹配
         // 2.基金名称匹配
         if (StrUtil.isNotBlank(fundName)) {
         if (StrUtil.isNotBlank(fundName)) {
@@ -59,7 +60,7 @@ public class FundService {
             }
             }
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
             if (CollUtil.isNotEmpty(fundAliasList)) {
             if (CollUtil.isNotEmpty(fundAliasList)) {
-                return fundAliasList.stream().map(this::convertToFundInfoDO).collect(Collectors.toList());
+                return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
             }
             }
         }
         }
         // 3.备案编码匹配
         // 3.备案编码匹配
@@ -70,13 +71,16 @@ public class FundService {
             }
             }
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
             if (CollUtil.isNotEmpty(fundAliasList)) {
             if (CollUtil.isNotEmpty(fundAliasList)) {
-                return fundAliasList.stream().map(this::convertToFundInfoDO).collect(Collectors.toList());
+                return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
             }
             }
         }
         }
         return CollUtil.newArrayList();
         return CollUtil.newArrayList();
     }
     }
 
 
     public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
     public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
+        if (fundAliasDO == null || StrUtil.isBlank(fundAliasDO.getTargetFundId())) {
+            return null;
+        }
         FundInfoDO fundInfoDO = new FundInfoDO();
         FundInfoDO fundInfoDO = new FundInfoDO();
         fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
         fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
         fundInfoDO.setFundName(fundAliasDO.getTargetFundName());
         fundInfoDO.setFundName(fundAliasDO.getTargetFundName());

+ 2 - 1
service-daq/src/main/java/com/simuwang/daq/service/ValuationEmailParser.java

@@ -53,7 +53,8 @@ public class ValuationEmailParser extends AbstractEmailParser {
         List<ValuationNeedParseParam> valuationNeedParseParams = buildValuationNeedParseParam(emailContentInfoDTO);
         List<ValuationNeedParseParam> valuationNeedParseParams = buildValuationNeedParseParam(emailContentInfoDTO);
         List<AssetsValuationResult.Record> recordList = valuationParseService.parseValuationExcel(valuationNeedParseParams);
         List<AssetsValuationResult.Record> recordList = valuationParseService.parseValuationExcel(valuationNeedParseParams);
         if (CollUtil.isNotEmpty(recordList)) {
         if (CollUtil.isNotEmpty(recordList)) {
-            List<AssetsValuationResult.Record> parseSucessList = recordList.stream().filter(e -> e.getSuccess() == 1).collect(Collectors.toList());
+            List<AssetsValuationResult.Record> parseSucessList = recordList.stream()
+                    .filter(e -> e.getSuccess() == 1 || (StrUtil.isNotBlank(e.getMsg()) && "未匹配基金".equals(e.getMsg()))).collect(Collectors.toList());
             EmailFundNavDTO fundNavDTO = convertToFundNavDTO(parseSucessList);
             EmailFundNavDTO fundNavDTO = convertToFundNavDTO(parseSucessList);
             Optional.ofNullable(fundNavDTO).ifPresent(emailFundNavDTOList::add);
             Optional.ofNullable(fundNavDTO).ifPresent(emailFundNavDTOList::add);
         }
         }

+ 14 - 6
service-daq/src/main/java/com/simuwang/daq/service/ValuationParseService.java

@@ -92,10 +92,19 @@ public class ValuationParseService {
                             List<FundInfoDO> fundInfoDOList = fundService.getFundInfoByNamesAndCode(parseValuationInfo.getFundName(), parseValuationInfo.getRegisterNumber());
                             List<FundInfoDO> fundInfoDOList = fundService.getFundInfoByNamesAndCode(parseValuationInfo.getFundName(), parseValuationInfo.getRegisterNumber());
                             log.info("表格:{}, 匹配上的基金:{}", valuationNeedParseParam.getOriginFileName(), fundInfoDOList);
                             log.info("表格:{}, 匹配上的基金:{}", valuationNeedParseParam.getOriginFileName(), fundInfoDOList);
                             if (CollUtil.isEmpty(fundInfoDOList)) {
                             if (CollUtil.isEmpty(fundInfoDOList)) {
+                                // 未匹配基金的情况 -> 不保存估值表信息
+                                record.setNav(String.valueOf(details.getNav()));
+                                record.setCumulativeNavWithdrawal(String.valueOf(details.getCumulativeNav()));
+                                record.setExcelName(valuationNeedParseParam.getOriginFileName());
+                                record.setDate(details.getValuationDate());
                                 record.setExcelName(valuationNeedParseParam.getOriginFileName());
                                 record.setExcelName(valuationNeedParseParam.getOriginFileName());
                                 record.setMsg("未匹配基金");
                                 record.setMsg("未匹配基金");
                                 record.setDate(details.getValuationDate());
                                 record.setDate(details.getValuationDate());
                                 record.setSuccess(0);
                                 record.setSuccess(0);
+                                BigDecimal assetNet = details.getNetAssetsValue() != null ? BigDecimal.valueOf(details.getNetAssetsValue()) : null;
+                                BigDecimal assetShare = details.getTotalMarketValue() != null ? BigDecimal.valueOf(details.getTotalMarketValue()) : null;
+                                record.setAssetNet(assetNet != null ? String.valueOf(assetNet) : null);
+                                record.setAssetShare(assetShare != null ? String.valueOf(assetShare) : null);
                                 records.add(record);
                                 records.add(record);
                             } else {
                             } else {
                                 for (FundInfoDO fundInfoDO : fundInfoDOList) {
                                 for (FundInfoDO fundInfoDO : fundInfoDOList) {
@@ -112,7 +121,7 @@ public class ValuationParseService {
                                     List<AssetsValuationInfo> data = excelInfo.getData();
                                     List<AssetsValuationInfo> data = excelInfo.getData();
                                     if (CollUtil.isNotEmpty(data)) {
                                     if (CollUtil.isNotEmpty(data)) {
                                         ValuationTableDO tableInfo = new ValuationTableDO();
                                         ValuationTableDO tableInfo = new ValuationTableDO();
-                                        Integer valuationId = trans2UserValuationDoAndWrite(details, 0, fundId, tableInfo, valuationNeedParseParam);
+                                        Integer valuationId = trans2UserValuationDoAndWrite(details, fundId, tableInfo, valuationNeedParseParam);
                                         singleFundRecord.setValuationId(valuationId);
                                         singleFundRecord.setValuationId(valuationId);
                                         Future<ValuationResult> future = executor.submit(() -> {
                                         Future<ValuationResult> future = executor.submit(() -> {
                                             ValuationResult valuationResult = new ValuationResult();
                                             ValuationResult valuationResult = new ValuationResult();
@@ -147,7 +156,7 @@ public class ValuationParseService {
                         List<AssetsValuationInfo> data = excelInfo.getData();
                         List<AssetsValuationInfo> data = excelInfo.getData();
                         if (CollectionUtil.isNotEmpty(data)) {
                         if (CollectionUtil.isNotEmpty(data)) {
                             ValuationTableDO tableInfo = new ValuationTableDO();
                             ValuationTableDO tableInfo = new ValuationTableDO();
-                            Integer valuationId = trans2UserValuationDoAndWrite(details, 0, fundId, tableInfo, valuationNeedParseParam);
+                            Integer valuationId = trans2UserValuationDoAndWrite(details, fundId, tableInfo, valuationNeedParseParam);
                             record.setValuationId(valuationId);
                             record.setValuationId(valuationId);
                             Future<ValuationResult> future = executor.submit(() -> {
                             Future<ValuationResult> future = executor.submit(() -> {
                                 long startTime = System.currentTimeMillis();
                                 long startTime = System.currentTimeMillis();
@@ -447,8 +456,7 @@ public class ValuationParseService {
         }
         }
     }
     }
 
 
-    public Integer trans2UserValuationDoAndWrite(AssetsValuationDetails details, Integer userId, String fundId,
-                                                 ValuationTableDO tableInfo, ValuationNeedParseParam valuationNeedParseParam) {
+    public Integer trans2UserValuationDoAndWrite(AssetsValuationDetails details, String fundId, ValuationTableDO tableInfo, ValuationNeedParseParam valuationNeedParseParam) {
         valuationTableMapper.unValid(fundId, details.getValuationDate());
         valuationTableMapper.unValid(fundId, details.getValuationDate());
         tableInfo.setFundId(fundId);
         tableInfo.setFundId(fundId);
         tableInfo.setValuationDate(DateUtil.StringToDate(details.getValuationDate()));
         tableInfo.setValuationDate(DateUtil.StringToDate(details.getValuationDate()));
@@ -456,8 +464,8 @@ public class ValuationParseService {
         tableInfo.setIsvalid(1);
         tableInfo.setIsvalid(1);
         tableInfo.setCreateTime(DateTime.now());
         tableInfo.setCreateTime(DateTime.now());
         tableInfo.setUpdateTime(DateTime.now());
         tableInfo.setUpdateTime(DateTime.now());
-        tableInfo.setCreatorId(userId);
-        tableInfo.setUpdaterId(userId);
+        tableInfo.setCreatorId(0);
+        tableInfo.setUpdaterId(0);
         tableInfo.setTotalMarketValue(BigDecimalUtils.toBigDecimal(details.getTotalMarketValue()));
         tableInfo.setTotalMarketValue(BigDecimalUtils.toBigDecimal(details.getTotalMarketValue()));
         tableInfo.setNetAssetsValue(BigDecimalUtils.toBigDecimal(details.getNetAssetsValue()));
         tableInfo.setNetAssetsValue(BigDecimalUtils.toBigDecimal(details.getNetAssetsValue()));
         tableInfo.setIncrement(BigDecimalUtils.toBigDecimal(details.getIncrement()));
         tableInfo.setIncrement(BigDecimalUtils.toBigDecimal(details.getIncrement()));

+ 7 - 0
service-deploy/src/main/test/java/com/simuwang/datadaq/DataTrusteeApplicationTests.java

@@ -1,5 +1,6 @@
 package com.simuwang.datadaq;
 package com.simuwang.datadaq;
 
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import com.simuwang.base.common.conts.DateConst;
 import com.simuwang.base.common.conts.DateConst;
@@ -49,4 +50,10 @@ class DataTrusteeApplicationTests {
     public void testReparseEmail() {
     public void testReparseEmail() {
         emailParseApiService.reparseEmail(7);
         emailParseApiService.reparseEmail(7);
     }
     }
+
+
+    @Test
+    public void testReparseFile() {
+        emailParseApiService.reparseFile(ListUtil.toList(40,43));
+    }
 }
 }

+ 38 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/EmailAssetDetailController.java

@@ -0,0 +1,38 @@
+package com.simuwang.manage.api.email;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
+import com.simuwang.base.pojo.vo.EmailFundAssetVO;
+import com.simuwang.base.pojo.vo.EmailFundNavVO;
+import com.simuwang.manage.api.base.BaseController;
+import com.simuwang.manage.service.ParseEmailDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *  数据详情
+ * Author:   chenjianhua
+ * Date:     2024/9/10 11:21
+ * Description: ${DESCRIPTION}
+ */
+@RestController
+@RequestMapping("/v1/asset")
+public class EmailAssetDetailController{
+
+    @Autowired
+    private ParseEmailDetailService parseEmailDetailService;
+
+    /**
+     * 规模解析数据详情页面展示查询接口
+     * @param parseDetailPageQuery
+     * @return
+     */
+    @GetMapping("/search-asset-detail")
+    public MybatisPage<EmailFundAssetVO> searchAssetDetail(ParseDetailPageQuery parseDetailPageQuery){
+        MybatisPage<EmailFundAssetVO> result = parseEmailDetailService.searchAssetDetail(parseDetailPageQuery);
+        return result;
+    }
+
+}

+ 41 - 10
service-manage/src/main/java/com/simuwang/manage/api/email/EmailConfigController.java

@@ -5,6 +5,7 @@ import com.simuwang.base.pojo.dto.query.EmailPageQuery;
 import com.simuwang.base.pojo.vo.IdVO;
 import com.simuwang.base.pojo.vo.IdVO;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoVO;
 import com.simuwang.base.pojo.vo.MailboxInfoVO;
+import com.simuwang.base.pojo.vo.OpenStatusVO;
 import com.simuwang.manage.api.base.BaseController;
 import com.simuwang.manage.api.base.BaseController;
 import com.simuwang.manage.service.EmailConfigService;
 import com.simuwang.manage.service.EmailConfigService;
 import com.smppw.common.pojo.ResultVo;
 import com.smppw.common.pojo.ResultVo;
@@ -12,10 +13,7 @@ import com.smppw.common.pojo.enums.status.ResultCode;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 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.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -48,7 +46,7 @@ public class EmailConfigController extends BaseController {
      * @param mailboxInfoVO
      * @param mailboxInfoVO
      * @return
      * @return
      */
      */
-    @RequestMapping("save-email-config")
+    @PostMapping("save-email-config")
     public ResultVo saveEmailConfig(@RequestBody MailboxInfoVO mailboxInfoVO){
     public ResultVo saveEmailConfig(@RequestBody MailboxInfoVO mailboxInfoVO){
         ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
         ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
         try{
         try{
@@ -67,13 +65,49 @@ public class EmailConfigController extends BaseController {
     }
     }
 
 
     /**
     /**
+     * 开启关闭邮箱启动状态
+     * @param openStatusVO
+     * @return
+     */
+    @PostMapping("control-email-status")
+    public ResultVo controlEmailConfig(@RequestBody OpenStatusVO openStatusVO){
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        try{
+            emailConfigService.controlEmailConfig(openStatusVO);
+            vo.setData(true);
+        }catch (Exception e){
+            vo.setCode(ResultCode.SAVE_FAILED.getCode());
+            logger.error(e.getMessage(),e);
+        }
+        return vo;
+    }
+
+    /**
+     * 根据ID查询邮箱配置
+     * @param idVO
+     * @return
+     */
+    @GetMapping("search-email-config")
+    public ResultVo searchEmailConfig(IdVO idVO){
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        try{
+            MailboxInfoVO mailboxInfoVO = emailConfigService.searchEmailConfigById(idVO.getId());
+            vo.setData(mailboxInfoVO);
+        }catch (Exception e){
+            vo.setCode(ResultCode.SAVE_FAILED.getCode());
+            logger.error(e.getMessage(),e);
+        }
+        return vo;
+    }
+
+    /**
      * 批量删除邮箱配置
      * 批量删除邮箱配置
      * @param idVO --idList
      * @param idVO --idList
      * @return
      * @return
      */
      */
     @RequestMapping("delete-email-config")
     @RequestMapping("delete-email-config")
     public boolean deleteEmailConfig(@RequestBody IdVO idVO){
     public boolean deleteEmailConfig(@RequestBody IdVO idVO){
-        emailConfigService.deleteEmailConfig(idVO.getIdList());
+        emailConfigService.deleteEmailConfig(idVO.getId());
         return true;
         return true;
     }
     }
 
 
@@ -85,11 +119,8 @@ public class EmailConfigController extends BaseController {
     @RequestMapping("connect-test")
     @RequestMapping("connect-test")
     public ResultVo connectTest(@RequestBody MailboxInfoVO mailboxInfoVO){
     public ResultVo connectTest(@RequestBody MailboxInfoVO mailboxInfoVO){
         ResultVo vo = new ResultVo(ResultCode.SUCCESS.getCode());
         ResultVo vo = new ResultVo(ResultCode.SUCCESS.getCode());
-        String msg = "";
         try{
         try{
-            msg = emailConfigService.connectTest(mailboxInfoVO);
-            vo.setMsg(msg);
-            vo.setData(true);
+            vo = emailConfigService.connectTest(mailboxInfoVO);
         }catch (Exception e){
         }catch (Exception e){
             vo.setMsg(e.getMessage());
             vo.setMsg(e.getMessage());
         }
         }

+ 3 - 12
service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailDetailController.java

@@ -16,8 +16,8 @@ import org.springframework.web.bind.annotation.*;
  * Description: ${DESCRIPTION}
  * Description: ${DESCRIPTION}
  */
  */
 @RestController
 @RestController
-@RequestMapping("/v1/detail")
-public class ParseEmailDetailController extends BaseController {
+@RequestMapping("/v1/nav")
+public class EmailNavDetailController{
 
 
     @Autowired
     @Autowired
     private ParseEmailDetailService parseEmailDetailService;
     private ParseEmailDetailService parseEmailDetailService;
@@ -32,14 +32,5 @@ public class ParseEmailDetailController extends BaseController {
         return result;
         return result;
     }
     }
 
 
-    /**
-     * 规模解析数据详情页面展示查询接口
-     * @param parseDetailPageQuery
-     * @return
-     */
-    @GetMapping("/search-asset-detail")
-    public MybatisPage<EmailFundAssetVO> searchAssetDetail(ParseDetailPageQuery parseDetailPageQuery){
-        MybatisPage<EmailFundAssetVO> result = parseEmailDetailService.searchAssetDetail(parseDetailPageQuery);
-        return result;
-    }
+
 }
 }

+ 42 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/NavController.java

@@ -0,0 +1,42 @@
+package com.simuwang.manage.api.email;
+
+import com.simuwang.base.pojo.vo.FundAssetVO;
+import com.simuwang.base.pojo.vo.FundNavVO;
+import com.smppw.common.pojo.ResultVo;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * FileName: NavController
+ * Author:   chenjianhua
+ * Date:     2024/9/14 13:59
+ * Description: ${DESCRIPTION}
+ */
+@RestController
+@RequestMapping("/v1/nav")
+public class NavController {
+
+    /**
+     * 新增基金规模
+     * @param fundAssetVO
+     * @return
+     */
+//    @PostMapping("/save-fund-asset")
+//    public ResultVo saveFundAsset(@RequestBody FundAssetVO fundAssetVO){
+//        parseEmailDetailService.saveFundAsset(fundAssetVO);
+//        return ResultVo.ok(true);
+//    }
+//
+//    /**
+//     * 新增基金规模
+//     * @param fundNavVO
+//     * @return
+//     */
+//    @PostMapping("/save-fund-nav")
+//    public ResultVo saveFundNav(@RequestBody FundNavVO fundNavVO){
+//        parseEmailDetailService.saveFundNav(fundNavVO);
+//        return ResultVo.ok(true);
+//    }
+}

+ 4 - 7
service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailController.java

@@ -1,7 +1,5 @@
 package com.simuwang.manage.api.email;
 package com.simuwang.manage.api.email;
 
 
-import com.simuwang.base.common.page.TableDataInfo;
-import com.simuwang.base.common.result.AjaxResult;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.EncodeUtil;
 import com.simuwang.base.common.util.EncodeUtil;
 import com.simuwang.base.pojo.dto.query.EmailFileQuery;
 import com.simuwang.base.pojo.dto.query.EmailFileQuery;
@@ -11,16 +9,14 @@ import com.simuwang.base.pojo.vo.EmailParseDetailVO;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
 import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
 import com.simuwang.daq.service.EmailParseApiService;
 import com.simuwang.daq.service.EmailParseApiService;
-import com.simuwang.manage.api.base.BaseController;
 import com.simuwang.manage.service.ParseEmailService;
 import com.simuwang.manage.service.ParseEmailService;
 import com.smppw.common.pojo.ResultVo;
 import com.smppw.common.pojo.ResultVo;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.common.pojo.enums.TimeRange;
-import com.smppw.common.pojo.enums.status.ResultCode;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
-import org.apache.ibatis.annotations.Param;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
@@ -38,7 +34,8 @@ import java.util.Map;
  */
  */
 @RestController
 @RestController
 @RequestMapping("/v1/parse")
 @RequestMapping("/v1/parse")
-public class ParseEmailController extends BaseController {
+public class ParseEmailController{
+    private static final Logger logger = LoggerFactory.getLogger(ParseEmailController.class);
 
 
     @Autowired
     @Autowired
     private ParseEmailService parseEmailService;
     private ParseEmailService parseEmailService;

+ 18 - 0
service-manage/src/main/java/com/simuwang/manage/api/fund/FunAliasController.java

@@ -0,0 +1,18 @@
+package com.simuwang.manage.api.fund;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 基金别名管理
+ * Author:   chenjianhua
+ * Date:     2024/9/14 14:05
+ * Description: ${DESCRIPTION}
+ */
+@RestController
+@RequestMapping("/v1/alias")
+public class FunAliasController {
+
+
+
+}

+ 1 - 3
service-manage/src/main/java/com/simuwang/manage/api/fund/FundInformationController.java

@@ -1,6 +1,5 @@
 package com.simuwang.manage.api.fund;
 package com.simuwang.manage.api.fund;
 
 
-import com.simuwang.base.common.page.TableDataInfo;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.FundFilePageQuery;
 import com.simuwang.base.pojo.dto.query.FundFilePageQuery;
 import com.simuwang.base.pojo.dto.query.FundInfoPageQuery;
 import com.simuwang.base.pojo.dto.query.FundInfoPageQuery;
@@ -8,7 +7,6 @@ import com.simuwang.base.pojo.dto.query.FundInputPageQuery;
 import com.simuwang.base.pojo.vo.FundFileInfoVO;
 import com.simuwang.base.pojo.vo.FundFileInfoVO;
 import com.simuwang.base.pojo.vo.FundInformationVO;
 import com.simuwang.base.pojo.vo.FundInformationVO;
 import com.simuwang.base.pojo.vo.FundReportFrequencyVO;
 import com.simuwang.base.pojo.vo.FundReportFrequencyVO;
-import com.simuwang.manage.api.base.BaseController;
 import com.simuwang.manage.service.EmailFundInfoService;
 import com.simuwang.manage.service.EmailFundInfoService;
 import com.simuwang.manage.service.FundInformationService;
 import com.simuwang.manage.service.FundInformationService;
 import com.simuwang.manage.service.FundReportFrequencyService;
 import com.simuwang.manage.service.FundReportFrequencyService;
@@ -28,7 +26,7 @@ import java.util.Map;
  */
  */
 @RestController
 @RestController
 @RequestMapping("/v1/fund")
 @RequestMapping("/v1/fund")
-public class FundInformationController extends BaseController {
+public class FundInformationController{
     private static final Logger logger = LoggerFactory.getLogger(FundInformationController.class);
     private static final Logger logger = LoggerFactory.getLogger(FundInformationController.class);
 
 
     @Autowired
     @Autowired

+ 8 - 2
service-manage/src/main/java/com/simuwang/manage/service/EmailConfigService.java

@@ -4,6 +4,8 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.EmailPageQuery;
 import com.simuwang.base.pojo.dto.query.EmailPageQuery;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoVO;
 import com.simuwang.base.pojo.vo.MailboxInfoVO;
+import com.simuwang.base.pojo.vo.OpenStatusVO;
+import com.smppw.common.pojo.ResultVo;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -18,9 +20,13 @@ public interface EmailConfigService {
 
 
     void saveEmailConfig(MailboxInfoVO mailboxInfoVO);
     void saveEmailConfig(MailboxInfoVO mailboxInfoVO);
 
 
-    String connectTest(MailboxInfoVO mailboxInfoVO);
+    ResultVo connectTest(MailboxInfoVO mailboxInfoVO);
 
 
-    void deleteEmailConfig(List<Integer> idList);
+    void deleteEmailConfig(Integer id);
 
 
     boolean checkEmailUnique(String email);
     boolean checkEmailUnique(String email);
+
+    MailboxInfoVO searchEmailConfigById(Integer id);
+
+    void controlEmailConfig(OpenStatusVO openStatusVO);
 }
 }

+ 6 - 0
service-manage/src/main/java/com/simuwang/manage/service/ParseEmailDetailService.java

@@ -4,6 +4,8 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.vo.EmailFundAssetVO;
 import com.simuwang.base.pojo.vo.EmailFundAssetVO;
 import com.simuwang.base.pojo.vo.EmailFundNavVO;
 import com.simuwang.base.pojo.vo.EmailFundNavVO;
+import com.simuwang.base.pojo.vo.FundAssetVO;
+import com.simuwang.base.pojo.vo.FundNavVO;
 
 
 /**
 /**
  * FileName: ParseEmailDetailService
  * FileName: ParseEmailDetailService
@@ -15,4 +17,8 @@ public interface ParseEmailDetailService {
     MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery);
     MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery);
 
 
     MybatisPage<EmailFundAssetVO> searchAssetDetail(ParseDetailPageQuery parseDetailPageQuery);
     MybatisPage<EmailFundAssetVO> searchAssetDetail(ParseDetailPageQuery parseDetailPageQuery);
+
+    void saveFundAsset(FundAssetVO fundAssetVO);
+
+    void saveFundNav(FundNavVO fundNavVO);
 }
 }

+ 32 - 8
service-manage/src/main/java/com/simuwang/manage/service/impl/EmailConfigServiceImpl.java

@@ -4,6 +4,7 @@ import com.simuwang.base.common.conts.UserConstants;
 import com.simuwang.base.common.enums.EmailCron;
 import com.simuwang.base.common.enums.EmailCron;
 import com.simuwang.base.common.enums.ResultCode;
 import com.simuwang.base.common.enums.ResultCode;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.EmailUtil;
 import com.simuwang.base.common.util.EmailUtil;
 import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.MailboxInfoMapper;
 import com.simuwang.base.mapper.MailboxInfoMapper;
@@ -13,7 +14,9 @@ import com.simuwang.base.pojo.dto.MailboxInfoDTO;
 import com.simuwang.base.pojo.dto.query.EmailPageQuery;
 import com.simuwang.base.pojo.dto.query.EmailPageQuery;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import com.simuwang.base.pojo.vo.MailboxInfoVO;
 import com.simuwang.base.pojo.vo.MailboxInfoVO;
+import com.simuwang.base.pojo.vo.OpenStatusVO;
 import com.simuwang.manage.service.EmailConfigService;
 import com.simuwang.manage.service.EmailConfigService;
+import com.smppw.common.pojo.ResultVo;
 import jakarta.mail.MessagingException;
 import jakarta.mail.MessagingException;
 import jakarta.mail.Store;
 import jakarta.mail.Store;
 import org.quartz.Scheduler;
 import org.quartz.Scheduler;
@@ -21,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -41,10 +45,7 @@ public class EmailConfigServiceImpl implements EmailConfigService {
     @Override
     @Override
     public MybatisPage<MailboxInfoTableVO> searchEmailConfigList(EmailPageQuery emailPageQuery) {
     public MybatisPage<MailboxInfoTableVO> searchEmailConfigList(EmailPageQuery emailPageQuery) {
         List<MailboxInfoDO> mailboxInfoOS = emailConfigMapper.searchEmailConfigList(emailPageQuery);
         List<MailboxInfoDO> mailboxInfoOS = emailConfigMapper.searchEmailConfigList(emailPageQuery);
-        List<MailboxInfoTableVO> mailboxInfoTableVOS = mailboxInfoOS.stream().map(MailboxInfoDO::toVo).collect(Collectors.toList());
-        for(MailboxInfoTableVO mailboxInfoTableVO : mailboxInfoTableVOS){  //cron表达式转文本描述
-            mailboxInfoTableVO.setCron(EmailCron.getEmailCronByCron(mailboxInfoTableVO.getCron()).getText());
-        }
+        List<MailboxInfoTableVO> mailboxInfoTableVOS = mailboxInfoOS.stream().map(MailboxInfoDO::toTableVo).collect(Collectors.toList());
         long total = emailConfigMapper.countEmailConfig(emailPageQuery);
         long total = emailConfigMapper.countEmailConfig(emailPageQuery);
         return MybatisPage.of(total,mailboxInfoTableVOS);
         return MybatisPage.of(total,mailboxInfoTableVOS);
     }
     }
@@ -63,7 +64,8 @@ public class EmailConfigServiceImpl implements EmailConfigService {
     }
     }
 
 
     @Override
     @Override
-    public String connectTest(MailboxInfoVO mailboxInfoVO) {
+    public ResultVo connectTest(MailboxInfoVO mailboxInfoVO) {
+        ResultVo vo = new ResultVo(ResultCode.CONNECT_SUCCESS);
         MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
         MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
         mailboxInfoDTO.setAccount(mailboxInfoVO.getEmail());
         mailboxInfoDTO.setAccount(mailboxInfoVO.getEmail());
         mailboxInfoDTO.setPassword(mailboxInfoVO.getPassword());
         mailboxInfoDTO.setPassword(mailboxInfoVO.getPassword());
@@ -77,13 +79,20 @@ public class EmailConfigServiceImpl implements EmailConfigService {
             } catch (MessagingException e) {
             } catch (MessagingException e) {
                 throw new RuntimeException(e);
                 throw new RuntimeException(e);
             }
             }
-            return ResultCode.CONNECT_SUCCESS.getMsg();
+            vo.setMsg(ResultCode.CONNECT_SUCCESS.getMsg());
+            vo.setData(true);
+            return vo;
         }
         }
-        return ResultCode.CONNECT_ERROR.getMsg();
+        vo = new ResultVo(ResultCode.CONNECT_ERROR);
+        vo.setData(false);
+        vo.setMsg(ResultCode.CONNECT_ERROR.getMsg());
+        return vo;
     }
     }
 
 
     @Override
     @Override
-    public void deleteEmailConfig(List<Integer> idList) {
+    public void deleteEmailConfig(Integer id) {
+        List<Integer> idList = new ArrayList<>();
+        idList.add(id);
         emailConfigMapper.deleteEmailConfigByIds(idList);
         emailConfigMapper.deleteEmailConfigByIds(idList);
     }
     }
 
 
@@ -97,6 +106,21 @@ public class EmailConfigServiceImpl implements EmailConfigService {
         return UserConstants.UNIQUE;
         return UserConstants.UNIQUE;
     }
     }
 
 
+    @Override
+    public MailboxInfoVO searchEmailConfigById(Integer id) {
+        MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
+        MailboxInfoVO mailboxInfoVO = mailboxInfoDO.toVo();
+        return mailboxInfoVO;
+    }
+
+    @Override
+    public void controlEmailConfig(OpenStatusVO openStatusVO) {
+        MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(openStatusVO.getId());
+        mailboxInfoDO.setOpenStatus(openStatusVO.getOpenStatus());
+        mailboxInfoDO.setUpdateTime(DateUtils.getNowDate());
+        emailConfigMapper.updateById(mailboxInfoDO);
+    }
+
     private MailboxInfoDO toMailboxInfoDO(MailboxInfoVO mailboxInfoVO) {
     private MailboxInfoDO toMailboxInfoDO(MailboxInfoVO mailboxInfoVO) {
         MailboxInfoDO mailboxInfoDO = new MailboxInfoDO();
         MailboxInfoDO mailboxInfoDO = new MailboxInfoDO();
         mailboxInfoDO.setIsvalid(1);
         mailboxInfoDO.setIsvalid(1);

+ 63 - 9
service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailDetailServiceImpl.java

@@ -1,20 +1,18 @@
 package com.simuwang.manage.service.impl;
 package com.simuwang.manage.service.impl;
 
 
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.support.MybatisPage;
-import com.simuwang.base.mapper.EmailFundAssetMapper;
-import com.simuwang.base.mapper.EmailFundNavMapper;
-import com.simuwang.base.mapper.FundInfoMapper;
-import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO;
-import com.simuwang.base.pojo.dos.EmailFundAssetDO;
-import com.simuwang.base.pojo.dos.EmailFundNavDO;
+import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.common.util.StringUtil;
+import com.simuwang.base.mapper.*;
+import com.simuwang.base.pojo.dos.*;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
-import com.simuwang.base.pojo.vo.CompanyEmailSendHistoryVO;
-import com.simuwang.base.pojo.vo.EmailFundAssetVO;
-import com.simuwang.base.pojo.vo.EmailFundNavVO;
+import com.simuwang.base.pojo.vo.*;
 import com.simuwang.manage.service.ParseEmailDetailService;
 import com.simuwang.manage.service.ParseEmailDetailService;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -35,6 +33,12 @@ public class ParseEmailDetailServiceImpl implements ParseEmailDetailService {
 
 
     @Autowired
     @Autowired
     private EmailFundAssetMapper emailFundAssetMapper;
     private EmailFundAssetMapper emailFundAssetMapper;
+
+    @Autowired
+    private AssetMapper assetMapper;
+
+    @Autowired
+    private NavMapper navMapper;
     @Override
     @Override
     public MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery) {
     public MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery) {
         List<EmailFundNavDO> dataList = emailFundNavMapper.searchNavDetail(parseDetailPageQuery);
         List<EmailFundNavDO> dataList = emailFundNavMapper.searchNavDetail(parseDetailPageQuery);
@@ -64,4 +68,54 @@ public class ParseEmailDetailServiceImpl implements ParseEmailDetailService {
         long total = emailFundAssetMapper.countAssetDetail(parseDetailPageQuery);
         long total = emailFundAssetMapper.countAssetDetail(parseDetailPageQuery);
         return MybatisPage.of(total,voList);
         return MybatisPage.of(total,voList);
     }
     }
+
+    @Override
+    public void saveFundAsset(FundAssetVO fundAssetVO) {
+        List<AssetDO> assetDOList = new ArrayList<>();
+        AssetDO assetDO = new AssetDO();
+        assetDO.setAssetNet(fundAssetVO.getAssetNet());
+        assetDO.setAssetShare(fundAssetVO.getAssetShare());
+        assetDO.setPriceDate(DateUtils.parse(fundAssetVO.getPriceDate(),DateUtils.YYYY_MM_DD));
+        assetDO.setFundId(fundAssetVO.getFundId());
+        assetDO.setUpdateTime(DateUtils.getNowDate());
+        assetDO.setIsvalid(1);
+        AssetDO oldAssetDO = assetMapper.queryFundAsset(assetDO);
+        if(StringUtil.isNull(oldAssetDO)){
+            assetDO.setCreateTime(DateUtils.getNowDate());
+            assetDOList.add(assetDO);
+            assetMapper.batchInsert(assetDOList);
+        }else{
+            oldAssetDO.setAssetShare(assetDO.getAssetShare());
+            oldAssetDO.setAssetNet(assetDO.getAssetNet());
+            assetDOList.add(oldAssetDO);
+            assetMapper.batchUpdate(assetDOList);
+        }
+    }
+
+    @Override
+    public void saveFundNav(FundNavVO fundNavVO) {
+        List<NavDO> navDOList = new ArrayList<>();
+        NavDO navDO = new NavDO();
+        navDO.setCumulativeNav(fundNavVO.getCumulativeNavWithdrawal());
+        navDO.setCumulativeNavWithdrawal(fundNavVO.getCumulativeNavWithdrawal());
+        navDO.setNav(fundNavVO.getNav());
+        navDO.setFundId(fundNavVO.getFundId());
+        navDO.setNav(fundNavVO.getNav());
+        navDO.setPriceDate(DateUtils.parse(fundNavVO.getPriceDate(),DateUtils.YYYY_MM_DD));
+        navDO.setIsvalid(1);
+        navDO.setUpdateTime(DateUtils.getNowDate());
+        NavDO oldNav = navMapper.queryFundNav(navDO);
+        if(StringUtil.isNull(oldNav)){
+            navDO.setCreateTime(DateUtils.getNowDate());
+            navDOList.add(navDO);
+            navMapper.batchInsert(navDOList);
+        }else{
+            oldNav.setUpdateTime(DateUtils.getNowDate());
+            oldNav.setCumulativeNav(navDO.getCumulativeNav());
+            oldNav.setCumulativeNavWithdrawal(navDO.getCumulativeNav());
+            oldNav.setNav(navDO.getNav());
+            navDOList.add(oldNav);
+            navMapper.batchUpdate(navDOList);
+        }
+    }
 }
 }