Explorar o código

fix:公司频率报送调整

chenjianhua hai 1 mes
pai
achega
0607c863c1
Modificáronse 42 ficheiros con 621 adicións e 140 borrados
  1. 7 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/DeletionInfoMapper.java
  2. 11 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/DeletionTypeStatisticsMapper.java
  3. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/EmailFundNavMapper.java
  4. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/FundAliasMapper.java
  5. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/FundInfoMapper.java
  6. 10 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/FundNotMappingMapper.java
  7. 0 5
      service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyEmailPageDO.java
  8. 60 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/DeletionTypeStatisticsDO.java
  9. 10 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/FundAliasDO.java
  10. 14 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/FundDeletionTypeDO.java
  11. 49 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/FundNotMappingInfoDO.java
  12. 13 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/FundRegisterDO.java
  13. 0 4
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyEmailPageVO.java
  14. 1 1
      service-base/src/main/resources/mapper/daq/ChannelMapper.xml
  15. 0 4
      service-base/src/main/resources/mapper/daq/CompanyEmailHistoryMapper.xml
  16. 26 65
      service-base/src/main/resources/mapper/daq/DeletionInfoMapper.xml
  17. 22 0
      service-base/src/main/resources/mapper/daq/DeletionTypeStatisticsMapper.xml
  18. 2 17
      service-base/src/main/resources/mapper/daq/EmailFundAssetMapper.xml
  19. 21 10
      service-base/src/main/resources/mapper/daq/EmailFundNavMapper.xml
  20. 17 11
      service-base/src/main/resources/mapper/daq/FundAliasMapper.xml
  21. 7 0
      service-base/src/main/resources/mapper/daq/FundInfoMapper.xml
  22. 33 0
      service-base/src/main/resources/mapper/daq/FundNotMappingMapper.xml
  23. 14 5
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java
  24. 6 0
      service-manage/src/main/java/com/simuwang/manage/api/company/CompanyContactInformationController.java
  25. 27 0
      service-manage/src/main/java/com/simuwang/manage/init/CompleteScheduleConfig.java
  26. 3 0
      service-manage/src/main/java/com/simuwang/manage/service/CompanyReportFrequencyService.java
  27. 5 4
      service-manage/src/main/java/com/simuwang/manage/service/DeletionService.java
  28. 2 0
      service-manage/src/main/java/com/simuwang/manage/service/EmailFundAssetService.java
  29. 4 0
      service-manage/src/main/java/com/simuwang/manage/service/EmailFundNavService.java
  30. 5 0
      service-manage/src/main/java/com/simuwang/manage/service/FundAliasService.java
  31. 2 0
      service-manage/src/main/java/com/simuwang/manage/service/FundInformationService.java
  32. 9 0
      service-manage/src/main/java/com/simuwang/manage/service/FundNotMappingService.java
  33. 9 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyReportFrequencyServiceImpl.java
  34. 55 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/DeletionServiceImpl.java
  35. 5 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/EmailFundAssetServiceImpl.java
  36. 10 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/EmailFundNavServiceImpl.java
  37. 36 14
      service-manage/src/main/java/com/simuwang/manage/service/impl/FundAliasServiceImpl.java
  38. 11 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/FundInformationServiceImpl.java
  39. 26 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/FundNotMappingServiceImpl.java
  40. 25 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailDetailServiceImpl.java
  41. 3 0
      service-manage/src/main/java/com/simuwang/manage/task/FundDeletionTask.java
  42. 55 0
      service-manage/src/main/java/com/simuwang/manage/task/NotMappingFundComputeTask.java

+ 7 - 0
service-base/src/main/java/com/simuwang/base/mapper/daq/DeletionInfoMapper.java

@@ -3,6 +3,7 @@ package com.simuwang.base.mapper.daq;
 import com.simuwang.base.pojo.dos.DeletionInfoDO;
 import com.simuwang.base.pojo.dos.EmailDeletionInfoDO;
 import com.simuwang.base.pojo.dos.FundDeletionInfoDO;
+import com.simuwang.base.pojo.dos.FundDeletionTypeDO;
 import com.simuwang.base.pojo.dto.query.DeletionPageQuery;
 import com.simuwang.base.pojo.dto.query.FundDeletionPageQuery;
 import com.simuwang.base.pojo.vo.FundDeletionInfoVO;
@@ -60,4 +61,10 @@ public interface DeletionInfoMapper {
     int countFundDeletion(@Param("fundId")String fundId);
 
     List<EmailDeletionInfoDO> selectDeletionDetailByFundId(@Param("fundId")String fundId,@Param("updateTime")String updateTime);
+
+    List<FundDeletionTypeDO> getFundDeletionTypeMapList();
+
+    Integer countChannelFundDeletion(@Param("fundId")String fundId, @Param("deletionType")Integer deletionType, @Param("channelId")Integer channelId, @Param("type")int type);
+
+    String getLastDeletionDate(@Param("fundId")String fundId, @Param("deletionType")Integer deletionType, @Param("channelId")Integer channelId);
 }

+ 11 - 0
service-base/src/main/java/com/simuwang/base/mapper/daq/DeletionTypeStatisticsMapper.java

@@ -0,0 +1,11 @@
+package com.simuwang.base.mapper.daq;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.simuwang.base.pojo.dos.DeletionTypeStatisticsDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface DeletionTypeStatisticsMapper extends BaseMapper<DeletionTypeStatisticsDO> {
+    DeletionTypeStatisticsDO getDeletionTypeStatistics(@Param("fundId") String fundId, @Param("deletionType")Integer deletionType,@Param("channelId")Integer channelId);
+}

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

@@ -54,4 +54,6 @@ public interface EmailFundNavMapper {
     List<EmailFundNavDO> getNavAmplitudeErrorListById(@Param("startIdx") long startIdx, @Param("startIdx")long endIdx);
 
     List<String> selectAllFundId();
+
+    String getLastPriceDateByfundRegisterNumber(@Param("fundName") String sourceFundName,@Param("registerNumber") String registerNumber);
 }

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

@@ -1,6 +1,7 @@
 package com.simuwang.base.mapper.daq;
 
 import com.simuwang.base.pojo.dos.FundAliasDO;
+import com.simuwang.base.pojo.dos.FundRegisterDO;
 import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -34,4 +35,5 @@ public interface FundAliasMapper {
 
     void batchInsert(@Param("itemDoList") List<FundAliasDO> fundAliasDOS);
 
+    List<FundRegisterDO> getNotMappingFundList();
 }

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

@@ -58,4 +58,6 @@ public interface FundInfoMapper {
     List<String> getHasFrequencyFundId();
 
     List<FundDeletionBaseInfoDO> getHasFrequencyFundInfo();
+
+    List<FundInfoDO> searchFundInfoListByFundIdList(@Param("fundIdList")List<String> fundIdList);
 }

+ 10 - 0
service-base/src/main/java/com/simuwang/base/mapper/daq/FundNotMappingMapper.java

@@ -0,0 +1,10 @@
+package com.simuwang.base.mapper.daq;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.simuwang.base.pojo.dos.FundNotMappingInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface FundNotMappingMapper extends BaseMapper<FundNotMappingInfoDO> {
+    FundNotMappingInfoDO getFundNotMappingInfo(FundNotMappingInfoDO fundNotMappingInfoDO);
+}

+ 0 - 5
service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyEmailPageDO.java

