zhangwei 3 лет назад
Родитель
Сommit
7f6e84df87
34 измененных файлов с 2433 добавлено и 345 удалено
  1. 0 116
      src/main/java/com/winhc/repal/controller/AccountRemindHistoryController.java
  2. 2 2
      src/main/java/com/winhc/repal/controller/RepalCustomerController.java
  3. 71 0
      src/main/java/com/winhc/repal/controller/RepalRemindHistoryController.java
  4. 0 4
      src/main/java/com/winhc/repal/entity/RepalRemindHistory.java
  5. 59 0
      src/main/java/com/winhc/repal/entity/RepalRemindReadInfo.java
  6. 82 0
      src/main/java/com/winhc/repal/entity/ThirdPartyAccount.java
  7. 13 1
      src/main/java/com/winhc/repal/enums/RemindEnum.java
  8. 0 10
      src/main/java/com/winhc/repal/model/cvt/RepalRemindHistoryConvert.java
  9. 8 57
      src/main/java/com/winhc/repal/model/dto/RepalRemindHistoryDTO.java
  10. 45 0
      src/main/java/com/winhc/repal/model/vo/DiagnosisDynamicVO.java
  11. 44 0
      src/main/java/com/winhc/repal/model/vo/RepalRemindCountVO.java
  12. 22 0
      src/main/java/com/winhc/repal/model/vo/RepalRemindHistoryCountVO.java
  13. 70 18
      src/main/java/com/winhc/repal/model/vo/RepalRemindHistoryVO.java
  14. 90 0
      src/main/java/com/winhc/repal/mq/bean/SendMsgBean.java
  15. 76 0
      src/main/java/com/winhc/repal/mq/producer/MessageSendService.java
  16. 68 0
      src/main/java/com/winhc/repal/mq/producer/RepalProducer.java
  17. 7 1
      src/main/java/com/winhc/repal/repository/RepalRemindHistoryMapper.java
  18. 13 0
      src/main/java/com/winhc/repal/repository/RepalRemindReadInfoMapper.java
  19. 13 0
      src/main/java/com/winhc/repal/repository/ThirdPartyAccountMapper.java
  20. 26 0
      src/main/java/com/winhc/repal/service/MessageNoticeService.java
  21. 1 1
      src/main/java/com/winhc/repal/service/RepalCustomerService.java
  22. 1 1
      src/main/java/com/winhc/repal/service/RepalRemindHistoryService.java
  23. 25 0
      src/main/java/com/winhc/repal/service/RepalRemindReadInfoService.java
  24. 14 0
      src/main/java/com/winhc/repal/service/ThirdPartyAccountService.java
  25. 32 0
      src/main/java/com/winhc/repal/service/impl/MessageNoticeServiceImpl.java
  26. 2 2
      src/main/java/com/winhc/repal/service/impl/RepalCustomerServiceImpl.java
  27. 58 60
      src/main/java/com/winhc/repal/service/impl/RepalRemindHistoryServiceImpl.java
  28. 138 0
      src/main/java/com/winhc/repal/service/impl/RepalRemindReadInfoServiceImpl.java
  29. 17 0
      src/main/java/com/winhc/repal/service/impl/ThirdPartyAccountServiceImpl.java
  30. 54 59
      src/main/java/com/winhc/repal/task/SmartRemindTask.java
  31. 1366 0
      src/main/java/com/winhc/repal/util/RedisUtil.java
  32. 6 13
      src/main/resources/mapper/RepalRemindHistoryMapper.xml
  33. 5 0
      src/main/resources/mapper/RepalRemindReadInfoMapper.xml
  34. 5 0
      src/main/resources/mapper/ThirdPartyAccountMapper.xml

+ 0 - 116
src/main/java/com/winhc/repal/controller/AccountRemindHistoryController.java

@@ -1,116 +0,0 @@
-//package com.winhc.returnmoney.controller;
-//
-//import com.winhc.common.base.BeanResponse;
-//import com.winhc.common.enums.CodeMsg;
-//import com.winhc.common.util.ResultUtil;
-//import com.winhc.returnmoney.common.BaseController;
-//import com.winhc.returnmoney.model.vo.AccountRemindCountVO;
-//import com.winhc.returnmoney.model.vo.AccountRemindHistoryCountVO;
-//import com.winhc.returnmoney.service.MessageService;
-//import com.winhc.returnmoney.util.RequesterUtil;
-//import com.winhc.returnmoney.model.dto.AccountRemindHistoryDTO;
-//import com.winhc.returnmoney.service.AccountRemindHistoryService;
-//import org.springframework.web.bind.annotation.RequestMapping;
-//import com.winhc.returnmoney.model.vo.AccountRemindHistoryVO;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.web.bind.annotation.*;
-//
-//import java.util.List;
-//import lombok.extern.slf4j.Slf4j;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiOperation;
-//import org.springframework.web.bind.annotation.RestController;
-//import springfox.documentation.annotations.ApiIgnore;
-//
-//
-///**
-// * @description AccountRemindHistory Controller
-// * @author Generator
-// * @date 2020-12-14
-// */
-//@Slf4j
-//@Api(tags = "智能提醒API")
-//@RestController
-//@RequestMapping("accountRemind")
-//public class AccountRemindHistoryController extends BaseController {
-//    @Autowired
-//    private AccountRemindHistoryService accountRemindHistoryService;
-//
-//    @Autowired
-//    private MessageService messageService;
-//
-//
-//    @GetMapping("/{id}")
-//    @ApiOperation(value = "根据id查询智能提醒详情")
-//    public BeanResponse<AccountRemindHistoryVO> find(@PathVariable Long id) {
-//        return BeanResponse.resultData2BeanResponse(ResultUtil.response(CodeMsg.SUCCESS,accountRemindHistoryService.find(id, getAppVersion(), getAppPackageName(), getUser())));
-//    }
-//
-//
-//    @GetMapping("/page")
-//    @ApiOperation(value = "根据条件查询智能提醒")
-//    public BeanResponse<List<AccountRemindHistoryVO>> page(AccountRemindHistoryDTO dto,
-//                                                           @RequestParam(required = false,defaultValue = "1") Integer pageNum,
-//                                                           @RequestParam(required = false,defaultValue = "10") Integer pageSize) {
-//        dto.setUserId(RequesterUtil.getCurrentUserId());
-//        return BeanResponse.resultPageData2BeanResponse(ResultUtil.response(CodeMsg.SUCCESS,accountRemindHistoryService.find(dto, pageNum, pageSize, getAppVersion(), getAppPackageName(), getUser())));
-//    }
-//
-//
-//    @GetMapping("/unread")
-//    @ApiOperation(value = "查询未读智能提醒数量")
-//    public BeanResponse<Integer> unReadNumber(){
-//        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.unRead(RequesterUtil.getCurrentUserId()));
-//    }
-//
-//    @GetMapping("/count/withunread")
-//    @ApiOperation(value = "新版数量")
-//    public BeanResponse<AccountRemindCountVO> queryRemindCount(AccountRemindHistoryDTO dto){
-//        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.queryRemidCount(dto,RequesterUtil.getCurrentUser()));
-//    }
-//
-//    @GetMapping("/count")
-//    @ApiOperation(value = "筛选条件数量")
-//    public BeanResponse<List<AccountRemindHistoryCountVO>> queryCount(AccountRemindHistoryDTO accountRemindHistoryDTO){
-//        accountRemindHistoryDTO.setUserId(RequesterUtil.getCurrentUserId());
-//        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.queryCount(accountRemindHistoryDTO));
-//    }
-//
-////    @Autowired
-////    AccountBillDiagnosisService accountBillDiagnosisService;
-////
-////    @GetMapping("/test")
-////    @ApiOperation(value = "后端测试用刷新评分")
-////    @ApiIgnore
-////    public BeanResponse<Void> test(@RequestParam String company,@RequestParam Long accountBillid,@RequestParam BigDecimal amt){
-////        List<String> companys = new ArrayList<>();
-////        companys.add(company);
-////        accountBillDiagnosisService.addAccountBillDiagnosis(RequesterUtil.getCurrentUserId(),accountBillid,amt,companys);
-////        return BeanResponse.success(CodeMsg.SUCCESS);
-////    }
-//
-//    @PostMapping("/update/functionlist")
-//    @ApiOperation(value = "更新functionlist")
-//    @ApiIgnore
-//    public BeanResponse<Boolean> updateFunctionList(){
-//        accountRemindHistoryService.updateFunctionList();
-//        return BeanResponse.success(CodeMsg.SUCCESS);
-//    }
-//
-//    @PostMapping("/update/newRemindContent")
-//    @ApiOperation(value = "更新newRemindContent")
-//    @ApiIgnore
-//    public BeanResponse<Boolean> updateNewRemindContent(){
-//        accountRemindHistoryService.updateNewRemindContent();
-//        return BeanResponse.success(CodeMsg.SUCCESS);
-//    }
-//
-//    @PostMapping("/update/message")
-//    @ApiOperation(value = "更新message")
-//    @ApiIgnore
-//    public BeanResponse<Boolean> updateMessage(){
-//        messageService.updateMessage();
-//        return BeanResponse.success(CodeMsg.SUCCESS);
-//    }
-//
-//}

+ 2 - 2
src/main/java/com/winhc/repal/controller/RepalCustomerController.java

