Pārlūkot izejas kodu

feat:动态已读v2

zhangwei 3 gadi atpakaļ
vecāks
revīzija
9890eb8618

+ 57 - 64
src/main/java/com/winhc/repal/controller/RepalRemindHistoryController.java

@@ -1,66 +1,59 @@
-//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()));
-//    }
+package com.winhc.repal.controller;
+
+import com.winhc.common.base.BeanResponse;
+import com.winhc.common.enums.CodeMsg;
+import com.winhc.common.model.base.VOPage;
+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.success(CodeMsg.SUCCESS,accountRemindHistoryService.getDetailById(id, getUser()));
+    }
+
+
+    @GetMapping("/page")
+    @ApiOperation(value = "根据条件查询智能提醒")
+    public BeanResponse<VOPage<RepalRemindHistoryVO>> page(RepalRemindHistoryDTO dto,
+                                                           @RequestParam(required = false,defaultValue = "1") Integer pageNum,
+                                                           @RequestParam(required = false,defaultValue = "10") Integer pageSize) {
+        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.find(dto, pageNum, pageSize, getUser()));
+    }
+
+    @GetMapping("/count/withunread")
+    @ApiOperation(value = "新版数量")
+    public BeanResponse<RepalRemindCountVO> queryRemindCount(RepalRemindHistoryDTO dto){
+        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.queryRemidCount(dto,getUser()));
+    }
 //
 //    @GetMapping("/count")
 //    @ApiOperation(value = "筛选条件数量")
@@ -68,4 +61,4 @@
 //        dto.setUserId(getUser().getUserId());
 //        return BeanResponse.success(CodeMsg.SUCCESS,accountRemindHistoryService.queryCount(dto));
 //    }
-//}
+}

+ 2 - 2
src/main/java/com/winhc/repal/entity/RepalCustChargeRel.java

@@ -34,8 +34,8 @@ public class RepalCustChargeRel implements Serializable {
     private Long custId;
 
     @ApiModelProperty(value = "负责人id")
-    @TableField("MEMBER_ID")
-    private Long memberId;
+    @TableField("MEMBER_USER_ID")
+    private Long memberUserId;
 
 
 }

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

@@ -65,10 +65,6 @@ public class RepalCustomer implements Serializable {
     @TableField("REMARK")
     private String remark;
 
-    @ApiModelProperty(value = "所属用户")
-    @TableField("BELONG_USER_ID")
-    private Long belongUserId;
-
     @ApiModelProperty(value = "是否删除 0否 1是")
     @TableField("DELETED")
     private Integer deleted;

+ 44 - 0
src/main/java/com/winhc/repal/enums/Dict.java

@@ -114,4 +114,48 @@ public class Dict {
             return code;
         }
     }