@@ -42,10 +42,6 @@ public class CompanyEmailPageDO {
      */
     private Integer sendStatus;
     /**
-     * 净值频率
-     */
-    private Integer navFrequency;
-    /**
      * 发送时间
      */
     private Date sendTime;
@@ -79,7 +75,6 @@ public class CompanyEmailPageDO {
         vo.setCompanyId(this.getCompanyId());
         vo.setContactEmail(this.getContactEmail());
         vo.setContactName(this.getContactName());
-        vo.setNavFrequency(this.getNavFrequency());
         vo.setContactPhone(this.getContactPhone());
         vo.setContactWechat(this.getContactWechat());
         vo.setId(this.getId());

+ 60 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/DeletionTypeStatisticsDO.java

@@ -0,0 +1,60 @@
+package com.simuwang.base.pojo.dos;
+
+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 lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("deletion_type_statistics")
+public class DeletionTypeStatisticsDO {
+
+    @TableId(value = "id", type= IdType.AUTO)
+    private Integer id;
+
+    @TableField(value = "fund_id")
+    private String fundId;
+
+    @TableField(value = "deletion_type")
+    private Integer deletionType;
+
+    @TableField(value = "channel_id")
+    private Integer channelId;
+
+    @TableField(value = "deletion_num")
+    private Integer deletionNum;
+
+    @TableField(value = "processed_num")
+    private Integer processedNum;
+    /**
+     * 是否有效:0-无效,1-有效
+     */
+    @TableField(value = "isvalid")
+    private Integer isvalid;
+    /**
+     * 创建者Id
+     */
+    @TableField(value = "creatorid")
+    private Integer creatorId;
+    /**
+     * 创建时间
+     */
+    @TableField(value = "createtime")
+    private Date createTime;
+    /**
+     * 修改者Id
+     */
+    @TableField(value = "updaterid")
+    private Integer updaterId;
+    /**
+     * 更新时间
+     */
+    @TableField(value = "updatetime")
+    private Date updateTime;
+
+    @TableField(value = "last_deletion_date")
+    private String lastDeletionDate;
+}

+ 10 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/FundAliasDO.java

@@ -40,6 +40,14 @@ public class FundAliasDO {
      */
     private String companyName;
     /**
+     * 净值总数
+     */
+    private Integer navTotal;
+    /**
+     * 规模总数
+     */
+    private Integer assetTotal;
+    /**
      * 记录的有效性;1-有效;0-无效;
      */
     private Integer isvalid;
@@ -71,6 +79,8 @@ public class FundAliasDO {
         fundAliasVO.setTargetRegisterNumber(this.targetRegisterNumber);
         fundAliasVO.setPriceDate(this.lastPriceDate==null?null: DateUtils.format(this.lastPriceDate,DateUtils.YYYY_MM_DD));
         fundAliasVO.setCompanyName(this.companyName);
+        fundAliasVO.setNavTotal(this.navTotal);
+        fundAliasVO.setAssetTotal(this.assetTotal);
         return fundAliasVO;
     }
 }

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

@@ -0,0 +1,14 @@
+package com.simuwang.base.pojo.dos;
+
+import lombok.Data;
+
+@Data
+public class FundDeletionTypeDO {
+
+    private String fundId;
+
+    private Integer deletionType;
+
+    private Integer channelId;
+
+}

+ 49 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/FundNotMappingInfoDO.java

@@ -0,0 +1,49 @@
+package com.simuwang.base.pojo.dos;
+
+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 lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("fund_not_mapping_info")
+public class FundNotMappingInfoDO {
+    @TableId(type = IdType.AUTO,value = "id")
+    private Integer id;
+
+    @TableField(value = "fund_alias_id")
+    private Integer fundAliasId;
+
+    @TableField(value = "fund_name")
+    private String fundName;
+
+    @TableField(value = "register_number")
+    private String registerNumber;
+
+    @TableField(value = "nav_total")
+    private Integer navTotal;
+
+    @TableField(value = "asset_total")
+    private Integer assetTotal;
+
+    @TableField(value = "last_price_date")
+    private String lastPriceDate;
+
+    @TableField(value = "creatorid")
+    private Integer creatorId;
+
+    @TableField(value = "updaterid")
+    private Integer updaterId;
+
+    @TableField(value = "createtime")
+    private Date createTime;
+
+    @TableField(value = "updatetime")
+    private Date updateTime;
+
+    @TableField(value = "isvalid")
+    private Integer isvalid;
+}

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

@@ -0,0 +1,13 @@
+package com.simuwang.base.pojo.dos;
+
+import lombok.Data;
+
+@Data
+public class FundRegisterDO {
+
+    private Integer id;
+
+    private String fundName;
+
+    private String registerNumber;
+}

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

@@ -33,10 +33,6 @@ public class CompanyEmailPageVO {
 
     private String contactName;
     /**
-     * 净值频率
-     */
-    private Integer navFrequency;
-    /**
      * 发送状态,0-失败,1-成功,-1未发送
      */
     private Integer sendStatus;

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

@@ -35,7 +35,7 @@
         select info.id,
                info.channel_name,
                info.channel_remark,
-               group_concat(e.email) as email,
+               wm_concat(e.email) as email,
                info.createtime,
                info.updatetime,
                info.isvalid,

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

@@ -37,7 +37,6 @@
         <result column="contact_name" property="contactName"/>
         <result column="contact_phone" property="contactPhone"/>
         <result column="contact_wechat" property="contactWechat"/>
-        <result column="nav_frequency" property="navFrequency"/>
         <result column="send_status" property="sendStatus"/>
         <result column="send_time" property="sendTime"/>
         <result column="send_remark" property="sendRemark"/>
@@ -52,7 +51,6 @@
             cec.id,
             cec.company_id,
             c.company_name,
-            fre.nav_frequency,
             cec.contact_email,
             cec.contact_name,
             cec.contact_wechat,
@@ -64,8 +62,6 @@
         contact_information cec
         JOIN pvn_company_info c
         ON cec.company_id = c.company_id
-        left join COMPANY_REPORT_FREQUENCY fre
-            on fre.company_id = cec.company_id
         LEFT JOIN
         (SELECT
         me.email AS email,

+ 26 - 65
service-base/src/main/resources/mapper/daq/DeletionInfoMapper.xml

@@ -80,44 +80,17 @@
         info.fund_name,
         c.company_name,
         d.deletion_type,
-        ddn.deletion_num,
-        ddp.processed_num,
+        d.deletion_num,
+        d.processed_num,
         d.last_deletion_date,
         ci.id as channel_id,
         ci.channel_name
         FROM
-        (select de.channel_id,de.fund_id,de.deletion_type,max(de.deletion_date) as last_deletion_date from deletion_info de where de.isvalid=1
-        group by de.fund_id,de.deletion_type,de.channel_id) d
+        deletion_type_statistics d
         LEFT JOIN pvn_fund_info info
         ON d.fund_id = info.fund_id and info.isvalid=1
         LEFT JOIN pvn_company_info c
         ON info.trust_id = c.company_id and c.isvalid=1
-        LEFT JOIN
-        (SELECT di.channel_id,
-        di.fund_id,
-        di.deletion_type,
-        COUNT(di.fund_id) AS deletion_num
-        FROM
-        deletion_info di
-        WHERE di.isvalid = 1
-        AND di.remark IS NULL
-        GROUP BY di.channel_id,di.fund_id,
-        di.deletion_type) ddn
-        ON ddn.fund_id = d.fund_id
-        AND d.deletion_type = ddn.deletion_type  and d.channel_id = ddn.channel_id
-        LEFT JOIN
-        (SELECT dip.channel_id,
-        dip.fund_id,
-        dip.deletion_type,
-        COUNT(dip.fund_id) AS processed_num
-        FROM
-        deletion_info dip
-        WHERE dip.isvalid = 1
-        AND dip.remark IS NOT NULL
-        GROUP BY dip.channel_id,dip.fund_id,
-        dip.deletion_type) ddp
-        ON ddp.fund_id = d.fund_id
-        AND d.deletion_type = ddp.deletion_type and d.channel_id = ddp.channel_id
         left join channel_info ci
         on ci.id = d.channel_id and ci.isvalid=1
         WHERE 1=1
@@ -131,17 +104,17 @@
             and d.deletion_type=#{deletionType}
         </if>
         <if test="deletionStartNum != null and deletionStartNum != ''">
-            and ddn.deletion_num >= #{deletionStartNum}
+            and d.deletion_num >= #{deletionStartNum}
         </if>
         <if test="channelName != null and channelName != ''">
             and ci.channel_name = #{channelName}
         </if>
         <if test="deletionEndNum != null and deletionEndNum != ''">
-            and ddn.deletion_num <![CDATA[ <= ]]> #{deletionEndNum}
+            and d.deletion_num <![CDATA[ <= ]]> #{deletionEndNum}
         </if>
         <choose>
             <when test="sort != null and sort !='' and sort=='lastDeletionDate' and order != null and order !=''">
-                order by d.last_deletion_date ${order}
+                order by d.last_deletion_date asc
             </when>
             <otherwise>
                 order by d.last_deletion_date desc
@@ -152,58 +125,31 @@
     <select id="countDeletion" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.DeletionPageQuery">
         select count(1) from
-        (select de.channel_id,de.fund_id,de.deletion_type,max(de.deletion_date) as last_deletion_date from deletion_info de where de.isvalid=1
-        group by de.fund_id,de.deletion_type,de.channel_id) d
+        deletion_type_statistics d
         LEFT JOIN pvn_fund_info info
         ON d.fund_id = info.fund_id and info.isvalid=1
         LEFT JOIN pvn_company_info c
         ON info.trust_id = c.company_id and c.isvalid=1
-        LEFT JOIN
-        (SELECT di.channel_id,
-        di.fund_id,
-        di.deletion_type,
-        COUNT(di.fund_id) AS deletion_num
-        FROM
-        deletion_info di
-        WHERE di.isvalid = 1
-        AND di.remark IS NULL
-        GROUP BY di.channel_id,di.fund_id,
-        di.deletion_type) ddn
-        ON ddn.fund_id = d.fund_id
-        AND d.deletion_type = ddn.deletion_type  and d.channel_id = ddn.channel_id
-        LEFT JOIN
-        (SELECT dip.channel_id,
-        dip.fund_id,
-        dip.deletion_type,
-        COUNT(dip.fund_id) AS processed_num
-        FROM
-        deletion_info dip
-        WHERE dip.isvalid = 1
-        AND dip.remark IS NOT NULL
-        GROUP BY dip.channel_id,dip.fund_id,
-        dip.deletion_type) ddp
-        ON ddp.fund_id = d.fund_id
-        AND d.deletion_type = ddp.deletion_type and d.channel_id = ddp.channel_id
         left join channel_info ci
         on ci.id = d.channel_id and ci.isvalid=1
         WHERE 1=1
         <if test="companyName != null and companyName !=''">
-            and (c.company_name like concat('%',#{companyName},'%') or c.company_short_name like concat('%',#{companyName},'%'))
+            and (c.company_name like concat(#{companyName},'%') or c.company_short_name like concat(#{companyName},'%'))
         </if>
         <if test="fundName != null and fundName !=''">
-            and (info.fund_name like concat('%',#{fundName},'%') or info.fund_short_name like concat('%',#{fundName},'%')  or info.fund_id like concat('%',#{fundName},'%'))
+            and (info.fund_name like concat(#{fundName},'%') or info.fund_short_name like concat(#{fundName},'%')  or info.fund_id like concat(#{fundName},'%'))
         </if>
         <if test="deletionType != null and deletionType != -1">
             and d.deletion_type=#{deletionType}
         </if>
         <if test="deletionStartNum != null and deletionStartNum != ''">
-            and ddn.deletion_num >= #{deletionStartNum}
+            and d.deletion_num >= #{deletionStartNum}
         </if>
         <if test="channelName != null and channelName != ''">
             and ci.channel_name = #{channelName}
         </if>
         <if test="deletionEndNum != null and deletionEndNum != ''">
-            and ddn.deletion_num <![CDATA[ <= ]]> #{deletionEndNum}
+            and d.deletion_num <![CDATA[ <= ]]> #{deletionEndNum}
         </if>
     </select>
     <select id="getLastDeletionDateByFundId" resultType="java.lang.String">
@@ -317,6 +263,21 @@
         and d.fund_id = #{fundId} and d.createtime >= #{updateTime}
         order by info.fund_id desc,d.deletion_type desc,d.deletion_date desc
     </select>
+    <select id="getFundDeletionTypeMapList" resultType="com.simuwang.base.pojo.dos.FundDeletionTypeDO">
+        SELECT fund_id as "fundId",deletion_type as "deletionType",channel_id as "channelId" from PPW_EMAIL.deletion_info where isvalid=1 group by fund_id,deletion_type,channel_id
+    </select>
+    <select id="countChannelFundDeletion" resultType="java.lang.Integer">
+        select count(1) from PPW_EMAIL.deletion_info where isvalid=1 and fund_id=#{fundId} and deletion_type=#{deletionType} and channel_id=#{channelId}
+        <if test="type == 1">
+            and remark is null
+        </if>
+        <if test="type != 1">
+            and remark is not null
+        </if>
+    </select>
+    <select id="getLastDeletionDate" resultType="java.lang.String">
+        select max(deletion_date) from PPW_EMAIL.deletion_info where isvalid=1 and fund_id=#{fundId} and deletion_type=#{deletionType} and channel_id=#{channelId} AND remark is null
+    </select>
     <update id="updateSendStatusByFundId">
         update deletion_info d set d.is_send=1,d.updatetime=now() where d.isvalid=1
         and d.fund_id in

+ 22 - 0
service-base/src/main/resources/mapper/daq/DeletionTypeStatisticsMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.simuwang.base.mapper.daq.DeletionTypeStatisticsMapper">
+    <resultMap id="StatisticsResultMap" type="com.simuwang.base.pojo.dos.DeletionTypeStatisticsDO">
+        <id column="id" property="id"/>
+        <result column="fund_id" property="fundId"/>
+        <result column="deletion_type" property="deletionType"/>
+        <result column="channel_id" property="channelId"/>
+        <result column="last_deletion_date" property="lastDeletionDate"/>
+        <result column="deletion_num" property="deletionNum"/>
+        <result column="processed_num" property="processedNum"/>
+        <result column="isvalid" property="isvalid"/>
+        <result column="creatorid" property="creatorId"/>
+        <result column="createtime" property="createTime"/>
+        <result column="updaterid" property="updaterId"/>
+        <result column="updatetime" property="updateTime"/>
+    </resultMap>
+    <select id="getDeletionTypeStatistics" resultMap="StatisticsResultMap">
+        select id,fund_id,deletion_type,channel_id,last_deletion_date,deletion_num,processed_num,creatorid,isvalid,createtime,updaterid,updatetime
+        from ppw_email.deletion_type_statistics where isvalid=1 and fund_id=#{fundId} and deletion_type=#{deletionType} and channel_id=#{channelId}
+    </select>
+</mapper>

+ 2 - 17
service-base/src/main/resources/mapper/daq/EmailFundAssetMapper.xml

@@ -54,8 +54,6 @@
         select          asset.id,
                         asset.fund_id,
                         asset.fund_name,
-                        info.fund_id as target_fund_id,
-                        info.fund_name as target_fund_name,
                         asset.register_number,
                         asset.price_date,
                         asset.asset_net,
@@ -63,9 +61,7 @@
                         asset.is_stored,
                         asset.exception_status,
                         asset.updatetime,
-                        parse.email_title,
                         parse.id as email_id,
-                        parse.email as email,
                         c.id as channel_id,
                         c.channel_name as channel_name
         from email_fund_asset asset
@@ -73,13 +69,11 @@
         on asset.file_id = file.id
         join email_parse_info parse
         on file.email_id = parse.id
-        left join pvn_fund_info info
-        on asset.fund_id=info.fund_id and info.isvalid=1
-        left join channel_info c
+        join channel_info c
         on asset.channel_id=c.id and c.isvalid=1
         where asset.isvalid=1 and file.isvalid=1 and parse.isvalid=1
         <if test="fundName != null and fundName !=''">
-            and (asset.fund_name like concat('%',#{fundName},'%') or asset.register_number like concat('%',#{fundName},'%'))
+            and (asset.fund_name like concat(#{fundName},'%') or asset.register_number like concat(#{fundName},'%'))
         </if>
         <if test="priceStartDate != null and priceStartDate !=''">
             and asset.price_date >= #{priceStartDate}
@@ -96,9 +90,6 @@
         <if test="isStore != null">
             and asset.is_stored = #{isStore}
         </if>
-        <if test="emailTitle != null and emailTitle != ''">
-            and parse.email_title like concat('%',#{emailTitle},'%')
-        </if>
         <if test="emailId != null and emailId !=''">
             and parse.id =#{emailId}
         </if>
@@ -130,8 +121,6 @@
         select asset.id,
             asset.fund_id,
             asset.fund_name,
-            info.fund_id as target_fund_id,
-            info.fund_name as target_fund_name,
             asset.register_number,
             asset.price_date,
             asset.asset_net,
@@ -139,7 +128,6 @@
             asset.is_stored,
             asset.exception_status,
             asset.updatetime,
-            parse.email_title,
             parse.id as email_id
         from email_fund_asset asset
         join email_file_info file
@@ -167,9 +155,6 @@
         <if test="isStore != null">
             and asset.is_stored = #{isStore}
         </if>
-        <if test="emailTitle != null and emailTitle != ''">
-            and parse.email_title like concat('%',#{emailTitle},'%')
-        </if>
         <if test="emailId != null and emailId !=''">
             and parse.id =#{emailId}
         </if>

+ 21 - 10
service-base/src/main/resources/mapper/daq/EmailFundNavMapper.xml

@@ -93,8 +93,6 @@
             nav.file_id,
             nav.fund_id,
             nav.fund_name,
-            info.fund_id as target_fund_id,
-            info.fund_name as target_fund_name,
             nav.register_number,
             nav.price_date,
             nav.nav,
@@ -117,13 +115,11 @@
                 on nav.file_id = file.id
             join email_parse_info parse
                 on file.email_id = parse.id
-            left join pvn_fund_info info
-                on nav.fund_id=info.fund_id and info.isvalid=1
-            left join channel_info c
+            join channel_info c
                 on nav.channel_id=c.id and c.isvalid=1
         WHERE nav.isvalid = 1  and file.isvalid=1 and parse.isvalid=1
         <if test="fundName != null and fundName !=''">
-            and (nav.fund_name like concat('%',#{fundName},'%') or nav.register_number like concat('%',#{fundName},'%'))
+            and (nav.fund_name like concat(#{fundName},'%') or nav.register_number like concat(#{fundName},'%'))
         </if>
         <if test="priceStartDate != null and priceStartDate !=''">
             and nav.price_date >= #{priceStartDate}
@@ -177,13 +173,11 @@
         on nav.file_id = file.id
         join email_parse_info parse
         on file.email_id = parse.id
-        left join pvn_fund_info info
-        on nav.fund_id=info.fund_id and info.isvalid=1
-        left join channel_info c
+        join channel_info c
         on nav.channel_id=c.id and c.isvalid=1
         WHERE nav.isvalid = 1  and file.isvalid=1 and parse.isvalid=1
         <if test="fundName != null and fundName !=''">
-            and (nav.fund_name like concat('%',#{fundName},'%') or nav.register_number like concat('%',#{fundName},'%'))
+            and (nav.fund_name like concat(#{fundName},'%') or nav.register_number like concat(#{fundName},'%'))
         </if>
         <if test="priceStartDate != null and priceStartDate !=''">
             and nav.price_date >= #{priceStartDate}
@@ -405,6 +399,23 @@
     <select id="selectAllFundId" resultType="java.lang.String">
         select fund_id from email_fund_nav where isvalid=1 and fund_id is not null group by fund_id
     </select>
+    <select id="getLastPriceDateByfundRegisterNumber" resultType="java.lang.String">
+        select max(nav.price_date)
+        from PPW_EMAIL.email_fund_nav nav
+        where nav.isvalid =1
+        <if test="fundName != null and fundName != ''">
+            and nav.fund_name=#{fundName}
+        </if>
+        <if test="registerNumber != null and registerNumber != ''">
+            and nav.register_number=#{registerNumber}
+        </if>
+        <if test="registerNumber == null ">
+            and nav.register_number is null
+        </if>
+        <if test="fundName == null ">
+            and nav.fund_name is null
+        </if>
+    </select>
 
 
 </mapper>

+ 17 - 11
service-base/src/main/resources/mapper/daq/FundAliasMapper.xml

@@ -9,6 +9,8 @@
         <result column="target_fund_name" property="targetFundName"/>
         <result column="target_register_number" property="targetRegisterNumber"/>
         <result column="last_price_date" property="lastPriceDate"/>
+        <result column="nav_total" property="navTotal"/>
+        <result column="asset_total" property="assetTotal"/>
         <result column="company_name" property="companyName"/>
         <result column="isvalid" property="isvalid"/>
         <result column="creatorid" property="creatorId"/>
@@ -92,20 +94,21 @@
         info.fund_name as target_fund_name,
         info.register_number as target_register_number,
         c.company_name as company_name,
-        a.last_price_date as last_price_date,
+        fnmi.last_price_date as last_price_date,
         alias.isvalid,
         alias.creatorid,
         alias.createtime,
         alias.updatetime,
-        alias.updaterid
-        from fund_alias alias
-        left join pvn_fund_info info
+        alias.updaterid,
+        fnmi.nav_total,
+        fnmi.asset_total
+        from PPW_EMAIL.fund_alias alias
+        left join PPW_EMAIL.pvn_fund_info info
         on alias.target_fund_id = info.fund_id and info.isvalid=1
-        left join pvn_company_info c
+        left join PPW_EMAIL.pvn_company_info c
         on c.company_id = info.trust_id and c.isvalid=1
-        left join (select c.fund_name,c.register_number,max(c.price_date) as last_price_date from email_fund_nav c where c.isvalid=1
-                                                                                             group by c.fund_name,c.register_number) a
-        on a.fund_name = alias.source_fund_name and a.register_number=alias.source_register_number
+        join fund_not_mapping_info fnmi
+        on fnmi.fund_alias_id=alias.id and fnmi.isvalid=1
         where alias.isvalid=1
         <if test="fundName != null and fundName !=''">
             and (alias.source_fund_name like concat('%',#{fundName},'%') or alias.source_register_number like concat('%',#{fundName},'%') )
@@ -123,13 +126,13 @@
             <when test="sort != null and sort !='' and sort=='priceDate' and order != null and order !=''">
                 order by
                 CASE
-                    WHEN a.last_price_date IS NULL THEN 1
+                    WHEN fnmi.last_price_date IS NULL THEN 1
                 ELSE 0
                 END,
-                a.last_price_date ${order}
+                fnmi.last_price_date ${order}
             </when>
             <otherwise>
-                order by a.last_price_date desc
+                order by fnmi.last_price_date desc
             </otherwise>
         </choose>
         limit #{offset},#{pageSize}
@@ -173,6 +176,9 @@
                            on alias.target_fund_id = info.fund_id and info.isvalid=1
         where alias.isvalid=1 and alias.id=#{id}
     </select>
+    <select id="getNotMappingFundList" resultType="com.simuwang.base.pojo.dos.FundRegisterDO">
+        select id, source_fund_name as "fundName",source_register_number as "registerNumber" from PPW_EMAIL.fund_alias where isvalid=1
+    </select>
 
     <insert id="batchInsert">
         insert into fund_alias(source_fund_name, source_register_number,target_fund_id,

+ 7 - 0
service-base/src/main/resources/mapper/daq/FundInfoMapper.xml

@@ -271,4 +271,11 @@
         on c.company_id = info.trust_id and c.isvalid=1
         where info.isvalid=1 and ff.isvalid=1
     </select>
+    <select id="searchFundInfoListByFundIdList" resultMap="BaseResultMap">
+        select info.fund_id,info.fund_name from PPW_EMAIL.pvn_fund_info info where isvalid=1
+        and info.fund_id in
+        <foreach collection="fundIdList" index="index" item="fundId" separator="," open="(" close=")">
+            #{fundId}
+        </foreach>
+    </select>
 </mapper>

+ 33 - 0
service-base/src/main/resources/mapper/daq/FundNotMappingMapper.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.simuwang.base.mapper.daq.FundNotMappingMapper">
+    <resultMap id="BaseResultMap" type="com.simuwang.base.pojo.dos.FundNotMappingInfoDO">
+        <id column="id" property="id"/>
+        <result column="fund_name" property="fundName"/>
+        <result column="register_number" property="registerNumber"/>
+        <result column="fund_alias_id" property="fundAliasId"/>
+        <result column="last_price_date" property="lastPriceDate"/>
+        <result column="nav_total" property="navTotal"/>
+        <result column="asset_total" property="assetTotal"/>
+        <result column="isvalid" property="isvalid"/>
+        <result column="creatorid" property="creatorId"/>
+        <result column="createtime" property="createTime"/>
+        <result column="updaterid" property="updaterId"/>
+        <result column="updatetime" property="updateTime"/>
+    </resultMap>
+    <select id="getFundNotMappingInfo" resultMap="BaseResultMap">
+        select * from fund_not_mapping_info where isvalid=1
+        <if test="fundName != null and fundName !=''">
+            and fund_name=#{fundName}
+        </if>
+        <if test="registerNumber != null and registerNumber !=''">
+            and register_number=#{registerNumber}
+        </if>
+        <if test="fundName == null">
+            and fund_name is null
+        </if>
+        <if test="registerNumber == null">
+            and register_number is null
+        </if>
+    </select>
+</mapper>

+ 14 - 5
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -879,14 +879,23 @@ public class EmailParseService {
     }
 
     private void setNavParseStatus(EmailFundNavDTO fundNavDTO, String emailTitle) {
-        // 1.单位净值或累计净值缺失
-        if (StrUtil.isBlank(fundNavDTO.getNav()) || StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal())) {
-            fundNavDTO.setParseStatus(NavParseStatusConst.NAV_DEFICIENCY);
-            return;
+//        // 1.单位净值或累计净值缺失
+//        if (StrUtil.isBlank(fundNavDTO.getNav()) || StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal())) {
+//            fundNavDTO.setParseStatus(NavParseStatusConst.NAV_DEFICIENCY);
+//            return;
+//        }
+        try{
+            Date priceDate = DateUtils.parse(fundNavDTO.getPriceDate(),DateUtils.YYYY_MM_DD);
+            if(priceDate != null && priceDate.after(new Date())){
+                fundNavDTO.setParseStatus(NavParseStatusConst.PRICE_DATE_AFTER_NOW);
+                return;
+            }
+        }catch (Exception e){
+            log.error(e.getMessage(),e);
         }
         // 考虑单独规模文件时 -> 无单位净值和累计净值
         // 2.单位净值或累计净值不大于0
-        if (!emailTitle.contains("规模")) {
+        if (StrUtil.isBlank(fundNavDTO.getAssetNet())) {
             if (StrUtil.isBlank(fundNavDTO.getNav()) || StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal())
                     || (fundNavDTO.getNav().compareTo("0") <= 0 || fundNavDTO.getCumulativeNavWithdrawal().compareTo("0") <= 0)) {
                 fundNavDTO.setParseStatus(NavParseStatusConst.NAV_NEGATIVE);

+ 6 - 0
service-manage/src/main/java/com/simuwang/manage/api/company/CompanyContactInformationController.java

@@ -120,6 +120,12 @@ public class CompanyContactInformationController{
     }
 
 
+    @SystemLog(value = "查询公司数据报送频率")
+    @RequestMapping("get-company-frequency")
+    public ResultVo searchCompanyFrequency(CompanyIdVO companyIdVO){
+        ResultVo result = companyReportFrequencyService.searchCompanyFrequency(companyIdVO);
+        return result;
+    }
     /**
      * 根据companyIdList发送数据缺失邮件
      * @param idListVO  已选行的companyIdList

+ 27 - 0
service-manage/src/main/java/com/simuwang/manage/init/CompleteScheduleConfig.java

@@ -1,6 +1,7 @@
 package com.simuwang.manage.init;
 
 import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.daq.system.SysConfigMapper;
 import com.simuwang.manage.task.*;
 import org.slf4j.Logger;
@@ -43,6 +44,9 @@ public class CompleteScheduleConfig implements SchedulingConfigurer {
 
     @Autowired
     private SendDeletionEmailTask sendDeletionEmailTask;
+
+    @Autowired
+    private NotMappingFundComputeTask notMappingFundComputeTask;
     /**
      * 执行定时任务.
      */
@@ -158,6 +162,29 @@ public class CompleteScheduleConfig implements SchedulingConfigurer {
                     return new CronTrigger(cron).nextExecutionTime(triggerContext).toInstant();
                 }
         );
+
+        taskRegistrar.addTriggerTask(
+                //1.添加任务内容(Runnable)
+                () -> {
+                    try {
+                        logger.info("缺失统计任务开始"+ DateUtils.getTime());
+                        notMappingFundComputeTask.notMappingFundCompute();
+                        logger.info("缺失统计任务结束"+ DateUtils.getTime());
+                    } catch (Exception e) {
+                        logger.error("缺失统计任务异常========="+e.getMessage()+"----" +DateUtils.getTime(),e);
+                    }
+                },
+                //2.设置执行周期(Trigger)
+                triggerContext -> {
+                    String cron = sysConfigMapper.selectConfigByKey("not_mapping_nav_asset_compute");
+                    if(StringUtil.isEmpty(cron)){
+                        cron = "0 16 0/1 * * ?";
+                    }
+                    logger.info("缺失统计定时任务执行时间:"+cron);
+                    //2.2 返回执行周期(Date)
+                    return new CronTrigger(cron).nextExecutionTime(triggerContext).toInstant();
+                }
+        );
     }
 
 }

+ 3 - 0
service-manage/src/main/java/com/simuwang/manage/service/CompanyReportFrequencyService.java

@@ -1,8 +1,11 @@
 package com.simuwang.manage.service;
 
+import com.simuwang.base.pojo.vo.CompanyIdVO;
 import com.simuwang.base.pojo.vo.CompanyReportFrequencyVO;
 import com.smppw.common.pojo.ResultVo;
 
 public interface CompanyReportFrequencyService {
     ResultVo saveCompanyReportFrequency(CompanyReportFrequencyVO companyReportFrequencyVO);
+
+    ResultVo searchCompanyFrequency(CompanyIdVO companyIdVO);
 }

+ 5 - 4
service-manage/src/main/java/com/simuwang/manage/service/DeletionService.java

@@ -1,10 +1,7 @@
 package com.simuwang.manage.service;
 
 import com.simuwang.base.common.support.MybatisPage;
-import com.simuwang.base.pojo.dos.ContactInformationDO;
-import com.simuwang.base.pojo.dos.EmailDeletionInfoDO;
-import com.simuwang.base.pojo.dos.FundDeletionDetailDO;
-import com.simuwang.base.pojo.dos.MailboxInfoDO;
+import com.simuwang.base.pojo.dos.*;
 import com.simuwang.base.pojo.dto.DeletionDownParam;
 import com.simuwang.base.pojo.dto.ExcelDeletionInfoDTO;
 import com.simuwang.base.pojo.dto.query.DeletionPageQuery;
@@ -38,4 +35,8 @@ public interface DeletionService {
     int countFundDeletion(String fundId);
 
     List<EmailDeletionInfoDO> selectDeletionInfoByFundId(String fundId,String updateTime);
+
+    List<FundDeletionTypeDO> getFundDeletionTypeMapList();
+
+    void computeDeletionTypeNum(List<FundDeletionTypeDO> fundDeletionTypeList);
 }

+ 2 - 0
service-manage/src/main/java/com/simuwang/manage/service/EmailFundAssetService.java

@@ -8,4 +8,6 @@ package com.simuwang.manage.service;
  */
 public interface EmailFundAssetService {
     void reparseFileAsset(String sourceFundName,String registerNumber, String targetFundId,String sourceFundId);
+
+    Integer countNoStoreAsset(String fundName, String registerNumber);
 }

+ 4 - 0
service-manage/src/main/java/com/simuwang/manage/service/EmailFundNavService.java

@@ -23,4 +23,8 @@ public interface EmailFundNavService {
     Map<String, Long> selectNavAmplitudeErrorMaxMinId();
 
     List<EmailFundNavDO> getNavAmplitudeErrorListById(long startIdx, long endIdx);
+
+    Integer countNoStoreNav(String fundName, String registerNumber);
+
+    String getLastPriceDateByfundRegisterNumber(String fundName, String registerNumber);
 }

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

@@ -1,10 +1,13 @@
 package com.simuwang.manage.service;
 
 import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dos.FundRegisterDO;
 import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
 import com.simuwang.base.pojo.vo.FundAliasVO;
 import com.simuwang.base.pojo.vo.IdListVO;
 
+import java.util.List;
+
 /**
  * FileName: FunAliasService
  * Author:   chenjianhua
@@ -19,4 +22,6 @@ public interface FundAliasService {
     void saveFundAlias(FundAliasVO fundAliasVO);
 
     void deleteFundAlias(IdListVO idListVO);
+
+    List<FundRegisterDO> getNotMappingFundList();
 }

+ 2 - 0
service-manage/src/main/java/com/simuwang/manage/service/FundInformationService.java

@@ -23,4 +23,6 @@ public interface FundInformationService {
     MybatisPage<FundInformationVO> searchFundInfoList(FundInfoPageQuery fundInfoPageQuery);
 
     ResultVo<FundInfoVO> searchFundDetail(String fundId);
+
+    Map<String, String> getFundIdNameByFundIdList(List<String> fundIdList);
 }

+ 9 - 0
service-manage/src/main/java/com/simuwang/manage/service/FundNotMappingService.java

@@ -0,0 +1,9 @@
+package com.simuwang.manage.service;
+
+import com.simuwang.base.pojo.dos.FundNotMappingInfoDO;
+
+import java.util.List;
+
+public interface FundNotMappingService {
+    void batchInsert(List<FundNotMappingInfoDO> fundNotMappingInfoDOList);
+}

+ 9 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyReportFrequencyServiceImpl.java

@@ -5,6 +5,7 @@ import com.simuwang.base.mapper.daq.FundInfoMapper;
 import com.simuwang.base.mapper.daq.FundReportFrequencyMapper;
 import com.simuwang.base.pojo.dos.CompanyReportFrequencyDO;
 import com.simuwang.base.pojo.dos.FundReportFrequencyDO;
+import com.simuwang.base.pojo.vo.CompanyIdVO;
 import com.simuwang.base.pojo.vo.CompanyReportFrequencyVO;
 import com.simuwang.manage.service.CompanyReportFrequencyService;
 import com.simuwang.shiro.utils.UserUtils;
@@ -73,4 +74,12 @@ public class CompanyReportFrequencyServiceImpl implements CompanyReportFrequency
 
         return vo;
     }
+
+    @Override
+    public ResultVo searchCompanyFrequency(CompanyIdVO companyIdVO) {
+        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
+        CompanyReportFrequencyDO companyFrequency = companyReportFrequencyMapper.getFrequencyByCompanyId(companyIdVO.getCompanyId());
+        vo.setData(companyFrequency);
+        return vo;
+    }
 }

+ 55 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/DeletionServiceImpl.java

@@ -20,6 +20,7 @@ import com.simuwang.shiro.utils.UserUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -62,6 +63,10 @@ public class DeletionServiceImpl implements DeletionService {
 
     @Autowired
     private NavMapper navMapper;
+
+    @Autowired
+    private DeletionTypeStatisticsMapper deletionTypeStatisticsMapper;
+
     @Override
     public MybatisPage<DeletionInfoVO> searchDeletionList(DeletionPageQuery deletionPageQuery) {
         List<DeletionInfoDO> deletionInfoDOList = deletionInfoMapper.searchDeletionList(deletionPageQuery);
@@ -79,8 +84,10 @@ public class DeletionServiceImpl implements DeletionService {
     }
 
     @Override
+    @Async
     public void saveFundDeletionList(List<FundDeletionInfoVO> fundDeletionInfoVOList) {
         List<FundDeletionInfoDO> fundDeletionInfoDOList = new ArrayList<>();
+        List<FundDeletionTypeDO> fundDeletionTypeDOList = new ArrayList<>();
         for(FundDeletionInfoVO vo : fundDeletionInfoVOList){
             FundDeletionInfoDO fundDeletionInfoDO = new FundDeletionInfoDO();
             fundDeletionInfoDO.setId(vo.getId());
@@ -93,17 +100,30 @@ public class DeletionServiceImpl implements DeletionService {
             fundDeletionInfoDO.setUpdateTime(DateUtils.getNowDate());
             fundDeletionInfoDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
             fundDeletionInfoDOList.add(fundDeletionInfoDO);
+            FundDeletionTypeDO fundDeletionTypeDO = new FundDeletionTypeDO();
+            fundDeletionTypeDO.setDeletionType(vo.getDeletionType());
+            fundDeletionTypeDO.setFundId(vo.getFundId());
+            fundDeletionTypeDO.setChannelId(vo.getChannelId());
+            fundDeletionTypeDOList.add(fundDeletionTypeDO);
         }
         deletionInfoMapper.batchUpdate(fundDeletionInfoDOList);
+        computeDeletionTypeNum(fundDeletionTypeDOList);
     }
 
     @Override
     public void saveBatchDeletionRemark(FundDeletionRemarkVO fundDeletionRemarkVO) {
         String remark = fundDeletionRemarkVO.getRemark();
+        List<FundDeletionTypeDO> fundDeletionTypeDOList = new ArrayList<>();
         Integer userId = UserUtils.getLoginUser().getUserId();
         for(FundDeletionTypeVO remarkVO : fundDeletionRemarkVO.getFundDeletionTypeList()){
             deletionInfoMapper.updateRemark(remarkVO.getChannelId(),remarkVO.getFundId(),remarkVO.getDeletionType(),remarkVO.getDeletionDate(),remark,userId);
+            FundDeletionTypeDO fundDeletionTypeDO = new FundDeletionTypeDO();
+            fundDeletionTypeDO.setDeletionType(remarkVO.getDeletionType());
+            fundDeletionTypeDO.setFundId(remarkVO.getFundId());
+            fundDeletionTypeDO.setChannelId(remarkVO.getChannelId());
+            fundDeletionTypeDOList.add(fundDeletionTypeDO);
         }
+        computeDeletionTypeNum(fundDeletionTypeDOList);
     }
 
     @Override
@@ -192,6 +212,41 @@ public class DeletionServiceImpl implements DeletionService {
         return deletionInfoMapper.selectDeletionDetailByFundId(fundId,updateTime);
     }
 
+    @Override
+    public List<FundDeletionTypeDO> getFundDeletionTypeMapList() {
+        return deletionInfoMapper.getFundDeletionTypeMapList();
+    }
+
+    @Override
+    public void computeDeletionTypeNum(List<FundDeletionTypeDO> fundDeletionTypeList) {
+        for (FundDeletionTypeDO fundDeletionType : fundDeletionTypeList) {
+            String fundId = fundDeletionType.getFundId();
+            Integer deletionType = fundDeletionType.getDeletionType();
+            Integer channelId = fundDeletionType.getDeletionType();
+            Integer deletionNum = deletionInfoMapper.countChannelFundDeletion(fundId, deletionType, channelId, 1);
+            Integer processedNum = deletionInfoMapper.countChannelFundDeletion(fundId, deletionType, channelId, 0);
+            String lastDeletionDate = deletionInfoMapper.getLastDeletionDate(fundId, deletionType, channelId);
+            DeletionTypeStatisticsDO deletionTypeStatisticsDO = new DeletionTypeStatisticsDO();
+            deletionTypeStatisticsDO.setFundId(fundId);
+            deletionTypeStatisticsDO.setIsvalid(1);
+            deletionTypeStatisticsDO.setChannelId(channelId);
+            deletionTypeStatisticsDO.setCreateTime(new Date());
+            deletionTypeStatisticsDO.setCreatorId(999999);
+            deletionTypeStatisticsDO.setUpdaterId(999999);
+            deletionTypeStatisticsDO.setUpdateTime(new Date());
+            deletionTypeStatisticsDO.setLastDeletionDate(lastDeletionDate);
+            deletionTypeStatisticsDO.setDeletionType(Integer.valueOf(deletionType));
+            deletionTypeStatisticsDO.setDeletionNum(deletionNum);
+            deletionTypeStatisticsDO.setProcessedNum(processedNum);
+            DeletionTypeStatisticsDO oldDeletionTypeStatisticsDO = deletionTypeStatisticsMapper.getDeletionTypeStatistics(fundId, deletionType,channelId);
+            if (oldDeletionTypeStatisticsDO != null) {
+                deletionTypeStatisticsDO.setId(oldDeletionTypeStatisticsDO.getId());
+                deletionTypeStatisticsDO.setUpdateTime(new Date());
+            }
+            deletionTypeStatisticsMapper.insertOrUpdate(deletionTypeStatisticsDO);
+        }
+    }
+
     private void distributionDeletion(Integer channelId,String fundId, List<NavDO> navDOList) {
         if(navDOList.size() < 1){
             return;

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

@@ -82,4 +82,9 @@ public class EmailFundAssetServiceImpl implements EmailFundAssetService {
 
         }
     }
+
+    @Override
+    public Integer countNoStoreAsset(String fundName, String registerNumber) {
+        return emailFundAssetMapper.countNoStoreAsset(fundName,registerNumber);
+    }
 }

+ 10 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/EmailFundNavServiceImpl.java

@@ -103,4 +103,14 @@ public class EmailFundNavServiceImpl implements EmailFundNavService {
     public List<EmailFundNavDO> getNavAmplitudeErrorListById(long startIdx, long endIdx) {
         return emailFundNavMapper.getNavAmplitudeErrorListById(startIdx,endIdx);
     }
+
+    @Override
+    public Integer countNoStoreNav(String fundName, String registerNumber) {
+        return emailFundNavMapper.countNoStoreNav(fundName,registerNumber);
+    }
+
+    @Override
+    public String getLastPriceDateByfundRegisterNumber(String fundName, String registerNumber) {
+        return emailFundNavMapper.getLastPriceDateByfundRegisterNumber(fundName,registerNumber);
+    }
 }

+ 36 - 14
service-manage/src/main/java/com/simuwang/manage/service/impl/FundAliasServiceImpl.java

@@ -2,11 +2,10 @@ package com.simuwang.manage.service.impl;
 
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.StringUtil;
-import com.simuwang.base.mapper.daq.CompanyInformationMapper;
-import com.simuwang.base.mapper.daq.EmailFundAssetMapper;
-import com.simuwang.base.mapper.daq.EmailFundNavMapper;
-import com.simuwang.base.mapper.daq.FundAliasMapper;
+import com.simuwang.base.mapper.daq.*;
 import com.simuwang.base.pojo.dos.FundAliasDO;
+import com.simuwang.base.pojo.dos.FundNotMappingInfoDO;
+import com.simuwang.base.pojo.dos.FundRegisterDO;
 import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
 import com.simuwang.base.pojo.vo.FundAliasVO;
 import com.simuwang.base.pojo.vo.IdListVO;
@@ -53,20 +52,13 @@ public class FundAliasServiceImpl implements FundAliasService {
     @Autowired
     private EmailFundAssetService emailFundAssetService;
 
+    @Autowired
+    private FundNotMappingMapper fundNotMappingMapper;
+
     @Override
     public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery) {
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.searchFundAlias(fundAliasPageQuery);
         List<FundAliasVO> fundAliasVOList =  fundAliasDOList.stream().map(FundAliasDO::toVo).collect(Collectors.toList());
-        for(FundAliasVO vo : fundAliasVOList){
-            //异常净值数量
-            Integer navTotal = emailFundNavMapper.countNoStoreNav(vo.getSourceFundName(),vo.getSourceRegisterNumber());
-            vo.setNavTotal(navTotal);
-            //异常净值数量
-            Integer assetTotal = emailFundAssetMapper.countNoStoreAsset(vo.getSourceFundName(),vo.getSourceRegisterNumber());
-            vo.setAssetTotal(assetTotal);
-//            //最新净值日期
-//            vo.setPriceDate(emailFundNavMapper.getMaxPriceDate(vo.getSourceFundName()));
-        }
         long total = fundAliasMapper.countFundAlias(fundAliasPageQuery);
         return MybatisPage.of(total,fundAliasVOList);
     }
@@ -104,8 +96,33 @@ public class FundAliasServiceImpl implements FundAliasService {
         emailFundAssetService.reparseFileAsset(fundAliasVO.getSourceFundName(),fundAliasVO.getSourceRegisterNumber(),fundAliasVO.getTargetFundId(),oldFundId);
         //处理采集数据,将采集的数据入库
         emailFundInfoService.reparseValuationFile(fundAliasVO.getSourceFundName(),fundAliasVO.getSourceRegisterNumber());
+        //更新别名统计数据
+        computeFundMappingInfo(fundAliasVO.getSourceFundName(),fundAliasVO.getSourceRegisterNumber());
+    }
+
+    private void computeFundMappingInfo(String fundName,String registerNumber){
+        FundNotMappingInfoDO fundNotMappingInfoDO = new FundNotMappingInfoDO();
+        fundNotMappingInfoDO.setFundName(fundName);
+        fundNotMappingInfoDO.setRegisterNumber(registerNumber);
+        //异常净值数量
+        Integer navTotal = emailFundNavMapper.countNoStoreNav(fundName,registerNumber);
+        //异常净值数量
+        Integer assetTotal = emailFundAssetMapper.countNoStoreAsset(fundName,registerNumber);
+        String lastPriceDate = emailFundNavMapper.getLastPriceDateByfundRegisterNumber(fundName,registerNumber);
+        fundNotMappingInfoDO.setAssetTotal(assetTotal);
+        fundNotMappingInfoDO.setLastPriceDate(lastPriceDate);
+        fundNotMappingInfoDO.setNavTotal(navTotal);
+        fundNotMappingInfoDO.setIsvalid(1);
+        fundNotMappingInfoDO.setCreateTime(new Date());
+        fundNotMappingInfoDO.setUpdateTime(new Date());
+        FundNotMappingInfoDO oldFundNotMappingInfoDO = fundNotMappingMapper.getFundNotMappingInfo(fundNotMappingInfoDO);
+        if(oldFundNotMappingInfoDO != null){
+            fundNotMappingInfoDO.setId(oldFundNotMappingInfoDO.getId());
+        }
+        fundNotMappingMapper.insertOrUpdate(fundNotMappingInfoDO);
     }
 
+
     @Override
     public void deleteFundAlias(IdListVO idListVO) {
         List<Integer> idList = idListVO.getIdList();
@@ -114,4 +131,9 @@ public class FundAliasServiceImpl implements FundAliasService {
             fundAliasMapper.batchDelete(idList,userId);
         }
     }
+
+    @Override
+    public List<FundRegisterDO> getNotMappingFundList() {
+        return fundAliasMapper.getNotMappingFundList();
+    }
 }

+ 11 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/FundInformationServiceImpl.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -58,4 +59,14 @@ public class FundInformationServiceImpl implements FundInformationService {
         FundInfoVO fundInfoVO = fundInfoDO.toVO();
         return ResultVo.ok(fundInfoVO);
     }
+
+    @Override
+    public Map<String, String> getFundIdNameByFundIdList(List<String> fundIdList) {
+        Map<String, String> map = new HashMap<>();
+        List<FundInfoDO> result = fundInfoMapper.searchFundInfoListByFundIdList(fundIdList);
+        for (FundInfoDO fundInformationDO : result) {
+            map.put(fundInformationDO.getFundId(), fundInformationDO.getFundName());
+        }
+        return map;
+    }
 }

+ 26 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/FundNotMappingServiceImpl.java

@@ -0,0 +1,26 @@
+package com.simuwang.manage.service.impl;
+
+import com.simuwang.base.mapper.daq.FundNotMappingMapper;
+import com.simuwang.base.pojo.dos.FundNotMappingInfoDO;
+import com.simuwang.manage.service.FundNotMappingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class FundNotMappingServiceImpl implements FundNotMappingService {
+    @Autowired
+    private FundNotMappingMapper fundNotMappingMapper;
+    
+    @Override
+    public void batchInsert(List<FundNotMappingInfoDO> fundNotMappingInfoDOList) {
+        for (FundNotMappingInfoDO fundNotMappingInfoDO : fundNotMappingInfoDOList) {
+            FundNotMappingInfoDO oldFundNotMappingInfoDO = fundNotMappingMapper.getFundNotMappingInfo(fundNotMappingInfoDO);
+            if(oldFundNotMappingInfoDO != null){
+                fundNotMappingInfoDO.setId(oldFundNotMappingInfoDO.getId());
+            }
+        }
+        fundNotMappingMapper.insertOrUpdate(fundNotMappingInfoDOList);
+    }
+}

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

@@ -9,6 +9,7 @@ import com.simuwang.base.mapper.daq.*;
 import com.simuwang.base.pojo.dos.*;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.vo.*;
+import com.simuwang.manage.service.FundInformationService;
 import com.simuwang.manage.service.ParseEmailDetailService;
 import com.simuwang.shiro.utils.UserUtils;
 import com.smppw.common.pojo.ResultVo;
@@ -19,6 +20,7 @@ import org.springframework.stereotype.Service;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -39,12 +41,25 @@ public class ParseEmailDetailServiceImpl implements ParseEmailDetailService {
     @Autowired
     private NavMapper navMapper;
 
+    @Autowired
+    private FundInformationService fundInformationService;
+
     @Override
     public MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery) {
         if(StringUtil.isNotEmpty(parseDetailPageQuery.getUpdateEndDate())){
             parseDetailPageQuery.setUpdateEndDate(DateUtil.getAroundDate(DateUtils.parse(parseDetailPageQuery.getUpdateEndDate(),DateUtils.YYYY_MM_DD),1));
         }
         List<EmailFundNavDO> dataList = emailFundNavMapper.searchNavDetail(parseDetailPageQuery);
+        List<String> fundIdList = dataList.stream().filter(e -> StringUtil.isNotEmpty(e.getFundId())).map(e -> e.getFundId()).collect(Collectors.toList());
+        if(!fundIdList.isEmpty()){
+            Map<String,String> fundIdNameMap = fundInformationService.getFundIdNameByFundIdList(fundIdList);
+            for (EmailFundNavDO emailFundNavDO : dataList) {
+                if(StringUtil.isNotEmpty(emailFundNavDO.getFundId())){
+                    emailFundNavDO.setTargetFundId(emailFundNavDO.getFundId());
+                    emailFundNavDO.setTargetFundName(fundIdNameMap.get(emailFundNavDO.getFundId()));
+                }
+            }
+        }
         List<EmailFundNavVO> voList = dataList.stream().map(EmailFundNavDO::toVo).collect(Collectors.toList());
         long total = emailFundNavMapper.countNavDetail(parseDetailPageQuery);
         return MybatisPage.of(total,voList);
@@ -56,6 +71,16 @@ public class ParseEmailDetailServiceImpl implements ParseEmailDetailService {
             parseDetailPageQuery.setUpdateEndDate(DateUtil.getAroundDate(DateUtils.parse(parseDetailPageQuery.getUpdateEndDate(),DateUtils.YYYY_MM_DD),1));
         }
         List<EmailFundAssetDO> dataList = emailFundAssetMapper.searchAssetDetail(parseDetailPageQuery);
+        List<String> fundIdList = dataList.stream().filter(e -> StringUtil.isNotEmpty(e.getFundId())).map(e -> e.getFundId()).collect(Collectors.toList());
+        if(!fundIdList.isEmpty()){
+            Map<String,String> fundIdNameMap = fundInformationService.getFundIdNameByFundIdList(fundIdList);
+            for (EmailFundAssetDO emailFundAssetDO : dataList) {
+                if(StringUtil.isNotEmpty(emailFundAssetDO.getFundId())){
+                    emailFundAssetDO.setTargetFundId(emailFundAssetDO.getFundId());
+                    emailFundAssetDO.setTargetFundName(fundIdNameMap.get(emailFundAssetDO.getFundId()));
+                }
+            }
+        }
         List<EmailFundAssetVO> voList = dataList.stream().map(EmailFundAssetDO::toVo).collect(Collectors.toList());
         long total = emailFundAssetMapper.countAssetDetail(parseDetailPageQuery);
         return MybatisPage.of(total,voList);

+ 3 - 0
service-manage/src/main/java/com/simuwang/manage/task/FundDeletionTask.java

@@ -40,6 +40,9 @@ public class FundDeletionTask {
             if(!mailboxInfoOS.isEmpty()){
                 deletionService.computeDeletion(mailboxInfoOS);
             }
+            //统计缺失类型的处理数据量
+            List<FundDeletionTypeDO> fundDeletionTypeList = deletionService.getFundDeletionTypeMapList();
+            deletionService.computeDeletionTypeNum(fundDeletionTypeList);
         }catch (Exception e){
             log.error(e.getMessage(),e);
             endEmailTask(emailTaskInfoDO.getId(),-1);

+ 55 - 0
service-manage/src/main/java/com/simuwang/manage/task/NotMappingFundComputeTask.java

@@ -0,0 +1,55 @@
+package com.simuwang.manage.task;
+
+import com.simuwang.base.pojo.dos.FundNotMappingInfoDO;
+import com.simuwang.base.pojo.dos.FundRegisterDO;
+import com.simuwang.manage.service.EmailFundAssetService;
+import com.simuwang.manage.service.EmailFundNavService;
+import com.simuwang.manage.service.FundAliasService;
+import com.simuwang.manage.service.FundNotMappingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class NotMappingFundComputeTask {
+
+    @Autowired
+    private  FundAliasService fundAliasService;
+
+    @Autowired
+    private EmailFundNavService emailFundNavService;
+
+    @Autowired
+    private EmailFundAssetService emailFundAssetService;
+
+    @Autowired
+    private FundNotMappingService fundNotMappingService;
+
+    public void notMappingFundCompute() {
+        List<FundRegisterDO> fundRegisterDOList = fundAliasService.getNotMappingFundList();
+        List<FundNotMappingInfoDO> fundNotMappingInfoDOList = new ArrayList<>();
+        for (FundRegisterDO fundRegisterDO : fundRegisterDOList) {
+            FundNotMappingInfoDO fundNotMappingInfoDO = new FundNotMappingInfoDO();
+            fundNotMappingInfoDO.setFundName(fundRegisterDO.getFundName());
+            fundNotMappingInfoDO.setFundAliasId(fundRegisterDO.getId());
+            fundNotMappingInfoDO.setRegisterNumber(fundRegisterDO.getRegisterNumber());
+            //异常净值数量
+            Integer navTotal = emailFundNavService.countNoStoreNav(fundRegisterDO.getFundName(),fundRegisterDO.getRegisterNumber());
+            //异常净值数量
+            Integer assetTotal = emailFundAssetService.countNoStoreAsset(fundRegisterDO.getFundName(),fundRegisterDO.getRegisterNumber());
+
+            String lastPriceDate = emailFundNavService.getLastPriceDateByfundRegisterNumber(fundRegisterDO.getFundName(),fundRegisterDO.getRegisterNumber());
+            fundNotMappingInfoDO.setAssetTotal(assetTotal);
+            fundNotMappingInfoDO.setLastPriceDate(lastPriceDate);
+            fundNotMappingInfoDO.setNavTotal(navTotal);
+            fundNotMappingInfoDO.setIsvalid(1);
+            fundNotMappingInfoDO.setCreateTime(new Date());
+            fundNotMappingInfoDO.setUpdateTime(new Date());
+            fundNotMappingInfoDOList.add(fundNotMappingInfoDO);
+        }
+        fundNotMappingService.batchInsert(fundNotMappingInfoDOList);
+    }
+}