@@ -31,7 +31,7 @@ public class RepalCustomerController extends BaseController {
     @ApiOperation("分页查询客户")
     @GetMapping(value = "/cust/page")
     public BeanResponse<VOPage<RepalCustomerInfoVO>> getRepalCustPage(RepalCustomerQueryDTO dto){
-        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.find(dto.setCustType(Dict.custTypeEnum.客户.getCode())));
+        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.find(dto.setCustType(Dict.custTypeEnum.客户.getCode()),getUser()));
     }
 
     @ApiOperation("添加客户")
@@ -55,7 +55,7 @@ public class RepalCustomerController extends BaseController {
     @ApiOperation("分页查询供应商")
     @GetMapping(value = "/supply/page")
     public BeanResponse<VOPage<RepalCustomerInfoVO>> getRepalSupplyPage(RepalCustomerQueryDTO dto){
-        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.find(dto.setCustType(Dict.custTypeEnum.供应商.getCode())));
+        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.find(dto.setCustType(Dict.custTypeEnum.供应商.getCode()),getUser()));
     }
 
     @ApiOperation("添加供应商")

+ 71 - 0
src/main/java/com/winhc/repal/controller/RepalRemindHistoryController.java

@@ -0,0 +1,71 @@
+//package com.winhc.repal.controller;
+//
+//import com.winhc.common.base.BeanResponse;
+//import com.winhc.common.enums.CodeMsg;
+//import com.winhc.common.util.ResultUtil;
+//import com.winhc.repal.common.BaseController;
+//import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
+//import com.winhc.repal.model.vo.RepalRemindCountVO;
+//import com.winhc.repal.model.vo.RepalRemindHistoryCountVO;
+//import com.winhc.repal.model.vo.RepalRemindHistoryVO;
+//import com.winhc.repal.service.RepalRemindHistoryService;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.*;
+//import lombok.extern.slf4j.Slf4j;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import java.util.List;
+//
+//
+///**
+// * @description AccountRemindHistory Controller
+// * @author Generator
+// * @date 2020-12-14
+// */
+//@Slf4j
+//@Api(tags = "智能提醒API")
+//@RestController
+//@RequestMapping("repalRemind")
+//public class RepalRemindHistoryController extends BaseController {
+//    @Autowired
+//    private RepalRemindHistoryService accountRemindHistoryService;
+//
+//    @GetMapping("/{id}")
+//    @ApiOperation(value = "根据id查询智能提醒详情")
+//    public BeanResponse<RepalRemindHistoryVO> find(@PathVariable Long id) {
+//        return BeanResponse.resultData2BeanResponse(ResultUtil.response(CodeMsg.SUCCESS,accountRemindHistoryService.find(id, getUser())));
+//    }
+//
+//
+//    @GetMapping("/page")
+//    @ApiOperation(value = "根据条件查询智能提醒")
+//    public BeanResponse<List<RepalRemindHistoryVO>> page(RepalRemindHistoryDTO dto,
+//                                                           @RequestParam(required = false,defaultValue = "1") Integer pageNum,
+//                                                           @RequestParam(required = false,defaultValue = "10") Integer pageSize) {
+//        dto.setUserId(getUser().getUserId());
+//        return BeanResponse.resultPageData2BeanResponse(ResultUtil.response(CodeMsg.SUCCESS,accountRemindHistoryService.find(dto, pageNum, pageSize, getUser())));
+//    }
+//
+//
+//    @GetMapping("/unread")
+//    @ApiOperation(value = "查询未读智能提醒数量")
+//    public BeanResponse<Integer> unReadNumber(){
+//        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.unRead(getUser().getUserId()));
+//    }
+//
+//    @GetMapping("/count/withunread")
+//    @ApiOperation(value = "新版数量")
+//    public BeanResponse<RepalRemindCountVO> queryRemindCount(RepalRemindHistoryDTO dto){
+//        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.queryRemidCount(dto,getUser()));
+//    }
+//
+//    @GetMapping("/count")
+//    @ApiOperation(value = "筛选条件数量")
+//    public BeanResponse<List<RepalRemindHistoryCountVO>> queryCount(RepalRemindHistoryDTO dto){
+//        dto.setUserId(getUser().getUserId());
+//        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.queryCount(dto));
+//    }
+//}

+ 0 - 4
src/main/java/com/winhc/repal/entity/RepalRemindHistory.java

@@ -73,10 +73,6 @@ public class RepalRemindHistory implements Serializable {
     @TableField("REMIND_TYPE")
     private String remindType;
 
-    @ApiModelProperty(value = "0未读1已读")
-    @TableField("READ_STATUS")
-    private Integer readStatus;
-
     @ApiModelProperty(value = "动态类型")
     @TableField("TRENT_TYPE")
     private String trentType;

+ 59 - 0
src/main/java/com/winhc/repal/entity/RepalRemindReadInfo.java

@@ -0,0 +1,59 @@
+package com.winhc.repal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @description RepalRemindReadInfo实体对象
+ * @author Generator
+ * @date 2022-04-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("REPAL_REMIND_READ_INFO")
+@ApiModel(value="RepalRemindReadInfo实体对象", description="动态阅读情况表")
+public class RepalRemindReadInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "用户号")
+    @TableField("USER_ID")
+    private Long userId;
+
+    @ApiModelProperty(value = "风险预警最近已读id")
+    @TableField("RISK_REMIND_ID")
+    private Long riskRemindId;
+
+    @ApiModelProperty(value = "财产提醒最近已读id")
+    @TableField("FINANCE_REMIND_ID")
+    private Long financeRemindId;
+
+    @ApiModelProperty(value = "评级变更最近已读id")
+    @TableField("RANK_REMIND_ID")
+    private Long rankRemindId;
+
+    @ApiModelProperty(value = "逾期动态最近已读id")
+    @TableField("OVERDUE_REMIND_ID")
+    private Long overdueRemindId;
+
+    @ApiModelProperty(value = "账款id")
+    @TableField("REPAL_BILL_ID")
+    private Long repalBillId;
+
+    @ApiModelProperty(value = "账本id")
+    @TableField("REPAL_BOOK_ID")
+    private Long repalBookId;
+}

+ 82 - 0
src/main/java/com/winhc/repal/entity/ThirdPartyAccount.java

@@ -0,0 +1,82 @@
+package com.winhc.repal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @description ThirdPartyAccount实体对象
+ * @author Generator
+ * @date 2022-04-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("THIRD_PARTY_ACCOUNT")
+@ApiModel(value="ThirdPartyAccount实体对象", description="第三方授权服务表")
+public class ThirdPartyAccount implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "用户ID")
+    @TableField("USER_ID")
+    private Long userId;
+
+    @ApiModelProperty(value = "第三方服务商类型:1飞书;2钉钉")
+    @TableField("THIRD_PARTY_TYPE")
+    private String thirdPartyType;
+
+    @ApiModelProperty(value = "应用APP_ID:0回款宝")
+    @TableField("APP_ID")
+    private String appId;
+
+    @ApiModelProperty(value = "应用OPEN_ID")
+    @TableField("OPEN_ID")
+    private String openId;
+
+    @ApiModelProperty(value = "用户UNION_ID")
+    @TableField("UINION_ID")
+    private String uinionId;
+
+    @ApiModelProperty(value = "用户授权手机号")
+    @TableField("MOBILE_NO")
+    private String mobileNo;
+
+    @ApiModelProperty(value = "第三方USER_ID")
+    @TableField("THIRD_PARTY_USER_ID")
+    private String thirdPartyUserId;
+
+    @ApiModelProperty(value = "用户授权信息JSON")
+    @TableField("USER_INFO_JSON")
+    private String userInfoJson;
+
+    @ApiModelProperty(value = "是否删除 0否 1是")
+    @TableField("DELETED")
+    private Integer deleted;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("TIME_CREATED")
+    private LocalDateTime timeCreated;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField("TIME_MODIFIED")
+    private LocalDateTime timeModified;
+
+    @ApiModelProperty(value = "组织ID,从第三方获取")
+    @TableField("GROUP_ID")
+    private String groupId;
+
+
+}

+ 13 - 1
src/main/java/com/winhc/repal/enums/RemindEnum.java