+
+    public enum TIME_SLOT_ENUM {
+        全部("ALL"),近30天("MONTH");
+
+        private String code;
+
+        TIME_SLOT_ENUM(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    public enum COUNT_QUERY_ENUM {
+        账款(1),客户(2),用户(3);
+
+        private Integer code;
+
+        COUNT_QUERY_ENUM(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    public enum ReadStatusEnum {
+        /**
+         * 读状态
+         */
+        未读(0),已读(1);
+        private final Integer code;
+
+        ReadStatusEnum(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
 }

+ 72 - 0
src/main/java/com/winhc/repal/enums/FinanceDimensionEnum.java

@@ -0,0 +1,72 @@
+package com.winhc.repal.enums;
+
+/**
+ * @description: 财产线索维度枚举
+ * @author: Anakin
+ * @date 2020.12.17 17:07
+ */
+public enum FinanceDimensionEnum {
+    破产公告("1","BANKRUPTCY_OPEN_CASE","破产公告", "PoChanChongZhengDet"),
+    工商信息("2","INCREASE_REGISTERED_CAPITAL_INFO","工商信息", "GongShangXinXiCaiChan"),
+    招投标("3","COMPANY_BID_LIST","招投标", "ZhaoTouBiaoDet"),
+    软件著作权("4","COMPANY_COPYRIGHT_REG_LIST","软件著作权","RuanJianZhuZuoQuanDet"),
+    作品著作权("5","COMPANY_COPYRIGHT_WORKS_LIST","作品著作权", "ZuoPinZhuZuoQuanDet"),
+    开庭公告("6","COMPANY_COURT_OPEN_ANNOUNCEMENT_LIST","开庭公告", "KaiTingGongGaoDet"),
+    企业失信被执("7","COMPANY_DISHONEST_INFO","企业失信被执", "ShiXinQingKuangDet"),
+    股权出质("8","COMPANY_EQUITY_INFO_LIST","股权出质", "GuQuanChuZhiDet"),
+    融资历史("9","COMPANY_FINANCE","融资历史", "RongZhiXinXi"),
+    股东("10","COMPANY_HOLDER","股东", "GuDongCaiChan"),
+    购地信息("11","COMPANY_LAND_ANNOUNCEMENT","购地信息", "GouDiXinXiDet"),
+    土地抵押("12","COMPANY_LAND_MORTGAGE","土地抵押", "TuDiDiYaDet"),
+    动产抵押("13","COMPANY_MORTGAGE_INFO","动产抵押", "DongChanDiYaDet"),
+    专利("14","COMPANY_PATENT_LIST","专利", "ZhuanLiDet"),
+    商标("15","COMPANY_TM","商标", "ShangBiaoDet"),
+    企业被执行人("16","COMPANY_ZXR_LIST","企业被执行人", "BeiZhiXingRen"),
+    限制消费令("17","COMPANY_ZXR_RESTRICT","限制消费令", "JYXianZhiGaoXiaoFeiDet"),
+    裁判文书("18","WENSHU_DETAIL","裁判文书", "JYNewCaselibDet"),
+    司法拍卖("19","AUCTION_TRACKING_LIST","司法拍卖", "PaiMaiXiangQing"),
+    询价评估机构("20","ZXR_EVALUATE","询价评估(机构)","XunJiaPingGuJiGouCaiChan"),
+    询价评估结果("21","ZXR_EVALUATE_RESULTS","询价评估", "XunJiaPingGuDet");
+    private String code;
+    private String tableName;
+    private String desc;
+    private String routing;
+
+    FinanceDimensionEnum(String code, String tableName, String desc) {
+        this.code = code;
+        this.tableName = tableName;
+        this.desc = desc;
+    }
+
+    FinanceDimensionEnum(String code, String tableName, String desc, String routing) {
+        this.code = code;
+        this.tableName = tableName;
+        this.desc = desc;
+        this.routing = routing;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public String getRouting() {
+        return routing;
+    }
+
+    public static FinanceDimensionEnum getByCode(String code) {
+        for (FinanceDimensionEnum e : FinanceDimensionEnum.values()) {
+            if (e.getCode().equals(code)) {
+                return e;
+            }
+        }
+        return null;
+    }
+}

+ 26 - 2
src/main/java/com/winhc/repal/model/cvt/RepalRemindHistoryConvert.java

@@ -1,15 +1,39 @@
 package com.winhc.repal.model.cvt;
 
+import cn.hutool.core.util.StrUtil;
 import com.winhc.repal.entity.RepalRemindHistory;
-import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
+import com.winhc.repal.enums.DynamicEnum;
+import com.winhc.repal.enums.FinanceDimensionEnum;
+import com.winhc.repal.enums.RemindEnum;
 import com.winhc.repal.model.vo.RepalRemindHistoryVO;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+
 /**
  * @description RepalRemindHistory 对象转换类
  * @author Generator
  * @date 2022-04-08
  */
+@Slf4j
 public class RepalRemindHistoryConvert {
 
-
+    public static RepalRemindHistoryVO EntityToVO(RepalRemindHistory entity) {
+        RepalRemindHistoryVO vo = new RepalRemindHistoryVO ();
+        BeanUtils.copyProperties(entity, vo);
+        vo.setRemindTitle(vo.getRemindTitle().replaceAll("新增",""));
+        //转换前端需要的routing
+        if(RemindEnum.财产线索.getCode().equals(entity.getRemindType())){
+            if(StrUtil.isNotBlank(entity.getDimensionType())){
+                FinanceDimensionEnum financeDimensionEnum = FinanceDimensionEnum.getByCode(entity.getDimensionType());
+                vo.setRouting(financeDimensionEnum == null ? null :financeDimensionEnum.getRouting());
+            }
+        }else if(RemindEnum.风险预警.getCode().equals(entity.getRemindType())){
+            //新版本跳转详情需要
+            vo.setNewDynamicId(entity.getDynamicId());
+            vo.setRowKey(entity.getBizId());
+            vo.setTn(entity.getTrentType());
+            vo.setRouting(DynamicEnum.getRoutingByTn(entity.getTrentType()));
+        }
+        return vo;
+    }
 }

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

@@ -14,16 +14,16 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 @ApiModel(value="智能提醒历史表入参")
 public class RepalRemindHistoryDTO {
-    @ApiModelProperty(value = "用户ID,后端默认添加")
-    private Long userId;
+    @ApiModelProperty(value = "查询类型 1账款 2客户 3用户")
+    private Integer queryType;
 
-    @ApiModelProperty(value = "账本ID")
-    private Long repalBookId;
+    @ApiModelProperty(value = "客户ID")
+    private Long custId;
 
-    @ApiModelProperty(value = "账款ID,进账款详情页才传")
+    @ApiModelProperty(value = "账款ID")
     private Long repalBillId;
 
-    @ApiModelProperty(value = "提醒类型(不传或者传非枚举字段默认全部),查数量不传:逾期提醒、账款评级、财产线索、风险预警、全部")
+    @ApiModelProperty(value = "提醒类型(不传或者传非枚举字段默认全部),查数量不传:OVERDUE(逾期提醒)、RANK(账款评级)、FINANCE(财产线索)、RISK(风险预警)")
     private String remindType;
 
     @ApiModelProperty(value = "筛选时间类型: ALL(全部)、MONTH(近30天) 不传默认MONTH")

+ 30 - 0
src/main/java/com/winhc/repal/model/vo/FunctionVO.java

@@ -0,0 +1,30 @@
+package com.winhc.repal.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Aaron
+ * @date 2021/5/28 9:47
+ * @description
+ */
+@Data
+@ApiModel("功能列表")
+public class FunctionVO {
+    @ApiModelProperty("文案")
+    private String text;
+
+    @ApiModelProperty("功能")
+    private List<Item> type;
+
+
+    @Data
+    public static class Item {
+        private String code;
+
+        private String name;
+    }
+}

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

@@ -2,6 +2,7 @@ package com.winhc.repal.model.vo;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 
 /**
@@ -11,6 +12,7 @@ import lombok.Data;
  */
 @Data
 @ApiModel("提醒数量")
+@AllArgsConstructor
 public class RepalRemindCountVO {
     @ApiModelProperty("逾期动态数量")
     private Integer overdueCount;

+ 14 - 0
src/main/java/com/winhc/repal/repository/RepalRemindHistoryMapper.java

@@ -4,9 +4,11 @@ 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 com.winhc.repal.model.vo.RepalRemindCountVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -22,4 +24,16 @@ public interface RepalRemindHistoryMapper extends BaseMapper<RepalRemindHistory>
                                               @Param("financeId")Long financeId,
                                               @Param("repalBookId")Long repalBookId,
                                               @Param("repalBillId")Long repalBillId);
+
+    /**
+     * 查询动态的数量
+     * @param localDateTime
+     * @return
+     */
+    RepalRemindCountVO remindCount(@Param("repalBillId")Long repalBillId,
+                                   @Param("localDateTime") LocalDateTime localDateTime,
+                                   @Param("riskId")Long riskId,
+                                   @Param("rankId")Long rankId,
+                                   @Param("overdueId")Long overdueId,
+                                   @Param("financeId")Long financeId);
 }

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

@@ -1,10 +1,15 @@
 package com.winhc.repal.service;
 
+import com.module.login.usersession.UserBean;
+import com.winhc.common.model.base.VOPage;
 import com.winhc.repal.entity.RepalBill;
 import com.winhc.repal.entity.RepalBillDiagnosis;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
 import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
+import com.winhc.repal.model.vo.RepalRemindCountVO;
+import com.winhc.repal.model.vo.RepalRemindHistoryVO;
 
 import java.util.List;
 
@@ -29,4 +34,27 @@ public interface RepalRemindHistoryService extends IService<RepalRemindHistory>
      * @return
      */
     boolean insertRankRemind(RepalBill accountBill, RepalBillDiagnosis diagnosis);
+
+    /**
+     * 根据id查询详情
+     * @return
+     */
+    RepalRemindHistoryVO getDetailById(Long id, UserBean userBean);
+
+    /**
+     * 查询动态数量
+     * @param dto
+     * @return
+     */
+    RepalRemindCountVO queryRemidCount(RepalRemindHistoryDTO dto, UserBean userBean);
+
+    /**
+     * 分页查询动态
+     * @param dto
+     * @param pageNum
+     * @param pageSize
+     * @param userBean
+     * @return
+     */
+    VOPage<RepalRemindHistoryVO> find(RepalRemindHistoryDTO dto, Integer pageNum, Integer pageSize,UserBean userBean);
 }

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

@@ -77,7 +77,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
                  .in(RepalCustChargeRel::getCustId,custIds));
          Map<Long, List<RepalCustChargeRel>> relMap = rels.stream().collect(Collectors.groupingBy(RepalCustChargeRel::getCustId));
          Map<Long, RepalGroupMember> memberMap = repalGroupMemberService.list(Wrappers.lambdaQuery(RepalGroupMember.class)
-                 .in(RepalGroupMember::getUserId,rels.stream().map(RepalCustChargeRel::getMemberId).collect(Collectors.toList())))
+                 .in(RepalGroupMember::getUserId,rels.stream().map(RepalCustChargeRel::getMemberUserId).collect(Collectors.toList())))
                  .stream().collect(Collectors.toMap(RepalGroupMember::getUserId,Function.identity()));
          List<RepalCustomerInfoVO> voList = new ArrayList<>();
          for(RepalCustomerInfoBO customerInfo:page.getRecords()){
@@ -103,7 +103,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
                  for(RepalCustChargeRel rel:repalCustChargeRels){
                      RepalGroupMemberVO member = new RepalGroupMemberVO();
                      memberList.add(member);
-                     RepalGroupMember groupMember = memberMap.getOrDefault(rel.getMemberId(),new RepalGroupMember());
+                     RepalGroupMember groupMember = memberMap.getOrDefault(rel.getMemberUserId(),new RepalGroupMember());
                      member.setMemberUserName(groupMember.getMemberUserName());
                      member.setUserId(groupMember.getUserId());
                      member.setId(groupMember.getId());
@@ -160,7 +160,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
              for(Long relUserId: dto.getCharges()){
                  RepalCustChargeRel rel =  new RepalCustChargeRel();
                  rel.setCustId(repalCustomer.getCustId());
-                 rel.setMemberId(relUserId);
+                 rel.setMemberUserId(relUserId);
                  rels.add(rel);
              }
              repalCustChargeRelService.saveBatch(rels);
@@ -273,7 +273,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
             if(CollUtil.isNotEmpty(rels)){
                 repalCustChargeRelService.removeByIds(rels.stream().map(RepalCustChargeRel::getId).collect(Collectors.toList()));
                 members = repalGroupMemberService.list(Wrappers.lambdaQuery(RepalGroupMember.class)
-                        .in(RepalGroupMember::getUserId,rels.stream().map(RepalCustChargeRel::getMemberId).collect(Collectors.toList()))
+                        .in(RepalGroupMember::getUserId,rels.stream().map(RepalCustChargeRel::getMemberUserId).collect(Collectors.toList()))
                         .eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
             }
             List<RepalGroupMember> newMembers = repalGroupMemberService.list(Wrappers.lambdaQuery(RepalGroupMember.class)
@@ -284,7 +284,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
             for(Long relUserId: dto.getCharges()){
                 RepalCustChargeRel rel =  new RepalCustChargeRel();
                 rel.setCustId(repalCustomer.getCustId());
-                rel.setMemberId(relUserId);
+                rel.setMemberUserId(relUserId);
                 newRels.add(rel);
             }
             repalCustChargeRelService.saveBatch(newRels);

+ 335 - 5
src/main/java/com/winhc/repal/service/impl/RepalRemindHistoryServiceImpl.java

@@ -1,14 +1,25 @@
 package com.winhc.repal.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+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.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.module.login.usersession.UserBean;
+import com.winhc.common.enums.CodeMsg;
+import com.winhc.common.exception.CommonException;
+import com.winhc.common.model.base.VOPage;
+import com.winhc.repal.cloud.dto.QueryV8DynamicDTO;
+import com.winhc.repal.cloud.vo.V8DynamicVO;
 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.model.cvt.RepalRemindHistoryConvert;
+import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
+import com.winhc.repal.model.vo.*;
 import com.winhc.repal.repository.RepalRemindHistoryMapper;
 import com.winhc.repal.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -19,11 +30,12 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +58,16 @@ public class RepalRemindHistoryServiceImpl extends ServiceImpl<RepalRemindHistor
     private RepalRemindReadInfoService repalRemindReadInfoService;
     @Autowired
     private RepalRemindHistoryMapper repalRemindHistoryMapper;
+    @Autowired
+    private RepalBillService repalBillService;
+    @Autowired
+    private RepalBillDiagnosisService repalBillDiagnosisService;
+    @Autowired
+    private CompanyService companyService;
+    @Autowired
+    private RepalCustomerService repalCustomerService;
+    @Autowired
+    private RepalBookService repalBookService;
 
     @Override
     public RepalBillRemindUnReadVO getRemindUnReadVO(List<RepalBill> repalBills,Long userId) {
@@ -142,6 +164,314 @@ public class RepalRemindHistoryServiceImpl extends ServiceImpl<RepalRemindHistor
         return true;
     }
 
+    @Override
+    public RepalRemindHistoryVO getDetailById(Long id, UserBean userBean) {
+
+        RepalRemindHistory bean = getById(id);
+        RepalRemindHistoryVO remindHistoryVO = RepalRemindHistoryConvert.EntityToVO(bean);
+        RepalBill accountBill = repalBillService.getById(remindHistoryVO.getRepalBillId());
+
+        //评级提醒返回本次评分 上次评分,以及动态监测
+        if (RemindEnum.账款评级.getCode().equals(remindHistoryVO.getRemindType())) {
+            RepalBillDiagnosis accountBillDiagnosis = repalBillDiagnosisService.getById(remindHistoryVO.getTrendId());
+            if (ObjectUtil.isNotNull(accountBillDiagnosis)) {
+                QueryV8DynamicDTO dynamicDto = new QueryV8DynamicDTO();
+                remindHistoryVO.setDiagnosisGrade(accountBillDiagnosis.getDiagnosisGrade())
+                        .setDiagnosisScore(accountBillDiagnosis.getDiagnosisScore())
+                        .setDiagnosisDatetime(accountBillDiagnosis.getDiagnosisDatetime())
+                        .setDiagnosisRecordId(accountBillDiagnosis.getBizId());
+                dynamicDto.setEndDate(accountBillDiagnosis.getDiagnosisDatetime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
+                if (StrUtil.isNotEmpty(remindHistoryVO.getTrendContent())) {
+                    RepalBillDiagnosis preAccountDiagnosis = repalBillDiagnosisService.getById(remindHistoryVO.getTrendContent());
+                    if (ObjectUtil.isNotNull(preAccountDiagnosis)) {
+                        remindHistoryVO.setPreDiagnosisGrade(preAccountDiagnosis.getDiagnosisGrade())
+                                .setPreDiagnosisScore(preAccountDiagnosis.getDiagnosisScore())
+                                .setPreDiagnosisDatetime(preAccountDiagnosis.getDiagnosisDatetime());
+                        dynamicDto.setStartDate(preAccountDiagnosis.getDiagnosisDatetime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                    }
+                }
+                dynamicDto.setEntityNames(Collections.singletonList(accountBill.getCustomerName()));
+                VOPage<V8DynamicVO> resultPage = companyService.queryDynamic(dynamicDto, 1, 10);
+                if (ObjectUtil.isNull(resultPage) || ObjectUtil.isNull(resultPage.getDataList()) || CollUtil.isEmpty(resultPage.getDataList())) {
+                    DiagnosisDynamicVO dynamicVO = new DiagnosisDynamicVO();
+                    dynamicVO.setRtaDesc("该账款信息发生变动(欠款企业、金额有所调整)");
+                    dynamicVO.setCreateTime(accountBill.getTimeModified().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                    remindHistoryVO.setEsDynamics(Collections.singletonList(dynamicVO));
+                }
+                remindHistoryVO.setEsDynamics(resultPage.getDataList().stream().map(entity -> {
+                    DiagnosisDynamicVO diagnosisDynamicVO = new DiagnosisDynamicVO();
+                    diagnosisDynamicVO.setNewDynamicId(entity.getId());
+                    diagnosisDynamicVO.setRowKey(entity.getRowkey());
+                    diagnosisDynamicVO.setCreateTime(entity.getDynamicTime());
+
+                    String rtaDesc = DynamicEnum.getDescByTn(entity.getTn());
+                    diagnosisDynamicVO.setRtaDesc(rtaDesc);
+                    diagnosisDynamicVO.setTn(entity.getTn());
+                    diagnosisDynamicVO.setInfoType(entity.getInfoType());
+                    diagnosisDynamicVO.setNewRemindContent(JSON.toJSONString(entity.getDynamicJSON()));
+                    diagnosisDynamicVO.setRouting(DynamicEnum.getRoutingByTn(entity.getTn()));
+                    return diagnosisDynamicVO;
+                }).collect(Collectors.toList()));
+            }
+        }
+        //逾期提醒返回本次评分以及应收账款日期
+        else if (RemindEnum.逾期提醒.getCode().equals(remindHistoryVO.getRemindType())) {
+            RepalBillDiagnosis accountBillDiagnosis = repalBillDiagnosisService.getById(remindHistoryVO.getTrendId());
+            if (ObjectUtil.isNotNull(accountBillDiagnosis)) {
+                remindHistoryVO.setDiagnosisGrade(accountBillDiagnosis.getDiagnosisGrade())
+                        .setDiagnosisScore(accountBillDiagnosis.getDiagnosisScore())
+                        .setDiagnosisDatetime(accountBillDiagnosis.getDiagnosisDatetime());
+            }
+            remindHistoryVO.setEndDate(LocalDateTime.ofEpochSecond(Long.parseLong(remindHistoryVO.getTrendContent()) / 1000, 0, ZoneOffset.ofHours(8)));
+        }
+        RepalCustomer repalCustomer = repalCustomerService.getById(accountBill.getCustomerId());
+        if(ObjectUtil.isNotNull(repalCustomer)) {
+            remindHistoryVO.setCompanyId(repalCustomer.getCompanyId());
+        }
+        //更新已读状态,感觉用不到,还是加上吧
+        repalRemindReadInfoService.updateReadInfoByUserId(userBean.getUserId(),bean.getRemindType(),accountBill.getId(),accountBill.getRepalBookId());
+        return remindHistoryVO;
+    }
+
+    @Override
+    public RepalRemindCountVO queryRemidCount(RepalRemindHistoryDTO dto, UserBean userBean) {
+        //参数校验
+        if(ObjectUtil.isNull(dto.getQueryType())){
+            throw new CommonException(CodeMsg.VALIDATE_PARAMETER);
+        }
+        LocalDateTime localDateTime = LocalDateTime.now().withYear(2019);
+        //添加查询时间的条件
+        if (StrUtil.isBlank(dto.getTimeSlot()) || Dict.TIME_SLOT_ENUM.近30天.getCode().equals(dto.getTimeSlot())) {
+            localDateTime = LocalDateTime.now().minusDays(30).withHour(0).withMinute(0).withSecond(0);
+        }
+        RepalRemindCountVO result = new RepalRemindCountVO(0,0,0,0,0,0,0,0,0,0);
+        if(Dict.COUNT_QUERY_ENUM.账款.getCode().equals(dto.getQueryType())){
+            if(ObjectUtil.isNull(dto.getRepalBillId())){
+                throw new CommonException(CodeMsg.VALIDATE_PARAMETER);
+            }
+            RepalBill repalBill = repalBillService.getById(dto.getRepalBillId());
+            RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userBean.getUserId(), dto.getRepalBillId(), repalBill.getRepalBookId());
+            result = repalRemindHistoryMapper.remindCount(repalBill.getId(),localDateTime,repalRemindReadInfo.getRiskRemindId(),repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),repalRemindReadInfo.getFinanceRemindId());
+            result.setUnreadTotalCount(result.getUnreadRankCount()+result.getUnreadRiskCount()+result.getUnreadOverdueCount()+result.getUnreadFinanceCount());
+        }else if(Dict.COUNT_QUERY_ENUM.客户.getCode().equals(dto.getQueryType())){
+            if(ObjectUtil.isNull(dto.getCustId())){
+                throw new CommonException(CodeMsg.VALIDATE_PARAMETER);
+            }
+            //客户维度多账款
+            List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class).eq(RepalBill::getCustomerId,dto.getCustId()).eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
+            for(RepalBill repalBill:repalBills){
+                RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userBean.getUserId(), dto.getRepalBillId(), repalBill.getRepalBookId());
+                RepalRemindCountVO tmp = repalRemindHistoryMapper.remindCount(repalBill.getId(),localDateTime,repalRemindReadInfo.getRiskRemindId(),repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),repalRemindReadInfo.getFinanceRemindId());
+                result.setFinanceCount(result.getFinanceCount()+tmp.getFinanceCount());
+                result.setRankCount(result.getRankCount()+tmp.getRankCount());
+                result.setOverdueCount(result.getOverdueCount()+tmp.getOverdueCount());
+                result.setRiskCount(result.getRiskCount()+tmp.getRiskCount());
+                result.setUnreadRiskCount(result.getUnreadRiskCount()+tmp.getUnreadRiskCount());
+                result.setUnreadRankCount(result.getUnreadRankCount()+tmp.getUnreadRankCount());
+                result.setUnreadFinanceCount(result.getUnreadFinanceCount()+tmp.getUnreadFinanceCount());
+                result.setUnreadOverdueCount(result.getUnreadOverdueCount()+tmp.getUnreadOverdueCount());
+                result.setTotalCount(result.getTotalCount()+tmp.getTotalCount());
+                result.setUnreadTotalCount(result.getUnreadTotalCount()+tmp.getUnreadTotalCount());
+            }
+        }else if(Dict.COUNT_QUERY_ENUM.用户.getCode().equals(dto.getQueryType())){
+            //用户->组织->客户s->账款s
+            ThirdPartyAccount thirdPartyAccount = thirdPartyAccountService.getOne(Wrappers.lambdaQuery(ThirdPartyAccount.class).eq(ThirdPartyAccount::getUserId,userBean.getUserId()).eq(ThirdPartyAccount::getAppId,0).eq(ThirdPartyAccount::getDeleted, Dict.DeletedStatusEnunm.否.getCode()),false);
+            if(thirdPartyAccount!=null){
+                List<RepalCustomer> repalCustomers = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).eq(RepalCustomer::getRepalGroupId,thirdPartyAccount.getGroupId()).eq(RepalCustomer::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+                List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class).in(RepalBill::getCustomerId,repalCustomers.stream().map(RepalCustomer::getCustId).collect(Collectors.toList())).eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
+                for(RepalBill repalBill:repalBills){
+                    RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userBean.getUserId(), dto.getRepalBillId(), repalBill.getRepalBookId());
+                    RepalRemindCountVO tmp = repalRemindHistoryMapper.remindCount(repalBill.getId(),localDateTime,repalRemindReadInfo.getRiskRemindId(),repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),repalRemindReadInfo.getFinanceRemindId());
+                    result.setFinanceCount(result.getFinanceCount()+tmp.getFinanceCount());
+                    result.setRankCount(result.getRankCount()+tmp.getRankCount());
+                    result.setOverdueCount(result.getOverdueCount()+tmp.getOverdueCount());
+                    result.setRiskCount(result.getRiskCount()+tmp.getRiskCount());
+                    result.setUnreadRiskCount(result.getUnreadRiskCount()+tmp.getUnreadRiskCount());
+                    result.setUnreadRankCount(result.getUnreadRankCount()+tmp.getUnreadRankCount());
+                    result.setUnreadFinanceCount(result.getUnreadFinanceCount()+tmp.getUnreadFinanceCount());
+                    result.setUnreadOverdueCount(result.getUnreadOverdueCount()+tmp.getUnreadOverdueCount());
+                    result.setTotalCount(result.getTotalCount()+tmp.getTotalCount());
+                    result.setUnreadTotalCount(result.getUnreadTotalCount()+tmp.getUnreadTotalCount());
+                }
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public VOPage<RepalRemindHistoryVO> find(RepalRemindHistoryDTO dto, Integer pageNum, Integer pageSize, UserBean userBean) {
+        //参数校验
+        if(ObjectUtil.isNull(dto.getQueryType())){
+            throw new CommonException(CodeMsg.VALIDATE_PARAMETER);
+        }
+        LocalDateTime localDateTime = LocalDateTime.now().withYear(2019);
+        //添加查询时间的条件
+        if (StrUtil.isBlank(dto.getTimeSlot()) || Dict.TIME_SLOT_ENUM.近30天.getCode().equals(dto.getTimeSlot())) {
+            localDateTime = LocalDateTime.now().minusDays(30).withHour(0).withMinute(0).withSecond(0);
+        }
+        VOPage<RepalRemindHistoryVO> result = new VOPage<>(pageNum,pageSize,0L,new ArrayList<>());
+        LambdaQueryWrapper<RepalRemindHistory> qw = Wrappers.lambdaQuery(RepalRemindHistory.class);
+        if (StrUtil.isNotBlank(dto.getRemindType())) {
+            if (RemindEnum.财产线索.getCode().equals(dto.getRemindType())
+                    || RemindEnum.逾期提醒.getCode().equals(dto.getRemindType())
+                    || RemindEnum.账款评级.getCode().equals(dto.getRemindType())
+                    || RemindEnum.风险预警.getCode().equals(dto.getRemindType())) {
+                qw.eq(RepalRemindHistory::getRemindType, dto.getRemindType());
+            }
+        }
+        qw.ge(RepalRemindHistory::getRemindTime,localDateTime).orderByDesc(RepalRemindHistory::getId);
+        if(Dict.COUNT_QUERY_ENUM.账款.getCode().equals(dto.getQueryType())){
+            if(ObjectUtil.isNull(dto.getRepalBillId())){
+                throw new CommonException(CodeMsg.VALIDATE_PARAMETER);
+            }
+            qw.eq(RepalRemindHistory::getRepalBillId,dto.getRepalBillId());
+            IPage<RepalRemindHistory> pageAccountRemindHistory = page(new Page<>(pageNum, pageSize), qw);
+            if(CollUtil.isNotEmpty(pageAccountRemindHistory.getRecords())){
+                result = new VOPage<>(pageNum, pageSize, pageAccountRemindHistory.getTotal(), pageAccountRemindHistory.getRecords().stream()
+                        .map(RepalRemindHistoryConvert::EntityToVO).collect(Collectors.toList()));
+                //更新已读未读状态
+                RepalBill repalBill = repalBillService.getById(dto.getRepalBillId());
+                RepalCustomer repalCustomer = repalCustomerService.getById(repalBill.getCustomerId());
+                RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userBean.getUserId(), dto.getRepalBillId(), repalBill.getRepalBookId());
+                for(RepalRemindHistoryVO vo:result.getDataList()){
+                    vo.setCompanyId(repalCustomer.getCompanyId());
+                    vo.setReadStatus(Dict.ReadStatusEnum.已读.getCode());
+                    if(RemindEnum.逾期提醒.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getOverdueRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }else if(RemindEnum.财产线索.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getFinanceRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }else if(RemindEnum.风险预警.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getRiskRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }else if(RemindEnum.账款评级.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getRankRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }
+                }
+                //查询详细分类时更新已读id
+                if(StrUtil.isNotBlank(dto.getRemindType())){
+                    repalRemindReadInfoService.updateReadInfoByUserId(userBean.getUserId(), dto.getRemindType(),dto.getRepalBillId(), repalBill.getRepalBookId());
+                }
+            }
+        }else if(Dict.COUNT_QUERY_ENUM.客户.getCode().equals(dto.getQueryType())){
+            if(ObjectUtil.isNull(dto.getCustId())){
+                throw new CommonException(CodeMsg.VALIDATE_PARAMETER);
+            }
+            //客户维度多账款
+            List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class).eq(RepalBill::getCustomerId,dto.getCustId()).eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
+            qw.in(RepalRemindHistory::getRepalBillId,repalBills.stream().map(RepalBill::getId).collect(Collectors.toList()));
+            Map<String,RepalCustomer> repalCustomerMap = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,repalBills.stream().map(RepalBill::getCustomerId).collect(Collectors.toList()))).stream().collect(Collectors.toMap(RepalCustomer::getCustName, Function.identity()));
+            IPage<RepalRemindHistory> pageAccountRemindHistory = page(new Page<>(pageNum, pageSize), qw);
+            if(CollUtil.isNotEmpty(pageAccountRemindHistory.getRecords())){
+                result = new VOPage<>(pageNum, pageSize, pageAccountRemindHistory.getTotal(), pageAccountRemindHistory.getRecords().stream()
+                        .map(RepalRemindHistoryConvert::EntityToVO).collect(Collectors.toList()));
+                Map<Long,RepalRemindReadInfo> readInfoMap = new HashMap<>();
+                for(RepalRemindHistoryVO vo:result.getDataList()){
+                    if(repalCustomerMap.containsKey(vo.getCompanyName())){
+                        vo.setCompanyId(repalCustomerMap.get(vo.getCompanyName()).getCompanyId());
+                    }
+                    vo.setReadStatus(Dict.ReadStatusEnum.已读.getCode());
+                    RepalRemindReadInfo repalRemindReadInfo;
+                    if(readInfoMap.containsKey(vo.getRepalBillId())){
+                        repalRemindReadInfo  = readInfoMap.get(vo.getRepalBillId());
+                    }else {
+                        repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userBean.getUserId(), vo.getRepalBillId(), vo.getRepalBookId());
+                        readInfoMap.put(vo.getRepalBillId(),repalRemindReadInfo);
+                    }
+                    if(RemindEnum.逾期提醒.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getOverdueRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }else if(RemindEnum.财产线索.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getFinanceRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }else if(RemindEnum.风险预警.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getRiskRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }else if(RemindEnum.账款评级.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getRankRemindId()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                    }
+                }
+                //查询详细分类时更新已读id
+                if(StrUtil.isNotBlank(dto.getRemindType()) && CollUtil.isNotEmpty(readInfoMap)){
+                    for(RepalRemindReadInfo repalRemindReadInfo:readInfoMap.values()){
+                        repalRemindReadInfoService.updateReadInfoByUserId(userBean.getUserId(), dto.getRemindType(),repalRemindReadInfo.getRepalBillId(), repalRemindReadInfo.getRepalBookId());
+                    }
+                }
+            }
+        }else if(Dict.COUNT_QUERY_ENUM.用户.getCode().equals(dto.getQueryType())){
+            //用户->组织->客户s->账款s
+            ThirdPartyAccount thirdPartyAccount = thirdPartyAccountService.getOne(Wrappers.lambdaQuery(ThirdPartyAccount.class).eq(ThirdPartyAccount::getUserId,userBean.getUserId()).eq(ThirdPartyAccount::getAppId,0).eq(ThirdPartyAccount::getDeleted, Dict.DeletedStatusEnunm.否.getCode()),false);
+            if(thirdPartyAccount!=null){
+                List<RepalCustomer> repalCustomers = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).eq(RepalCustomer::getRepalGroupId,thirdPartyAccount.getGroupId()).eq(RepalCustomer::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+                List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class).in(RepalBill::getCustomerId,repalCustomers.stream().map(RepalCustomer::getCustId).collect(Collectors.toList())).eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
+                Map<String,RepalCustomer> repalCustomerMap = repalCustomerService.list(Wrappers.lambdaQuery(RepalCustomer.class).in(RepalCustomer::getCustId,repalBills.stream().map(RepalBill::getCustomerId).collect(Collectors.toList()))).stream().collect(Collectors.toMap(RepalCustomer::getCustName, Function.identity()));
+                qw.in(RepalRemindHistory::getRepalBillId,repalBills.stream().map(RepalBill::getId).collect(Collectors.toList()));
+                IPage<RepalRemindHistory> pageAccountRemindHistory = page(new Page<>(pageNum, pageSize), qw);
+                if(CollUtil.isNotEmpty(pageAccountRemindHistory.getRecords())){
+                    result = new VOPage<>(pageNum, pageSize, pageAccountRemindHistory.getTotal(), pageAccountRemindHistory.getRecords().stream()
+                            .map(RepalRemindHistoryConvert::EntityToVO).collect(Collectors.toList()));
+                    Map<Long,RepalRemindReadInfo> readInfoMap = new HashMap<>();
+                    for(RepalRemindHistoryVO vo:result.getDataList()){
+                        vo.setReadStatus(Dict.ReadStatusEnum.已读.getCode());
+                        if(repalCustomerMap.containsKey(vo.getCompanyName())){
+                            vo.setCompanyId(repalCustomerMap.get(vo.getCompanyName()).getCompanyId());
+                        }
+                        RepalRemindReadInfo repalRemindReadInfo;
+                        if(readInfoMap.containsKey(vo.getRepalBillId())){
+                            repalRemindReadInfo  = readInfoMap.get(vo.getRepalBillId());
+                        }else {
+                            repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(userBean.getUserId(), vo.getRepalBillId(), vo.getRepalBookId());
+                            readInfoMap.put(vo.getRepalBillId(),repalRemindReadInfo);
+                        }
+                        if(RemindEnum.逾期提醒.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getOverdueRemindId()){
+                            vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                        }else if(RemindEnum.财产线索.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getFinanceRemindId()){
+                            vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                        }else if(RemindEnum.风险预警.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getRiskRemindId()){
+                            vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                        }else if(RemindEnum.账款评级.getCode().equals(vo.getRemindType()) && vo.getId() > repalRemindReadInfo.getRankRemindId()){
+                            vo.setReadStatus(Dict.ReadStatusEnum.未读.getCode());
+                        }
+                    }
+                    //查询详细分类时更新已读id
+                    if(StrUtil.isNotBlank(dto.getRemindType()) && CollUtil.isNotEmpty(readInfoMap)){
+                        for(RepalRemindReadInfo repalRemindReadInfo:readInfoMap.values()){
+                            repalRemindReadInfoService.updateReadInfoByUserId(userBean.getUserId(), dto.getRemindType(),repalRemindReadInfo.getRepalBillId(), repalRemindReadInfo.getRepalBookId());
+                        }
+                    }
+                }
+            }
+        }
+        if (CollUtil.isNotEmpty(result.getDataList())) {
+            result.getDataList().forEach(e -> {
+                //逾期提醒返回本次评分以及应收账款日期
+                if (RemindEnum.逾期提醒.getCode().equals(e.getRemindType())) {
+                    RepalBillDiagnosis accountBillDiagnosis = repalBillDiagnosisService.getById(e.getTrendId());
+                    if (ObjectUtil.isNotNull(accountBillDiagnosis)) {
+                        e.setDiagnosisGrade(accountBillDiagnosis.getDiagnosisGrade())
+                                .setDiagnosisScore(accountBillDiagnosis.getDiagnosisScore())
+                                .setDiagnosisDatetime(accountBillDiagnosis.getDiagnosisDatetime());
+                    }
+                    e.setEndDate(LocalDateTime.ofEpochSecond(Long.parseLong(e.getTrendContent()) / 1000, 0, ZoneOffset.ofHours(8)));
+                }
+                if (RemindEnum.账款评级.getCode().equals(e.getRemindType())) {
+                    RepalBillDiagnosis accountBillDiagnosis = repalBillDiagnosisService.getById(e.getTrendId());
+                    if (ObjectUtil.isNotNull(accountBillDiagnosis)) {
+                        e.setDiagnosisGrade(accountBillDiagnosis.getDiagnosisGrade())
+                                .setDiagnosisScore(accountBillDiagnosis.getDiagnosisScore())
+                                .setDiagnosisDatetime(accountBillDiagnosis.getDiagnosisDatetime())
+                                .setDiagnosisRecordId(accountBillDiagnosis.getBizId());
+                        if (StrUtil.isNotEmpty(e.getTrendContent())) {
+                            RepalBillDiagnosis preAccountDiagnosis = repalBillDiagnosisService.getById(e.getTrendContent());
+                            if (ObjectUtil.isNotNull(preAccountDiagnosis)) {
+                                e.setPreDiagnosisGrade(preAccountDiagnosis.getDiagnosisGrade())
+                                        .setPreDiagnosisScore(preAccountDiagnosis.getDiagnosisScore())
+                                        .setPreDiagnosisDatetime(preAccountDiagnosis.getDiagnosisDatetime());
+                            }
+                        }
+                    }
+                }
+            });
+        }
+        return result;
+    }
+
     private OverdueEnum getDaysBetween(LocalDate endDate) {
         long delta = LocalDate.now().toEpochDay() - endDate.toEpochDay();
         OverdueEnum overdueEnum = OverdueEnum.其他;

+ 36 - 0
src/main/resources/mapper/RepalRemindHistoryMapper.xml

@@ -10,4 +10,40 @@
         FROM
             DUAL
     </select>
+    <select id="remindCount" resultType="com.winhc.repal.model.vo.RepalRemindCountVO">
+        select (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'OVERDUE'
+        and  REMIND_TIME >= #{localDateTime}
+        and REPAL_BILL_ID = #{repalBillId}
+        ) AS overdueCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'OVERDUE'
+        AND REMIND_TIME >= #{localDateTime}
+        and REPAL_BILL_ID = #{repalBillId}
+        AND ID > #{overdueId} ) AS unreadOverdueCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'RISK'
+        AND REMIND_TIME >= #{localDateTime}
+        and REPAL_BILL_ID = #{repalBillId}) AS riskCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'RISK'
+        AND REMIND_TIME >= #{localDateTime}
+        and REPAL_BILL_ID = #{repalBillId}
+        AND ID > #{riskId}) AS unreadRiskCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'FINANCE'
+        AND USER_ID = #{userId}
+        and REPAL_BILL_ID = #{repalBillId}
+        AND REMIND_TIME >= #{localDateTime}) AS financeCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'FINANCE'
+        AND REMIND_TIME >= #{localDateTime}
+        and REPAL_BILL_ID = #{repalBillId}
+        AND ID > #{financeId} ) AS unreadFinanceCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'RANK'
+        AND USER_ID = #{userId}
+        and REPAL_BILL_ID = #{repalBillId}
+        AND REMIND_TIME >= #{localDateTime}) AS rankCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where REMIND_TYPE = 'RANK'
+        AND REMIND_TIME >= #{localDateTime}
+        and REPAL_BILL_ID = #{repalBillId}
+        AND ID > #{rankId}) AS unreadRankCount,
+        (select count(*) from ACCOUNT_REMIND_HISTORY where  REPAL_BILL_ID = #{repalBillId}
+        AND REMIND_TIME >= #{localDateTime}) AS totalCount
+        FROM DUAL
+    </select>
 </mapper>