Преглед изворни кода

feat: 导入公司对接数据开发

chenjianhua пре 1 месец
родитељ
комит
5337780916
100 измењених фајлова са 1840 додато и 331 уклоњено
  1. 3 0
      service-base/src/main/java/com/simuwang/base/common/conts/ExcelConst.java
  2. 48 0
      service-base/src/main/java/com/simuwang/base/common/enums/ContactStatusType.java
  3. 47 0
      service-base/src/main/java/com/simuwang/base/common/enums/SignMethodType.java
  4. 1 1
      service-base/src/main/java/com/simuwang/base/mapper/daq/AssetMapper.java
  5. 4 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/ChannelEmailMapper.java
  6. 1 1
      service-base/src/main/java/com/simuwang/base/mapper/daq/CompanyContactInfoMapper.java
  7. 4 2
      service-base/src/main/java/com/simuwang/base/mapper/daq/CompanyEmailSendHistoryMapper.java
  8. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/CompanyInformationMapper.java
  9. 10 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/CompanySendStatusMapper.java
  10. 5 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/ContactInformationMapper.java
  11. 3 3
      service-base/src/main/java/com/simuwang/base/mapper/daq/DeletionInfoMapper.java
  12. 2 2
      service-base/src/main/java/com/simuwang/base/mapper/daq/DistributionMapper.java
  13. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/EmailFundNavMapper.java
  14. 1 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/FundInfoMapper.java
  15. 2 2
      service-base/src/main/java/com/simuwang/base/mapper/daq/FundPositionDetailMapper.java
  16. 2 0
      service-base/src/main/java/com/simuwang/base/mapper/daq/NavMapper.java
  17. 2 2
      service-base/src/main/java/com/simuwang/base/mapper/daq/ValuationTableMapper.java
  18. 9 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyContactInfoPageDO.java
  19. 7 4
      service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyContactPageDO.java
  20. 92 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyEmailPageDO.java
  21. 59 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/CompanySendStatusDO.java
  22. 8 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/ContactInformationDO.java
  23. 10 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/DeletionInfoDO.java
  24. 5 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/DistributionDO.java
  25. 10 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/DistributionTablePageDO.java
  26. 8 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/EmailDeletionInfoDO.java
  27. 5 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/FundDeletionInfoDO.java
  28. 5 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/FundPositionDetailDO.java
  29. 0 15
      service-base/src/main/java/com/simuwang/base/pojo/dos/LastCompanyContactInfoDO.java
  30. 3 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/ValuationTableAttributeDO.java
  31. 5 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/ValuationTableDO.java
  32. 49 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/CompanyContactExcelData.java
  33. 35 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/ContactExcelData.java
  34. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/NavAssetExcelData.java
  35. 12 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/query/DeletionPageQuery.java
  36. 12 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/query/DistributionPageQuery.java
  37. 12 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/query/FundDeletionPageQuery.java
  38. 59 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactExcelFailDataVO.java
  39. 53 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactExcelSuccessDataVO.java
  40. 6 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactInfoPageVO.java
  41. 4 2
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactPageVO.java
  42. 38 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactUploadResult.java
  43. 52 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyEmailPageVO.java
  44. 48 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/ContactExcelFailDataVO.java
  45. 42 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/ContactExcelSuccessDataVO.java
  46. 4 8
      service-base/src/main/java/com/simuwang/base/pojo/vo/ContactInformationVO.java
  47. 38 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/ContactUploadResult.java
  48. 8 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/DeletionInfoVO.java
  49. 8 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/DistributionTablePageVO.java
  50. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/DistributionVO.java
  51. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundAssetVO.java
  52. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundDeletionInfoVO.java
  53. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundDeletionTypeVO.java
  54. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundNavVO.java
  55. 5 2
      service-base/src/main/resources/mapper/daq/AssetMapper.xml
  56. 6 0
      service-base/src/main/resources/mapper/daq/ChannelEmailMapper.xml
  57. 21 15
      service-base/src/main/resources/mapper/daq/CompanyContactInfoMapper.xml
  58. 37 23
      service-base/src/main/resources/mapper/daq/CompanyEmailHistoryMapper.xml
  59. 3 0
      service-base/src/main/resources/mapper/daq/CompanyInformationMapper.xml
  60. 23 0
      service-base/src/main/resources/mapper/daq/CompanySendStatusMapper.xml
  61. 21 9
      service-base/src/main/resources/mapper/daq/ContactInformationMapper.xml
  62. 51 36
      service-base/src/main/resources/mapper/daq/DeletionInfoMapper.xml
  63. 22 8
      service-base/src/main/resources/mapper/daq/DistributionMapper.xml
  64. 2 2
      service-base/src/main/resources/mapper/daq/EmailFundAssetMapper.xml
  65. 6 15
      service-base/src/main/resources/mapper/daq/EmailFundNavMapper.xml
  66. 5 0
      service-base/src/main/resources/mapper/daq/FundInfoMapper.xml
  67. 3 2
      service-base/src/main/resources/mapper/daq/FundPositionDetailMapper.xml
  68. 12 4
      service-base/src/main/resources/mapper/daq/NavMapper.xml
  69. 2 2
      service-base/src/main/resources/mapper/daq/ValuationTableAttributeMapper.xml
  70. 5 3
      service-base/src/main/resources/mapper/daq/ValuationTableMapper.xml
  71. 15 13
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java
  72. 2 1
      service-deploy/src/main/resources/application.yml
  73. 20 46
      service-manage/src/main/java/com/simuwang/manage/api/company/CompanyEmailSendHistoryController.java
  74. 16 6
      service-manage/src/main/java/com/simuwang/manage/api/contact/CompanyContactController.java
  75. 12 12
      service-manage/src/main/java/com/simuwang/manage/api/deletion/DeletionController.java
  76. 5 0
      service-manage/src/main/java/com/simuwang/manage/api/email/EmailConfigController.java
  77. 26 3
      service-manage/src/main/java/com/simuwang/manage/init/CompleteScheduleConfig.java
  78. 2 0
      service-manage/src/main/java/com/simuwang/manage/service/ChannelService.java
  79. 4 1
      service-manage/src/main/java/com/simuwang/manage/service/CompanyContactService.java
  80. 1 1
      service-manage/src/main/java/com/simuwang/manage/service/CompanyEmailConfigService.java
  81. 4 2
      service-manage/src/main/java/com/simuwang/manage/service/CompanyEmailSendHistoryService.java
  82. 3 0
      service-manage/src/main/java/com/simuwang/manage/service/CompanyInformationService.java
  83. 9 0
      service-manage/src/main/java/com/simuwang/manage/service/CompanySendStatusService.java
  84. 9 0
      service-manage/src/main/java/com/simuwang/manage/service/ContactInformationService.java
  85. 2 1
      service-manage/src/main/java/com/simuwang/manage/service/DeletionService.java
  86. 2 0
      service-manage/src/main/java/com/simuwang/manage/service/EmailConfigService.java
  87. 6 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/ChannelServiceImpl.java
  88. 233 6
      service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyContactServiceImpl.java
  89. 5 4
      service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyEmailConfigServiceImpl.java
  90. 21 11
      service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyEmailSendHistoryServiceImpl.java
  91. 4 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyInformationServiceImpl.java
  92. 23 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/CompanySendStatusServiceImpl.java
  93. 165 1
      service-manage/src/main/java/com/simuwang/manage/service/impl/ContactInformationServiceImpl.java
  94. 80 53
      service-manage/src/main/java/com/simuwang/manage/service/impl/DeletionServiceImpl.java
  95. 1 1
      service-manage/src/main/java/com/simuwang/manage/service/impl/DistributionServiceImpl.java
  96. 10 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/EmailConfigServiceImpl.java
  97. 19 5
      service-manage/src/main/java/com/simuwang/manage/service/impl/FundNavAssetServiceImpl.java
  98. 1 1
      service-manage/src/main/java/com/simuwang/manage/service/impl/ImageSeviceImpl.java
  99. 47 0
      service-manage/src/main/java/com/simuwang/manage/task/CompanySendTask.java
  100. 0 0
      service-manage/src/main/java/com/simuwang/manage/task/FundDeletionTask.java

+ 3 - 0
service-base/src/main/java/com/simuwang/base/common/conts/ExcelConst.java

@@ -18,4 +18,7 @@ public class ExcelConst {
     public final static String SAVE_FAIL= "数据入库失败";
     public static final String ERROR_NAV = "单位净值缺失或者有误";
     public static final String ERROR_NAV_WITHDRAWAL = "累计净值缺失或者有误";
+    public static final String ERROR_COMPANY_ID = "公司ID有误,无法查询公司名称";
+    public static final String ERROR_DATE_FORMAT = "对接日期格式错误,请使用YYYY-MM-dd格式";
+    public static final String ERROR_METHOD = "对接状态或者签约方式无法匹配";
 }

+ 48 - 0
service-base/src/main/java/com/simuwang/base/common/enums/ContactStatusType.java