@@ -10,5 +10,17 @@ public enum RemindEnum {
     /**
      * 智能提醒类型
      */
-    逾期提醒,账款评级,财产线索,风险预警;
+    逾期提醒("OVERDUE"),账款评级("RANK"),财产线索("FINANCE"),风险预警("RISK");
+
+    private String code;
+
+    RemindEnum(String code) {
+        this.code = code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    ;
 }

+ 0 - 10
src/main/java/com/winhc/repal/model/cvt/RepalRemindHistoryConvert.java

@@ -11,15 +11,5 @@ import org.springframework.beans.BeanUtils;
  */
 public class RepalRemindHistoryConvert {
 
-    public static RepalRemindHistory DTOToEntity(RepalRemindHistoryDTO dto) {
-        RepalRemindHistory entity = new RepalRemindHistory();
-        BeanUtils.copyProperties(dto, entity);
-        return entity;
-    }
 
-    public static RepalRemindHistoryVO EntityToVO(RepalRemindHistory entity) {
-        RepalRemindHistoryVO vo = new RepalRemindHistoryVO ();
-        BeanUtils.copyProperties(entity, vo);
-        return vo;
-    }
 }

+ 8 - 57
src/main/java/com/winhc/repal/model/dto/RepalRemindHistoryDTO.java

@@ -1,82 +1,33 @@
 package com.winhc.repal.model.dto;
 
-import java.time.LocalDateTime;
-
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
 /**
- * @description RepalRemindHistory DTO对象
+ * @description AccountRemindHistory DTO对象
  * @author Generator
- * @date 2022-04-08
+ * @date 2020-12-14
  */
 @Data
 @Accessors(chain = true)
-@ApiModel(value="RepalRemindHistory DTO对象", description="智能提醒历史表")
+@ApiModel(value="智能提醒历史表入参")
 public class RepalRemindHistoryDTO {
-
-
-    @ApiModelProperty(value = "")
-    private Long id;
-
-    @ApiModelProperty(value = "用户ID")
+    @ApiModelProperty(value = "用户ID,后端默认添加")
     private Long userId;
 
     @ApiModelProperty(value = "账本ID")
     private Long repalBookId;
 
-    @ApiModelProperty(value = "账单主键")
+    @ApiModelProperty(value = "账款ID,进账款详情页才传")
     private Long repalBillId;
 
-    @ApiModelProperty(value = "动态主键")
-    private String trendId;
-
-    @ApiModelProperty(value = "动态内容")
-    private String trendContent;
-
-    @ApiModelProperty(value = "提醒时间")
-    private LocalDateTime remindTime;
-
-    @ApiModelProperty(value = "公司名称")
-    private String companyName;
-
-    @ApiModelProperty(value = "提醒标题")
-    private String remindTitle;
-
-    @ApiModelProperty(value = "提醒文案")
-    private String remindContent;
-
-    @ApiModelProperty(value = "功能列表")
-    private String functionList;
-
-    @ApiModelProperty(value = "提醒类型,枚举(中文):逾期提醒、账款评级、财产线索、风险预警")
+    @ApiModelProperty(value = "提醒类型(不传或者传非枚举字段默认全部),查数量不传:逾期提醒、账款评级、财产线索、风险预警、全部")
     private String remindType;
 
-    @ApiModelProperty(value = "0未读1已读")
-    private Integer readStatus;
-
-    @ApiModelProperty(value = "动态类型")
-    private String trentType;
-
-    @ApiModelProperty(value = "跳转详情用,存新数据的rowkey")
-    private String bizId;
-
-    @ApiModelProperty(value = "跳转详情用")
-    private String dimensionType;
-
-    @ApiModelProperty(value = "跳转详情用")
-    private String infoType;
-
-    @ApiModelProperty(value = "跳转详情用,存新数据的id")
-    private String dynamicId;
-
-    @ApiModelProperty(value = "提醒文案新版")
-    private String newTrendContent;
-
-    @ApiModelProperty(value = "0旧1新")
-    private Integer isNew;
+    @ApiModelProperty(value = "筛选时间类型: ALL(全部)、MONTH(近30天) 不传默认MONTH")
+    private String timeSlot;
 
 
 }

+ 45 - 0
src/main/java/com/winhc/repal/model/vo/DiagnosisDynamicVO.java

@@ -0,0 +1,45 @@
+package com.winhc.repal.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description: DiagnosisDynamicVO
+ * @Author: xda
+ * @Date: 2020/12/18  14:16
+ */
+@Data
+@ApiModel("评分动态")
+public class DiagnosisDynamicVO {
+
+    @ApiModelProperty("动态时间")
+    private String createTime;
+
+//    @ApiModelProperty("动态id")
+//    private String dynamicId;
+
+    @ApiModelProperty("动态描述")
+    private String rtaDesc;
+
+    @ApiModelProperty("类型")
+    private String infoType;
+
+    @ApiModelProperty("routing")
+    private String routing;
+
+//    @ApiModelProperty("bizId")
+//    private String bizId;
+
+    @ApiModelProperty("rowKey,新版动态详情跳转用")
+    private String rowKey;
+
+    @ApiModelProperty("newDynamicId,新版动态详情跳转用")
+    private String newDynamicId;
+
+    @ApiModelProperty("tn,新版动态详情跳转用")
+    private String tn;
+
+    @ApiModelProperty("提醒文案新版,JSON格式")
+    private String newRemindContent;
+}

+ 44 - 0
src/main/java/com/winhc/repal/model/vo/RepalRemindCountVO.java

@@ -0,0 +1,44 @@
+package com.winhc.repal.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Aaron
+ * @date 2021/8/5 19:36
+ * @description
+ */
+@Data
+@ApiModel("提醒数量")
+public class RepalRemindCountVO {
+    @ApiModelProperty("逾期动态数量")
+    private Integer overdueCount;
+
+    @ApiModelProperty("逾期动态未读数量")
+    private Integer unreadOverdueCount;
+
+    @ApiModelProperty("风险动态数量")
+    private Integer riskCount;
+
+    @ApiModelProperty("风险动态未读数量")
+    private Integer unreadRiskCount;
+
+    @ApiModelProperty("财产动态数量")
+    private Integer financeCount;
+
+    @ApiModelProperty("财产动态未读数量")
+    private Integer unreadFinanceCount;
+
+    @ApiModelProperty("评级动态数量")
+    private Integer rankCount;
+
+    @ApiModelProperty("评级动态未读数量")
+    private Integer unreadRankCount;
+
+    @ApiModelProperty("总数量")
+    private Integer totalCount;
+
+    @ApiModelProperty("未读总数量")
+    private Integer unreadTotalCount;
+}

+ 22 - 0
src/main/java/com/winhc/repal/model/vo/RepalRemindHistoryCountVO.java

@@ -0,0 +1,22 @@
+package com.winhc.repal.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author Aaron
+ * @date 2020/12/16 11:23
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value="智能提醒数量对象")
+public class RepalRemindHistoryCountVO {
+    @ApiModelProperty(value = "数量类型,枚举(中文):逾期提醒、账款评级、财产线索、风险预警、全部")
+    private String countType;
+
+    @ApiModelProperty(value = "数量")
+    private Integer count;
+}

+ 70 - 18
src/main/java/com/winhc/repal/model/vo/RepalRemindHistoryVO.java

@@ -1,23 +1,26 @@
 package com.winhc.repal.model.vo;
 
-import java.time.LocalDateTime;
-
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
- * @description RepalRemindHistory VO对象
+ * @description AccountRemindHistory VO对象
  * @author Generator
- * @date 2022-04-08
+ * @date 2020-12-14
  */
 @Data
 @Accessors(chain = true)
-@ApiModel(value="RepalRemindHistory VO对象", description="智能提醒历史表")
+@ApiModel(value="智能提醒对象")
 public class RepalRemindHistoryVO {
 
-    @ApiModelProperty(value = "")
+    @ApiModelProperty(value = "ID")
     private Long id;
 
     @ApiModelProperty(value = "用户ID")
@@ -35,47 +38,96 @@ public class RepalRemindHistoryVO {
     @ApiModelProperty(value = "动态内容")
     private String trendContent;
 
+    @ApiModelProperty(value = "动态类型")
+    private String trentType;
+
     @ApiModelProperty(value = "提醒时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
     private LocalDateTime remindTime;
 
     @ApiModelProperty(value = "公司名称")
     private String companyName;
 
+    @ApiModelProperty(value = "公司CID")
+    private String cid;
+
+    @ApiModelProperty(value = "公司id")
+    private String companyId;
+
+    @ApiModelProperty(value = "提醒类型:逾期提醒、账款评级、财产线索、风险预警")
+    private String remindType;
+
     @ApiModelProperty(value = "提醒标题")
     private String remindTitle;
 
-    @ApiModelProperty(value = "提醒文案")
+    @ApiModelProperty(value = "提醒名称")
     private String remindContent;
 
-    @ApiModelProperty(value = "功能列表")
+    @ApiModelProperty(value = "功能列表,json数组,格式为[{\"text\":\"功能描述\",\"type\":[\"功能类型1\",\"功能类型2\",\"功能类型3\"]}]  " +
+            " 功能类型枚举暂时有:cuikuanhan(催款函)、anjianzhenduan(案件诊断)、leianjiansuo(类案检索)、susongtouzi(诉讼投资)、soulvshi(搜律师)、" +
+            "zhaocaichan(找财产)、zhaozhaiquan(找债权)、chabeizhixingren(查被执行人)")
     private String functionList;
 
-    @ApiModelProperty(value = "提醒类型,枚举(中文):逾期提醒、账款评级、财产线索、风险预警")
-    private String remindType;
-
     @ApiModelProperty(value = "0未读1已读")
     private Integer readStatus;
 
-    @ApiModelProperty(value = "动态类型")
-    private String trentType;
+    @ApiModelProperty(value = "当前评估等级(逾期提醒、账款评级)")
+    private String diagnosisGrade;
+
+    @ApiModelProperty(value = "当前评估分值(逾期提醒、账款评级)")
+    private BigDecimal diagnosisScore;
+
+    @ApiModelProperty(value = "当前评估分时间(逾期提醒、账款评级)")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private LocalDateTime diagnosisDatetime;
+
+    @ApiModelProperty(value = "应收账款日期(逾期提醒)")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private LocalDateTime endDate;
+
+    @ApiModelProperty(value = "上次评估等级(账款评级,注意如果是第一次评估这边为空)")
+    private String preDiagnosisGrade;
+
+    @ApiModelProperty(value = "上次评估分值(账款评级,注意如果是第一次评估这边为空)")
+    private BigDecimal preDiagnosisScore;
 
-    @ApiModelProperty(value = "跳转详情用,存新数据的rowkey")
+    @ApiModelProperty(value = "上次评估分时间(账款评级,注意如果是第一次评估这边为空)")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private LocalDateTime preDiagnosisDatetime;
+
+    @ApiModelProperty(value = "动态提醒列表(账款评级,最多10条)")
+    private List<DiagnosisDynamicVO> esDynamics;
+
+    @ApiModelProperty(value = "履债评估id(账款评级,跳转生成报表用)")
+    private Long diagnosisRecordId;
+
+    @ApiModelProperty(value = "财产线索跳转详情用")
     private String bizId;
 
-    @ApiModelProperty(value = "跳转详情用")
+    @ApiModelProperty(value = "财产线索跳转详情用")
     private String dimensionType;
 
     @ApiModelProperty(value = "跳转详情用")
     private String infoType;
 
-    @ApiModelProperty(value = "跳转详情用,存新数据的id")
+    @ApiModelProperty(value = "旧动态跳转详情用")
     private String dynamicId;
 
-    @ApiModelProperty(value = "提醒文案新版")
+    @ApiModelProperty(value = "旧动态跳转详情用")
+    private String routing;
+
+    @ApiModelProperty(value = "提醒文案新版,JSON格式")
     private String newTrendContent;
 
     @ApiModelProperty(value = "0旧1新")
-    private Integer isNew;
+    private String isNew;
+
+    @ApiModelProperty(value = "新动态跳转详情用")
+    private String rowKey;
 
+    @ApiModelProperty(value = "新动态跳转详情用")
+    private String newDynamicId;
 
+    @ApiModelProperty(value = "新动态跳转详情用")
+    private String tn;
 }

+ 90 - 0
src/main/java/com/winhc/repal/mq/bean/SendMsgBean.java

@@ -0,0 +1,90 @@
+package com.winhc.repal.mq.bean;
+
+import com.winhc.common.base.BaseDO;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Map;
+
+/**
+ *
+ * @author ll
+ *
+ */
+public class SendMsgBean extends BaseDO {
+    /**
+     * 发送目标
+     */
+    private String sendTarget;
+    private Long userId;
+    private String bizName;
+    @ApiModelProperty(value = "SMS短信;WX微信消息;MSG站内信")
+    private String messageChannel;
+    private Map<String, String> param;
+    private String paramJson;
+    private Map<String, String> extParam;
+    private String sendTime;
+
+    public String getSendTarget() {
+        return sendTarget;
+    }
+
+    public void setSendTarget(String sendTarget) {
+        this.sendTarget = sendTarget;
+    }
+
+    public String getBizName() {
+        return bizName;
+    }
+
+    public void setBizName(String bizName) {
+        this.bizName = bizName;
+    }
+
+    public String getMessageChannel() {
+        return messageChannel;
+    }
+
+    public void setMessageChannel(String messageChannel) {
+        this.messageChannel = messageChannel;
+    }
+
+    public Map<String, String> getParam() {
+        return param;
+    }
+
+    public void setParam(Map<String, String> param) {
+        this.param = param;
+    }
+
+    public Map<String, String> getExtParam() {
+        return extParam;
+    }
+
+    public void setExtParam(Map<String, String> extParam) {
+        this.extParam = extParam;
+    }
+
+    public String getSendTime() {
+        return sendTime;
+    }
+
+    public void setSendTime(String sendTime) {
+        this.sendTime = sendTime;
+    }
+
+    public String getParamJson() {
+        return paramJson;
+    }
+
+    public void setParamJson(String paramJson) {
+        this.paramJson = paramJson;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+}

+ 76 - 0
src/main/java/com/winhc/repal/mq/producer/MessageSendService.java

@@ -0,0 +1,76 @@
+package com.winhc.repal.mq.producer;
+
+import com.winhc.repal.mq.bean.SendMsgBean;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * 消息发送客户端
+ * 
+ * @author wowo
+ *
+ */
+@Service("messageSendService")
+public class MessageSendService {
+    Log log = LogFactory.getLog(getClass());
+
+    private LinkedBlockingQueue<SendMsgBean> messageRequestQueue = new LinkedBlockingQueue<>();
+
+    @Resource
+    private RepalProducer repalProducer;
+
+    @PostConstruct
+    public void init() {
+        log.info("开始消息发送工作线程");
+        new Thread(new Worker()).start();
+    }
+
+    /**
+     * 发送消息
+     * 
+     * @param req
+     */
+    public void send(SendMsgBean req) {
+        messageRequestQueue.offer(req);
+    }
+
+    /**
+     * 工作线程, 处理短信发送和重发
+     * 
+     * @author wowo
+     *
+     */
+    public class Worker implements Runnable {
+
+        @Override
+        public void run() {
+            while (true) {
+                SendMsgBean req = null;
+                try {
+                    req = messageRequestQueue.take();
+                } catch (InterruptedException e) {
+                    log.error("", e);
+                }
+                if (req == null) {
+                    continue;
+                }
+                connect(req);
+            }
+        }
+
+        private void connect(SendMsgBean req) {
+            try {
+                String res = repalProducer.sendMsg(req);
+                log.info("消息发送结果:" + res);
+            } catch (Exception e) {
+                log.error("发送消息异常", e);
+            }
+        }
+    }
+
+}

+ 68 - 0
src/main/java/com/winhc/repal/mq/producer/RepalProducer.java

@@ -0,0 +1,68 @@
+package com.winhc.repal.mq.producer;
+
+import com.aliyun.openservices.ons.api.*;
+import com.aliyun.openservices.shade.com.alibaba.fastjson.JSON;
+import com.winhc.repal.mq.MQConfig;
+import com.winhc.repal.mq.MQTag;
+import com.winhc.repal.mq.bean.SendMsgBean;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
+import java.util.Properties;
+
+/**
+ * @author Aaron
+ * @date 2020/12/14 13:58
+ * @description
+ */
+@Slf4j
+@Component
+public class RepalProducer {
+    @Resource
+    protected MQConfig mqConfig;
+
+    protected Producer producer;
+
+    @PostConstruct
+    public void init() {
+        log.info("初始化消息发送队列begin");
+        new Thread(this::initProducer).start();
+        log.info("初始化消息发送队列end");
+    }
+
+    private Producer initProducer() {
+        try {
+            System.setProperty("rocketmq.client.log.loadconfig", "false");
+            Properties producerProperties = new Properties();
+            producerProperties.setProperty(PropertyKeyConst.AccessKey, mqConfig.getAccessKey());
+            producerProperties.setProperty(PropertyKeyConst.SecretKey, mqConfig.getSecretKey());
+            producerProperties.setProperty(PropertyKeyConst.ONSAddr, mqConfig.getUrl());
+            producer = ONSFactory.createProducer(producerProperties);
+            producer.start();
+            log.info("Producer start success.");
+            return producer;
+        } catch (Exception e) {
+            log.error("初始化失败", e);
+            return null;
+        }
+    }
+
+    private String send(String req, String topic, String tag) {
+        Message message = new Message(topic, tag, req.getBytes(StandardCharsets.UTF_8));
+        SendResult sendResult = producer.send(message);
+        if (sendResult != null) {
+            log.info(" Send mq message success! Topic is:" + topic + " msgId is: "
+                    + sendResult.getMessageId());
+        } else {
+            return "FAIL";
+        }
+        return "SUCCESS";
+    }
+
+    public String  sendMsg(SendMsgBean req) {
+        return send(JSON.toJSONString(req), mqConfig.getMessageTopic(), MQTag.BizTag.tag_msg.name());
+    }
+}

+ 7 - 1
src/main/java/com/winhc/repal/repository/RepalRemindHistoryMapper.java

@@ -3,6 +3,7 @@ package com.winhc.repal.repository;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.winhc.repal.model.vo.RemindTypeUnReadCountVO;
+import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -15,5 +16,10 @@ import java.util.List;
  */
 @Repository
 public interface RepalRemindHistoryMapper extends BaseMapper<RepalRemindHistory> {
-    List<RemindTypeUnReadCountVO> getRemindUnReadVO(@Param("repalBillIds")List<Long> repalBillIds);
+    RepalBillRemindUnReadVO getRemindUnReadVO(@Param("riskId")Long riskId,
+                                              @Param("rankId")Long rankId,
+                                              @Param("overdueId")Long overdueId,
+                                              @Param("financeId")Long financeId,
+                                              @Param("repalBookId")Long repalBookId,
+                                              @Param("repalBillId")Long repalBillId);
 }

+ 13 - 0
src/main/java/com/winhc/repal/repository/RepalRemindReadInfoMapper.java

@@ -0,0 +1,13 @@
+package com.winhc.repal.repository;
+
+import com.winhc.repal.entity.RepalRemindReadInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @description RepalRemindReadInfo Mapper 接口
+ * @author Generator
+ * @date 2022-04-27
+ */
+public interface RepalRemindReadInfoMapper extends BaseMapper<RepalRemindReadInfo> {
+
+}

+ 13 - 0
src/main/java/com/winhc/repal/repository/ThirdPartyAccountMapper.java

@@ -0,0 +1,13 @@
+package com.winhc.repal.repository;
+
+import com.winhc.repal.entity.ThirdPartyAccount;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @description ThirdPartyAccount Mapper 接口
+ * @author Generator
+ * @date 2022-04-27
+ */
+public interface ThirdPartyAccountMapper extends BaseMapper<ThirdPartyAccount> {
+
+}

+ 26 - 0
src/main/java/com/winhc/repal/service/MessageNoticeService.java

@@ -0,0 +1,26 @@
+package com.winhc.repal.service;
+
+
+import com.winhc.repal.enums.MsgNameEnum;
+
+import java.util.Map;
+
+/**
+ * 消息通知服务
+ * 
+ * @author ll
+ *
+ */
+public interface MessageNoticeService {
+
+    /**
+     * 发送短信
+     *
+     * @param userId
+     * @param name
+     * @param param
+     * @return
+     */
+    String sendSms(String mobileNo, MsgNameEnum name, Map<String, String> param);
+
+}

+ 1 - 1
src/main/java/com/winhc/repal/service/RepalCustomerService.java

@@ -23,7 +23,7 @@ public interface RepalCustomerService extends IService<RepalCustomer> {
       * @param dto
       * @return
       */
-     VOPage<RepalCustomerInfoVO> find(RepalCustomerQueryDTO dto);
+     VOPage<RepalCustomerInfoVO> find(RepalCustomerQueryDTO dto,UserBean userBean);
 
      /**
       * 添加客户

+ 1 - 1
src/main/java/com/winhc/repal/service/RepalRemindHistoryService.java

@@ -20,7 +20,7 @@ public interface RepalRemindHistoryService extends IService<RepalRemindHistory>
      * @param repalBillIds
      * @return
      */
-    RepalBillRemindUnReadVO getRemindUnReadVO(List<Long> repalBillIds);
+    RepalBillRemindUnReadVO getRemindUnReadVO(List<RepalBill> repalBills,Long userId);
 
     /**
      * 新增评级提醒

+ 25 - 0
src/main/java/com/winhc/repal/service/RepalRemindReadInfoService.java

@@ -0,0 +1,25 @@
+package com.winhc.repal.service;
+
+import com.winhc.repal.entity.RepalRemindReadInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+
+/**
+ * @description RepalRemindReadInfo 接口类
+ * @author Generator
+ * @date 2022-04-27
+ */
+public interface RepalRemindReadInfoService extends IService<RepalRemindReadInfo> {
+    /**
+     * 根据userId查询动态已读情况
+     * @param userId
+     * @return
+     */
+    RepalRemindReadInfo getReadInfoByUserId(Long userId,Long repalBillId,Long repalBookId);
+
+    /**
+     * 更新已读状态
+     * @param userId
+     */
+    void updateReadInfoByUserId(Long userId,String trendType,Long repalBillId,Long repalBookId);
+}

+ 14 - 0
src/main/java/com/winhc/repal/service/ThirdPartyAccountService.java

@@ -0,0 +1,14 @@
+package com.winhc.repal.service;
+
+import com.winhc.repal.entity.ThirdPartyAccount;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+
+/**
+ * @description ThirdPartyAccount 接口类
+ * @author Generator
+ * @date 2022-04-27
+ */
+public interface ThirdPartyAccountService extends IService<ThirdPartyAccount> {
+
+}

+ 32 - 0
src/main/java/com/winhc/repal/service/impl/MessageNoticeServiceImpl.java

@@ -0,0 +1,32 @@
+package com.winhc.repal.service.impl;
+
+import com.winhc.repal.enums.MsgKindEnum;
+import com.winhc.repal.enums.MsgNameEnum;
+import com.winhc.repal.mq.bean.SendMsgBean;
+import com.winhc.repal.mq.producer.MessageSendService;
+import com.winhc.repal.service.MessageNoticeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Service("messageNoticeService")
+@Slf4j
+public class MessageNoticeServiceImpl implements MessageNoticeService {
+
+    @Resource
+    private MessageSendService messageSendService;
+
+    @Override
+    public String sendSms(String mobileNo, MsgNameEnum name, Map<String, String> param) {
+        log.info("短信推送, mobileNo:" + mobileNo + ", biz:" + name.name());
+        SendMsgBean sendMsgBean = new SendMsgBean();
+        sendMsgBean.setMessageChannel(MsgKindEnum.sms.name());
+        sendMsgBean.setBizName(name.name());
+        sendMsgBean.setParam(param);
+        sendMsgBean.setSendTarget(mobileNo);
+        messageSendService.send(sendMsgBean);
+        return "SUCCESS";
+    }
+}

+ 2 - 2
src/main/java/com/winhc/repal/service/impl/RepalCustomerServiceImpl.java

@@ -64,7 +64,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
     private RepalLinkService repalLinkService;
 
      @Override
-     public VOPage<RepalCustomerInfoVO> find(RepalCustomerQueryDTO dto) {
+     public VOPage<RepalCustomerInfoVO> find(RepalCustomerQueryDTO dto,UserBean userBean) {
          Page<RepalCustomerInfoBO> page = new Page<>(dto.getPageNum(),dto.getPageSize());
          page = repalCustomerMapper.getCustPage(page, dto.getRepalGroupId(),dto.getCustProperty(),dto.getSortType(),dto.getCustType());
          VOPage<RepalCustomerInfoVO> result = new VOPage<>(dto.getPageNum(), dto.getPageSize(), page.getTotal(), new ArrayList<>());
@@ -90,7 +90,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
                      .eq(RepalBill::getCustomerId,customerInfo.getCustId())
                      .eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
              if(CollUtil.isNotEmpty(repalBills)) {
-                 RepalBillRemindUnReadVO unRead = repalRemindHistoryService.getRemindUnReadVO(repalBills.stream().map(RepalBill::getId).collect(Collectors.toList()));
+                 RepalBillRemindUnReadVO unRead = repalRemindHistoryService.getRemindUnReadVO(repalBills,userBean.getUserId());
                  if(ObjectUtil.isNotNull(unRead) && unRead.getUnreadTotalCount() > 0){
                      vo.setDynamicCountList(Stream.of(unRead.getUnreadOverdueCount(),unRead.getUnreadRiskCount(), unRead.getUnreadRankCount(), unRead.getUnreadFinanceCount()).collect(Collectors.toList()));
                  }

+ 58 - 60
src/main/java/com/winhc/repal/service/impl/RepalRemindHistoryServiceImpl.java

@@ -5,32 +5,21 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.winhc.repal.entity.RepalBill;
-import com.winhc.repal.entity.RepalBillDiagnosis;
-import com.winhc.repal.entity.RepalRemindDefinition;
-import com.winhc.repal.entity.RepalRemindHistory;
+import com.winhc.repal.entity.*;
 import com.winhc.repal.enums.*;
 import com.winhc.repal.model.vo.RemindTypeUnReadCountVO;
 import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
 import com.winhc.repal.repository.RepalRemindHistoryMapper;
-import com.winhc.repal.service.RepalRemindDefinitionService;
-import com.winhc.repal.service.RepalRemindHistoryService;
+import com.winhc.repal.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.apache.ibatis.annotations.Param;
+import com.winhc.repal.util.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.winhc.common.model.base.VOPage;
-import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
-import com.winhc.repal.model.cvt.RepalRemindHistoryConvert;
-import com.winhc.repal.model.vo.RepalRemindHistoryVO;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,34 +33,33 @@ import java.util.stream.Collectors;
  */
 @Service
 public class RepalRemindHistoryServiceImpl extends ServiceImpl<RepalRemindHistoryMapper, RepalRemindHistory> implements RepalRemindHistoryService {
-    @Autowired
-    private RepalRemindHistoryMapper repalRemindHistoryMapper;
+    private static final String MESSAGE_PRIFIX = "winhc:repal:key_";
     @Autowired
     private RepalRemindDefinitionService repalRemindDefinitionService;
+    @Autowired
+    private MessageNoticeService messageNoticeService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ThirdPartyAccountService thirdPartyAccountService;
+    @Autowired
+    private RepalRemindReadInfoService repalRemindReadInfoService;
+    @Autowired
+    private RepalRemindHistoryMapper repalRemindHistoryMapper;
 
     @Override
-    public RepalBillRemindUnReadVO getRemindUnReadVO(List<Long> repalBillIds) {
+    public RepalBillRemindUnReadVO getRemindUnReadVO(List<RepalBill> repalBills,Long userId) {
         RepalBillRemindUnReadVO result = new RepalBillRemindUnReadVO(0,0,0,0,0);
-        List<RemindTypeUnReadCountVO> unReadCounts = repalRemindHistoryMapper.getRemindUnReadVO(repalBillIds);
-        if (CollUtil.isEmpty(unReadCounts)) {
-            // 没有未读
-            return result;
+        for(RepalBill repalBill:repalBills){
+            RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userId,repalBill.getId(),repalBill.getRepalBookId());
+            RepalBillRemindUnReadVO readVO = repalRemindHistoryMapper.getRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
+                    repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),repalRemindReadInfo.getFinanceRemindId(),repalBill.getRepalBookId(),repalBill.getId());
+            result.setUnreadRankCount(result.getUnreadRankCount()+readVO.getUnreadRankCount());
+            result.setUnreadRiskCount(result.getUnreadRiskCount()+readVO.getUnreadRiskCount());
+            result.setUnreadOverdueCount(result.getUnreadOverdueCount()+readVO.getUnreadOverdueCount());
+            result.setUnreadFinanceCount(result.getUnreadFinanceCount()+readVO.getUnreadFinanceCount());
         }
-        unReadCounts.forEach(countVO -> {
-            if (RemindEnum.风险预警.name().equals(countVO.getRemindType())) {
-                result.setUnreadRiskCount(countVO.getCount());
-            }
-            if (RemindEnum.财产线索.name().equals(countVO.getRemindType())) {
-                result.setUnreadFinanceCount(countVO.getCount());
-            }
-            if (RemindEnum.账款评级.name().equals(countVO.getRemindType())) {
-                result.setUnreadRankCount(countVO.getCount());
-            }
-            if (RemindEnum.逾期提醒.name().equals(countVO.getRemindType())) {
-                result.setUnreadOverdueCount(countVO.getCount());
-            }
-        });
-        result.setUnreadTotalCount(unReadCounts.stream().mapToInt(RemindTypeUnReadCountVO::getCount).sum());
+        result.setUnreadTotalCount(result.getUnreadFinanceCount()+result.getUnreadRankCount()+result.getUnreadRiskCount()+result.getUnreadOverdueCount());
         return result;
     }
 
@@ -118,30 +106,31 @@ public class RepalRemindHistoryServiceImpl extends ServiceImpl<RepalRemindHistor
                             changeStr1,
                             overdueEnum.name()))
                     .setFunctionList(accountRemindDefinition.getFunctionList())
-                    .setRemindType(RemindEnum.账款评级.name())
-                    .setReadStatus(ReadStatusEnum.未读.getCode());
+                    .setRemindType(RemindEnum.账款评级.getCode());
             save(accountRemindHistory);
-//            //推送
-//            AccountRemindSettingVO accountRemindSetting = accountRemindSettingService.find(accountBill.getUserId());
-//            String redisKey = MESSAGE_PRIFIX + repalBill.getUserId() + "_" + Dict.RemindEnum.账款评级.name();
-//            if (Dict.REMIND_SETTING_ENUM.需要提醒.getCode().equals(accountRemindSetting.getRank()) &&
-//                    redisUtil.get(redisKey) == null && accountBill.getPreDiagnosisId() != null) {
-//                Map<String, String> paraMap = new HashMap<>();
-//                paraMap.put("company", repalBill.getAccountBillTitle());
-//                paraMap.put("pregrade", repalBill.getPreDiagnosisGrade());
-//                paraMap.put("prescore", repalBill.getPreDiagnosisScore().toPlainString());
-//                paraMap.put("change", changeStr);
-//                paraMap.put("grade", repalBill.getDiagnosisGrade());
-//                paraMap.put("score", repalBill.getDiagnosisScore().toPlainString());
-//                paraMap.put("change1", changeStr1);
-//                paraMap.put("wizardId", repalBill.getId().toString());
-//                paraMap.put("accountBookId", repalBill.getAccountBookId().toString());
-//                messageNoticeService.sendPushmsg(repalBill.getUserId(), Dict.MsgNameEnum.评级变动APP提醒, paraMap);
-//                messageNoticeService.sendSms(repalBill.getUserId(), Dict.MsgNameEnum.评级变动短信提醒, paraMap);
-//                redisUtil.setEx(redisKey, "done", calTTL(), TimeUnit.MILLISECONDS);
-//            }
-
-
+            //推送
+            //查出组织下所有已经授权的成员
+            List<ThirdPartyAccount> accounts = thirdPartyAccountService.list(Wrappers.lambdaQuery(ThirdPartyAccount.class)
+                    .eq(ThirdPartyAccount::getGroupId,repalBill.getRepalGroupId())
+                    .eq(ThirdPartyAccount::getDeleted,Dict.DeletedStatusEnunm.否.getCode())
+                    .eq(ThirdPartyAccount::getAppId,0)
+                    .isNotNull(ThirdPartyAccount::getMobileNo));
+            List<String> mobiles = accounts.stream().map(ThirdPartyAccount::getMobileNo).collect(Collectors.toList());
+            String redisKey = MESSAGE_PRIFIX + repalBill.getRepalGroupId() + "_" + RemindEnum.账款评级.getCode();
+            if (CollUtil.isNotEmpty(mobiles) && redisUtil.get(redisKey) == null && repalBill.getPreDiagnosisId() != null) {
+                for(String mobileNo:mobiles) {
+                    Map<String, String> paraMap = new HashMap<>();
+                    paraMap.put("company", repalBill.getCustomerName());
+                    paraMap.put("pregrade", repalBill.getPreDiagnosisGrade());
+                    paraMap.put("prescore", repalBill.getPreDiagnosisScore().toPlainString());
+                    paraMap.put("change", changeStr);
+                    paraMap.put("grade", repalBill.getDiagnosisGrade());
+                    paraMap.put("score", repalBill.getDiagnosisScore().toPlainString());
+                    paraMap.put("change1", changeStr1);
+                    messageNoticeService.sendSms(mobileNo, MsgNameEnum.评级变动短信提醒, paraMap);
+                }
+                redisUtil.setEx(redisKey, "done", calTTL(), TimeUnit.MILLISECONDS);
+            }
             //掐头去尾压进accountbill.remindInfo中
             String remindContent = accountRemindHistory.getRemindContent();
             if (remindContent.length() > 100) {
@@ -171,4 +160,13 @@ public class RepalRemindHistoryServiceImpl extends ServiceImpl<RepalRemindHistor
         }
         return overdueEnum;
     }
+
+    /**
+     * 计算当天剩余的毫秒时间
+     * @return
+     */
+    private Long calTTL(){
+        LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        return ChronoUnit.MILLIS.between(LocalDateTime.now(),midnight);
+    }
 }

+ 138 - 0
src/main/java/com/winhc/repal/service/impl/RepalRemindReadInfoServiceImpl.java

@@ -0,0 +1,138 @@
+package com.winhc.repal.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.winhc.repal.entity.RepalRemindHistory;
+import com.winhc.repal.entity.RepalRemindReadInfo;
+import com.winhc.repal.enums.Dict;
+import com.winhc.repal.enums.RemindEnum;
+import com.winhc.repal.repository.RepalRemindReadInfoMapper;
+import com.winhc.repal.service.RepalRemindHistoryService;
+import com.winhc.repal.service.RepalRemindReadInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.winhc.repal.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @description RepalRemindReadInfo 接口实现类
+ * @author Generator
+ * @date 2022-04-27
+ */
+@Service
+@Slf4j
+public class RepalRemindReadInfoServiceImpl extends ServiceImpl<RepalRemindReadInfoMapper, RepalRemindReadInfo> implements RepalRemindReadInfoService {
+    @Autowired
+    private RepalRemindHistoryService repalRemindHistoryService;
+    @Autowired
+    private RedisUtil redisUtil;
+    private static final String MESSAGE_PRIFIX = "winhc:repal:read_";
+
+    /**
+     * 查询账款已读情况,没数据则插入一条全部已读
+     * @param userId
+     * @param repalBillId
+     * @param repalBookId
+     * @return
+     */
+    @Override
+    public RepalRemindReadInfo getReadInfoByUserId(Long userId,Long repalBillId,Long repalBookId) {
+        RepalRemindReadInfo repalRemindReadInfo = getOne(Wrappers.lambdaQuery(RepalRemindReadInfo.class)
+                .eq(RepalRemindReadInfo::getUserId,userId)
+                .eq(RepalRemindReadInfo::getRepalBillId,repalBillId)
+                .eq(RepalRemindReadInfo::getRepalBookId,repalBookId),false);
+        if(ObjectUtil.isNotNull(repalRemindReadInfo)){
+            return repalRemindReadInfo;
+        }
+        repalRemindReadInfo = new RepalRemindReadInfo().setUserId(userId).setRepalBillId(repalBillId).setRepalBookId(repalBookId)
+                .setRankRemindId(0L).setRiskRemindId(0L).setFinanceRemindId(0L).setOverdueRemindId(0L);
+        RepalRemindHistory overDue = repalRemindHistoryService.getOne(Wrappers.lambdaQuery(RepalRemindHistory.class)
+                .eq(RepalRemindHistory::getRepalBillId,repalBillId)
+                .eq(RepalRemindHistory::getTrentType, RemindEnum.逾期提醒.getCode())
+                .orderByDesc(RepalRemindHistory::getId)
+                .last(" LIMIT 1 "),false);
+        if(ObjectUtil.isNotNull(overDue)){
+            repalRemindReadInfo.setOverdueRemindId(overDue.getId());
+        }
+        RepalRemindHistory rank = repalRemindHistoryService.getOne(Wrappers.lambdaQuery(RepalRemindHistory.class)
+                .eq(RepalRemindHistory::getRepalBillId,repalBillId)
+                .eq(RepalRemindHistory::getTrentType, RemindEnum.账款评级.getCode())
+                .orderByDesc(RepalRemindHistory::getId)
+                .last(" LIMIT 1 "),false);
+        if(ObjectUtil.isNotNull(rank)){
+            repalRemindReadInfo.setRankRemindId(rank.getId());
+        }
+        RepalRemindHistory finance = repalRemindHistoryService.getOne(Wrappers.lambdaQuery(RepalRemindHistory.class)
+                .eq(RepalRemindHistory::getRepalBillId,repalBillId)
+                .eq(RepalRemindHistory::getTrentType, RemindEnum.财产线索.getCode())
+                .orderByDesc(RepalRemindHistory::getId)
+                .last(" LIMIT 1 "),false);
+        if(ObjectUtil.isNotNull(finance)){
+            repalRemindReadInfo.setFinanceRemindId(finance.getId());
+        }
+        RepalRemindHistory risk = repalRemindHistoryService.getOne(Wrappers.lambdaQuery(RepalRemindHistory.class)
+                .eq(RepalRemindHistory::getRepalBillId,repalBillId)
+                .eq(RepalRemindHistory::getTrentType, RemindEnum.风险预警.getCode())
+                .orderByDesc(RepalRemindHistory::getId)
+                .last(" LIMIT 1 "),false);
+        if(ObjectUtil.isNotNull(risk)){
+            repalRemindReadInfo.setRiskRemindId(risk.getId());
+        }
+        save(repalRemindReadInfo);
+        return repalRemindReadInfo;
+    }
+
+    /**
+     * 根据类型更新已读状态
+     * 风险预警 逾期动态 财产提醒 由于是每天跑调度,一天更新一次即可
+     * 评级变更 10s更新一次
+     * @param userId
+     * @param trendType
+     */
+    @Override
+    public void updateReadInfoByUserId(Long userId, String trendType,Long repalBillId,Long repalBookId) {
+        String redisKey = MESSAGE_PRIFIX+userId+"_"+trendType+"_"+repalBookId+"_"+repalBillId;
+        if(redisUtil.get(redisKey) != null){
+            return;
+        }
+        RepalRemindReadInfo repalRemindReadInfo = getReadInfoByUserId(userId,repalBillId,repalBookId);
+        RepalRemindHistory repalRemindHistory = repalRemindHistoryService.getOne(Wrappers.lambdaQuery(RepalRemindHistory.class)
+                .eq(RepalRemindHistory::getRepalBillId,repalBillId)
+                .eq(RepalRemindHistory::getTrentType, trendType)
+                .orderByDesc(RepalRemindHistory::getId)
+                .last(" LIMIT 1 "),false);
+        if(ObjectUtil.isNotNull(repalRemindHistory)){
+            if(RemindEnum.账款评级.getCode().equals(trendType)){
+                repalRemindReadInfo.setRankRemindId(repalRemindHistory.getId());
+                updateById(repalRemindReadInfo);
+                redisUtil.setEx(redisKey,"1",10, TimeUnit.SECONDS);
+            }else if(RemindEnum.风险预警.getCode().equals(trendType)){
+                repalRemindReadInfo.setRiskRemindId(repalRemindHistory.getId());
+                updateById(repalRemindReadInfo);
+                redisUtil.setEx(redisKey,"1",calTTL(), TimeUnit.MILLISECONDS);
+            }else if(RemindEnum.财产线索.getCode().equals(trendType)){
+                repalRemindReadInfo.setFinanceRemindId(repalRemindHistory.getId());
+                updateById(repalRemindReadInfo);
+                redisUtil.setEx(redisKey,"1",calTTL(), TimeUnit.MILLISECONDS);
+            }else if(RemindEnum.逾期提醒.getCode().equals(trendType)){
+                repalRemindReadInfo.setOverdueRemindId(repalRemindHistory.getId());
+                updateById(repalRemindReadInfo);
+                redisUtil.setEx(redisKey,"1",calTTL(), TimeUnit.MILLISECONDS);
+            }
+        }
+    }
+
+    /**
+     * 计算当天剩余的毫秒时间
+     * @return
+     */
+    private Long calTTL(){
+        LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        return ChronoUnit.MILLIS.between(LocalDateTime.now(),midnight);
+    }
+}

+ 17 - 0
src/main/java/com/winhc/repal/service/impl/ThirdPartyAccountServiceImpl.java

@@ -0,0 +1,17 @@
+package com.winhc.repal.service.impl;
+
+import com.winhc.repal.entity.ThirdPartyAccount;
+import com.winhc.repal.repository.ThirdPartyAccountMapper;
+import com.winhc.repal.service.ThirdPartyAccountService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description ThirdPartyAccount 接口实现类
+ * @author Generator
+ * @date 2022-04-27
+ */
+@Service
+public class ThirdPartyAccountServiceImpl extends ServiceImpl<ThirdPartyAccountMapper, ThirdPartyAccount> implements ThirdPartyAccountService {
+
+}

+ 54 - 59
src/main/java/com/winhc/repal/task/SmartRemindTask.java

@@ -5,7 +5,6 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -18,8 +17,10 @@ import com.winhc.repal.cloud.vo.V8DynamicVO;
 import com.winhc.repal.entity.RepalBill;
 import com.winhc.repal.entity.RepalRemindDefinition;
 import com.winhc.repal.entity.RepalRemindHistory;
+import com.winhc.repal.entity.ThirdPartyAccount;
 import com.winhc.repal.enums.*;
 import com.winhc.repal.service.*;
+import com.winhc.repal.util.RedisUtil;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,7 +46,7 @@ import java.util.stream.Collectors;
 @Slf4j
 public class SmartRemindTask {
     private static final int PAGE_SIZE = 100;
-    private static final String MESSAGE_PRIFIX = "msg_prifix_";
+    private static final String MESSAGE_PRIFIX = "winhc:repal:key_";
     @Autowired
     private RepalBillService accountBillService;
     @Autowired
@@ -56,12 +57,12 @@ public class SmartRemindTask {
     private CompanyService companyService;
     @Autowired
     private RepalBillDiagnosisService diagnosisService;
-//    @Autowired
-//    private MessageNoticeService messageNoticeService;
-//    @Autowired
-//    private RedisUtil redisUtil;
-//    @Autowired
-//    private AccountRemindSettingService accountRemindSettingService;
+    @Autowired
+    private MessageNoticeService messageNoticeService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ThirdPartyAccountService thirdPartyAccountService;
 
     private static final HashMap<String,String> RISK_MAP = new HashMap<>(32);
 
@@ -118,7 +119,15 @@ public class SmartRemindTask {
             //更新逾期状态
             billList.forEach(e->{
                 //todo 过滤没开通标准版和高级版的账款
-//                AccountRemindSettingVO accountRemindSetting = accountRemindSettingService.find(e.getUserId());
+
+                //查出组织下所有已经授权的成员
+                List<ThirdPartyAccount> accounts = thirdPartyAccountService.list(Wrappers.lambdaQuery(ThirdPartyAccount.class)
+                        .eq(ThirdPartyAccount::getGroupId,e.getRepalGroupId())
+                        .eq(ThirdPartyAccount::getDeleted,Dict.DeletedStatusEnunm.否.getCode())
+                        .eq(ThirdPartyAccount::getAppId,0)
+                        .isNotNull(ThirdPartyAccount::getMobileNo));
+                List<String> mobiles = accounts.stream().map(ThirdPartyAccount::getMobileNo).collect(Collectors.toList());
+
                 AtomicReference<Boolean> needRefreshGrade = new AtomicReference<>(Boolean.FALSE);
                 AtomicReference<RepalRemindHistory> lastestRemind = new AtomicReference<>(null);
                 LocalDate endDate = e.getEndDate();
@@ -156,20 +165,18 @@ public class SmartRemindTask {
                                 newRemind.setRemindTitle(overdueEnum.name());
                                 newRemind.setRemindContent(accountRemindDefinition.getRemindContent());
                                 newRemind.setFunctionList(accountRemindDefinition.getFunctionList());
-                                newRemind.setRemindType(RemindEnum.逾期提醒.name());
-                                newRemind.setReadStatus(ReadStatusEnum.未读.getCode());
+                                newRemind.setRemindType(RemindEnum.逾期提醒.getCode());
                                 accountRemindHistoryService.save(newRemind);
                                 lastestRemind.set(newRemind);
-//                                //提醒
-//                                if(Dict.REMIND_SETTING_ENUM.需要提醒.getCode().equals(accountRemindSetting.getOverdue())) {
-//                                    Map<String, String> paraMap = new HashMap<>();
-//                                    paraMap.put("company", e.getAccountBillTitle());
-//                                    paraMap.put("status", overdueEnum.name());
-//                                    paraMap.put("wizardId", e.getId().toString());
-//                                    paraMap.put("accountBookId",e.getAccountBookId().toString());
-//                                    messageNoticeService.sendPushmsg(e.getUserId(), Dict.MsgNameEnum.逾期APP提醒, paraMap);
-//                                    messageNoticeService.sendSms(e.getUserId(), Dict.MsgNameEnum.逾期短信提醒, paraMap);
-//                                }
+                                //提醒
+                                if(CollUtil.isNotEmpty(mobiles)) {
+                                    for(String mobileNo:mobiles) {
+                                        Map<String, String> paraMap = new HashMap<>();
+                                        paraMap.put("company", e.getCustomerName());
+                                        paraMap.put("status", overdueEnum.name());
+                                        messageNoticeService.sendSms(mobileNo, MsgNameEnum.逾期短信提醒, paraMap);
+                                    }
+                                }
                             }
                         }
                     }
@@ -214,26 +221,24 @@ public class SmartRemindTask {
                                             .setRemindContent(StrUtil.format(accountRemindDefinition.getRemindContent(),
                                                     e.getCustomerName()))
                                             .setFunctionList(accountRemindDefinition.getFunctionList())
-                                            .setRemindType(RemindEnum.财产线索.name())
-                                            .setReadStatus(ReadStatusEnum.未读.getCode())
+                                            .setRemindType(RemindEnum.财产线索.getCode())
                                             .setBizId(financeDynamicVO.getBizId())
                                             .setIsNew(1)
                                             .setDimensionType(financeDynamicVO.getDimensionType());
                                     accountRemindHistoryService.save(accountRemindHistory);
                                     needRefreshGrade.set(Boolean.TRUE);
                                     lastestRemind.set(accountRemindHistory);
-//                                            //推送
-//                                            String redisKey = MESSAGE_PRIFIX+e.getUserId()+"_"+financeDynamicTypeEnum.getCode();
-//                                            if(Dict.REMIND_SETTING_ENUM.需要提醒.getCode().equals(accountRemindSetting.getFinance()) && redisUtil.get(redisKey) == null) {
-//                                                Map<String, String> paraMap = new HashMap<>();
-//                                                paraMap.put("company", company);
-//                                                paraMap.put("change", financeDynamicTypeEnum.getDesc());
-//                                                paraMap.put("wizardId", e.getId().toString());
-//                                                paraMap.put("accountBookId",e.getAccountBookId().toString());
-//                                                messageNoticeService.sendPushmsg(e.getUserId(), Dict.MsgNameEnum.财产线索APP提醒, paraMap);
-//                                                messageNoticeService.sendSms(e.getUserId(), Dict.MsgNameEnum.财产线索短信提醒, paraMap);
-//                                                redisUtil.setEx(redisKey, "done", calTTL(), TimeUnit.MILLISECONDS);
-//                                            }
+                                    //推送
+                                    String redisKey = MESSAGE_PRIFIX+e.getRepalGroupId()+"_"+financeDynamicTypeEnum.getCode();
+                                    if(CollUtil.isNotEmpty(mobiles) && redisUtil.get(redisKey) == null) {
+                                        for(String mobileNo:mobiles) {
+                                            Map<String, String> paraMap = new HashMap<>();
+                                            paraMap.put("company", e.getCustomerName());
+                                            paraMap.put("change", financeDynamicTypeEnum.getDesc());
+                                            messageNoticeService.sendSms(mobileNo, MsgNameEnum.财产线索短信提醒, paraMap);
+                                        }
+                                        redisUtil.setEx(redisKey, "done", calTTL(), TimeUnit.MILLISECONDS);
+                                    }
                                 });
                             }
                         }
@@ -285,8 +290,7 @@ public class SmartRemindTask {
                                             .setRemindContent(StrUtil.format(accountRemindDefinition.getRemindContent(),
                                                     e.getCustomerName()))
                                             .setFunctionList(accountRemindDefinition.getFunctionList())
-                                            .setRemindType(RemindEnum.风险预警.name())
-                                            .setReadStatus(ReadStatusEnum.未读.getCode())
+                                            .setRemindType(RemindEnum.风险预警.getCode())
                                             .setBizId(esDynamic.getRowkey())
                                             .setInfoType(esDynamic.getInfoType())
                                             .setDynamicId(esDynamic.getId())
@@ -295,19 +299,17 @@ public class SmartRemindTask {
                                     accountRemindHistoryService.save(accountRemindHistory);
                                     needRefreshGrade.set(Boolean.TRUE);
                                     lastestRemind.set(accountRemindHistory);
-//                                            //推送
-//                                            String redisKey = MESSAGE_PRIFIX + e.getUserId() + "_" + type;
-//                                            if (Dict.REMIND_SETTING_ENUM.需要提醒.getCode().equals(accountRemindSetting.getRisk()) &&
-//                                                    redisUtil.get(redisKey) == null) {
-//                                                Map<String, String> paraMap = new HashMap<>();
-//                                                paraMap.put("company", company);
-//                                                paraMap.put("change", "新增"+RISK_MAP.get(type));
-//                                                paraMap.put("wizardId", e.getId().toString());
-//                                                paraMap.put("accountBookId",e.getAccountBookId().toString());
-//                                                messageNoticeService.sendPushmsg(e.getUserId(), Dict.MsgNameEnum.风险提醒APP提醒, paraMap);
-//                                                messageNoticeService.sendSms(e.getUserId(), Dict.MsgNameEnum.风险提醒短信提醒, paraMap);
-//                                                redisUtil.setEx(redisKey, "done", calTTL(), TimeUnit.MILLISECONDS);
-//                                            }
+                                    //推送
+                                    String redisKey = MESSAGE_PRIFIX + e.getRepalGroupId() + "_" + type;
+                                    if (CollUtil.isNotEmpty(mobiles) && redisUtil.get(redisKey) == null) {
+                                        for(String mobileNo:mobiles) {
+                                            Map<String, String> paraMap = new HashMap<>();
+                                            paraMap.put("company", e.getCustomerName());
+                                            paraMap.put("change", "新增" + RISK_MAP.get(type));
+                                            messageNoticeService.sendSms(mobileNo, MsgNameEnum.风险提醒短信提醒, paraMap);
+                                        }
+                                        redisUtil.setEx(redisKey, "done", calTTL(), TimeUnit.MILLISECONDS);
+                                    }
                                 });
                             }
                         }
@@ -336,16 +338,9 @@ public class SmartRemindTask {
                 if(needRefreshGrade.get()){
                     diagnosisService.addRepalBillDiagnosis(e.getUserId(),e.getId(),e.getReceivable(), Collections.singletonList(e.getCustomerName()));
                 }
-                //一个月无最新变化,刷新评级并推送消息
-                if(
-//                        Dict.REMIND_SETTING_ENUM.需要提醒.getCode().equals(accountRemindSetting.getRank()) &&
-                                (now.toEpochDay() - e.getDiagnosisDatetime().toLocalDate().toEpochDay() >= 30)){
+                //一个月无最新变化,刷新评级
+                if(now.toEpochDay() - e.getDiagnosisDatetime().toLocalDate().toEpochDay() >= 30){
                     diagnosisService.addRepalBillDiagnosis(e.getUserId(),e.getId(),e.getReceivable(),Collections.singletonList(e.getCustomerName()));
-//                    Map<String, String> paraMap = new HashMap<>();
-//                    paraMap.put("company", e.getAccountBillTitle());
-//                    paraMap.put("wizardId", e.getId().toString());
-//                    paraMap.put("accountBookId",e.getAccountBookId().toString());
-//                    messageNoticeService.sendPushmsg(e.getUserId(), Dict.MsgNameEnum.评级无变动APP提醒, paraMap);
                 }
             });
         }