@@ -0,0 +1,48 @@
+package com.simuwang.base.common.enums;
+
+import java.util.stream.Stream;
+
+/**
+ * FileName: DeletionType
+ * Author:   chenjianhua
+ * Date:     2024/9/17 22:10
+ * Description: ${DESCRIPTION}
+ */
+public enum ContactStatusType {
+    //单位分红/拆分比例
+    NOTICE(1, "已通知"), INTENTION(2, "有意向"),
+    NO_INTENTION(3, "暂无意向"), CONSIDERING(4, "考虑中")
+    , NOT_CONTACT_INFO(5, "无联系方式");
+
+    private final Integer code;
+    private final String info;
+
+    ContactStatusType(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+    public static ContactStatusType getContactStatusByCode(Integer code) {
+        if (null == code){
+            return null;
+        }
+        for(ContactStatusType s : ContactStatusType.values()){
+            if(code.equals(s.getCode())){
+                return s;
+            }
+        }
+        return null;
+    }
+
+    public static ContactStatusType getContactStatusTypeByInfo(String info) {
+        return Stream.of(ContactStatusType.values()).filter(e -> e.info.equals(info)).findFirst().orElse(null);
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+}

+ 47 - 0
service-base/src/main/java/com/simuwang/base/common/enums/SignMethodType.java

@@ -0,0 +1,47 @@
+package com.simuwang.base.common.enums;
+
+import java.util.stream.Stream;
+
+/**
+ * FileName: DeletionType
+ * Author:   chenjianhua
+ * Date:     2024/9/17 22:10
+ * Description: ${DESCRIPTION}
+ */
+public enum SignMethodType {
+    //单位分红/拆分比例
+    HOSTING(1, "托管平台授权"), SINGE_SIGN(2, "单方签约"),
+    BOTH_SIGN(3, "双方签约");
+
+    private final Integer code;
+    private final String info;
+
+    SignMethodType(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+    public static SignMethodType getSignMethodTypeByCode(Integer code) {
+        if (null == code){
+            return null;
+        }
+        for(SignMethodType s : SignMethodType.values()){
+            if(code.equals(s.getCode())){
+                return s;
+            }
+        }
+        return null;
+    }
+
+    public static SignMethodType getSignMethodTypeByInfo(String info) {
+        return Stream.of(SignMethodType.values()).filter(e -> e.info.equals(info)).findFirst().orElse(null);
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+}

+ 1 - 1
service-base/src/main/java/com/simuwang/base/mapper/daq/AssetMapper.java

@@ -20,7 +20,7 @@ public interface AssetMapper {
 
     void deleteAsset(@Param("fundId") String fundId, @Param("priceDate") String priceDate,@Param("updaterId")Integer userId);
 
-    List<AssetDO> selectAssetByFundId(@Param("fundId")String fundId);
+    List<AssetDO> selectAssetByFundId(@Param("fundId")String fundId,@Param("channelId")Integer channelId);
 
     void batchDeleteAsset(@Param("fundId")String sourceFundId,@Param("priceDateList") List<String> priceDateList);
 

+ 4 - 0
service-base/src/main/java/com/simuwang/base/mapper/daq/ChannelEmailMapper.java

@@ -20,4 +20,8 @@ public interface ChannelEmailMapper extends BaseMapper<ChannelEmailInfoDO> {
     List<ChannelEmailInfoDO> searchChannelEmailList(ChannelIdPageQuery getByIdQuery);
 
     long countChannelEmail(ChannelIdPageQuery getByIdQuery);
+
+    int countChannelEmailByEmail(@Param("email")String email);
+
+    Integer selectChannelIdByEmail(@Param("email")String email);
 }

+ 1 - 1
service-base/src/main/java/com/simuwang/base/mapper/daq/CompanyContactInfoMapper.java

@@ -27,7 +27,7 @@ public interface CompanyContactInfoMapper extends BaseMapper<CompanyContactInfoD
 
     long countCompanyContactByCompanyId(CompanyIdQuery companyIdQuery);
 
-    CompanyContactPageDO saveCompanyContactDetail(Integer id);
+    CompanyContactPageDO selectCompanyContactDetail(Integer id);
 
     void deleteCompanyContactInfoById(@Param("id") Integer id,@Param("userId") Integer userId);
 

+ 4 - 2
service-base/src/main/java/com/simuwang/base/mapper/daq/CompanyEmailSendHistoryMapper.java

@@ -1,9 +1,11 @@
 package com.simuwang.base.mapper.daq;
 
+import com.simuwang.base.pojo.dos.CompanyEmailPageDO;
 import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO;
 import com.simuwang.base.pojo.dto.query.CompanyEmailHistoryPageQuery;
 import com.simuwang.base.pojo.dto.query.CompanyEmailPageQuery;
 import com.simuwang.base.pojo.vo.CompanyEmailConfigVO;
+import com.simuwang.base.pojo.vo.CompanyEmailPageVO;
 import com.simuwang.base.pojo.vo.CompanyEmailSendHistoryVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -18,11 +20,11 @@ import java.util.List;
  */
 @Mapper
 public interface CompanyEmailSendHistoryMapper {
-    public List<CompanyEmailSendHistoryDO> searchCompanyEmailList(CompanyEmailPageQuery companyEmailPageQuery);
+    public List<CompanyEmailPageDO> searchCompanyEmailList(CompanyEmailPageQuery companyEmailPageQuery);
 
     List<CompanyEmailSendHistoryDO> searchEmailHistory(CompanyEmailHistoryPageQuery companyEmailHistoryPageQuery);
 
-    void deleteEmailHistory(@Param("emailList")List<String> email);
+    void deleteEmailHistory(@Param("companyId") String companyId,@Param("email") String email);
 
     void deleteEmailHistoryByIds(@Param("ids") List<Integer> idList,@Param("updaterId")Integer userId);
 

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

@@ -19,4 +19,6 @@ public interface CompanyInformationMapper {
     String getCompanyNameByFundId(@Param("fundId") String fundId);
 
     Long countCompanyTotal();
+
+    String getCompanyNameById(@Param("companyId")String companyId);
 }

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

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

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

@@ -20,4 +20,9 @@ public interface ContactInformationMapper extends BaseMapper<ContactInformationD
 
     void deleteContactInformationById(@Param("id") Integer id,@Param("userId")  Integer userId);
 
+    List<ContactInformationDO> selectContactInformationListByCompanyId(@Param("companyId") String companyId);
+
+    List<ContactInformationDO> getAllRecords();
+
+    ContactInformationDO selectByKey(ContactInformationDO contactInformationDO);
 }

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

@@ -33,17 +33,17 @@ public interface DeletionInfoMapper {
 
     void batchUpdate(@Param("itemDoList") List<FundDeletionInfoDO> fundDeletionInfoDOList);
 
-    void updateRemark(@Param("fundId") String fundId, @Param("deletionType") Integer deletionType,@Param("deletionDate") String deletionDate, @Param("remark")String remark,@Param("updaterId")Integer userId);
+    void updateRemark(@Param("channelId") Integer channelId,@Param("fundId") String fundId, @Param("deletionType") Integer deletionType,@Param("deletionDate") String deletionDate, @Param("remark")String remark,@Param("updaterId")Integer userId);
 
     List<FundDeletionInfoDO> selectFundDeletionInfoVOList(@Param("fundId") String fundId,@Param("deletionType") Integer deletionType);
 
-    List<DeletionInfoDO> getDeletionInfoDO(@Param("fundId") String funId,@Param("deletionType")Integer code,@Param("list")List<String> tradeDateList);
+    List<DeletionInfoDO> getDeletionInfoDO(@Param("channelId") Integer channelId,@Param("fundId") String funId,@Param("deletionType")Integer code,@Param("list")List<String> tradeDateList);
 
     void saveDeletionInfoDO(DeletionInfoDO deletionInfoDO);
 
     void removeDistributeDeletion(@Param("fundId")String fundId);
 
-    List<EmailDeletionInfoDO> getDeletionInfoByFundId(@Param("fundIdList") List<String> fundIdList);
+    List<EmailDeletionInfoDO> selectDeletionInfoByFundId(@Param("fundIdList")List<String> fundIdList);
 
     void updateSendStatusByFundId(@Param("fundIdList")List<String> fundIdList);
 

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

@@ -28,13 +28,13 @@ public interface DistributionMapper {
 
     void updateDistributionById(DistributionDO distributionDO);
 
-    DistributionDO selectDistributionByDate(@Param("fundId") String fundId, @Param("distributeDate") Date distributeDate);
+    DistributionDO selectDistributionByDate(@Param("channelId")Integer channelId,@Param("fundId") String fundId, @Param("distributeDate") Date distributeDate);
 
     void saveDistribution(DistributionDO distributionDO);
 
     void deleteDistribution(@Param("ids") List<Integer> idList,@Param("updaterId")Integer userId);
 
-    List<DistributionDO> getDistributionByFundId(@Param("fundId")String fundId,@Param("distributeType") Integer distributeType);
+    List<DistributionDO> getDistributionByFundId(@Param("channelId")Integer channelId,@Param("fundId")String fundId,@Param("distributeType") Integer distributeType);
 
     BigDecimal getSumDistributeByFundId(@Param("fundId")String fundId,@Param("distributeDate") String distributeDate);
 

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

@@ -52,4 +52,6 @@ public interface EmailFundNavMapper {
     Map<String, Long> selectNavAmplitudeErrorMaxMinId();
 
     List<EmailFundNavDO> getNavAmplitudeErrorListById(@Param("startIdx") long startIdx, @Param("startIdx")long endIdx);
+
+    List<String> selectAllFundId();
 }

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

@@ -52,4 +52,5 @@ public interface FundInfoMapper {
 
     Long countFundTotal();
 
+    String getCompanyIdByFundId(@Param("fundId")String fundId);
 }

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

@@ -9,9 +9,9 @@ import java.util.List;
 @Mapper
 public interface FundPositionDetailMapper {
 
-    void deleteUnUsed(@Param("fundId") String fundId, @Param("valuationDate") String valuationDate);
+    void deleteUnUsed(@Param("fundId") String fundId, @Param("valuationDate") String valuationDate,@Param("channelId") Integer channelId);
 
     int insertMulti(@Param("details") List<FundPositionDetailDO> segment);
 
-    List<FundPositionDetailDO> fundPositionDetailByFundId(@Param("fundId")String fundId);
+    List<FundPositionDetailDO> fundPositionDetailByFundId(@Param("fundId")String fundId,@Param("channelId") Integer channelId);
 }

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

@@ -34,4 +34,6 @@ public interface NavMapper {
     NavDO queryNavByFundIdDate(@Param("fundId")String fundId, @Param("priceDate")String priceDate,@Param("channelId")Integer channelId);
 
     NavDO queryLastNavByFundIdDate(@Param("fundId")String fundId, @Param("priceDate")String priceDate,@Param("channelId")Integer channelId);
+
+    List<NavDO> selectNavByChannelId(@Param("channelId")Integer channelId);
 }

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

@@ -9,11 +9,11 @@ import java.util.List;
 @Mapper
 public interface ValuationTableMapper {
 
-    void unValid(@Param("fileId") Integer fileId);
+    void unValid(@Param("fileId") Integer fileId,@Param("channelId") Integer channelId);
 
     int insert(ValuationTableDO record);
 
-    void updateUpdateAnalyzed(@Param("fundId") String fundId,
+    void updateUpdateAnalyzed(@Param("channelId") Integer channelId,@Param("fundId") String fundId,
                               @Param("valuationDate") String valuationDate, @Param("hasStock") Integer hasStock,
                               @Param("hasBond") Integer hasBond, @Param("hasFuture") Integer hasFuture);
 

+ 9 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyContactInfoPageDO.java

@@ -70,6 +70,12 @@ public class CompanyContactInfoPageDO {
      */
     private String contactRemark;
 
+    private String fileName;
+
+    private String filePath;
+
+    private Integer fileId;
+
     public CompanyContactInfoPageVO toVO() {
         CompanyContactInfoPageVO vo = new CompanyContactInfoPageVO();
         vo.setCompanyId(companyId);
@@ -86,6 +92,9 @@ public class CompanyContactInfoPageDO {
         vo.setCreditCode(creditCode);
         vo.setIsSend(isSend);
         vo.setContactName(contactName);
+        vo.setFileId(fileId);
+        vo.setFileName(fileName);
+        vo.setFilePath(filePath);
         return vo;
     }
 

+ 7 - 4
service-base/src/main/java/com/simuwang/base/pojo/dos/CompanyContactPageDO.java

@@ -41,9 +41,11 @@ public class CompanyContactPageDO {
 
     private String contactPosition;
 
-    private String contactFileName;
+    private String fileName;
 
-    private String contactFilePath;
+    private String filePath;
+
+    private Integer fileId;
 
     private Integer creatorId;
 
@@ -63,12 +65,13 @@ public class CompanyContactPageDO {
         vo.setContactId(this.contactId);
         vo.setContactDate(DateUtils.format(this.contactDate,DateUtils.YYYY_MM_DD));
         vo.setContactRemark(this.contactRemark);
-        vo.setContactFilePath(this.contactFilePath);
+        vo.setFileId(this.fileId);
         vo.setContactPosition(this.contactPosition);
         vo.setContactEmail(this.contactEmail);
         vo.setContactWechat(this.contactWechat);
         vo.setContactPhone(this.contactPhone);
-        vo.setContactFileName(this.contactFileName);
+        vo.setFilePath(this.filePath);
+        vo.setFileName(this.fileName);
         vo.setContactStatus(this.contactStatus);
         vo.setContactName(this.contactName);
         vo.setContactor(this.contactor);

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

@@ -0,0 +1,92 @@
+package com.simuwang.base.pojo.dos;
+
+import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.pojo.vo.CompanyEmailPageVO;
+import com.simuwang.base.pojo.vo.CompanyEmailSendHistoryVO;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * FileName: CompanyEmailSendHistoryDO
+ * Author:   chenjianhua
+ * Date:     2024/9/7 13:36
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class CompanyEmailPageDO {
+    /**
+     * 主键Id
+     */
+    private Integer id;
+    /**
+     * 公司名称
+     */
+    private String companyName;
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 邮箱地址
+     */
+    private String contactEmail;
+
+    private String contactPhone;
+
+    private String contactWechat;
+
+    private String contactName;
+    /**
+     * 发送状态1-成功,0-失败
+     */
+    private Integer sendStatus;
+    /**
+     * 净值频率
+     */
+    private Integer navFrequency;
+    /**
+     * 发送时间
+     */
+    private Date sendTime;
+    /**
+     * 发送备注
+     */
+    private String sendRemark;
+    /**
+     * 记录的有效性;1-有效;0-无效;
+     */
+    private Integer isvalid;
+    /**
+     * 创建者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer creatorId;
+    /**
+     * 修改者Id;第一次创建时与Creator值相同,修改时与修改人值相同
+     */
+    private Integer updaterId;
+    /**
+     * 创建时间,默认第一次创建的getdate()时间
+     */
+    private Date createTime;
+    /**
+     * 修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同
+     */
+    private Date updateTime;
+
+    public CompanyEmailPageVO toVo() {
+        CompanyEmailPageVO vo = new CompanyEmailPageVO();
+        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());
+        vo.setSendRemark(this.getSendRemark());
+        vo.setSendStatus(this.getSendStatus());
+        vo.setCompanyName(this.getCompanyName());
+        vo.setSendTime(this.getSendTime()==null?null: DateUtils.format(this.getSendTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+        return vo;
+    }
+}

+ 59 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/CompanySendStatusDO.java

@@ -0,0 +1,59 @@
+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("company_send_status")
+public class CompanySendStatusDO {
+
+    @TableId(value = "id",type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("company_id")
+    private String companyId;
+
+    @TableField("send_status")
+    private Integer sendStatus;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column contact_information.creatorid
+     */
+    @TableField("creatorid")
+    private Integer creatorId;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column contact_information.createtime
+     */
+    @TableField("createtime")
+    private Date createTime;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column contact_information.updaterid
+     */
+    @TableField("updaterid")
+    private Integer updaterId;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column contact_information.updatetime
+     */
+    @TableField("updatetime")
+    private Date updateTime;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column contact_information.isvalid
+     */
+    @TableField("isvalid")
+    private Integer isvalid;
+
+}

+ 8 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/ContactInformationDO.java

@@ -111,6 +111,12 @@ public class ContactInformationDO {
     @TableField("open_status")
     private Integer openStatus;
 
+    @TableField(exist = false)
+    private String fileName;
+
+    @TableField(exist = false)
+    private String filePath;
+
     public ContactInformationVO toVO() {
         ContactInformationVO vo = new ContactInformationVO();
         vo.setId(id);
@@ -122,6 +128,8 @@ public class ContactInformationDO {
         vo.setContactPosition(contactPosition);
         vo.setContactWechat(contactWechat);
         vo.setFileId(fileId);
+        vo.setFileName(fileName);
+        vo.setFilePath(filePath);
         vo.setCreatorId(creatorId);
         vo.setUpdaterId(updaterId);
         vo.setOpenStatus(openStatus);

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

@@ -21,6 +21,14 @@ public class DeletionInfoDO {
      */
     private Integer id;
     /**
+     * 渠道Id
+     */
+    private Integer channelId;
+    /**
+     * 渠道名称
+     */
+    private String channelName;
+    /**
      * 基金ID
      */
     private String fundId;
@@ -85,6 +93,8 @@ public class DeletionInfoDO {
     public DeletionInfoVO toVO() {
         DeletionInfoVO deletionInfoVO = new DeletionInfoVO();
         deletionInfoVO.setFundId(this.fundId);
+        deletionInfoVO.setChannelId(this.channelId);
+        deletionInfoVO.setChannelName(this.channelName);
         deletionInfoVO.setFundName(this.fundName);
         deletionInfoVO.setCompanyName(this.companyName);
         deletionInfoVO.setDeletionType(this.deletionType);

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

@@ -23,6 +23,11 @@ public class DistributionDO {
     @TableId(value = "id")
     private Integer id;
     /**
+     * 主键Id
+     */
+    @TableId(value = "channel_id")
+    private Integer channelId;
+    /**
      * 基金id
      */
     @TableField(value = "fund_id")

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

@@ -23,6 +23,14 @@ public class DistributionTablePageDO{
      */
     private Integer id;
     /**
+     * 渠道Id
+     */
+    private Integer channelId;
+    /**
+     * 渠道名称
+     */
+    private Integer channelName;
+    /**
      * 基金id
      */
     private String fundId;
@@ -84,6 +92,8 @@ public class DistributionTablePageDO{
         vo.setId(this.id);
         vo.setFundId(this.fundId);
         vo.setFundName(this.fundName);
+        vo.setChannelId(this.channelId);
+        vo.setChannelName(this.channelName);
         vo.setCompanyName(this.companyName);
         vo.setDistribution(this.distribution);
         vo.setDistributeType(this.distributeType);

+ 8 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailDeletionInfoDO.java

@@ -29,5 +29,13 @@ public class EmailDeletionInfoDO {
      * 缺失日期
      */
     private String deletionDate;
+    /**
+     * 渠道名称
+     */
+    private String channelName;
+    /**
+     * 渠道ID
+     */
+    private Integer channelId;
 
 }

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

@@ -20,6 +20,10 @@ public class FundDeletionInfoDO {
      */
     private Integer id;
     /**
+     * 主键Id
+     */
+    private Integer channelId;
+    /**
      * 基金ID
      */
     private String fundId;
@@ -65,6 +69,7 @@ public class FundDeletionInfoDO {
         FundDeletionInfoVO deletionInfoVO = new FundDeletionInfoVO();
         deletionInfoVO.setId(this.id);
         deletionInfoVO.setFundId(this.fundId);
+        deletionInfoVO.setChannelId(this.channelId);
         deletionInfoVO.setDeletionType(this.deletionType);
         deletionInfoVO.setDeletionDate(this.deletionDate);
         deletionInfoVO.setRemark(this.remark);

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

@@ -17,6 +17,11 @@ public class FundPositionDetailDO {
     @TableId(value = "id")
     private Integer id;
     /**
+     * 渠道ID
+     */
+    @TableField(value = "channel_id")
+    private Integer channelId;
+    /**
      * 估值表id(valuation_table.id)
      */
     @TableField(value = "valuation_id")

+ 0 - 15
service-base/src/main/java/com/simuwang/base/pojo/dos/LastCompanyContactInfoDO.java

@@ -70,21 +70,6 @@ public class LastCompanyContactInfoDO {
      */
     @TableField("contact_remark")
     private String contactRemark;
-
-    /**
-     * This field was generated by MyBatis Generator.
-     * This field corresponds to the database column company_cantact_info.cantact_file_name
-     */
-    @TableField("contact_file_name")
-    private String contactFileName;
-
-    /**
-     * This field was generated by MyBatis Generator.
-     * This field corresponds to the database column company_cantact_info.contact_file_path
-     */
-    @TableField("contact_file_path")
-    private String contactFilePath;
-
     /**
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column company_cantact_info.creatorid

+ 3 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/ValuationTableAttributeDO.java

@@ -16,6 +16,9 @@ public class ValuationTableAttributeDO {
      */
     @TableId(value = "id")
     private Integer id;
+
+    @TableField(value = "channel_id")
+    private Integer channelId;
     /**
      * 估值表id(valuation_table.id)
      */

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

@@ -17,6 +17,11 @@ public class ValuationTableDO {
     @TableId(value = "id")
     private Integer id;
     /**
+     * 渠道id
+     */
+    @TableField(value = "channel_id")
+    private Integer channelId;
+    /**
      * 文件id
      */
     @TableField(value = "file_id")

+ 49 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/CompanyContactExcelData.java

@@ -0,0 +1,49 @@
+package com.simuwang.base.pojo.dto;
+
+import lombok.Data;
+
+/**
+ * FileName: DistributionExcelData
+ * Author:   chenjianhua
+ * Date:     2024/9/16 10:57
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class CompanyContactExcelData {
+
+    private String contactDate;
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 联系人邮箱
+     */
+    private String contactEmail;
+
+    private String contactor;
+
+    private String customerManager;
+
+    private String contactName;
+    /**
+     * 联系人电话
+     */
+    private String contactPhone;
+    /**
+     * 联系人微信
+     */
+    private String contactWechat;
+    /**
+     * 对接状态
+     */
+    private String contactStatus;
+    /**
+     * 签约方式
+     */
+    private String signMethod;
+    /**
+     * 对接备注
+     */
+    private String contactRemark;
+}

+ 35 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/ContactExcelData.java

@@ -0,0 +1,35 @@
+package com.simuwang.base.pojo.dto;
+
+import lombok.Data;
+
+/**
+ * FileName: DistributionExcelData
+ * Author:   chenjianhua
+ * Date:     2024/9/16 10:57
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class ContactExcelData {
+
+    private String companyId;
+    /**
+     * 联系人名称
+     */
+    private String contactName;
+    /**
+     * 联系人邮箱
+     */
+    private String contactEmail;
+    /**
+     * 联系人电话
+     */
+    private String contactPhone;
+    /**
+     * 联系人微信
+     */
+    private String contactWechat;
+    /**
+     * 联系人职位
+     */
+    private String contactPosition;
+}

+ 4 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/NavAssetExcelData.java

@@ -13,6 +13,10 @@ public class NavAssetExcelData {
     /**
      * 基金ID
      */
+    private String channelId;
+    /**
+     * 基金ID
+     */
     private String fundId;
     /**
      * 基金名称

+ 12 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/DeletionPageQuery.java

@@ -15,6 +15,10 @@ public class DeletionPageQuery extends PageQuery {
      */
     private String fundName;
     /**
+     * 基金名称
+     */
+    private String channelName;
+    /**
      * 公司名称
      */
     private String companyName;
@@ -70,4 +74,12 @@ public class DeletionPageQuery extends PageQuery {
     public void setDeletionEndNum(Integer deletionEndNum) {
         this.deletionEndNum = deletionEndNum;
     }
+
+    public String getChannelName() {
+        return channelName;
+    }
+
+    public void setChannelName(String channelName) {
+        this.channelName = channelName;
+    }
 }

+ 12 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/DistributionPageQuery.java

@@ -11,6 +11,10 @@ import com.simuwang.base.common.support.query.PageQuery;
 public class DistributionPageQuery extends PageQuery {
 
     /**
+     * 渠道名称
+     */
+    private String channelName;
+    /**
      * 公司名称
      */
     private String fundName;
@@ -70,4 +74,12 @@ public class DistributionPageQuery extends PageQuery {
     public void setEndDate(String endDate) {
         this.endDate = endDate;
     }
+
+    public String getChannelName() {
+        return channelName;
+    }
+
+    public void setChannelName(String channelName) {
+        this.channelName = channelName;
+    }
 }

+ 12 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/FundDeletionPageQuery.java

@@ -18,6 +18,10 @@ public class FundDeletionPageQuery extends PageQuery {
      * 基金ID
      */
     private Integer deletionType;
+    /**
+     * 渠道ID
+     */
+    private Integer channelId;
 
     public String getFundId() {
         return fundId;
@@ -34,4 +38,12 @@ public class FundDeletionPageQuery extends PageQuery {
     public void setDeletionType(Integer deletionType) {
         this.deletionType = deletionType;
     }
+
+    public Integer getChannelId() {
+        return channelId;
+    }
+
+    public void setChannelId(Integer channelId) {
+        this.channelId = channelId;
+    }
 }

+ 59 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactExcelFailDataVO.java

@@ -0,0 +1,59 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: ExcelSuccessDataVO
+ * Author:   chenjianhua
+ * Date:     2024/9/16 12:41
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class CompanyContactExcelFailDataVO {
+
+    private Integer rowNum;
+
+    private String contactDate;
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    private String companyName;
+    /**
+     * 联系人邮箱
+     */
+    private String contactEmail;
+
+    private String contactor;
+
+    private String customerManager;
+
+    private String contactName;
+    /**
+     * 联系人电话
+     */
+    private String contactPhone;
+    /**
+     * 联系人微信
+     */
+    private String contactWechat;
+    /**
+     * 对接状态
+     */
+    private String contactStatus;
+    /**
+     * 签约方式
+     */
+    private String signMethod;
+    /**
+     * 对接备注
+     */
+    private String contactRemark;
+    /**
+     * 失败原因
+     */
+    private String failReason;
+}

+ 53 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactExcelSuccessDataVO.java

@@ -0,0 +1,53 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: ExcelSuccessDataVO
+ * Author:   chenjianhua
+ * Date:     2024/9/16 12:41
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class CompanyContactExcelSuccessDataVO {
+
+    private String contactDate;
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    private String companyName;
+    /**
+     * 联系人邮箱
+     */
+    private String contactEmail;
+
+    private String contactor;
+
+    private String customerManager;
+
+    private String contactName;
+    /**
+     * 联系人电话
+     */
+    private String contactPhone;
+    /**
+     * 联系人微信
+     */
+    private String contactWechat;
+    /**
+     * 对接状态
+     */
+    private String contactStatus;
+    /**
+     * 签约方式
+     */
+    private String signMethod;
+    /**
+     * 对接备注
+     */
+    private String contactRemark;
+}

+ 6 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactInfoPageVO.java

@@ -63,4 +63,10 @@ public class CompanyContactInfoPageVO {
      */
     private String contactRemark;
 
+    private String fileName;
+
+    private String filePath;
+
+    private Integer fileId;
+
 }

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

@@ -45,11 +45,13 @@ public class CompanyContactPageVO {
     /**
      * 附件名称
      */
-    private String contactFileName;
+    private String fileName;
     /**
      * 附件路径
      */
-    private String contactFilePath;
+    private String filePath;
+
+    private Integer fileId;
 
     /**
      * 职位

+ 38 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/CompanyContactUploadResult.java

@@ -0,0 +1,38 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * FileName: NavAssetUploadResult
+ * Author:   chenjianhua
+ * Date:     2024/9/23 10:36
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class CompanyContactUploadResult {
+
+    /**
+     * 失败结果集
+     */
+    private List<CompanyContactExcelFailDataVO> fail;
+
+    /**
+     * 成功结果集
+     */
+    private List<CompanyContactExcelSuccessDataVO> success;
+    /**
+     * 成功条数
+     */
+    private Integer successCount;
+    /**
+     * 失败条数
+     */
+    private Integer failCount;
+    /**
+     * 总条数
+     */
+    private Integer total;
+
+}

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

@@ -0,0 +1,52 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: CompanyEmailSendHistoryDO
+ * Author:   chenjianhua
+ * Date:     2024/9/7 13:36
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class CompanyEmailPageVO {
+    /**
+     * 主键Id
+     */
+    private Integer id;
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    private String companyName;
+    /**
+     * 邮箱地址
+     */
+    private String contactEmail;
+
+    private String contactPhone;
+
+    private String contactWechat;
+
+    private String contactName;
+    /**
+     * 净值频率
+     */
+    private Integer navFrequency;
+    /**
+     * 发送状态,0-失败,1-成功,-1未发送
+     */
+    private Integer sendStatus;
+    /**
+     * 发送时间
+     */
+    private String sendTime;
+    /**
+     * 发送备注
+     */
+    private String sendRemark;
+
+}

+ 48 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/ContactExcelFailDataVO.java

@@ -0,0 +1,48 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: ExcelSuccessDataVO
+ * Author:   chenjianhua
+ * Date:     2024/9/16 12:41
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class ContactExcelFailDataVO {
+
+    private Integer rowNum;
+
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    private String companyName;
+    /**
+     * 联系人
+     */
+    private String contactName;
+    /**
+     * 邮箱
+     */
+    private String contactEmail;
+    /**
+     * 手机号
+     */
+    private String contactPhone;
+    /**
+     * 微信
+     */
+    private String contactWechat;
+    /**
+     * 职位
+     */
+    private String contactPosition;
+    /**
+     * 失败原因
+     */
+    private String failReason;
+}

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

@@ -0,0 +1,42 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: ExcelSuccessDataVO
+ * Author:   chenjianhua
+ * Date:     2024/9/16 12:41
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class ContactExcelSuccessDataVO {
+
+    /**
+     * 公司ID
+     */
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    private String companyName;
+    /**
+     * 联系人
+     */
+    private String contactName;
+    /**
+     * 邮箱
+     */
+    private String contactEmail;
+    /**
+     * 手机号
+     */
+    private String contactPhone;
+    /**
+     * 微信
+     */
+    private String contactWechat;
+    /**
+     * 职位
+     */
+    private String contactPosition;
+}

+ 4 - 8
service-base/src/main/java/com/simuwang/base/pojo/vo/ContactInformationVO.java

@@ -41,16 +41,12 @@ public class ContactInformationVO {
      * 备注
      */
     private String contactRemark;
-    /**
-     * 附件名称
-     */
-    private String contactFileName;
 
     private Integer fileId;
-    /**
-     * 附件路径
-     */
-    private String contactFilePath;
+
+    private String fileName;
+
+    private String filePath;
 
     private Integer creatorId;
 

+ 38 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/ContactUploadResult.java

@@ -0,0 +1,38 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * FileName: NavAssetUploadResult
+ * Author:   chenjianhua
+ * Date:     2024/9/23 10:36
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class ContactUploadResult {
+
+    /**
+     * 失败结果集
+     */
+    private List<ContactExcelFailDataVO> fail;
+
+    /**
+     * 成功结果集
+     */
+    private List<ContactExcelSuccessDataVO> success;
+    /**
+     * 成功条数
+     */
+    private Integer successCount;
+    /**
+     * 失败条数
+     */
+    private Integer failCount;
+    /**
+     * 总条数
+     */
+    private Integer total;
+
+}

+ 8 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/DeletionInfoVO.java

@@ -20,6 +20,14 @@ public class DeletionInfoVO {
      */
     private String fundId;
     /**
+     * 渠道Id
+     */
+    private Integer channelId;
+    /**
+     * 渠道名称
+     */
+    private String channelName;
+    /**
      * 基金名称
      */
     private String fundName;

+ 8 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/DistributionTablePageVO.java

@@ -21,6 +21,14 @@ public class DistributionTablePageVO {
      */
     private Integer id;
     /**
+     * 渠道Id
+     */
+    private Integer channelId;
+    /**
+     * 渠道名称
+     */
+    private Integer channelName;
+    /**
      * 基金id
      */
     private String fundId;

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

@@ -18,6 +18,10 @@ public class DistributionVO {
      */
     private Integer id;
     /**
+     * 渠道Id
+     */
+    private Integer channelId;
+    /**
      * 基金id
      */
     private String fundId;

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

@@ -17,6 +17,10 @@ public class FundAssetVO {
      */
     private String fundId;
     /**
+     * 渠道id
+     */
+    private Integer channelId;
+    /**
      * 规模日期
      */
     private String priceDate;

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

@@ -15,6 +15,10 @@ public class FundDeletionInfoVO {
      */
     private Integer id;
     /**
+     * ID
+     */
+    private Integer channelId;
+    /**
      * 基金ID
      */
     private String fundId;

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

@@ -11,6 +11,10 @@ import lombok.Data;
 @Data
 public class FundDeletionTypeVO {
     /**
+     * 渠道ID
+     */
+    private Integer channelId;
+    /**
      * 基金ID
      */
     private String fundId;

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

@@ -17,6 +17,10 @@ public class FundNavVO {
      */
     private String fundId;
     /**
+     * 渠道id
+     */
+    private Integer channelId;
+    /**
      * 规模日期
      */
     private String priceDate;

+ 5 - 2
service-base/src/main/resources/mapper/daq/AssetMapper.xml

@@ -69,11 +69,14 @@
         select id,fund_id,price_date,asset_net,asset_share,
                isvalid, creatorid, createtime, updaterid, updatetime
         from asset where isvalid=1 and fund_id=#{fundId} and price_date=#{priceDate}
+        <if test="channelId != null and channelId !=''">
+            and channel_id = #{channelId}
+        </if>
     </select>
     <select id="selectAssetByFundId" resultMap="BaseResultMap">
         select id,fund_id,price_date,asset_net,asset_share,
-               isvalid, creatorid, createtime, updaterid, updatetime
-        from asset where isvalid=1 and fund_id=#{fundId}
+               isvalid, creatorid, createtime, updaterid, updatetime,channel_id
+        from asset where isvalid=1 and fund_id=#{fundId} and channel_id = #{channelId}
     </select>
     <select id="countAssetTotal" resultType="java.lang.Long">
         select count(1) from asset where isvalid=1

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

@@ -28,4 +28,10 @@
     <select id="countChannelEmail" resultType="java.lang.Long">
         select count(1) from channel_email_info where channel_id=#{channelId} and isvalid=1
     </select>
+    <select id="countChannelEmailByEmail" resultType="java.lang.Integer">
+        select count(1) from channel_email_info where email=#{email} and isvalid=1
+    </select>
+    <select id="selectChannelIdByEmail" resultType="java.lang.Integer">
+        select channel_id from channel_email_info where email=#{email} and isvalid=1 limit 1
+    </select>
 </mapper>

+ 21 - 15
service-base/src/main/resources/mapper/daq/CompanyContactInfoMapper.xml

@@ -40,10 +40,6 @@
   </select>
 
   <resultMap id="BaseResultPageMap" type="com.simuwang.base.pojo.dos.CompanyContactInfoPageDO" >
-    <!--
-      WARNING - @mbggenerated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
     <result column="company_id" property="companyId" jdbcType="VARCHAR" />
     <result column="contact_date" property="contactDate" jdbcType="DATE" />
     <result column="contactor" property="contactor" jdbcType="VARCHAR" />
@@ -58,6 +54,9 @@
     <result column="company_asset_size" property="companyAssetSize" jdbcType="INTEGER" />
     <result column="establish_date" property="establishDate" jdbcType="VARCHAR" />
     <result column="credit_code" property="creditCode" jdbcType="VARCHAR" />
+    <result column="file_id" property="fileId" jdbcType="INTEGER" />
+    <result column="file_name" property="fileName" jdbcType="VARCHAR" />
+    <result column="file_path" property="filePath" jdbcType="VARCHAR" />
   </resultMap>
   <select id="selectCompanyContactInfoList" resultMap="BaseResultPageMap">
          select   cp.company_id,
@@ -83,7 +82,7 @@
         left join last_company_contact_info ct
         on cp.company_id = ct.company_id and ct.isvalid=1
         left join contact_information ci
-        on ct.company_id = ci.company_id and ci.isvalid=1
+        on ct.company_id = ci.company_id and ci.isvalid=1 AND ct.contact_id = ci.id
         left join company_send_status css
         on cp.company_id = css.company_id and css.isvalid=1
         where cp.isvalid =1
@@ -125,7 +124,7 @@
       left join last_company_contact_info ct
       on cp.company_id = ct.company_id and ct.isvalid=1
       left join contact_information ci
-      on cp.company_id = ci.company_id and ci.isvalid=1
+      on cp.company_id = ci.company_id and ci.isvalid=1 AND ct.contact_id = ci.id
       left join company_send_status css
       on cp.company_id = css.company_id and css.isvalid=1
       where cp.isvalid =1
@@ -169,8 +168,9 @@
         <result column="contact_email" property="contactEmail" jdbcType="VARCHAR" />
         <result column="contact_wechat" property="contactWechat" jdbcType="VARCHAR" />
         <result column="contact_position" property="contactPosition" jdbcType="VARCHAR" />
-        <result column="contact_file_name" property="contactFileName" jdbcType="VARCHAR" />
-        <result column="contact_file_path" property="contactFilePath" jdbcType="VARCHAR" />
+        <result column="file_Id" property="fileId" jdbcType="INTEGER" />
+        <result column="fileName" property="fileName" jdbcType="VARCHAR" />
+        <result column="file_path" property="filePath" jdbcType="VARCHAR" />
     </resultMap>
     <select id="selectCompanyContactListByCompanyId"
             resultMap="ContactResultPageMap">
@@ -188,11 +188,14 @@
                  info.contact_status,
                  info.contact_id,
                  ci.contact_remark,
-                 ci.contact_file_name,
-                 ci.contact_file_path
+                 ci.file_id,
+                 f.file_name,
+                 f.file_path
         from company_contact_info info
         left join contact_information ci
-         on info.company_id = ci.company_id and ci.isvalid=1 and info.contact_id= ci.id and ci.open_status=1
+         on info.company_id = ci.company_id and ci.isvalid=1 and info.contact_id= ci.id
+        left join image_info f
+         on ci.file_id = f.id and f.isvalid=1
         where info.company_id = #{companyId} and info.isvalid=1
         order by info.contact_date desc
         limit #{offset},#{pageSize}
@@ -200,7 +203,7 @@
     <select id="countCompanyContactByCompanyId" resultType="java.lang.Long">
         select count(1) from company_contact_info info where info.company_id = #{companyId} and info.isvalid=1
     </select>
-    <select id="saveCompanyContactDetail" resultMap="BaseResultPageMap">
+    <select id="selectCompanyContactDetail" resultMap="BaseResultPageMap">
         select   info.id,
                  info.company_id,
                  info.contact_date,
@@ -215,11 +218,14 @@
                  info.contact_status,
                  info.contact_id,
                  ci.contact_remark,
-                 ci.contact_file_name,
-                 ci.contact_file_path
+                 ci.file_id,
+                 f.file_name,
+                 f.file_path
         from company_contact_info info
         left join contact_information ci
-        on info.company_id = ci.company_id and ci.isvalid=1 and info.contact_id= ci.id and ci.open_status=1
+        on info.company_id = ci.company_id and ci.isvalid=1 and info.contact_id= ci.id
+        left join image_info f
+        on ci.file_id = f.id and f.isvalid=1
         where info.id = #{id} and info.isvalid=1
     </select>
 

+ 37 - 23
service-base/src/main/resources/mapper/daq/CompanyEmailHistoryMapper.xml

@@ -21,10 +21,7 @@
         values (#{companyId},#{email},#{sendStatus},#{sendTime},#{sendRemark},#{isvalid},#{createTime},#{updateTime},#{creatorId},#{updaterId})
     </insert>
     <update id="deleteEmailHistory">
-        update company_email_send_history set isvalid =0,updatetime=now() where email in
-        <foreach item="email" collection="emailList" open="(" separator="," close=")">
-            #{email}
-        </foreach>
+        update company_email_send_history set isvalid =0,updatetime=now() where email=#{email} and company_id =#{companyId} and isvalid=1
     </update>
     <update id="deleteEmailHistoryByIds">
         update company_email_send_history set isvalid =0,updatetime=now(),updaterid=#{userId} where id in
@@ -32,20 +29,43 @@
             #{id}
         </foreach>
     </update>
-
-    <select id="searchCompanyEmailList" resultMap="BaseResultMap">
+    <resultMap id="BaseResultPageMap" type="com.simuwang.base.pojo.dos.CompanyEmailPageDO">
+        <id column="id" property="id"/>
+        <result column="company_id" property="companyId"/>
+        <result column="company_name" property="companyName"/>
+        <result column="contact_email" property="contactEmail"/>
+        <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"/>
+        <result column="isvalid" property="isvalid"/>
+        <result column="createtime" property="createTime"/>
+        <result column="updatetime" property="updateTime"/>
+        <result column="creatorid" property="creatorId"/>
+        <result column="updaterid" property="updaterId"/>
+    </resultMap>
+    <select id="searchCompanyEmailList" resultMap="BaseResultPageMap">
         SELECT
             cec.id,
             cec.company_id,
             c.company_name,
-            cec.email,
+            fre.nav_frequency,
+            cec.contact_email,
+            cec.contact_name,
+            cec.contact_wechat,
+            cec.contact_phone,
             maxce.send_time as send_time,
             maxce.send_remark,
             ifnull(maxce.send_status,-1) as send_status
         FROM
-        company_email_config cec
+        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,
@@ -59,13 +79,13 @@
         GROUP BY mx.email,
         mx.company_id) as mx on me.email=mx.email and me.company_id=mx.company_id and me.send_time=mx.max_send_time
         WHERE me.isvalid = 1) maxce
-        ON cec.email = maxce.email and cec.company_id = maxce.company_id
+        ON cec.contact_email = maxce.email and cec.company_id = maxce.company_id
         WHERE cec.isvalid = 1 and c.isvalid=1
         <if test="companyName != null and companyName !=''">
             and (c.company_name like concat('%',#{companyName},'%') or c.company_short_name like concat('%',#{companyName},'%') or c.register_number like concat('%',#{companyName},'%'))
         </if>
         <if test="email != null and email !=''">
-            and cec.email like concat('%',#{email},'%')
+            and cec.contact_email like concat('%',#{email},'%')
         </if>
         <if test="sendStatus != null and sendStatus != -1">
             and maxce.send_status=#{sendStatus}
@@ -87,7 +107,7 @@
         SELECT
         count(cec.company_id)
         from
-        company_email_config cec
+        contact_information cec
         JOIN pvn_company_info c
         ON cec.company_id = c.company_id
         LEFT JOIN
@@ -103,13 +123,13 @@
         GROUP BY mx.email,
         mx.company_id) as mx on me.email=mx.email and me.company_id=mx.company_id and me.send_time=mx.max_send_time
         WHERE me.isvalid = 1) maxce
-        ON cec.email = maxce.email and cec.company_id = maxce.company_id
+        ON cec.contact_email = maxce.email and cec.company_id = maxce.company_id
         WHERE cec.isvalid = 1 and c.isvalid=1
         <if test="companyName != null and companyName !=''">
             and (c.company_name like concat('%',#{companyName},'%') or c.company_short_name like concat('%',#{companyName},'%') or c.register_number like concat('%',#{companyName},'%'))
         </if>
         <if test="email != null and email !=''">
-            and cec.email like concat('%',#{email},'%')
+            and cec.contact_email like concat('%',#{email},'%')
         </if>
         <if test="sendStatus != null and sendStatus != -1">
             and maxce.send_status=#{sendStatus}
@@ -130,8 +150,8 @@
             cesh.send_status
         FROM
             company_email_send_history cesh
-            JOIN company_email_config cec
-                ON cec.email = cesh.email and cesh.company_id=cec.company_id
+            JOIN contact_information cec
+                ON cec.contact_email = cesh.email and cesh.company_id=cec.company_id
             JOIN pvn_company_info c
             ON cesh.company_id = c.company_id
         WHERE cec.isvalid = 1
@@ -142,9 +162,6 @@
         <if test="email != null and email !=''">
             and cesh.email=#{email}
         </if>
-        <if test="email != null and email !=''">
-            and cesh.email=#{email}
-        </if>
         order by cesh.send_time desc
         limit #{offset},#{pageSize}
     </select>
@@ -154,8 +171,8 @@
         count(distinct cesh.id)
         FROM
         company_email_send_history cesh
-        JOIN company_email_config cec
-        ON cec.email = cesh.email and cesh.company_id=cec.company_id
+        JOIN contact_information cec
+        ON cec.contact_email = cesh.email and cesh.company_id=cec.company_id
         JOIN pvn_company_info c
         ON cesh.company_id = c.company_id
         WHERE cec.isvalid = 1
@@ -166,9 +183,6 @@
         <if test="email != null and email !=''">
             and cesh.email=#{email}
         </if>
-        <if test="email != null and email !=''">
-            and cesh.email=#{email}
-        </if>
     </select>
 
 </mapper>

+ 3 - 0
service-base/src/main/resources/mapper/daq/CompanyInformationMapper.xml

@@ -59,5 +59,8 @@
     <select id="countCompanyTotal" resultType="java.lang.Long">
         select count(1) from pvn_company_info where isvalid=1
     </select>
+    <select id="getCompanyNameById" resultType="java.lang.String">
+        select company_name from pvn_company_info where company_id=#{companyId} and isvalid=1
+    </select>
 
 </mapper>

+ 23 - 0
service-base/src/main/resources/mapper/daq/CompanySendStatusMapper.xml

@@ -0,0 +1,23 @@
+<?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.CompanySendStatusMapper" >
+  <resultMap id="BaseResultMap" type="com.simuwang.base.pojo.dos.CompanySendStatusDO" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="company_id" property="companyId" jdbcType="VARCHAR" />
+    <result column="send_status" property="sendStatus" jdbcType="INTEGER" />
+    <result column="creatorid" property="creatorId" jdbcType="INTEGER" />
+    <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="updaterid" property="updaterId" jdbcType="INTEGER" />
+    <result column="updatetime" property="updateTime" jdbcType="TIMESTAMP" />
+    <result column="isvalid" property="isvalid" jdbcType="INTEGER" />
+  </resultMap>
+
+  <sql id="Base_Column_List" >
+    id, company_id,send_status,creatorid, createtime, updaterid,updatetime, isvalid
+  </sql>
+    <select id="getCompanySendStatusByCompanyId" resultMap="BaseResultMap">
+        select  <include refid="Base_Column_List"/>
+        from company_send_status where isvalid=1 and company_id=#{companyId}
+    </select>
+
+</mapper>

+ 21 - 9
service-base/src/main/resources/mapper/daq/ContactInformationMapper.xml

@@ -14,23 +14,20 @@
     <result column="contact_wechat" property="contactWechat" jdbcType="VARCHAR" />
     <result column="contact_position" property="contactPosition" jdbcType="VARCHAR" />
     <result column="contact_remark" property="contactRemark" jdbcType="VARCHAR" />
-    <result column="cantact_file_name" property="contactFileName" jdbcType="VARCHAR" />
-    <result column="contact_file_path" property="contactFilePath" jdbcType="VARCHAR" />
     <result column="creatorid" property="creatorId" jdbcType="INTEGER" />
     <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
     <result column="updaterid" property="updaterId" jdbcType="INTEGER" />
     <result column="updatetime" property="updateTime" jdbcType="TIMESTAMP" />
     <result column="isvalid" property="isvalid" jdbcType="INTEGER" />
     <result column="open_status" property="openStatus" jdbcType="INTEGER" />
+    <result column="file_id" property="fileId" jdbcType="INTEGER" />
+    <result column="file_name" property="fileName" jdbcType="VARCHAR" />
+    <result column="file_path" property="filePath" jdbcType="VARCHAR" />
   </resultMap>
 
   <sql id="Base_Column_List" >
-    <!--
-      WARNING - @mbggenerated
-      This element is automatically generated by MyBatis Generator, do not modify.
-    -->
     id,company_id, contact_name, contact_email, contact_phone, contact_wechat, contact_position,
-    contact_remark, contact_file_name, contact_file_path, creatorid, createtime, updaterid,
+    contact_remark, file_id, creatorid, createtime, updaterid,
     updatetime, isvalid,open_status
   </sql>
   <delete id="deleteContactInformationById">
@@ -50,8 +47,12 @@
     </if>
   </select>
   <select id="selectContactInformationList" resultMap="BaseResultMap">
-    select  <include refid="Base_Column_List"/>
-    from CONTACT_INFORMATION where isvalid=1 and company_id=#{companyId}
+    select  c.id,c.company_id, c.contact_name, c.contact_email, c.contact_phone, c.contact_wechat, c.contact_position,
+            c.contact_remark, c.file_id, c.creatorid, c.createtime, c.updaterid,
+            c.updatetime, c.isvalid,c.open_status,f.file_name,f.file_path
+    from CONTACT_INFORMATION c
+    left join image_info f on c.file_id = f.id and f.isvalid=1
+    where c.isvalid=1 and c.company_id=#{companyId}
     order by updatetime desc
     limit #{offset},#{pageSize}
   </select>
@@ -59,5 +60,16 @@
     select  count(1)
     from CONTACT_INFORMATION where isvalid=1 and company_id=#{companyId}
   </select>
+  <select id="selectContactInformationListByCompanyId"
+          resultMap="BaseResultMap">
+    select * from CONTACT_INFORMATION where isvalid=1 and company_id=#{companyId}
+  </select>
+  <select id="getAllRecords" resultMap="BaseResultMap">
+    select * from CONTACT_INFORMATION where isvalid=1 and open_status=1
+  </select>
+  <select id="selectByKey" resultMap="BaseResultMap">
+    select * from CONTACT_INFORMATION where isvalid=1
+    and company_id =#{companyId} and (contact_email=#{contactEmail} or contact_phone=#{contactPhone} or contact_wechat=#{contactWechat})
+  </select>
 
 </mapper>

+ 51 - 36
service-base/src/main/resources/mapper/daq/DeletionInfoMapper.xml

@@ -4,6 +4,8 @@
     <resultMap id="BaseResultMap" type="com.simuwang.base.pojo.dos.DeletionInfoDO">
         <id column="id" property="id"/>
         <result column="fund_id" property="fundId"/>
+        <result column="channel_id" property="channelId"/>
+        <result column="channel_name" property="channelName"/>
         <result column="deletion_date" property="deletionDate"/>
         <result column="deletion_type" property="deletionType"/>
         <result column="company_name" property="companyName"/>
@@ -18,14 +20,14 @@
         <result column="is_send" property="isSend"/>
     </resultMap>
     <insert id="saveDeletionInfoDO" parameterType="com.simuwang.base.pojo.dos.DeletionInfoDO">
-        insert into deletion_info(fund_id,deletion_type,deletion_date,isvalid,createtime,updatetime,is_send)
-        values (#{fundId},#{deletionType},#{deletionDate},#{isvalid},#{createTime},#{updateTime},#{isSend})
+        insert into deletion_info(fund_id,deletion_type,deletion_date,isvalid,createtime,updatetime,is_send,channel_id)
+        values (#{fundId},#{deletionType},#{deletionDate},#{isvalid},#{createTime},#{updateTime},#{isSend},#{channelId})
     </insert>
     <insert id="batchSaveDeletionInfoDO">
-        insert into deletion_info(fund_id,deletion_type,deletion_date,isvalid,createtime,updatetime,is_send)
+        insert into deletion_info(fund_id,deletion_type,deletion_date,isvalid,createtime,updatetime,is_send,channel_id)
         values
         <foreach collection="itemDoList" item="itemDo" index="index" separator=",">
-            (#{itemDo.fundId},#{itemDo.deletionType},#{itemDo.deletionDate},#{itemDo.isvalid},#{itemDo.createTime},#{itemDo.updateTime},#{itemDo.isSend})
+            (#{itemDo.fundId},#{itemDo.deletionType},#{itemDo.deletionDate},#{itemDo.isvalid},#{itemDo.createTime},#{itemDo.updateTime},#{itemDo.isSend},#{itemDo.channelId})
         </foreach>
     </insert>
     <update id="update" parameterType="com.simuwang.base.pojo.dos.FundDeletionInfoDO">
@@ -43,7 +45,7 @@
                 updatetime=now(),
                 updaterid=#{itemDo.updaterId}
             </set>
-            where isvalid = 1 and id=#{itemDo.id}
+            where isvalid = 1 and id=#{itemDo.id} and channel_id=#{itemDo.channelId}
         </foreach>
     </update>
     <update id="updateRemark">
@@ -57,6 +59,9 @@
         <if test="deletionDate != null and deletionDate !=''">
             and deletion_date=#{deletionDate}
         </if>
+        <if test="channelId != null and channelId !=''">
+            and channel_id=#{channelId}
+        </if>
     </update>
     <delete id="deleteDeletionRemark">
         update deletion_info  set isvalid=0,updatetime=now() where isvalid=1 and fund_id=#{fundId} and deletion_type=#{deletionType}
@@ -70,23 +75,25 @@
     </delete>
     <select id="searchDeletionList" resultMap="BaseResultMap"
             parameterType="com.simuwang.base.pojo.dto.query.DeletionPageQuery">
-        SELECT distinct
+        SELECT
         d.fund_id,
         info.fund_name,
         c.company_name,
         d.deletion_type,
         ddn.deletion_num,
         ddp.processed_num,
-        d.last_deletion_date
+        d.last_deletion_date,
+        ci.id as channel_id,
+        ci.channel_name
         FROM
-        (select 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) d
+        (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
         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
+        (SELECT di.channel_id,
         di.fund_id,
         di.deletion_type,
         COUNT(di.fund_id) AS deletion_num
@@ -94,12 +101,12 @@
         deletion_info di
         WHERE di.isvalid = 1
         AND di.remark IS NULL
-        GROUP BY di.fund_id,
+        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.deletion_type = ddn.deletion_type  and d.channel_id = ddn.channel_id
         LEFT JOIN
-        (SELECT
+        (SELECT dip.channel_id,
         dip.fund_id,
         dip.deletion_type,
         COUNT(dip.fund_id) AS processed_num
@@ -107,10 +114,12 @@
         deletion_info dip
         WHERE dip.isvalid = 1
         AND dip.remark IS NOT NULL
-        GROUP BY dip.fund_id,
+        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.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},'%'))
@@ -124,6 +133,9 @@
         <if test="deletionStartNum != null and deletionStartNum != ''">
             and ddn.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}
         </if>
@@ -139,22 +151,15 @@
     </select>
     <select id="countDeletion" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.DeletionPageQuery">
-        select count(1) from (select distinct
-        d.fund_id,
-        info.fund_name,
-        c.company_name,
-        d.deletion_type,
-        ddn.deletion_num,
-        ddp.processed_num
-        FROM
-        (select 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) d
+        select count(1) from (select
+        (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
         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
+        (SELECT di.channel_id,
         di.fund_id,
         di.deletion_type,
         COUNT(di.fund_id) AS deletion_num
@@ -162,12 +167,12 @@
         deletion_info di
         WHERE di.isvalid = 1
         AND di.remark IS NULL
-        GROUP BY di.fund_id,
+        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.deletion_type = ddn.deletion_type  and d.channel_id = ddn.channel_id
         LEFT JOIN
-        (SELECT
+        (SELECT dip.channel_id,
         dip.fund_id,
         dip.deletion_type,
         COUNT(dip.fund_id) AS processed_num
@@ -175,10 +180,12 @@
         deletion_info dip
         WHERE dip.isvalid = 1
         AND dip.remark IS NOT NULL
-        GROUP BY dip.fund_id,
+        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.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},'%'))
@@ -192,6 +199,9 @@
         <if test="deletionStartNum != null and deletionStartNum != ''">
             and ddn.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}
         </if>) a
@@ -234,6 +244,7 @@
         WHERE d.isvalid = 1
           AND d.fund_id = #{fundId}
           AND d.deletion_type = #{deletionType}
+          AND d.channel_id = #{channelId}
         ORDER BY deletion_date DESC
         limit #{offset},#{pageSize}
     </select>
@@ -247,6 +258,7 @@
         WHERE d.isvalid = 1
           AND d.fund_id = #{fundId}
           AND d.deletion_type = #{deletionType}
+          AND d.channel_id = #{channelId}
         ORDER BY deletion_date DESC
     </select>
     <select id="selectFundDeletionInfoVOList" resultType="com.simuwang.base.pojo.dos.FundDeletionInfoDO"
@@ -264,7 +276,7 @@
     <select id="getDeletionInfoDO" resultType="com.simuwang.base.pojo.dos.DeletionInfoDO"
             parameterType="com.simuwang.base.pojo.dos.DeletionInfoDO">
         select id,fund_id,deletion_type,deletion_date,remark,isvalid,creatorid,updaterid,createtime,updatetime
-        from deletion_info where fund_id=#{fundId} and deletion_type=#{deletionType} and deletion_date in
+        from deletion_info where fund_id=#{fundId} and deletion_type=#{deletionType} and channel_id=#{channelId} and deletion_date in
         <foreach item="tradeDate" collection="list" open="(" separator="," close=")">
             #{tradeDate}
         </foreach>
@@ -275,12 +287,15 @@
         <result column="company_name" property="companyName"/>
         <result column="deletion_date" property="deletionDate"/>
         <result column="deletion_type" property="deletionType"/>
+        <result column="channel_id" property="channelId"/>
+        <result column="channel_name" property="channelName"/>
     </resultMap>
-    <select id="getDeletionInfoByFundId" resultMap="BaseEmailMap">
-            select info.fund_name,c.company_name,d.deletion_type,d.deletion_date
+    <select id="selectDeletionInfoByFundId" resultMap="BaseEmailMap">
+            select info.fund_name,c.company_name,d.deletion_type,d.deletion_date,ci.channel_id,ci.channel_name
             from deletion_info d
             join pvn_fund_info info on d.fund_id=info.fund_id
             join pvn_company_info c on c.company_id=info.trust_id
+            left join channel_info ci on ci.id=d.channel_id and ci.isvalid=1
             where d.isvalid=1 and info.isvalid=1 and c.isvalid=1 and d.remark is null and d.is_send=0
             and d.fund_id in
             <foreach collection="fundIdList" index="index" item="fundId" separator="," open="(" close=")">
@@ -292,7 +307,7 @@
         update deletion_info set isvalid=0,updatetime=now() where fund_id=#{fundId} and remark is null
     </update>
     <update id="updateSendStatusByFundId">
-        update deletion_info d set is_send=1,updatetime=now() where isvalid=1
+        update deletion_info d set d.is_send=1,d.updatetime=now() where d.isvalid=1
         and d.fund_id in
         <foreach collection="fundIdList" index="index" item="fundId" separator="," open="(" close=")">
             #{fundId}
@@ -318,7 +333,7 @@
     </update>
     <update id="batchUpdateRemark">
         <foreach collection="itemDoList" item="itemDo" index="index" open="" close="" separator=";">
-            update deletion_info set remark=#{itemDo.remark},updaterid=#{itemDo.updaterId} where isvalid=1 and remark is null
+            update deletion_info set remark=#{itemDo.remark},updaterid=#{itemDo.updaterId} where isvalid=1 and remark is null and channel_id=#{channelId}
             <if test="itemDo.fundId != null and itemDo.fundId !=''">
                 and fund_id=#{itemDo.fundId}
             </if>

+ 22 - 8
service-base/src/main/resources/mapper/daq/DistributionMapper.xml

@@ -30,10 +30,12 @@
         <result column="createtime" property="createTime"/>
         <result column="updaterid" property="updaterId"/>
         <result column="updatetime" property="updateTime"/>
+        <result column="channel_id" property="channelId"/>
+        <result column="channelName" property="channelName"/>
     </resultMap>
     <insert id="saveDistribution" parameterType="com.simuwang.base.pojo.dos.DistributionDO">
-        insert into distribution(fund_id,distribute_date,distribute_type,distribution,isvalid,creatorid,createtime,updatetime,updaterid)
-        values (#{fundId},#{distributeDate},#{distributeType},#{distribution},#{isvalid},#{creatorId},#{createTime},#{updateTime},#{updaterId})
+        insert into distribution(fund_id,distribute_date,distribute_type,distribution,isvalid,creatorid,createtime,updatetime,updaterid,channle_id)
+        values (#{fundId},#{distributeDate},#{distributeType},#{distribution},#{isvalid},#{creatorId},#{createTime},#{updateTime},#{updaterId},#{channelId})
     </insert>
     <update id="updateDistributionById" parameterType="com.simuwang.base.pojo.dos.DistributionDO">
         update distribution set distribute_date=#{distributeDate},distribute_type=#{distributeType},distribution=#{distribution},updatetime=#{updateTime},updaterid=#{updaterId}
@@ -62,7 +64,9 @@
             d.isvalid,
             d.creatorid,
             d.createtime,
-            d.updatetime
+            d.updatetime,
+            ci.id as channel_id,
+            ci.channel_name
         FROM
             distribution d
             JOIN pvn_fund_info info
@@ -71,7 +75,9 @@
             ON info.trust_id = c.company_id AND c.isvalid = 1
             JOIN nav n
             ON n.fund_id = d.fund_id and d.distribute_date=n.price_date
-            AND n.isvalid = 1
+            AND n.isvalid = 1 and d.channel_id=n.channel_id
+            left join channel_info ci
+            on ci.id = d.channel_id and ci.isvalid=1
         WHERE d.isvalid = 1
             AND info.isvalid = 1
         <if test="companyName != null and companyName !=''">
@@ -86,6 +92,9 @@
         <if test="startDate != null and startDate !=''">
             and d.distribute_date >= #{startDate}
         </if>
+        <if test="channelName != null and channelName !=''">
+            and ci.channelName = #{channelName}
+        </if>
         <if test="endDate != null and endDate !=''">
             and d.distribute_date <![CDATA[ <= ]]> #{endDate}
         </if>
@@ -101,7 +110,7 @@
     </select>
     <select id="countDistributionList" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.DistributionPageQuery">
-        select count(distinct d.id)
+        select count(d.id)
         FROM
         distribution d
         JOIN pvn_fund_info info
@@ -109,7 +118,9 @@
         left JOIN pvn_company_info c
         ON info.trust_id = c.company_id AND c.isvalid = 1
         JOIN nav n
-        ON n.fund_id = d.fund_id and d.distribute_date=n.price_date
+        ON n.fund_id = d.fund_id and d.distribute_date=n.price_date  and n.channel_id = n.channel_id
+        left join channel_info ci
+        on ci.id = d.channel_id and ci.isvalid=1
         WHERE d.isvalid = 1 AND info.isvalid = 1
         AND n.isvalid = 1
         <if test="companyName != null and companyName !=''">
@@ -121,6 +132,9 @@
         <if test="distributeType != null">
             and d.distribute_type = #{distributeType}
         </if>
+        <if test="channelName != null and channelName !=''">
+            and ci.channelName = #{channelName}
+        </if>
         <if test="startDate != null and startDate !=''">
             and d.distribute_date >= #{startDate}
         </if>
@@ -135,11 +149,11 @@
     </select>
     <select id="selectDistributionByDate" resultMap="BaseMap">
         select id,fund_id,distribute_date,distribute_type,distribution,isvalid,creatorid,createtime,updatetime,updaterid
-        from distribution where isvalid =1 and fund_id=#{fundId} and distribute_date=#{distributeDate}
+        from distribution where isvalid =1 and fund_id=#{fundId} and distribute_date=#{distributeDate} and channel_id=#{channelId}
     </select>
     <select id="getDistributionByFundId" resultMap="BaseMap">
         select id,fund_id,distribute_date,distribute_type,distribution,isvalid,creatorid,createtime,updatetime,updaterid
-        from distribution where isvalid =1 and fund_id=#{fundId} and distribute_type=#{distributeType}
+        from distribution where isvalid =1 and fund_id=#{fundId} and distribute_type=#{distributeType} and channel_id=#{channelId}
     </select>
     <select id="getSumDistributeByFundId" resultType="java.math.BigDecimal" parameterType="java.lang.String">
         select sum(distribution) from distribution where isvalid =1 and fund_id=#{fundId} and distribute_date <![CDATA[ <= ]]> #{distributeDate}

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

@@ -51,7 +51,7 @@
     </update>
     <select id="searchAssetDetail" resultMap="BaseResultMap"
             parameterType="com.simuwang.base.pojo.dto.query.ParseDetailPageQuery">
-        select distinct asset.id,
+        select          asset.id,
                         asset.fund_id,
                         asset.fund_name,
                         info.fund_id as target_fund_id,
@@ -127,7 +127,7 @@
     <select id="countAssetDetail" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.ParseDetailPageQuery">
         select count(1) from (
-        select distinct asset.id,
+        select asset.id,
             asset.fund_id,
             asset.fund_name,
             info.fund_id as target_fund_id,

+ 6 - 15
service-base/src/main/resources/mapper/daq/EmailFundNavMapper.xml

@@ -89,7 +89,8 @@
         update email_fund_nav nav set isvalid = 0,updatetime=now() where file_id=#{fileId}
     </delete>
     <select id="searchNavDetail" resultMap="BaseResultMap">
-        SELECT distinct nav.id,nav.file_id,
+        SELECT nav.id,
+            nav.file_id,
             nav.fund_id,
             nav.fund_name,
             info.fund_id as target_fund_id,
@@ -169,19 +170,7 @@
     </select>
     <select id="countNavDetail" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.ParseDetailPageQuery">
-        select count(1) from (
-            SELECT distinct nav.id,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,
-            nav.cumulative_nav_withdrawal,
-            nav.exception_status,
-            nav.is_stored,
-            nav.updatetime
+        SELECT count(nav.id)
         FROM
         email_fund_nav nav
         join email_file_info file
@@ -223,7 +212,6 @@
         <if test="emailId != null and emailId != ''">
             and parse.id=#{emailId}
         </if>
-        ) a
     </select>
     <select id="countNoStoreNav" resultType="java.lang.Integer" parameterType="java.lang.String">
         select count(nav.id)
@@ -409,6 +397,9 @@
         and nav.id <![CDATA[ >= ]]> #{startIdx} and nav.id <![CDATA[ <= ]]> #{endIdx}
         order by nav.price_date
     </select>
+    <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>
 
 
 </mapper>

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

@@ -243,4 +243,9 @@
     <select id="countFundTotal" resultType="java.lang.Long">
         select count(1) from pvn_fund_info where isvalid=1
     </select>
+    <select id="getCompanyIdByFundId" resultType="java.lang.String">
+        select c.company_id from pvn_company_info c
+                                       join pvn_fund_info info on info.trust_id=c.company_id
+        where info.fund_id=#{fundId} and info.isvalid=1 and c.isvalid=1
+    </select>
 </mapper>

+ 3 - 2
service-base/src/main/resources/mapper/daq/FundPositionDetailMapper.xml

@@ -27,17 +27,18 @@
         <result column="isvalid" property="isvalid"/>
         <result column="creatorid" property="creatorId"/>
         <result column="createtime" property="createTime"/>
+        <result column="channel_id" property="channelId"/>
     </resultMap>
 
     <delete id="deleteUnUsed">
         update fund_position_detail
         set isvalid    = 0
         where fund_id = #{fundId}
-          and valuation_date = #{valuationDate}
+          and valuation_date = #{valuationDate} and channel_id=#{channelId}
     </delete>
     <select id="fundPositionDetailByFundId" resultMap="BaseResultMap"
             parameterType="java.lang.String">
-        select distinct fund_id,valuation_date from fund_position_detail where fund_id=#{fundId} and isvalid=1
+        select distinct fund_id,valuation_date from fund_position_detail where fund_id=#{fundId} and isvalid=1 and channel_id=#{channelId}
     </select>
 
     <insert id="insertMulti" parameterType="com.simuwang.base.pojo.dos.FundPositionDetailDO">

+ 12 - 4
service-base/src/main/resources/mapper/daq/NavMapper.xml

@@ -103,7 +103,7 @@
     <select id="selectNavByFundId" resultMap="BaseResultMap"
             parameterType="java.lang.String">
         SELECT id, fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
-               isvalid, creatorid, createtime, updaterid, updatetime
+               isvalid, creatorid, createtime, updaterid, updatetime,channel_id
         from nav
         where isvalid = 1
           and fund_id = #{fundId}
@@ -115,7 +115,7 @@
 
     <select id="queryNavByFundIdDate" resultMap="BaseResultMap">
         SELECT id, fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
-               isvalid, creatorid, createtime, updaterid, updatetime
+               isvalid, creatorid, createtime, updaterid, updatetime,channel_id
         from nav
         where isvalid = 1
           and fund_id = #{fundId} and price_date = #{priceDate}
@@ -125,9 +125,9 @@
         order by price_date desc
         limit 1
     </select>
-    <select id="queryLastNavByFundIdDate" resultType="com.simuwang.base.pojo.dos.NavDO">
+    <select id="queryLastNavByFundIdDate" resultMap="BaseResultMap">
         SELECT id, fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
-               isvalid, creatorid, createtime, updaterid, updatetime
+               isvalid, creatorid, createtime, updaterid, updatetime,channel_id
         from nav
         where isvalid = 1
           and fund_id = #{fundId} and price_date <![CDATA[ < ]]> #{priceDate}
@@ -137,6 +137,14 @@
         order by price_date desc
             limit 1
     </select>
+    <select id="selectNavByChannelId" resultMap="BaseResultMap">
+        SELECT id, fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
+               isvalid, creatorid, createtime, updaterid, updatetime,channel_id
+        from nav
+        where isvalid = 1
+          and channel_id = #{channelId}
+        order by price_date
+    </select>
 
 
 </mapper>

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

@@ -36,13 +36,13 @@
     </delete>
 
     <insert id="batchInsert" parameterType="com.simuwang.base.pojo.dos.ValuationTableAttributeDO">
-        insert into valuation_table_attribute(valuation_id, subject_code, subject_name, currency, exchange_rate, securities_amount,
+        insert into valuation_table_attribute(channel_id,valuation_id, subject_code, subject_name, currency, exchange_rate, securities_amount,
                                                         unit_cost, ori_currency_cost, net_cost, net_cost_ratio, market_price, ori_currency_market_value,
                                                         market_value, market_value_ratio, ori_currency_increment, increment, halt_info, rights_interests_info,
                                                         isvalid, creatorid, createtime, updaterid, updatetime)
         values
         <foreach collection="itemDoList" item="itemDo" index="index" separator=",">
-            (#{itemDo.valuationId},#{itemDo.subjectCode},#{itemDo.subjectName},#{itemDo.currency},#{itemDo.exchangeRate},#{itemDo.securitiesAmount},
+            (#{itemDo.channelId},#{itemDo.valuationId},#{itemDo.subjectCode},#{itemDo.subjectName},#{itemDo.currency},#{itemDo.exchangeRate},#{itemDo.securitiesAmount},
              #{itemDo.unitCost},#{itemDo.oriCurrencyCost},#{itemDo.netCost},#{itemDo.netCostRatio},#{itemDo.marketPrice},#{itemDo.oriCurrencyMarketValue},
              #{itemDo.marketValue},#{itemDo.marketValueRatio},#{itemDo.oriCurrencyIncrement},#{itemDo.increment},#{itemDo.haltInfo},#{itemDo.rightsInterestsInfo},
             #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})

+ 5 - 3
service-base/src/main/resources/mapper/daq/ValuationTableMapper.xml

@@ -27,12 +27,13 @@
         <result column="createtime" property="createTime"/>
         <result column="updaterid" property="updaterId"/>
         <result column="updatetime" property="updateTime"/>
+        <result column="channel_id" property="channelId"/>
     </resultMap>
 
     <update id="unValid">
         update  valuation_table
         set isvalid = 0
-        where file_id = #{fileId}
+        where file_id = #{fileId} and channel_id=#{channelId}
     </update>
     <select id="selectValuationTableByFundId" resultMap="BaseResultMap"
             parameterType="java.lang.String">
@@ -47,7 +48,7 @@
         converted_file, file_url, table_type,
         isvalid, creatorid, createtime,
         updaterid, updatetime, is_analyzed,
-        total_market_value,net_assets_value,increment,from_email)
+        total_market_value,net_assets_value,increment,from_email,channel_id)
         values (#{fundId,jdbcType=VARCHAR},#{fileId,jdbcType=INTEGER},
         #{title,jdbcType=VARCHAR}, #{valuationDate,jdbcType=DATE}, #{nav,jdbcType=DECIMAL},
         #{headInfo,jdbcType=VARCHAR}, #{tailInfo,jdbcType=VARCHAR}, #{originalFile,jdbcType=VARCHAR},
@@ -55,7 +56,7 @@
         #{isvalid,jdbcType=INTEGER}, #{creatorId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP},
         #{updaterId,jdbcType=INTEGER}, #{updateTime,jdbcType=TIMESTAMP}, #{isAnalyzed,jdbcType=TINYINT},
         #{totalMarketValue,jdbcType=DECIMAL},#{netAssetsValue,jdbcType=DECIMAL},#{increment,jdbcType=DECIMAL},
-        #{fromEmail,jdbcType=TINYINT})
+        #{fromEmail,jdbcType=TINYINT},#{channelId,jdbcType=TINYINT})
     </insert>
 
     <update id="updateUpdateAnalyzed">
@@ -66,6 +67,7 @@
             has_future = #{hasFuture}
         where valuation_date = #{valuationDate}
           and fund_id = #{fundId}
+          and channel_id = #{channelId}
           and isvalid = 1
     </update>
 

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

@@ -266,7 +266,7 @@ public class EmailParseService {
             }
             // 保存净值表和规模表
             saveNavAndAssetNet(channelId,fileId, fundNavDTOList, parseDate);
-            saveValuationInfo(fileId, fundNavDTOList);
+            saveValuationInfo(channelId,fileId, fundNavDTOList);
         }
 
          //更新邮件解析结果 -> 当【净值日期】和【备案编码/基金名称】能正常解读,即识别为【成功】
@@ -401,11 +401,11 @@ public class EmailParseService {
         return vo;
     }
 
-    private void saveValuationInfo(Integer fileId, List<EmailFundNavDTO> fundNavDTOList) {
+    private void saveValuationInfo(Integer channelId, Integer fileId, List<EmailFundNavDTO> fundNavDTOList) {
         if (CollUtil.isEmpty(fundNavDTOList)) {
             return;
         }
-        valuationTableMapper.unValid(fileId);
+        valuationTableMapper.unValid(fileId,channelId);
         for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
             ValuationTableDO valuationTableDO = fundNavDTO.getValuationTableDO();
             if (valuationTableDO == null) {
@@ -413,13 +413,13 @@ public class EmailParseService {
             }
             List<String> fundIdList = fundNavDTO.getFundIdList();
             valuationTableDO.setFileId(fileId);
-
+            valuationTableDO.setChannelId(channelId);
             List<FundPositionDetailDO> fundPositionDetailDOList = fundNavDTO.getFundPositionDetailDOList();
             List<CmValuationTableAttribute> valuationTableAttributeList = fundNavDTO.getValuationTableAttributeList();
             if (CollUtil.isEmpty(fundIdList)) {
                 valuationTableMapper.insert(valuationTableDO);
                 int valuationId = valuationTableDO.getId();
-                saveValuationTableAttribute(valuationId, valuationTableAttributeList);
+                saveValuationTableAttribute(channelId,valuationId, valuationTableAttributeList);
                 fundPositionDetailDOList.forEach(e -> e.setValuationId(valuationId));
                 // 不匹配基金的情况下 -> 不写fund_position_detail
                 // saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
@@ -433,13 +433,13 @@ public class EmailParseService {
                     e.setFundId(fundId);
                     e.setValuationId(valuationId);
                 });
-                saveValuationTableAttribute(valuationId, valuationTableAttributeList);
-                saveFundPositionDetail(fundPositionDetailDOList, fundId, fundNavDTO.getPriceDate());
+                saveValuationTableAttribute(channelId,valuationId, valuationTableAttributeList);
+                saveFundPositionDetail(channelId,fundPositionDetailDOList, fundId, fundNavDTO.getPriceDate());
             }
         }
     }
 
-    public void saveFundPositionDetail(List<FundPositionDetailDO> fundPositionDetails, String fundId, String valuationDate) {
+    public void saveFundPositionDetail(Integer channelId,List<FundPositionDetailDO> fundPositionDetails, String fundId, String valuationDate) {
         int subBegin = 0;
         int subEnd = stepSize;
         int insertNum = 0;
@@ -449,11 +449,12 @@ public class EmailParseService {
         if (CollectionUtil.isNotEmpty(fundPositionDetails)) {
             //插入持仓数据 cm_fund_position_detail(记录数较多,得分批)
             // 先删除原先的数据 然后写入数据
-            fundPositionDetailMapper.deleteUnUsed(fundId, valuationDate);
+            fundPositionDetailMapper.deleteUnUsed(fundId, valuationDate,channelId);
             // 将最终结果写入 cm_fund_position_detail
             while (subBegin < fundPositionDetails.size()) {
                 List<FundPositionDetailDO> segment = fundPositionDetails.subList(subBegin, Math.min(subEnd, fundPositionDetails.size()));
                 for (FundPositionDetailDO fundPositionDetail : segment) {
+                    fundPositionDetail.setChannelId(channelId);
                     //实收信托、实收资本对应的编码为107
                     if (StrUtil.isNotBlank(fundPositionDetail.getSecuritiesName()) && "实收信托".equals(fundPositionDetail.getSecuritiesName().trim())) {
                         fundPositionDetail.setSubjectCode("107");
@@ -487,27 +488,28 @@ public class EmailParseService {
         }
         // 更新 cm_user_valuation_table
         if (insertNum > 0) {
-            valuationTableMapper.updateUpdateAnalyzed(fundId, valuationDate, hasStock, hasBond, hasFuture);
+            valuationTableMapper.updateUpdateAnalyzed(channelId,fundId, valuationDate, hasStock, hasBond, hasFuture);
         }
     }
 
-    private void saveValuationTableAttribute(Integer valuationId, List<CmValuationTableAttribute> valuationTableAttributes) {
+    private void saveValuationTableAttribute(Integer channelId,Integer valuationId, List<CmValuationTableAttribute> valuationTableAttributes) {
         if (valuationId == null || CollUtil.isEmpty(valuationTableAttributes)) {
             return;
         }
-        List<ValuationTableAttributeDO> valuationTableAttributeDOList = buildValuationTableAttributeDO(valuationId, valuationTableAttributes);
+        List<ValuationTableAttributeDO> valuationTableAttributeDOList = buildValuationTableAttributeDO(channelId,valuationId, valuationTableAttributes);
         valuationTableAttributeMapper.deleteByValuationId(valuationId);
         if (CollUtil.isNotEmpty(valuationTableAttributeDOList)) {
             valuationTableAttributeMapper.batchInsert(valuationTableAttributeDOList);
         }
     }
 
-    private List<ValuationTableAttributeDO> buildValuationTableAttributeDO(Integer valuationId, List<CmValuationTableAttribute> valuationTableAttributes) {
+    private List<ValuationTableAttributeDO> buildValuationTableAttributeDO(Integer channelId, Integer valuationId, List<CmValuationTableAttribute> valuationTableAttributes) {
         if (CollUtil.isEmpty(valuationTableAttributes)) {
             return CollUtil.newArrayList();
         }
         return valuationTableAttributes.stream().map(e -> {
             ValuationTableAttributeDO tableAttributeDO = new ValuationTableAttributeDO();
+            tableAttributeDO.setChannelId(channelId);
             tableAttributeDO.setValuationId(valuationId);
             tableAttributeDO.setSubjectCode(e.getOriginalSubjectCode());
             tableAttributeDO.setSubjectName(e.getSubjectName());

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

@@ -64,7 +64,8 @@ email:
     path: /home/wwwroot/shzq_dataapi/file/nav/
   parse:
     force-template-enable: false
-
+image:
+  path: /home/wwwroot/static/Uploads/Images/
 # 配置
 simuwang:
   # 操作日志功能是否启用,启用了才会记录操作日志

+ 20 - 46
service-manage/src/main/java/com/simuwang/manage/api/company/CompanyEmailSendHistoryController.java

@@ -15,6 +15,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 /**
@@ -26,8 +27,8 @@ import java.util.List;
 @SystemLog(value = "公司邮箱配置管理")
 @RestController
 @RequestMapping("/v1/company")
-public class CompanyEmailSendHistoryController{
-    private static final Logger logger = LoggerFactory.getLogger(CompanyEmailSendHistoryController.class);
+public class CompanyContactInformationController{
+    private static final Logger logger = LoggerFactory.getLogger(CompanyContactInformationController.class);
     @Autowired
     private CompanyEmailSendHistoryService companyEmailSendHistoryService;
 
@@ -46,8 +47,8 @@ public class CompanyEmailSendHistoryController{
      */
     @SystemLog(value = "公司邮箱查询")
     @RequestMapping("search-company-email")
-    public MybatisPage<CompanyEmailSendHistoryVO> searchCompanyEmail(CompanyEmailPageQuery companyEmailPageQuery){
-        MybatisPage<CompanyEmailSendHistoryVO> result = companyEmailSendHistoryService.searchCompanyEmail(companyEmailPageQuery);
+    public MybatisPage<CompanyEmailPageVO> searchCompanyEmail(CompanyEmailPageQuery companyEmailPageQuery){
+        MybatisPage<CompanyEmailPageVO> result = companyEmailSendHistoryService.searchCompanyEmail(companyEmailPageQuery);
         return result;
     }
 
@@ -63,19 +64,6 @@ public class CompanyEmailSendHistoryController{
         return result;
     }
 
-
-    /**
-     * 根据ID查询邮箱配置信息
-     * @param idVO
-     * @return
-     */
-    @SystemLog(value = "公司邮箱配置查询")
-    @RequestMapping("search-email-config")
-    public ResultVo<CompanyEmailConfigVO> searchEmailConfig(IdVO idVO){
-        CompanyEmailConfigVO configVO = companyEmailSendHistoryService.searchEmailConfig(idVO);
-        return ResultVo.ok(configVO);
-    }
-
     /**
      * 根据公司ID批量删除邮箱配置
      * @param idListVO
@@ -83,9 +71,9 @@ public class CompanyEmailSendHistoryController{
      */
     @SystemLog(value = "删除公司邮箱配置", type = SystemLog.Type.DELETE)
     @PostMapping("delete-company-email")
-    public boolean deleteEmail(@RequestBody IdListVO idListVO){
-        companyEmailSendHistoryService.deleteEmail(idListVO.getIdList());
-        return true;
+    public ResultVo deleteEmail(@RequestBody IdListVO idListVO){
+        ResultVo vo = companyEmailSendHistoryService.deleteEmail(idListVO.getIdList());
+        return vo;
     }
 
     /**
@@ -133,31 +121,6 @@ public class CompanyEmailSendHistoryController{
 
 
     /**
-     * 修改邮箱配置
-     * @param companyEmailConfigVO
-     * @return
-     */
-    @SystemLog(value = "修改公司邮箱", type = SystemLog.Type.UPDATE)
-    @PostMapping("update-email-config")
-    public boolean updateCompanyEmailConfig(@RequestBody CompanyEmailConfigVO companyEmailConfigVO){
-        companyEmailConfigService.updateCompanyEmailConfig(companyEmailConfigVO);
-        return true;
-    }
-
-    /**
-     * 根据ID删除邮箱配置
-     * @param comyanyEmailIdVO --id
-     * @return
-     */
-    @SystemLog(value = "删除公司邮箱", type = SystemLog.Type.DELETE)
-    @PostMapping("delete-email-config")
-    public boolean deleteCompanyEmailConfig(@RequestBody IdVO comyanyEmailIdVO){
-        companyEmailConfigService.deleteCompanyEmailConfig(comyanyEmailIdVO.getId());
-        return true;
-    }
-
-
-    /**
      * 根据companyIdList发送数据缺失邮件
      * @param idListVO  已选行的companyIdList
      * @return
@@ -169,6 +132,17 @@ public class CompanyEmailSendHistoryController{
         return true;
     }
 
-
+    /**
+     * 上传联系人信息
+     *
+     * @param file
+     * @return
+     */
+    @SystemLog(value = "上传联系人信息", type = SystemLog.Type.UPLOAD_OR_IMPORT)
+    @PostMapping("upload-contact-list")
+    public ResultVo uploadContactInformation(@RequestPart(value = "file") MultipartFile file) {
+        ResultVo vo = contactInformationService.uploadContactInformation(file);
+        return vo;
+    }
 
 }

+ 16 - 6
service-manage/src/main/java/com/simuwang/manage/api/contact/CompanyContactController.java

@@ -13,10 +13,8 @@ import com.smppw.common.pojo.enums.status.ResultCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-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;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -139,10 +137,10 @@ public class CompanyContactController {
      */
     @SystemLog(value = "查询对接人明细", type = SystemLog.Type.QUERY)
     @RequestMapping("select-company-contact-detail")
-    public ResultVo saveCompanyContactDetail(@RequestBody IdVO idVO){
+    public ResultVo selectCompanyContactDetail(@RequestBody IdVO idVO){
         ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
         try{
-            vo = companyContactService.saveCompanyContactDetail(idVO);
+            vo = companyContactService.selectCompanyContactDetail(idVO);
         }catch (Exception e){
             logger.error(e.getMessage(),e);
             vo.setData(false);
@@ -151,4 +149,16 @@ public class CompanyContactController {
         return vo;
     }
 
+    /**
+     * 上传对接人信息
+     *
+     * @param file
+     * @return
+     */
+    @SystemLog(value = "上传对接人信息", type = SystemLog.Type.UPLOAD_OR_IMPORT)
+    @PostMapping("upload-comany-contact")
+    public ResultVo uploadCompanyContact(@RequestPart(value = "file") MultipartFile file) {
+        ResultVo vo = companyContactService.uploadCompanyContact(file);
+        return vo;
+    }
 }

+ 12 - 12
service-manage/src/main/java/com/simuwang/manage/api/deletion/DeletionController.java

@@ -142,16 +142,16 @@ public class DeletionController {
             }
         }
     }
-
-    /**
-     * 计算缺失
-     * @param deletionDownParam
-     * @return
-     */
-    @SystemLog(value = "计算基金缺失")
-    @RequestMapping("compute-deletion")
-    public ResultVo computeDeletion(@RequestBody DeletionDownParam deletionDownParam){
-        deletionService.computeDeletion(deletionDownParam);
-        return new ResultVo<>(true);
-    }
+//
+//    /**
+//     * 计算缺失
+//     * @param deletionDownParam
+//     * @return
+//     */
+//    @SystemLog(value = "计算基金缺失")
+//    @RequestMapping("compute-deletion")
+//    public ResultVo computeDeletion(@RequestBody DeletionDownParam deletionDownParam){
+//        deletionService.computeDeletion(deletionDownParam);
+//        return new ResultVo<>(true);
+//    }
 }

+ 5 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/EmailConfigController.java

@@ -53,6 +53,11 @@ public class EmailConfigController{
                 vo.setMsg("邮箱地址已存在,无需添加");
                 return vo;
             }
+            if(!emailConfigService.bindingChannel(mailboxInfoVO.getEmail())){
+                vo.setCode(ResultCode.SAVE_FAILED.getCode());
+                vo.setMsg("邮箱地址未绑定渠道,请先绑定渠道");
+                return vo;
+            }
             emailConfigService.saveEmailConfig(mailboxInfoVO);
         }catch (Exception e){
             vo.setCode(ResultCode.SAVE_FAILED.getCode());

+ 26 - 3
service-manage/src/main/java/com/simuwang/manage/init/CompleteScheduleConfig.java

@@ -1,9 +1,8 @@
 package com.simuwang.manage.init;
 
-import com.oceanbase.jdbc.internal.util.StringCacheUtil;
 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.CompanySendTask;
 import com.simuwang.manage.task.FundDeletionTask;
 import com.simuwang.manage.task.NavAmplitudeTask;
 import com.simuwang.manage.task.SendCompanyEmailTask;
@@ -17,7 +16,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 import org.springframework.scheduling.support.CronTrigger;
 
-import java.time.LocalDateTime;
 
 
 /**
@@ -43,6 +41,8 @@ public class CompleteScheduleConfig implements SchedulingConfigurer {
 
     @Autowired
     private NavAmplitudeTask navAmplitudeTask;
+    @Autowired
+    private CompanySendTask companySendTask;
     /**
      * 执行定时任务.
      */
@@ -112,6 +112,29 @@ public class CompleteScheduleConfig implements SchedulingConfigurer {
                     return new CronTrigger(cron).nextExecutionTime(triggerContext).toInstant();
                 }
         );
+
+        taskRegistrar.addTriggerTask(
+                //1.添加任务内容(Runnable)
+                () -> {
+                    try {
+                        logger.info("计算公司是否报送净值任务开始"+DateUtils.getTime());
+                        companySendTask.companySend();
+                        logger.info("计算公司是否报送净值任务任务结束========="+ DateUtils.getTime());
+                    } catch (Exception e) {
+                        logger.error("计算公司是否报送净值任务任务异常========="+e.getMessage()+ DateUtils.getTime(),e);
+                    }
+                },
+                //2.设置执行周期(Trigger)
+                triggerContext -> {
+                    String cron = sysConfigMapper.selectConfigByKey("company_send_task_time");
+                    if(cron == null){
+                        cron = "0 0/30 8-22 * * ?";
+                    }
+                    logger.info("计算公司是否报送净值任务任务定时任务轮训时间:"+cron);
+                    //2.2 返回执行周期(Date)
+                    return new CronTrigger(cron).nextExecutionTime(triggerContext).toInstant();
+                }
+        );
     }
 
 }

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

@@ -23,4 +23,6 @@ public interface ChannelService {
     ResultVo deleteChannelEmail(Integer id);
 
     MybatisPage<ChannelEmailInfoVO> searchChannelEmailList(ChannelIdPageQuery channelIdPageQuery);
+
+    boolean existsChannel(String channelId);
 }

+ 4 - 1
service-manage/src/main/java/com/simuwang/manage/service/CompanyContactService.java

@@ -8,6 +8,7 @@ import com.simuwang.base.pojo.vo.CompanyContactInfoVO;
 import com.simuwang.base.pojo.vo.CompanyContactPageVO;
 import com.simuwang.base.pojo.vo.IdVO;
 import com.smppw.common.pojo.ResultVo;
+import org.springframework.web.multipart.MultipartFile;
 
 public interface CompanyContactService {
     ResultVo saveCompanyContactInfo(CompanyContactInfoVO companyContactInfoVO);
@@ -16,7 +17,9 @@ public interface CompanyContactService {
 
     MybatisPage<CompanyContactPageVO> selectCompanyContactList(CompanyIdQuery companyIdQuery);
 
-    ResultVo saveCompanyContactDetail(IdVO idVO);
+    ResultVo selectCompanyContactDetail(IdVO idVO);
 
     void deleteById(Integer id);
+
+    ResultVo uploadCompanyContact(MultipartFile file);
 }

+ 1 - 1
service-manage/src/main/java/com/simuwang/manage/service/CompanyEmailConfigService.java

@@ -22,6 +22,6 @@ public interface CompanyEmailConfigService {
 
     void sendCompanyEmail(List<Integer> idList);
 
-    void sendEmail(String companyId, String email);
+    void sendEmail(String companyId, String emails);
 
 }

+ 4 - 2
service-manage/src/main/java/com/simuwang/manage/service/CompanyEmailSendHistoryService.java

@@ -4,8 +4,10 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.CompanyEmailHistoryPageQuery;
 import com.simuwang.base.pojo.dto.query.CompanyEmailPageQuery;
 import com.simuwang.base.pojo.vo.CompanyEmailConfigVO;
+import com.simuwang.base.pojo.vo.CompanyEmailPageVO;
 import com.simuwang.base.pojo.vo.CompanyEmailSendHistoryVO;
 import com.simuwang.base.pojo.vo.IdVO;
+import com.smppw.common.pojo.ResultVo;
 
 import java.util.List;
 
@@ -16,10 +18,10 @@ import java.util.List;
  * Description: ${DESCRIPTION}
  */
 public interface CompanyEmailSendHistoryService {
-    MybatisPage<CompanyEmailSendHistoryVO> searchCompanyEmail(CompanyEmailPageQuery companyEmailPageQuery);
+    MybatisPage<CompanyEmailPageVO> searchCompanyEmail(CompanyEmailPageQuery companyEmailPageQuery);
     MybatisPage<CompanyEmailSendHistoryVO> searchEmailHistory(CompanyEmailHistoryPageQuery companyEmailHistoryPageQuery);
 
-    void deleteEmail(List<Integer> idList);
+    ResultVo deleteEmail(List<Integer> idList);
 
     void deleteEmailHistory(List<Integer> idList);
 

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

@@ -1,5 +1,7 @@
 package com.simuwang.manage.service;
 
+import com.simuwang.base.pojo.dos.ContactInformationDO;
+
 import java.util.List;
 import java.util.Map;
 
@@ -11,4 +13,5 @@ import java.util.Map;
  */
 public interface CompanyInformationService {
     List<Map<String, String>> searchCompanyInfo(String keyword);
+    String getCompanyNameById(String companyId);
 }

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

@@ -0,0 +1,9 @@
+package com.simuwang.manage.service;
+
+import com.simuwang.base.pojo.dos.CompanySendStatusDO;
+
+public interface CompanySendStatusService {
+    CompanySendStatusDO getCompanySendStatusByCompanyId(String companyId);
+
+    void insert(CompanySendStatusDO sendStatus);
+}

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

@@ -1,9 +1,12 @@
 package com.simuwang.manage.service;
 
 import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dos.ContactInformationDO;
 import com.simuwang.base.pojo.dto.query.ContactQuery;
 import com.simuwang.base.pojo.vo.ContactInformationVO;
 import com.smppw.common.pojo.ResultVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -14,4 +17,10 @@ public interface ContactInformationService {
     MybatisPage<ContactInformationVO> selectContactInformationList(ContactQuery contactQuery);
 
     ResultVo deleteById(Integer id);
+
+    List<ContactInformationDO> selectContactInformationListByCompanyId(String companyId);
+
+    ContactInformationDO selectById(Integer id);
+
+    ResultVo uploadContactInformation(MultipartFile file);
 }

+ 2 - 1
service-manage/src/main/java/com/simuwang/manage/service/DeletionService.java

@@ -1,6 +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.dto.DeletionDownParam;
 import com.simuwang.base.pojo.dto.ExcelDeletionInfoDTO;
 import com.simuwang.base.pojo.dto.query.DeletionPageQuery;
@@ -29,5 +30,5 @@ public interface DeletionService {
 
     List<ExcelDeletionInfoDTO> selectFundDeletionInfoVOList(FundDeletionListVO fundDeletionListVO);
 
-    void computeDeletion(DeletionDownParam deletionDownParam);
+    void computeDeletion(List<ContactInformationDO> contactInformationDOList);
 }

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

@@ -39,4 +39,6 @@ public interface EmailConfigService {
     void runOnce(Integer id);
 
     void parseEmail(ParseParamVO parseParamVO);
+
+    boolean bindingChannel(String email);
 }

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

@@ -128,4 +128,10 @@ public class ChannelServiceImpl implements ChannelService {
         long total = channelEmailMapper.countChannelEmail(channelIdPageQuery);
         return MybatisPage.of(total, voList);
     }
+
+    @Override
+    public boolean existsChannel(String channelId) {
+        ChannelEmailInfoDO channelEmailInfoDO = channelEmailMapper.selectById(channelId);
+        return channelEmailInfoDO == null;
+    }
 }

+ 233 - 6
service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyContactServiceImpl.java

@@ -1,25 +1,39 @@
 package com.simuwang.manage.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.simuwang.base.common.conts.ExcelConst;
+import com.simuwang.base.common.enums.ContactStatusType;
+import com.simuwang.base.common.enums.SignMethodType;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.daq.CompanyContactInfoMapper;
 import com.simuwang.base.mapper.daq.ContactInformationMapper;
 import com.simuwang.base.mapper.daq.LastCompanyContactInfoMapper;
+import com.simuwang.base.pojo.dto.CompanyContactExcelData;
 import com.simuwang.base.pojo.dos.*;
 import com.simuwang.base.pojo.dto.query.CompanyContactQuery;
 import com.simuwang.base.pojo.dto.query.CompanyIdQuery;
-import com.simuwang.base.pojo.vo.CompanyContactInfoPageVO;
-import com.simuwang.base.pojo.vo.CompanyContactInfoVO;
-import com.simuwang.base.pojo.vo.CompanyContactPageVO;
-import com.simuwang.base.pojo.vo.IdVO;
+import com.simuwang.base.pojo.vo.*;
 import com.simuwang.manage.service.CompanyContactService;
+import com.simuwang.manage.service.CompanyInformationService;
 import com.simuwang.shiro.utils.UserUtils;
 import com.smppw.common.pojo.ResultVo;
 import com.smppw.common.pojo.enums.status.ResultCode;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -37,6 +51,13 @@ public class CompanyContactServiceImpl implements CompanyContactService {
     @Autowired
     private ContactInformationMapper contactInformationMapper;
 
+    @Autowired
+    private CompanyInformationService companyInformationService;
+
+    @Value("${email.file.path}")
+    private String path;
+
+    private static final Logger logger = LoggerFactory.getLogger(CompanyContactServiceImpl.class);
     @Override
     public ResultVo saveCompanyContactInfo(CompanyContactInfoVO companyContactInfoVO) {
         ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
@@ -101,8 +122,8 @@ public class CompanyContactServiceImpl implements CompanyContactService {
     }
 
     @Override
-    public ResultVo saveCompanyContactDetail(IdVO idVO) {
-        CompanyContactPageDO pageDO = companyContactInfoMapper.saveCompanyContactDetail(idVO.getId());
+    public ResultVo selectCompanyContactDetail(IdVO idVO) {
+        CompanyContactPageDO pageDO = companyContactInfoMapper.selectCompanyContactDetail(idVO.getId());
         return new ResultVo(pageDO);
     }
 
@@ -131,4 +152,210 @@ public class CompanyContactServiceImpl implements CompanyContactService {
             }
         }
     }
+
+    @Override
+    public ResultVo uploadCompanyContact(MultipartFile excelFile) {
+        ResultVo vo = new ResultVo(ResultCode.SUCCESS);
+        File file = null;
+        try{
+            InputStream inputStream = excelFile.getInputStream();
+            file = new File(path+"/upload/"+ System.currentTimeMillis()+"/"+excelFile.getOriginalFilename());
+            FileUtils.copyInputStreamToFile(inputStream,file);
+            List<CompanyContactExcelData> list = parseContactFile(file);
+            vo.setData(parseResult(list));
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            vo.setMsg("文件解析异常");
+            vo.setData(false);
+            return vo;
+        }
+        return vo;
+    }
+
+    private List<CompanyContactExcelData> parseContactFile(File file) {
+        // 创建一个 list 存储每行的数据,即 ExcelData 对象
+        List<CompanyContactExcelData> list = new ArrayList<>();
+        // 直接使用 EasyExcel 的 read 方法,同时定义表头的类型,以便将列中数据映射为 ExcelData 对象
+        EasyExcel.read(file, CompanyContactExcelData.class, new PageReadListener<CompanyContactExcelData>(dataList -> {
+            // 并且每行数据,并将其 add 至 list 中
+            for (CompanyContactExcelData excelData : dataList) {
+                if (excelData != null) {
+                    list.add(excelData);
+                }
+            }
+        })).excelType(ExcelTypeEnum.XLSX).sheet().doRead();
+        return list;
+    }
+    private Object parseResult(List<CompanyContactExcelData> list) {
+        CompanyContactUploadResult result = new CompanyContactUploadResult();
+        int startRow = 1;
+        List<CompanyContactExcelSuccessDataVO> successDataVOList = new ArrayList<>();
+        List<CompanyContactExcelFailDataVO> excelFailDataVOList = new ArrayList<>();
+        for(int dataIdx=0;dataIdx<list.size(); dataIdx++){
+            CompanyContactExcelData excelData = list.get(dataIdx);
+            try{
+                if((StringUtil.isEmpty(excelData.getContactName()) || StringUtil.isEmpty(excelData.getContactDate()) || StringUtil.isEmpty(excelData.getCompanyId()))
+                        || StringUtil.isEmpty(excelData.getContactEmail()) || (StringUtil.isEmpty(excelData.getContactPhone()) && StringUtil.isEmpty(excelData.getContactWechat()))
+                ){
+                    CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData, ExcelConst.REQUIRE_FIELD,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                String companyName= companyInformationService.getCompanyNameById(excelData.getCompanyId());
+                if(StringUtil.isEmpty(companyName)){
+                    CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData, ExcelConst.ERROR_COMPANY_ID,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                Date contactDate = null;
+                try{
+                    contactDate = DateUtils.parse(excelData.getContactDate(),DateUtils.YYYY_MM_DD);
+                }catch (Exception e){
+                    CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData, ExcelConst.ERROR_DATE_FORMAT,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                if(ContactStatusType.getContactStatusTypeByInfo(excelData.getContactStatus()) == null ||
+                        SignMethodType.getSignMethodTypeByInfo(excelData.getSignMethod()) == null){
+                    CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData, ExcelConst.ERROR_METHOD,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                //开始处理成功数据
+                ContactInformationDO contactInformationDO = new ContactInformationDO();
+                contactInformationDO.setContactName(excelData.getContactName());
+                contactInformationDO.setContactEmail(excelData.getContactEmail());
+                contactInformationDO.setContactWechat(excelData.getContactWechat());
+                contactInformationDO.setContactPhone(excelData.getContactPhone());
+                contactInformationDO.setCompanyId(excelData.getCompanyId());
+                boolean successFlag = saveContactInfo(contactInformationDO);
+                if(!successFlag){
+                    CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData,"对接信息数据入库异常",dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                CompanyContactInfoDO companyContactInfDO = new CompanyContactInfoDO();
+                companyContactInfDO.setContactor(excelData.getContactor());
+                companyContactInfDO.setContactId(contactInformationDO.getId());
+                companyContactInfDO.setContactDate(contactDate);
+                companyContactInfDO.setCustomerManager(excelData.getCustomerManager());
+                companyContactInfDO.setContactRemark(excelData.getContactRemark());
+                companyContactInfDO.setCompanyId(excelData.getCompanyId());
+                companyContactInfDO.setContactStatus(ContactStatusType.getContactStatusTypeByInfo(excelData.getContactStatus()).getCode());
+                companyContactInfDO.setSignMethod(SignMethodType.getSignMethodTypeByInfo(excelData.getSignMethod()).getCode());
+                companyContactInfDO.setCreatorId(UserUtils.getLoginUser().getUserId());
+                companyContactInfDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
+                companyContactInfDO.setUpdateTime(new Date());
+                companyContactInfDO.setCreateTime(new Date());
+                companyContactInfDO.setIsvalid(1);
+                boolean saveFlag = saveCompanyContact(companyContactInfDO);
+                if(saveFlag){
+                    CompanyContactExcelSuccessDataVO successDataVO = new CompanyContactExcelSuccessDataVO();
+                    successDataVO.setContactor(excelData.getContactor());
+                    successDataVO.setContactDate(excelData.getContactDate());
+                    successDataVO.setCustomerManager(excelData.getCustomerManager());
+                    successDataVO.setCompanyId(excelData.getCompanyId());
+                    successDataVO.setContactStatus(excelData.getContactStatus());
+                    successDataVO.setSignMethod(excelData.getSignMethod());
+                    successDataVO.setContactRemark(excelData.getContactRemark());
+                    successDataVO.setContactEmail(excelData.getContactEmail());
+                    successDataVO.setContactPhone(excelData.getContactPhone());
+                    successDataVO.setContactWechat(excelData.getContactWechat());
+                    successDataVO.setCompanyName(companyName);
+                    successDataVOList.add(successDataVO);
+                }else{
+                    CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData,"对接信息数据入库异常",dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                }
+            }catch (Exception e){
+                logger.error(e.getMessage(),e);
+                CompanyContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData,e.getMessage(),dataIdx+startRow);
+                excelFailDataVOList.add(failDataVO);
+            }
+        }
+        result.setSuccess(successDataVOList);
+        result.setFail(excelFailDataVOList);
+        result.setTotal(successDataVOList.size()+excelFailDataVOList.size());
+        result.setFailCount(excelFailDataVOList.size());
+        result.setSuccessCount(successDataVOList.size());
+        return result;
+    }
+
+    private boolean saveContactInfo(ContactInformationDO contactInformationDO) {
+        try{
+            ContactInformationDO contactInformation = contactInformationMapper.selectByKey(contactInformationDO);
+            Integer userId = UserUtils.getLoginUser().getUserId();
+            if(contactInformation != null){
+                contactInformationDO.setId(contactInformation.getId());
+                contactInformationDO.setIsvalid(1);
+                contactInformationDO.setUpdateTime(new Date());
+                contactInformationDO.setUpdaterId(userId);
+                contactInformationDO.setContactRemark(contactInformation.getContactRemark());
+                contactInformationDO.setFileId(contactInformation.getFileId());
+                contactInformationMapper.updateById(contactInformationDO);
+            }else{
+                contactInformationDO.setIsvalid(1);
+                contactInformationDO.setUpdateTime(new Date());
+                contactInformationDO.setUpdaterId(userId);
+                contactInformationDO.setCreateTime(new Date());
+                contactInformationDO.setCreatorId(userId);
+                contactInformationMapper.insert(contactInformationDO);
+            }
+        } catch (Exception e) {
+            logger.error(e.getMessage(),e);
+            return false;
+        }
+        return  true;
+    }
+
+    private boolean saveCompanyContact(CompanyContactInfoDO companyContactInfDO) {
+        try{
+            CompanyContactInfoDO oldCompanyContactInfoDO = companyContactInfoMapper.getCompanyContactInfo(companyContactInfDO.getCompanyId(),DateUtils.format(companyContactInfDO.getContactDate(), DateUtils.YYYY_MM_DD));
+            if(oldCompanyContactInfoDO == null){
+                companyContactInfDO.setCreateTime(new Date());
+                companyContactInfDO.setCreatorId(UserUtils.getLoginUser().getUserId());
+                companyContactInfoMapper.insert(companyContactInfDO);
+            }else{
+                companyContactInfDO.setId(oldCompanyContactInfoDO.getId());
+                companyContactInfDO.setUpdateTime(new Date());
+                companyContactInfDO.setCreateTime(oldCompanyContactInfoDO.getCreateTime());
+                companyContactInfDO.setCreatorId(oldCompanyContactInfoDO.getCreatorId());
+                companyContactInfDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
+                companyContactInfoMapper.updateById(companyContactInfDO);
+            }
+            LastCompanyContactInfoDO lastCompanyContactInfoDO = lastCompanyContactInfoMapper.getLastCompanyContactInfoDOByCompanyId(companyContactInfDO.getCompanyId());
+            if (lastCompanyContactInfoDO == null) {
+                lastCompanyContactInfoDO = BeanUtil.copyProperties(companyContactInfDO,LastCompanyContactInfoDO.class);
+                lastCompanyContactInfoMapper.insert(lastCompanyContactInfoDO);
+            }else{
+                Date contactDate = companyContactInfDO.getContactDate();
+                if(contactDate.compareTo(lastCompanyContactInfoDO.getContactDate()) >= 0){
+                    companyContactInfDO.toLastDO(lastCompanyContactInfoDO);
+                    lastCompanyContactInfoMapper.updateById(lastCompanyContactInfoDO);
+                }
+            }
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            return false;
+        }
+        return true;
+    }
+
+    private CompanyContactExcelFailDataVO toExcelFailDataVO(CompanyContactExcelData excelData, String msg,Integer rowNum) {
+        CompanyContactExcelFailDataVO failDataVO = new CompanyContactExcelFailDataVO();
+        failDataVO.setContactor(excelData.getContactor());
+        failDataVO.setContactDate(excelData.getContactDate());
+        failDataVO.setCustomerManager(excelData.getCustomerManager());
+        failDataVO.setCompanyId(excelData.getCompanyId());
+        failDataVO.setContactStatus(excelData.getContactStatus());
+        failDataVO.setSignMethod(excelData.getSignMethod());
+        failDataVO.setContactRemark(excelData.getContactRemark());
+        failDataVO.setContactEmail(excelData.getContactEmail());
+        failDataVO.setContactPhone(excelData.getContactPhone());
+        failDataVO.setContactWechat(excelData.getContactWechat());
+        failDataVO.setCompanyName(companyInformationService.getCompanyNameById(excelData.getCompanyId()));
+        failDataVO.setFailReason(msg);
+        failDataVO.setRowNum(rowNum);
+        return failDataVO;
+    }
 }

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

@@ -150,10 +150,7 @@ public class CompanyEmailConfigServiceImpl implements CompanyEmailConfigService
     //邮件校验处理
     public void sendEmail(String companyId, String emails) {
         List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
-        if(fundIdList.size() < 1){
-            return;
-        }
-        List<EmailDeletionInfoDO> emailDeletionInfoDOS = deletionInfoMapper.getDeletionInfoByFundId(fundIdList);
+        List<EmailDeletionInfoDO> emailDeletionInfoDOS = deletionInfoMapper.selectDeletionInfoByFundId(fundIdList);
         for(EmailDeletionInfoDO infoDO : emailDeletionInfoDOS){
             infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
         }
@@ -214,6 +211,8 @@ public class CompanyEmailConfigServiceImpl implements CompanyEmailConfigService
     private File writeExcelFile(List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
         Map<String,List<List<String>>> values = new HashMap<>();
         List<String> head = new ArrayList<>();
+        head.add("渠道ID");
+        head.add("渠道名称");
         head.add("基金全称");
         head.add("管理人");
         head.add("缺失类型");
@@ -222,6 +221,8 @@ public class CompanyEmailConfigServiceImpl implements CompanyEmailConfigService
         List<List<String>> dataList = new ArrayList<>();
         for(EmailDeletionInfoDO dto : emailDeletionInfoDOS){
             List<String> data = new ArrayList<>();
+            data.add(String.valueOf(dto.getChannelId()));
+            data.add(dto.getChannelName());
             data.add(dto.getFundName());
             data.add(dto.getCompanyName());
             data.add(dto.getDeletionType());

+ 21 - 11
service-manage/src/main/java/com/simuwang/manage/service/impl/CompanyEmailSendHistoryServiceImpl.java

@@ -4,14 +4,20 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.mapper.daq.CompanyEmailConfigMapper;
 import com.simuwang.base.mapper.daq.CompanyEmailSendHistoryMapper;
 import com.simuwang.base.pojo.dos.CompanyEmailConfigDO;
+import com.simuwang.base.pojo.dos.CompanyEmailPageDO;
 import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO;
+import com.simuwang.base.pojo.dos.ContactInformationDO;
 import com.simuwang.base.pojo.dto.query.CompanyEmailHistoryPageQuery;
 import com.simuwang.base.pojo.dto.query.CompanyEmailPageQuery;
 import com.simuwang.base.pojo.vo.CompanyEmailConfigVO;
+import com.simuwang.base.pojo.vo.CompanyEmailPageVO;
 import com.simuwang.base.pojo.vo.CompanyEmailSendHistoryVO;
 import com.simuwang.base.pojo.vo.IdVO;
 import com.simuwang.manage.service.CompanyEmailSendHistoryService;
+import com.simuwang.manage.service.ContactInformationService;
 import com.simuwang.shiro.utils.UserUtils;
+import com.smppw.common.pojo.ResultVo;
+import com.smppw.common.pojo.enums.status.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -30,13 +36,15 @@ import java.util.stream.Collectors;
 public class CompanyEmailSendHistoryServiceImpl implements CompanyEmailSendHistoryService {
     @Autowired
     private CompanyEmailSendHistoryMapper companyEmailSendHistoryMapper;
+    @Autowired
+    private ContactInformationService contactInformationService;
 
     @Autowired
     private CompanyEmailConfigMapper companyEmailConfigMapper;
     @Override
-    public MybatisPage<CompanyEmailSendHistoryVO> searchCompanyEmail(CompanyEmailPageQuery companyEmailPageQuery) {
-        List<CompanyEmailSendHistoryDO> dataList = companyEmailSendHistoryMapper.searchCompanyEmailList(companyEmailPageQuery);
-        List<CompanyEmailSendHistoryVO> voList = dataList.stream().map(CompanyEmailSendHistoryDO::toVo).collect(Collectors.toList());
+    public MybatisPage<CompanyEmailPageVO> searchCompanyEmail(CompanyEmailPageQuery companyEmailPageQuery) {
+        List<CompanyEmailPageDO> dataList = companyEmailSendHistoryMapper.searchCompanyEmailList(companyEmailPageQuery);
+        List<CompanyEmailPageVO> voList = dataList.stream().map(CompanyEmailPageDO::toVo).collect(Collectors.toList());
         long total = companyEmailSendHistoryMapper.countCompanyEmailList(companyEmailPageQuery);
         return MybatisPage.of(total, voList);
     }
@@ -51,19 +59,21 @@ public class CompanyEmailSendHistoryServiceImpl implements CompanyEmailSendHisto
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void deleteEmail(List<Integer> idList) {
-        Integer userId = UserUtils.getLoginUser().getUserId();
+    public ResultVo deleteEmail(List<Integer> idList) {
+        ResultVo vo = new ResultVo<>(ResultCode.DELETE_SUCCESS.getCode());
         for(Integer id : idList){
-            CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectCompanyEmailConfigById(id);
-            //删除配置
-            companyEmailConfigMapper.deleteCompanyEmailConfig(configDO.getId(),userId);
-            //删除历史
+            ContactInformationDO contactInformationDO = contactInformationService.selectById(id);
             List<String> emailList = new ArrayList<>();
-            emailList.add(configDO.getEmail());
+            vo = contactInformationService.deleteById(contactInformationDO.getId());
+            if(vo.getCode() != ResultCode.DELETE_SUCCESS.getCode()){
+                return vo;
+            }
             if(emailList.size() > 0){
-                companyEmailSendHistoryMapper.deleteEmailHistory(emailList);
+                companyEmailSendHistoryMapper.deleteEmailHistory(contactInformationDO.getCompanyId(),contactInformationDO.getContactEmail());
             }
         }
+        vo.setData(true);
+        return vo;
     }
 
     @Override

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

@@ -24,4 +24,8 @@ public class CompanyInformationServiceImpl implements CompanyInformationService
         List<Map<String, String>> result = companyInformationMapper.searchCompanyInfoByKeyword(keyword);
         return result;
     }
+    @Override
+    public String getCompanyNameById(String companyId) {
+        return companyInformationMapper.getCompanyNameById(companyId);
+    }
 }

+ 23 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/CompanySendStatusServiceImpl.java

@@ -0,0 +1,23 @@
+package com.simuwang.manage.service.impl;
+
+import com.simuwang.base.mapper.daq.CompanySendStatusMapper;
+import com.simuwang.base.pojo.dos.CompanySendStatusDO;
+import com.simuwang.manage.service.CompanySendStatusService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CompanySendStatusServiceImpl implements CompanySendStatusService {
+    @Autowired
+    private CompanySendStatusMapper companySendStatusMapper;
+
+    @Override
+    public CompanySendStatusDO getCompanySendStatusByCompanyId(String companyId) {
+        return companySendStatusMapper.getCompanySendStatusByCompanyId(companyId);
+    }
+
+    @Override
+    public void insert(CompanySendStatusDO sendStatus) {
+        companySendStatusMapper.insert(sendStatus);
+    }
+}

+ 165 - 1
service-manage/src/main/java/com/simuwang/manage/service/impl/ContactInformationServiceImpl.java

@@ -1,20 +1,35 @@
 package com.simuwang.manage.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.simuwang.base.common.conts.ExcelConst;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.DateUtils;
+import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.daq.CompanyContactInfoMapper;
 import com.simuwang.base.mapper.daq.ContactInformationMapper;
+import com.simuwang.base.pojo.dto.ContactExcelData;
 import com.simuwang.base.pojo.dos.ContactInformationDO;
 import com.simuwang.base.pojo.dto.query.ContactQuery;
-import com.simuwang.base.pojo.vo.ContactInformationVO;
+import com.simuwang.base.pojo.vo.*;
+import com.simuwang.manage.service.CompanyInformationService;
 import com.simuwang.manage.service.ContactInformationService;
 import com.simuwang.shiro.utils.UserUtils;
 import com.smppw.common.pojo.ResultVo;
 import com.smppw.common.pojo.enums.status.ResultCode;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -27,6 +42,13 @@ public class ContactInformationServiceImpl implements ContactInformationService
     @Autowired
     private CompanyContactInfoMapper companyContactInfoMapper;
 
+    @Autowired
+    private CompanyInformationService companyInformationService;
+
+    @Value("${email.file.path}")
+    private String path;
+    private static final Logger logger = LoggerFactory.getLogger(ContactInformationServiceImpl.class);
+
     @Override
     public ResultVo saveContactInformation(List<ContactInformationVO> contactInformationVOList) {
         ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS.getCode());
@@ -77,4 +99,146 @@ public class ContactInformationServiceImpl implements ContactInformationService
         vo.setData(true);
         return vo;
     }
+
+    @Override
+    public List<ContactInformationDO> selectContactInformationListByCompanyId(String companyId) {
+        return contactInformationMapper.selectContactInformationListByCompanyId(companyId);
+    }
+
+    @Override
+    public ContactInformationDO selectById(Integer id) {
+        return contactInformationMapper.selectById(id);
+    }
+
+    @Override
+    public ResultVo uploadContactInformation(MultipartFile excelFile) {
+        ResultVo vo = new ResultVo(ResultCode.SUCCESS);
+        File file = null;
+        try{
+            InputStream inputStream = excelFile.getInputStream();
+            file = new File(path+"/upload/"+ System.currentTimeMillis()+"/"+excelFile.getOriginalFilename());
+            FileUtils.copyInputStreamToFile(inputStream,file);
+            List<ContactExcelData> list = parseContactFile(file);
+            vo.setData(parseResult(list));
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            vo.setMsg("文件解析异常");
+            vo.setData(false);
+            return vo;
+        }
+        return vo;
+    }
+
+
+    private boolean saveContactInformationDO(ContactInformationDO contactInformationDO) {
+        try{
+            ContactInformationDO contactInformation = contactInformationMapper.selectByKey(contactInformationDO);
+            Integer userId = UserUtils.getLoginUser().getUserId();
+            if(contactInformation != null){
+                contactInformationDO.setId(contactInformation.getId());
+                contactInformationDO.setIsvalid(1);
+                contactInformationDO.setUpdateTime(new Date());
+                contactInformationDO.setUpdaterId(userId);
+                contactInformationDO.setContactRemark(contactInformation.getContactRemark());
+                contactInformationDO.setFileId(contactInformation.getFileId());
+                contactInformationMapper.updateById(contactInformationDO);
+            }else{
+                contactInformationDO.setIsvalid(1);
+                contactInformationDO.setUpdateTime(new Date());
+                contactInformationDO.setUpdaterId(userId);
+                contactInformationDO.setCreateTime(new Date());
+                contactInformationDO.setCreatorId(userId);
+                contactInformationMapper.insert(contactInformationDO);
+            }
+        } catch (Exception e) {
+            logger.error(e.getMessage(),e);
+            return false;
+        }
+        return true;
+    }
+
+    private Object parseResult(List<ContactExcelData> list) {
+        ContactUploadResult result = new ContactUploadResult();
+        int startRow = 1;
+        List<ContactExcelSuccessDataVO> successDataVOList = new ArrayList<>();
+        List<ContactExcelFailDataVO> excelFailDataVOList = new ArrayList<>();
+        for(int dataIdx=0;dataIdx<list.size(); dataIdx++){
+            ContactExcelData excelData = list.get(dataIdx);
+            try{
+                if((StringUtil.isEmpty(excelData.getCompanyId()) || StringUtil.isEmpty(excelData.getContactName()))
+                        || StringUtil.isEmpty(excelData.getContactEmail()) || (StringUtil.isEmpty(excelData.getContactPhone()) && StringUtil.isEmpty(excelData.getContactWechat()))
+                ){
+                    ContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData, ExcelConst.REQUIRE_FIELD,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                if(StringUtil.isEmpty(companyInformationService.getCompanyNameById(excelData.getCompanyId()))){
+                    ContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData, ExcelConst.ERROR_COMPANY_ID,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+
+                //开始处理成功数据
+                ContactInformationDO contactInformationDO = new ContactInformationDO();
+                contactInformationDO.setContactName(excelData.getContactName());
+                contactInformationDO.setContactEmail(excelData.getContactEmail());
+                contactInformationDO.setContactWechat(excelData.getContactWechat());
+                contactInformationDO.setContactPosition(excelData.getContactPosition());
+                contactInformationDO.setContactPhone(excelData.getContactPhone());
+                contactInformationDO.setCompanyId(excelData.getCompanyId());
+                boolean saveFlag= saveContactInformationDO(contactInformationDO);
+                if(saveFlag){
+                    ContactExcelSuccessDataVO successDataVO = new ContactExcelSuccessDataVO();
+                    successDataVO.setCompanyId(excelData.getCompanyId());
+                    successDataVO.setCompanyName(companyInformationService.getCompanyNameById(excelData.getCompanyId()));
+                    successDataVO.setContactPosition(excelData.getContactPosition());
+                    successDataVO.setContactPhone(excelData.getContactPhone());
+                    successDataVO.setContactName(excelData.getContactName());
+                    successDataVO.setContactEmail(excelData.getContactEmail());
+                    successDataVO.setContactWechat(excelData.getContactWechat());
+                    successDataVOList.add(successDataVO);
+                }else{
+                    ContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData,"数据入库异常",dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                }
+            }catch (Exception e){
+                logger.error(e.getMessage(),e);
+                ContactExcelFailDataVO failDataVO = toExcelFailDataVO(excelData,e.getMessage(),dataIdx+startRow);
+                excelFailDataVOList.add(failDataVO);
+            }
+        }
+        result.setSuccess(successDataVOList);
+        result.setFail(excelFailDataVOList);
+        result.setTotal(successDataVOList.size()+excelFailDataVOList.size());
+        result.setFailCount(excelFailDataVOList.size());
+        result.setSuccessCount(successDataVOList.size());
+        return result;
+    }
+    private ContactExcelFailDataVO toExcelFailDataVO(ContactExcelData excelData, String msg,Integer rowNum) {
+        ContactExcelFailDataVO failDataVO = new ContactExcelFailDataVO();
+        failDataVO.setFailReason(msg);
+        failDataVO.setRowNum(rowNum);
+        failDataVO.setContactEmail(excelData.getContactEmail());
+        failDataVO.setContactPhone(excelData.getContactPhone());
+        failDataVO.setContactPosition(excelData.getContactPosition());
+        failDataVO.setCompanyId(excelData.getCompanyId());
+        failDataVO.setContactName(excelData.getContactName());
+        failDataVO.setCompanyName(companyInformationService.getCompanyNameById(excelData.getCompanyId()));
+        return failDataVO;
+    }
+
+    private List<ContactExcelData> parseContactFile(File file) {
+        // 创建一个 list 存储每行的数据,即 ExcelData 对象
+        List<ContactExcelData> list = new ArrayList<>();
+        // 直接使用 EasyExcel 的 read 方法,同时定义表头的类型,以便将列中数据映射为 ExcelData 对象
+        EasyExcel.read(file, ContactExcelData.class, new PageReadListener<ContactExcelData>(dataList -> {
+            // 并且每行数据,并将其 add 至 list 中
+            for (ContactExcelData excelData : dataList) {
+                if (excelData != null) {
+                    list.add(excelData);
+                }
+            }
+        })).excelType(ExcelTypeEnum.XLSX).sheet().doRead();
+        return list;
+    }
 }

+ 80 - 53
service-manage/src/main/java/com/simuwang/manage/service/impl/DeletionServiceImpl.java

@@ -10,12 +10,15 @@ import com.simuwang.base.common.util.StringUtil;
 import com.simuwang.base.mapper.daq.*;
 import com.simuwang.base.pojo.dos.*;
 import com.simuwang.base.pojo.dto.DeletionDownParam;
+import com.simuwang.base.pojo.dto.EmailInfoDTO;
 import com.simuwang.base.pojo.dto.ExcelDeletionInfoDTO;
 import com.simuwang.base.pojo.dto.query.DeletionPageQuery;
 import com.simuwang.base.pojo.dto.query.FundDeletionPageQuery;
 import com.simuwang.base.pojo.vo.*;
 import com.simuwang.manage.service.DeletionService;
 import com.simuwang.shiro.utils.UserUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -32,6 +35,7 @@ import java.util.stream.Collectors;
 @Service
 public class DeletionServiceImpl implements DeletionService {
 
+    private static final Logger log = LoggerFactory.getLogger(DeletionServiceImpl.class);
     @Autowired
     private DeletionInfoMapper deletionInfoMapper;
 
@@ -54,6 +58,9 @@ public class DeletionServiceImpl implements DeletionService {
     private DistributionMapper distributionMapper;
 
     @Autowired
+    private ChannelEmailMapper channelEmailMapper;
+
+    @Autowired
     private NavMapper navMapper;
     @Override
     public MybatisPage<DeletionInfoVO> searchDeletionList(DeletionPageQuery deletionPageQuery) {
@@ -77,6 +84,7 @@ public class DeletionServiceImpl implements DeletionService {
         for(FundDeletionInfoVO vo : fundDeletionInfoVOList){
             FundDeletionInfoDO fundDeletionInfoDO = new FundDeletionInfoDO();
             fundDeletionInfoDO.setId(vo.getId());
+            fundDeletionInfoDO.setChannelId(vo.getChannelId());
             fundDeletionInfoDO.setDeletionType(vo.getDeletionType());
             fundDeletionInfoDO.setFundId(vo.getFundId());
             fundDeletionInfoDO.setDeletionDate(vo.getDeletionDate());
@@ -94,7 +102,7 @@ public class DeletionServiceImpl implements DeletionService {
         String remark = fundDeletionRemarkVO.getRemark();
         Integer userId = UserUtils.getLoginUser().getUserId();
         for(FundDeletionTypeVO remarkVO : fundDeletionRemarkVO.getFundDeletionTypeList()){
-            deletionInfoMapper.updateRemark(remarkVO.getFundId(),remarkVO.getDeletionType(),remarkVO.getDeletionDate(),remark,userId);
+            deletionInfoMapper.updateRemark(remarkVO.getChannelId(),remarkVO.getFundId(),remarkVO.getDeletionType(),remarkVO.getDeletionDate(),remark,userId);
         }
     }
 
@@ -119,55 +127,71 @@ public class DeletionServiceImpl implements DeletionService {
     }
 
     @Override
-    public void computeDeletion(DeletionDownParam deletionDownParam) {
-        String fundId = deletionDownParam.getFundId();
-        String liquidateDate = fundInfoMapper.getLiquidateDateByFundId(fundId);
-        if(StringUtil.isNotEmpty(liquidateDate)){
-            return;
-        }
-        String inceptionDate = fundInfoMapper.getInceptionDateByFundId(fundId);
-        if(StringUtil.isEmpty(inceptionDate)){
-            return;
-        }
-        String today = DateUtils.getAroundToday(0);
-        //获取基金对应的净值报送频率
-        FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
-        if(StringUtil.isNull(fundReportFrequencyDO)){
-            return;
+    public void computeDeletion(List<ContactInformationDO> contactInformationDOList) {
+        Map<Integer,List<String>> channelEmailMap = new HashMap<>();
+        //按渠道分组
+        for (ContactInformationDO contactInformationDO : contactInformationDOList) {
+            try{
+                String email = contactInformationDO.getContactEmail();
+                Integer channelId = channelEmailMapper.selectChannelIdByEmail(email);
+                if(channelId == null){
+                    continue;
+                }
+                if(!channelEmailMap.containsKey(channelId)){
+                    List<String> channelEmailList = channelEmailMap.get(channelId);
+                    channelEmailList.add(email);
+                    channelEmailMap.put(channelId,channelEmailList);
+                }else{
+                    List<String> channelEmailList = new ArrayList<>();
+                    channelEmailList.add(email);
+                    channelEmailMap.put(channelId,channelEmailList);
+                }
+            }catch (Exception e){
+                log.error(e.getMessage(),e);
+            }
         }
-        List<NavDO> navDOList = navMapper.selectNavByFundId(fundId);
-        List<AssetDO> assetDOList = assetMapper.selectAssetByFundId(fundId);
-        List<FundPositionDetailDO> fundPositionDetailDOList = fundPositionDetailMapper.fundPositionDetailByFundId(fundId);
-        //查询成立日到今天为止的交易日集合
-        List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
-        if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.NAV_DELETION.getCode())){
-            navDeletion(fundId,navDOList,tradeDateDOList,fundReportFrequencyDO);
-        }else if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.ASSET_DELETION.getCode())){
-            assetDeletion(fundId,assetDOList,tradeDateDOList,fundReportFrequencyDO);
-        }else if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.DISTRIBUTION_DELETION.getCode())){
-            distributionDeletion(fundId,navDOList);
-        }else if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.VALUATION_DELETION.getCode())){
-             valuationDeletion(fundId,fundPositionDetailDOList,tradeDateDOList,fundReportFrequencyDO);
-        }else{
-            navDeletion(fundId,navDOList,tradeDateDOList,fundReportFrequencyDO);
-            assetDeletion(fundId,assetDOList,tradeDateDOList,fundReportFrequencyDO);
-            distributionDeletion(fundId,navDOList);
-            valuationDeletion(fundId,fundPositionDetailDOList,tradeDateDOList,fundReportFrequencyDO);
+        for (Integer channelId : channelEmailMap.keySet()) {
+            List<NavDO> navDOList = navMapper.selectNavByChannelId(channelId);
+            Map<String,List<NavDO>> fundIdNavMap = navDOList.stream().collect(Collectors.groupingBy(NavDO::getFundId));
+            for (String fundId : fundIdNavMap.keySet()) {
+                String liquidateDate = fundInfoMapper.getLiquidateDateByFundId(fundId);
+                if(StringUtil.isNotEmpty(liquidateDate)){
+                    return;
+                }
+                String inceptionDate = fundInfoMapper.getInceptionDateByFundId(fundId);
+                if(StringUtil.isEmpty(inceptionDate)){
+                    return;
+                }
+                String today = DateUtils.getAroundToday(0);
+                //获取基金对应的净值报送频率
+                FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
+                if(StringUtil.isNull(fundReportFrequencyDO)){
+                    return;
+                }
+                List<NavDO> fundNavDOList = fundIdNavMap.get(fundId);
+                //查询成立日到今天为止的交易日集合
+                List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
+                navDeletion(channelId,fundId,fundNavDOList,tradeDateDOList,fundReportFrequencyDO);
+                List<AssetDO> assetDOList = assetMapper.selectAssetByFundId(fundId,channelId);
+                List<FundPositionDetailDO> fundPositionDetailDOList = fundPositionDetailMapper.fundPositionDetailByFundId(fundId,channelId);
+                assetDeletion(channelId,fundId,assetDOList,tradeDateDOList,fundReportFrequencyDO);
+                distributionDeletion(channelId,fundId,navDOList);
+                valuationDeletion(channelId,fundId,fundPositionDetailDOList,tradeDateDOList,fundReportFrequencyDO);
+            }
         }
-
     }
 
-    private void distributionDeletion(String fundId, List<NavDO> navDOList) {
+    private void distributionDeletion(Integer channelId,String fundId, List<NavDO> navDOList) {
         if(navDOList.size() < 1){
             return;
         }
         //将现有数据无效掉
         deletionInfoMapper.deleteDeletion(fundId,DeletionType.DISTRIBUTION_DELETION.getCode());
         //查询是否存在拆分
-        List<DistributionDO> distributionDOS = distributionMapper.getDistributionByFundId(fundId, DistributeType.DIVIDENDS_SPLIT.getCode());
+        List<DistributionDO> distributionDOS = distributionMapper.getDistributionByFundId(channelId,fundId, DistributeType.DIVIDENDS_SPLIT.getCode());
         if(distributionDOS.size() > 0){
             //存在拆分,不做分红缺失计算,同时把以往的数据添加备注
-            deletionInfoMapper.updateRemark(fundId,DeletionType.DISTRIBUTION_DELETION.getCode(),null,DeletionType.EXIST_SPLIT.getInfo(),null);
+            deletionInfoMapper.updateRemark(channelId,fundId,DeletionType.DISTRIBUTION_DELETION.getCode(),null,DeletionType.EXIST_SPLIT.getInfo(),null);
             return;
         }
         BigDecimal threshold = new BigDecimal(0.0035);
@@ -201,10 +225,10 @@ public class DeletionServiceImpl implements DeletionService {
             }
             preDifference = difference;
         }
-        saveDeletionInfoDO(fundId,tradeDateList,DeletionType.DISTRIBUTION_DELETION.getCode());
+        saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.DISTRIBUTION_DELETION.getCode());
     }
 
-    private void assetDeletion(String fundId, List<AssetDO> assetDOList, List<TradeDateDO> tradeDateDOList, FundReportFrequencyDO fundReportFrequencyDO) {
+    private void assetDeletion(Integer channelId,String fundId, List<AssetDO> assetDOList, List<TradeDateDO> tradeDateDOList, FundReportFrequencyDO fundReportFrequencyDO) {
         //将现有数据无效掉
         deletionInfoMapper.deleteDeletion(fundId,DeletionType.ASSET_DELETION.getCode());
         List<String> tradeDateList = new ArrayList<>();
@@ -231,6 +255,7 @@ public class DeletionServiceImpl implements DeletionService {
                 for(String tradeDate : updateTradeDateList){
                     DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
                     deletionInfoDO.setFundId(fundId);
+                    deletionInfoDO.setChannelId(channelId);
                     deletionInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
                     deletionInfoDO.setDeletionDate(tradeDate);
                     deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
@@ -239,7 +264,7 @@ public class DeletionServiceImpl implements DeletionService {
                 deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
         }
         if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getAssetFrequency())){
             Map<String,List<AssetDO>> navListMap = assetDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
@@ -308,7 +333,7 @@ public class DeletionServiceImpl implements DeletionService {
                 tradeDateList.add(tradeDate);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
         }
         if(Frequency.MONTH == Frequency.getFrequencyByCode(fundReportFrequencyDO.getAssetFrequency())){
             Map<String,List<AssetDO>> navListMap = assetDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
@@ -381,11 +406,11 @@ public class DeletionServiceImpl implements DeletionService {
                 tradeDateList.add(tradeDate);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
         }
     }
 
-    private void navDeletion(String fundId,List<NavDO> navDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
+    private void navDeletion(Integer channelId,String fundId,List<NavDO> navDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
         //将现有数据无效掉
         deletionInfoMapper.deleteDeletion(fundId,DeletionType.NAV_DELETION.getCode());
         List<String> tradeDateList = new ArrayList<>();
@@ -413,6 +438,7 @@ public class DeletionServiceImpl implements DeletionService {
                 for(String tradeDate : updateTradeDateList){
                     DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
                     deletionInfoDO.setFundId(fundId);
+                    deletionInfoDO.setChannelId(channelId);
                     deletionInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
                     deletionInfoDO.setDeletionDate(tradeDate);
                     deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
@@ -421,7 +447,7 @@ public class DeletionServiceImpl implements DeletionService {
                 deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
         }
         if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
             Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
@@ -489,7 +515,7 @@ public class DeletionServiceImpl implements DeletionService {
                 tradeDateList.add(tradeDate);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
         }
         if(Frequency.MONTH == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
             Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
@@ -562,11 +588,11 @@ public class DeletionServiceImpl implements DeletionService {
                 tradeDateList.add(tradeDate);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
         }
     }
 
-    private void valuationDeletion(String fundId,List<FundPositionDetailDO> fundPositionDetailDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
+    private void valuationDeletion(Integer channelId,String fundId,List<FundPositionDetailDO> fundPositionDetailDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
         //将现有数据无效掉
         deletionInfoMapper.deleteDeletion(fundId,DeletionType.VALUATION_DELETION.getCode());
         List<String> tradeDateList = new ArrayList<>();
@@ -602,7 +628,7 @@ public class DeletionServiceImpl implements DeletionService {
                 deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
         }
         if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getValuationFrequency())){
             Map<String,List<FundPositionDetailDO>> valuationListMap = fundPositionDetailDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getValuationDate(),DateUtils.YYYY_MM_DD)));
@@ -670,7 +696,7 @@ public class DeletionServiceImpl implements DeletionService {
                 tradeDateList.add(tradeDate);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
         }
         if(Frequency.MONTH == Frequency.getFrequencyByCode(fundReportFrequencyDO.getValuationFrequency())){
             Map<String,List<FundPositionDetailDO>> valuationListMap = fundPositionDetailDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getValuationDate(),DateUtils.YYYY_MM_DD)));
@@ -743,15 +769,15 @@ public class DeletionServiceImpl implements DeletionService {
                 tradeDateList.add(tradeDate);
             }
             //写入缺失信息表
-            saveDeletionInfoDO(fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
+            saveDeletionInfoDO(channelId,fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
         }
     }
 
-    private void saveDeletionInfoDO(String fundId, List<String> tradeDateList, Integer code) {
+    private void saveDeletionInfoDO(Integer channelId,String fundId, List<String> tradeDateList, Integer code) {
         if(tradeDateList.size() < 1){
             return;
         }
-        List<DeletionInfoDO> oldDeletionDOList = deletionInfoMapper.getDeletionInfoDO(fundId,code,tradeDateList);
+        List<DeletionInfoDO> oldDeletionDOList = deletionInfoMapper.getDeletionInfoDO(channelId,fundId,code,tradeDateList);
         if(oldDeletionDOList != null && oldDeletionDOList.size() > 0){
             for(DeletionInfoDO oldDeletionDO : oldDeletionDOList){
                 oldDeletionDO.setIsvalid(1);
@@ -773,6 +799,7 @@ public class DeletionServiceImpl implements DeletionService {
             for(String tradeDate : insertTradeDateList){
                 DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
                 deletionInfoDO.setFundId(fundId);
+                deletionInfoDO.setChannelId(channelId);
                 deletionInfoDO.setDeletionType(code);
                 deletionInfoDO.setDeletionDate(tradeDate);
                 deletionInfoDO.setIsvalid(1);

+ 1 - 1
service-manage/src/main/java/com/simuwang/manage/service/impl/DistributionServiceImpl.java

@@ -101,7 +101,7 @@ public class DistributionServiceImpl implements DistributionService {
         distributionDO.setCreatorId(UserUtils.getLoginUser().getUserId());
         distributionDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
         distributionDO.setUpdateTime(DateUtils.getNowDate());
-        DistributionDO oldDistributionDO = distributionMapper.selectDistributionByDate(distributionVO.getFundId(),DateUtils.parse(distributionVO.getDistributeDate(),DateUtils.YYYY_MM_DD));
+        DistributionDO oldDistributionDO = distributionMapper.selectDistributionByDate(distributionVO.getChannelId(),distributionVO.getFundId(),DateUtils.parse(distributionVO.getDistributeDate(),DateUtils.YYYY_MM_DD));
         if(!StringUtil.isNull(oldDistributionDO)){
             if(distributionVO.getId() != null && !oldDistributionDO.getId().equals(distributionVO.getId())){
                 vo.setData(false);

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

@@ -10,6 +10,7 @@ import com.simuwang.base.common.enums.ResultCode;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.*;
 import com.simuwang.base.config.DaqProperties;
+import com.simuwang.base.mapper.daq.ChannelEmailMapper;
 import com.simuwang.base.mapper.daq.MailboxInfoMapper;
 import com.simuwang.base.pojo.dos.ChannelEmailInfoDO;
 import com.simuwang.base.pojo.dos.MailboxInfoDO;
@@ -66,6 +67,9 @@ public class EmailConfigServiceImpl implements EmailConfigService {
     private String JOB_CLASS="com.simuwang.manage.task.ParseSchedulerTask";
     private static final Logger logger = LoggerFactory.getLogger(EmailConfigServiceImpl.class);
 
+    @Autowired
+    private ChannelEmailMapper channelEmailMapper;
+
     @Override
     public MybatisPage<MailboxInfoTableVO> searchEmailConfigList(EmailPageQuery emailPageQuery) {
         List<MailboxInfoDO> mailboxInfoOS = emailConfigMapper.searchEmailConfigList(emailPageQuery);
@@ -242,6 +246,12 @@ public class EmailConfigServiceImpl implements EmailConfigService {
 
     }
 
+    @Override
+    public boolean bindingChannel(String email) {
+        int count = channelEmailMapper.countChannelEmailByEmail(email);
+        return count > 0;
+    }
+
     private MailboxInfoDO toMailboxInfoDO(MailboxInfoVO mailboxInfoVO) {
         MailboxInfoDO mailboxInfoDO = new MailboxInfoDO();
         mailboxInfoDO.setIsvalid(1);

+ 19 - 5
service-manage/src/main/java/com/simuwang/manage/service/impl/FundNavAssetServiceImpl.java

@@ -8,17 +8,14 @@ import com.simuwang.base.common.enums.DistributeType;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.StringUtil;
-import com.simuwang.base.mapper.daq.AssetMapper;
-import com.simuwang.base.mapper.daq.FundInfoMapper;
-import com.simuwang.base.mapper.daq.FundNavAssetMapper;
-import com.simuwang.base.mapper.daq.NavMapper;
+import com.simuwang.base.mapper.daq.*;
 import com.simuwang.base.pojo.dos.AssetDO;
 import com.simuwang.base.pojo.dos.FundNavAssetDO;
 import com.simuwang.base.pojo.dos.NavDO;
-import com.simuwang.base.pojo.dto.DistributionExcelData;
 import com.simuwang.base.pojo.dto.NavAssetExcelData;
 import com.simuwang.base.pojo.dto.query.FundNavAssetPageQuery;
 import com.simuwang.base.pojo.vo.*;
+import com.simuwang.manage.service.ChannelService;
 import com.simuwang.manage.service.FundNavAssetService;
 import com.simuwang.shiro.utils.UserUtils;
 import com.smppw.common.pojo.ResultVo;
@@ -60,6 +57,9 @@ public class FundNavAssetServiceImpl implements FundNavAssetService {
     @Autowired
     private FundInfoMapper fundInfoMapper;
 
+    @Autowired
+    private ChannelService channelService;
+
     @Value("${email.file.path}")
     private String path;
     private static final Logger logger = LoggerFactory.getLogger(FundNavAssetServiceImpl.class);
@@ -80,6 +80,7 @@ public class FundNavAssetServiceImpl implements FundNavAssetService {
         assetDO.setAssetShare(fundAssetVO.getAssetShare());
         assetDO.setPriceDate(DateUtils.parse(fundAssetVO.getPriceDate(),DateUtils.YYYY_MM_DD));
         assetDO.setFundId(fundAssetVO.getFundId());
+        assetDO.setChannelId(fundAssetVO.getChannelId());
         assetDO.setUpdateTime(DateUtils.getNowDate());
         assetDO.setCreatorId(UserUtils.getLoginUser().getUserId());
         assetDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
@@ -104,6 +105,7 @@ public class FundNavAssetServiceImpl implements FundNavAssetService {
         navDO.setCumulativeNavWithdrawal(fundNavVO.getCumulativeNavWithdrawal());
         navDO.setNav(fundNavVO.getNav());
         navDO.setFundId(fundNavVO.getFundId());
+        navDO.setChannelId(fundNavVO.getChannelId());
         navDO.setNav(fundNavVO.getNav());
         navDO.setPriceDate(DateUtils.parse(fundNavVO.getPriceDate(),DateUtils.YYYY_MM_DD));
         navDO.setIsvalid(1);
@@ -168,6 +170,16 @@ public class FundNavAssetServiceImpl implements FundNavAssetService {
                     excelFailDataVOList.add(failDataVO);
                     continue;
                 }
+                if(StringUtil.isEmpty(excelData.getChannelId())){
+                    ExcelNavAssetFailDataVO failDataVO = toExcelFailDataVO(excelData,ExcelConst.REQUIRE_FIELD,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
+                if(channelService.existsChannel(excelData.getChannelId())){
+                    ExcelNavAssetFailDataVO failDataVO = toExcelFailDataVO(excelData,ExcelConst.REQUIRE_FIELD,dataIdx+startRow);
+                    excelFailDataVOList.add(failDataVO);
+                    continue;
+                }
                 if(StringUtil.isNotEmpty(excelData.getFundId())){
                     String fundName = fundInfoMapper.getFundNameByFundId(excelData.getFundId());
                     if(StringUtil.isEmpty(excelData.getFundName())){
@@ -201,6 +213,7 @@ public class FundNavAssetServiceImpl implements FundNavAssetService {
                 //开始处理成功数据
                 FundNavVO fundNavVO = new FundNavVO();
                 fundNavVO.setFundId(excelData.getFundId());
+                fundNavVO.setChannelId(Integer.valueOf(excelData.getChannelId().trim()));
                 fundNavVO.setPriceDate(excelData.getPriceDate());
                 fundNavVO.setNav(BigDecimal.valueOf(Double.valueOf(excelData.getNav())));
                 fundNavVO.setCumulativeNavWithdrawal(BigDecimal.valueOf(Double.valueOf(excelData.getCumulativeNavWithdrawal())));
@@ -210,6 +223,7 @@ public class FundNavAssetServiceImpl implements FundNavAssetService {
                 }
                 FundAssetVO fundAssetVO = new FundAssetVO();
                 fundAssetVO.setFundId(excelData.getFundId());
+                fundNavVO.setChannelId(Integer.valueOf(excelData.getChannelId().trim()));
                 fundAssetVO.setPriceDate(excelData.getPriceDate());
                 fundAssetVO.setAssetNet(StringUtil.isEmpty(excelData.getAssetNet())?null:BigDecimal.valueOf(Double.valueOf(excelData.getAssetNet())));
                 fundAssetVO.setAssetShare(StringUtil.isEmpty(excelData.getAssetShare())?null:BigDecimal.valueOf(Double.valueOf(excelData.getAssetShare())));

+ 1 - 1
service-manage/src/main/java/com/simuwang/manage/service/impl/ImageSeviceImpl.java

@@ -22,7 +22,7 @@ import java.util.Date;
 @Service
 public class ImageSeviceImpl implements ImageSevice {
 
-    @Value("${email.file.path}")
+    @Value("${image.path}")
     private String path;
     @Autowired
     private ImageMapper imageMapper;

+ 47 - 0
service-manage/src/main/java/com/simuwang/manage/task/CompanySendTask.java

@@ -0,0 +1,47 @@
+package com.simuwang.manage.task;
+
+import com.simuwang.base.mapper.daq.EmailFundNavMapper;
+import com.simuwang.base.mapper.daq.FundInfoMapper;
+import com.simuwang.base.pojo.dos.CompanySendStatusDO;
+import com.simuwang.manage.service.CompanySendStatusService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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 CompanySendTask {
+    private static final Logger log = LoggerFactory.getLogger(FundDeletionTask.class);
+
+    @Autowired
+    private EmailFundNavMapper emailFundNavMapper;
+    @Autowired
+    private FundInfoMapper fundInfoMapper;
+
+    @Autowired
+    private CompanySendStatusService companySendStatusService;
+
+    public void companySend() {
+        List<String> fundIdList = emailFundNavMapper.selectAllFundId();
+        for (String fundId : fundIdList) {
+            String companyId = fundInfoMapper.getCompanyIdByFundId(fundId);
+            if(companyId != null) {
+                CompanySendStatusDO companySendStatusDO = companySendStatusService.getCompanySendStatusByCompanyId(companyId);
+                if(companySendStatusDO != null) {
+                    continue;
+                }
+                CompanySendStatusDO sendStatus = new CompanySendStatusDO();
+                sendStatus.setCompanyId(companyId);
+                sendStatus.setSendStatus(1);
+                sendStatus.setIsvalid(1);
+                sendStatus.setCreateTime(new Date());
+                sendStatus.setUpdateTime(new Date());
+                companySendStatusService.insert(sendStatus);
+            }
+        }
+    }
+}

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


Неке датотеке нису приказане због велике количине промена