Разница между файлами не показана из-за своего большого размера
+ 1366 - 0
src/main/java/com/winhc/repal/util/RedisUtil.java


+ 6 - 13
src/main/resources/mapper/RepalRemindHistoryMapper.xml

@@ -1,20 +1,13 @@
 <?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.winhc.repal.repository.RepalRemindHistoryMapper">
-
-    <select id="getRemindUnReadVO" resultType="com.winhc.repal.model.vo.RemindTypeUnReadCountVO">
+    <select id="getRemindUnReadVO" resultType="com.winhc.repal.model.vo.RepalBillRemindUnReadVO">
         SELECT
-            REMIND_TYPE AS remindType,
-            COUNT(*) AS count
+            ( SELECT count(*) FROM REPAL_REMIND_HISTORY WHERE REPAL_BOOK_ID = #{repalBookId} AND REPAL_BILL_ID = #{repalBillId} AND TRENT_TYPE = 'RISK' AND ID > #{riskId} ) AS unreadRiskCount,
+            ( SELECT count(*) FROM REPAL_REMIND_HISTORY WHERE REPAL_BOOK_ID = #{repalBookId}  AND REPAL_BILL_ID = #{repalBillId} AND TRENT_TYPE = 'RANK' AND ID > #{rankId} ) AS unreadRankCount,
+            ( SELECT count(*) FROM REPAL_REMIND_HISTORY WHERE REPAL_BOOK_ID = #{repalBookId}  AND REPAL_BILL_ID = #{repalBillId} AND TRENT_TYPE = 'OVERDUE' AND ID > #{overdueId} ) AS unreadOverdueCount,
+            ( SELECT count(*) FROM REPAL_REMIND_HISTORY WHERE REPAL_BOOK_ID = #{repalBookId}  AND REPAL_BILL_ID = #{repalBillId} AND TRENT_TYPE = 'FINANCE' AND ID > #{financeId} ) AS unreadFinanceCount
         FROM
-            REPAL_REMIND_HISTORY
-        WHERE
-            REPAL_BILL_ID IN
-        <foreach item="item" collection="repalBillIds" index="item" separator="," open="(" close=")">
-            #{item}
-        </foreach>
-        AND READ_STATUS = 0
-        GROUP BY
-            REMIND_TYPE
+            DUAL
     </select>
 </mapper>

+ 5 - 0
src/main/resources/mapper/RepalRemindReadInfoMapper.xml

@@ -0,0 +1,5 @@
+<?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.winhc.repal.repository.RepalRemindReadInfoMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/ThirdPartyAccountMapper.xml

@@ -0,0 +1,5 @@
+<?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.winhc.repal.repository.ThirdPartyAccountMapper">
+
+</mapper>