Browse Source

列表部分增加

xda 3 years ago
parent
commit
36c369a468

+ 1 - 0
src/main/java/com/winhc/repal/controller/RepalBillController.java

@@ -3,6 +3,7 @@ package com.winhc.repal.controller;
 import com.winhc.common.base.BeanResponse;
 import com.winhc.common.base.BeanResponse;
 import com.winhc.common.enums.CodeMsg;
 import com.winhc.common.enums.CodeMsg;
 import com.winhc.repal.annotation.RolePermission;
 import com.winhc.repal.annotation.RolePermission;
+import com.winhc.repal.enums.PermissionEnum;
 import com.winhc.repal.model.dto.*;
 import com.winhc.repal.model.dto.*;
 import com.winhc.repal.model.vo.RepalBillDetailVO;
 import com.winhc.repal.model.vo.RepalBillDetailVO;
 import com.winhc.repal.model.vo.RepalBillInfoVO;
 import com.winhc.repal.model.vo.RepalBillInfoVO;

+ 27 - 0
src/main/java/com/winhc/repal/model/bo/BillRemindBO.java

@@ -0,0 +1,27 @@
+package com.winhc.repal.model.bo;
+
+import lombok.Data;
+
+/**
+ * @Description: BillRemindBO
+ * @Author: xda
+ * @Date: 2022/4/30 13:01
+ */
+@Data
+public class BillRemindBO {
+
+    /**
+     *  账款id
+     */
+    private Long repalBillId;
+
+    /**
+     *  动态信息最新记录id
+     */
+    private Long repalRemindHistoryId;
+
+    /**
+     *  动态类型
+     */
+    private String remindType;
+}

+ 41 - 0
src/main/java/com/winhc/repal/model/bo/UserBillUnreadInfoBO.java

@@ -0,0 +1,41 @@
+package com.winhc.repal.model.bo;
+
+import lombok.Data;
+
+/**
+ * @Description: 用户账款未读bo
+ * @Author: xda
+ * @Date: 2022/4/30 09:52
+ */
+@Data
+public class UserBillUnreadInfoBO {
+
+
+    private Long repalBillId;
+
+
+    /**
+     *  逾期动态未读数量
+     */
+    private Integer unreadOverdueCount;
+
+
+    /**
+     *  风险动态未读数量
+     */
+    private Integer unreadRiskCount;
+
+
+    /**
+     *  财产动态未读数量
+     */
+    private Integer unreadFinanceCount;
+
+
+    /**
+     *  评级动态未读数量
+     */
+    private Integer unreadRankCount;
+
+
+}

+ 9 - 3
src/main/java/com/winhc/repal/model/vo/RepalBillInfoVO.java

@@ -14,18 +14,24 @@ import lombok.Data;
 @ApiModel("账款信息")
 @ApiModel("账款信息")
 public class RepalBillInfoVO {
 public class RepalBillInfoVO {
 
 
-    @ApiModelProperty("总逾期str")
+    @ApiModelProperty("总逾期金额str")
     private String totalOverdueStr;
     private String totalOverdueStr;
 
 
-    @ApiModelProperty("总逾期")
+    @ApiModelProperty("总逾期笔数")
     private Integer totalOverdueCount;
     private Integer totalOverdueCount;
 
 
     @ApiModelProperty("总待收/总待付金额")
     @ApiModelProperty("总待收/总待付金额")
-    private String totalBillStr;
+    private String totalBillMoneyStr;
 
 
     @ApiModelProperty("总待收/总待付笔数")
     @ApiModelProperty("总待收/总待付笔数")
     private Integer totalBillCount;
     private Integer totalBillCount;
 
 
+    @ApiModelProperty("总账款笔数")
+    private Integer totalCount;
+
+    @ApiModelProperty("总账款金额")
+    private String totalStr;
+
     @ApiModelProperty("账款分页信息")
     @ApiModelProperty("账款分页信息")
     private VOPage<RepalBillPageVO> page;
     private VOPage<RepalBillPageVO> page;
 }
 }

+ 2 - 1
src/main/java/com/winhc/repal/repository/RepalBillMapper.java

@@ -33,9 +33,10 @@ public interface RepalBillMapper extends BaseMapper<RepalBill> {
      * @param repalGroupId repalGroupId
      * @param repalGroupId repalGroupId
      * @param repalGroupType repalGroupType
      * @param repalGroupType repalGroupType
      * @param repalBillStatus repalBillStatus
      * @param repalBillStatus repalBillStatus
+     * @param repalBookId repalBookId
      * @return com.winhc.repal.model.bo.TotalMoneyBO
      * @return com.winhc.repal.model.bo.TotalMoneyBO
      * @author xda
      * @author xda
-     * @date 2022/4/29 09:55
+     * @date 2022/4/30 09:25
      */
      */
     TotalMoneyBO getTotalMoneyByGroup(@Param("repalGroupId") Long repalGroupId,
     TotalMoneyBO getTotalMoneyByGroup(@Param("repalGroupId") Long repalGroupId,
                                       @Param("repalGroupType") Integer repalGroupType,
                                       @Param("repalGroupType") Integer repalGroupType,

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

@@ -2,6 +2,7 @@ package com.winhc.repal.repository;
 
 
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.winhc.repal.model.bo.BillRemindBO;
 import com.winhc.repal.model.vo.RemindTypeUnReadCountVO;
 import com.winhc.repal.model.vo.RemindTypeUnReadCountVO;
 import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
 import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
 import com.winhc.repal.model.vo.RepalRemindCountVO;
 import com.winhc.repal.model.vo.RepalRemindCountVO;
@@ -36,4 +37,14 @@ public interface RepalRemindHistoryMapper extends BaseMapper<RepalRemindHistory>
                                    @Param("rankId")Long rankId,
                                    @Param("rankId")Long rankId,
                                    @Param("overdueId")Long overdueId,
                                    @Param("overdueId")Long overdueId,
                                    @Param("financeId")Long financeId);
                                    @Param("financeId")Long financeId);
+
+    /**
+     * 查看账款列表最新的动态id
+     * @param repalBillIdList repalBillIdList
+     * @return java.util.List<com.winhc.repal.model.bo.BillRemindBO>
+     * @author xda
+     * @date 2022/4/30 13:39
+     */
+    List<BillRemindBO> repalRemindHistoryMapper(List<Long> repalBillIdList);
+
 }
 }

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

@@ -6,12 +6,14 @@ import com.winhc.repal.entity.RepalBill;
 import com.winhc.repal.entity.RepalBillDiagnosis;
 import com.winhc.repal.entity.RepalBillDiagnosis;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.winhc.repal.model.bo.BillRemindBO;
 import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
 import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
 import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
 import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
 import com.winhc.repal.model.vo.RepalRemindCountVO;
 import com.winhc.repal.model.vo.RepalRemindCountVO;
 import com.winhc.repal.model.vo.RepalRemindHistoryVO;
 import com.winhc.repal.model.vo.RepalRemindHistoryVO;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 
 
 /**
 /**
@@ -57,4 +59,13 @@ public interface RepalRemindHistoryService extends IService<RepalRemindHistory>
      * @return
      * @return
      */
      */
     VOPage<RepalRemindHistoryVO> find(RepalRemindHistoryDTO dto, Integer pageNum, Integer pageSize,UserBean userBean);
     VOPage<RepalRemindHistoryVO> find(RepalRemindHistoryDTO dto, Integer pageNum, Integer pageSize,UserBean userBean);
+
+    /**
+     * 查看账款列表最新的动态id
+     * @param repalBillIdList repalBillIdList
+     * @return java.util.List<com.winhc.repal.model.bo.BillRemindBO>
+     * @author xda
+     * @date 2022/4/30 13:38
+     */
+    Map<Long, List<BillRemindBO>> getRepalBillLastRemind(List<Long> repalBillIdList);
 }
 }

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

@@ -2,6 +2,9 @@ package com.winhc.repal.service;
 
 
 import com.winhc.repal.entity.RepalRemindReadInfo;
 import com.winhc.repal.entity.RepalRemindReadInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.winhc.repal.model.bo.UserBillUnreadInfoBO;
+
+import java.util.List;
 
 
 
 
 /**
 /**
@@ -22,4 +25,15 @@ public interface RepalRemindReadInfoService extends IService<RepalRemindReadInfo
      * @param userId
      * @param userId
      */
      */
     void updateReadInfoByUserId(Long userId,String trendType,Long repalBillId,Long repalBookId);
     void updateReadInfoByUserId(Long userId,String trendType,Long repalBillId,Long repalBookId);
+
+
+    /**
+     * 批量获取用户各种未读数量
+     * @param userId userId
+     * @param repalBillIdList repalBillIdList
+     * @return java.util.List<com.winhc.repal.model.bo.UserBillUnreadInfoBO>
+     * @author xda
+     * @date 2022/4/30 10:03
+     */
+    List<UserBillUnreadInfoBO> getUserBillUnreadInfo(Long userId, List<Long> repalBillIdList);
 }
 }

+ 29 - 8
src/main/java/com/winhc/repal/service/impl/RepalBillServiceImpl.java

@@ -22,6 +22,7 @@ import com.winhc.repal.entity.*;
 import com.winhc.repal.enums.*;
 import com.winhc.repal.enums.*;
 import com.winhc.repal.model.bo.BillPageBO;
 import com.winhc.repal.model.bo.BillPageBO;
 import com.winhc.repal.model.bo.TotalMoneyBO;
 import com.winhc.repal.model.bo.TotalMoneyBO;
+import com.winhc.repal.model.bo.UserBillUnreadInfoBO;
 import com.winhc.repal.model.dto.*;
 import com.winhc.repal.model.dto.*;
 import com.winhc.repal.model.vo.RepalBillDetailVO;
 import com.winhc.repal.model.vo.RepalBillDetailVO;
 import com.winhc.repal.model.vo.RepalBillInfoVO;
 import com.winhc.repal.model.vo.RepalBillInfoVO;
@@ -44,6 +45,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 
 
@@ -87,13 +89,11 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
     @Autowired
     @Autowired
     private RepalRolePermissionService repalRolePermissionService;
     private RepalRolePermissionService repalRolePermissionService;
 
 
+    @Autowired
+    private RepalRemindHistoryService repalRemindHistoryService;
 
 
-    public static void main(String[] args) {
-        System.out.println(LocalDate.now().with(DayOfWeek.MONDAY));
-        System.out.println(LocalDate.now().with(DayOfWeek.SUNDAY));
-
-    }
-
+    @Autowired
+    private RepalRemindReadInfoService repalRemindReadInfoService;
 
 
     @Override
     @Override
     public RepalBillInfoVO getRepalBillPage(GetRepalBillPageDTO dto) {
     public RepalBillInfoVO getRepalBillPage(GetRepalBillPageDTO dto) {
@@ -106,20 +106,26 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         RepalBillInfoVO infoVO = new RepalBillInfoVO();
         RepalBillInfoVO infoVO = new RepalBillInfoVO();
         boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
         boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
                 RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType()) ? PermissionEnum.QUERY_ALL_RECEIVABLE.getCode() : PermissionEnum.QUERY_ALL_RECEIPT.getCode());
                 RepalBillTypeEnum.RECEIVABLE.getCode().equals(dto.getRepalBillType()) ? PermissionEnum.QUERY_ALL_RECEIVABLE.getCode() : PermissionEnum.QUERY_ALL_RECEIPT.getCode());
+        LOGGER.info("allFlag:[{}]", allFlag);
         TotalMoneyBO totalMoneyBO;
         TotalMoneyBO totalMoneyBO;
         TotalMoneyBO overdueBO;
         TotalMoneyBO overdueBO;
+        TotalMoneyBO totalBO;
         if (allFlag) {
         if (allFlag) {
             totalMoneyBO = repalBillMapper.getTotalMoneyByGroup(dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.PROGRESSING.getCode(), dto.getRepalBookId());
             totalMoneyBO = repalBillMapper.getTotalMoneyByGroup(dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.PROGRESSING.getCode(), dto.getRepalBookId());
             overdueBO = repalBillMapper.getTotalMoneyByGroup(dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.OVERDUE.getCode(), dto.getRepalBookId());
             overdueBO = repalBillMapper.getTotalMoneyByGroup(dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.OVERDUE.getCode(), dto.getRepalBookId());
+            totalBO = repalBillMapper.getTotalMoneyByGroup(dto.getRepalGroupId(), dto.getRepalBillType(), null, dto.getRepalBookId());
         } else {
         } else {
             // 只查询自己负责的
             // 只查询自己负责的
             totalMoneyBO = repalBillMapper.getTotalMoneyByUser(UserContextUtil.getUser().getUserId(), dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.PROGRESSING.getCode(), dto.getRepalBookId());
             totalMoneyBO = repalBillMapper.getTotalMoneyByUser(UserContextUtil.getUser().getUserId(), dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.PROGRESSING.getCode(), dto.getRepalBookId());
             overdueBO = repalBillMapper.getTotalMoneyByUser(UserContextUtil.getUser().getUserId(), dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.OVERDUE.getCode(), dto.getRepalBookId());
             overdueBO = repalBillMapper.getTotalMoneyByUser(UserContextUtil.getUser().getUserId(), dto.getRepalGroupId(), dto.getRepalBillType(), RepalBillStatusEnum.OVERDUE.getCode(), dto.getRepalBookId());
+            totalBO = repalBillMapper.getTotalMoneyByUser(UserContextUtil.getUser().getUserId(), dto.getRepalGroupId(), dto.getRepalBillType(), null, dto.getRepalBookId());
         }
         }
-        infoVO.setTotalBillStr(totalMoneyBO.getTotalMoney().stripTrailingZeros().toPlainString());
+        infoVO.setTotalBillMoneyStr(totalMoneyBO.getTotalMoney().stripTrailingZeros().toPlainString());
         infoVO.setTotalBillCount(totalMoneyBO.getTotalCount());
         infoVO.setTotalBillCount(totalMoneyBO.getTotalCount());
         infoVO.setTotalOverdueCount(overdueBO.getTotalCount());
         infoVO.setTotalOverdueCount(overdueBO.getTotalCount());
         infoVO.setTotalOverdueStr(overdueBO.getTotalMoney().stripTrailingZeros().toPlainString());
         infoVO.setTotalOverdueStr(overdueBO.getTotalMoney().stripTrailingZeros().toPlainString());
+        infoVO.setTotalCount(totalBO.getTotalCount());
+        infoVO.setTotalStr(totalBO.getTotalMoney().stripTrailingZeros().toPlainString());
         // 分页数据
         // 分页数据
         Page<RepalBill> repalBillPage = new Page<>(dto.getPageNum(),dto.getPageSize());
         Page<RepalBill> repalBillPage = new Page<>(dto.getPageNum(),dto.getPageSize());
         BillPageBO billPageBO = new BillPageBO();
         BillPageBO billPageBO = new BillPageBO();
@@ -156,14 +162,29 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         if (CollUtil.isEmpty(repalBillPage.getRecords())) {
         if (CollUtil.isEmpty(repalBillPage.getRecords())) {
             return infoVO;
             return infoVO;
         }
         }
-        // info todo
+        // 未读消息
         List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
         List<Long> billIdList = repalBillPage.getRecords().stream().map(RepalBill::getId).collect(Collectors.toList());
+        List<UserBillUnreadInfoBO> unreadInfoList = repalRemindReadInfoService.getUserBillUnreadInfo(UserContextUtil.getUser().getUserId(), billIdList);
+        Map<Long, UserBillUnreadInfoBO> unreadInfoMap = new HashMap<>();
+        if (CollUtil.isNotEmpty(unreadInfoList)) {
+            unreadInfoMap = unreadInfoList.stream().collect(Collectors.toMap(UserBillUnreadInfoBO::getRepalBillId, Function.identity()));
+        }
         Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
         Map<Long, List<String>> nameMap = repalResponsiblePersonService.getResponsiblePersonNameList(billIdList);
+        Map<Long, UserBillUnreadInfoBO> finalUnreadInfoMap = unreadInfoMap;
         voPage.setDataList(repalBillPage.getRecords().stream().map(t -> {
         voPage.setDataList(repalBillPage.getRecords().stream().map(t -> {
             RepalBillPageVO vo = new RepalBillPageVO();
             RepalBillPageVO vo = new RepalBillPageVO();
             BeanUtils.copyProperties(t, vo);
             BeanUtils.copyProperties(t, vo);
             vo.setRepalBillId(t.getId());
             vo.setRepalBillId(t.getId());
             vo.setResponsiblePersonNames(String.join("、", nameMap.get(t.getId())));
             vo.setResponsiblePersonNames(String.join("、", nameMap.get(t.getId())));
+            UserBillUnreadInfoBO unreadInfoBO = finalUnreadInfoMap.get(vo.getRepalBillId());
+            if (Objects.nonNull(unreadInfoBO)) {
+                vo.setDynamicCountList(new ArrayList<Integer>(){{
+                    add(unreadInfoBO.getUnreadRiskCount());
+                    add(unreadInfoBO.getUnreadFinanceCount());
+                    add(unreadInfoBO.getUnreadRankCount());
+                    add(unreadInfoBO.getUnreadOverdueCount());
+                }});
+            }
             return vo;
             return vo;
         }).collect(Collectors.toList()));
         }).collect(Collectors.toList()));
         return infoVO;
         return infoVO;

+ 10 - 0
src/main/java/com/winhc/repal/service/impl/RepalRemindHistoryServiceImpl.java

@@ -17,6 +17,7 @@ import com.winhc.repal.cloud.dto.QueryV8DynamicDTO;
 import com.winhc.repal.cloud.vo.V8DynamicVO;
 import com.winhc.repal.cloud.vo.V8DynamicVO;
 import com.winhc.repal.entity.*;
 import com.winhc.repal.entity.*;
 import com.winhc.repal.enums.*;
 import com.winhc.repal.enums.*;
+import com.winhc.repal.model.bo.BillRemindBO;
 import com.winhc.repal.model.cvt.RepalRemindHistoryConvert;
 import com.winhc.repal.model.cvt.RepalRemindHistoryConvert;
 import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
 import com.winhc.repal.model.dto.RepalRemindHistoryDTO;
 import com.winhc.repal.model.vo.*;
 import com.winhc.repal.model.vo.*;
@@ -499,4 +500,13 @@ public class RepalRemindHistoryServiceImpl extends ServiceImpl<RepalRemindHistor
         LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         return ChronoUnit.MILLIS.between(LocalDateTime.now(),midnight);
         return ChronoUnit.MILLIS.between(LocalDateTime.now(),midnight);
     }
     }
+
+    @Override
+    public Map<Long, List<BillRemindBO>> getRepalBillLastRemind(List<Long> repalBillIdList) {
+        List<BillRemindBO> remindBOList = repalRemindHistoryMapper.repalRemindHistoryMapper(repalBillIdList);
+        if (CollUtil.isEmpty(remindBOList)) {
+            return new HashMap<>();
+        }
+        return remindBOList.stream().collect(Collectors.groupingBy(BillRemindBO::getRepalBillId, Collectors.toList()));
+    }
 }
 }

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

@@ -1,11 +1,15 @@
 package com.winhc.repal.service.impl;
 package com.winhc.repal.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.winhc.repal.entity.RepalRemindHistory;
 import com.winhc.repal.entity.RepalRemindReadInfo;
 import com.winhc.repal.entity.RepalRemindReadInfo;
 import com.winhc.repal.enums.Dict;
 import com.winhc.repal.enums.Dict;
 import com.winhc.repal.enums.RemindEnum;
 import com.winhc.repal.enums.RemindEnum;
+import com.winhc.repal.model.bo.BillRemindBO;
+import com.winhc.repal.model.bo.UserBillUnreadInfoBO;
 import com.winhc.repal.repository.RepalRemindReadInfoMapper;
 import com.winhc.repal.repository.RepalRemindReadInfoMapper;
 import com.winhc.repal.service.RepalRemindHistoryService;
 import com.winhc.repal.service.RepalRemindHistoryService;
 import com.winhc.repal.service.RepalRemindReadInfoService;
 import com.winhc.repal.service.RepalRemindReadInfoService;
@@ -17,6 +21,7 @@ import org.springframework.stereotype.Service;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.ChronoUnit;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
 /**
 /**
@@ -135,4 +140,51 @@ public class RepalRemindReadInfoServiceImpl extends ServiceImpl<RepalRemindReadI
         LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
         return ChronoUnit.MILLIS.between(LocalDateTime.now(),midnight);
         return ChronoUnit.MILLIS.between(LocalDateTime.now(),midnight);
     }
     }
+
+    @Override
+    public List<UserBillUnreadInfoBO> getUserBillUnreadInfo(Long userId, List<Long> repalBillIdList) {
+        if (CollUtil.isEmpty(repalBillIdList)) {
+            return new ArrayList<>();
+        }
+        List<RepalRemindReadInfo> readInfoList = this.list(Wrappers.lambdaQuery(RepalRemindReadInfo.class).eq(RepalRemindReadInfo::getUserId, userId)
+                        .in(RepalRemindReadInfo::getRepalBillId, repalBillIdList));
+        if (CollUtil.isEmpty(readInfoList)) {
+            return new ArrayList<>();
+        }
+        Map<Long, List<BillRemindBO>> remindMap = repalRemindHistoryService.getRepalBillLastRemind(repalBillIdList);
+        if (MapUtil.isEmpty(remindMap)) {
+            return new ArrayList<>();
+        }
+        List<UserBillUnreadInfoBO> unreadInfoList = new ArrayList<>();
+        readInfoList.forEach(readInfo -> {
+            List<BillRemindBO> remindBOList = remindMap.get(readInfo.getRepalBillId());
+            if (CollUtil.isNotEmpty(remindBOList)) {
+                UserBillUnreadInfoBO unreadInfo = new UserBillUnreadInfoBO();
+                unreadInfo.setRepalBillId(readInfo.getRepalBillId());
+                unreadInfo.setUnreadFinanceCount(getRemindTypeUnread(readInfo.getId(), remindBOList, RemindEnum.财产线索.getCode()));
+                unreadInfo.setUnreadRankCount(getRemindTypeUnread(readInfo.getId(), remindBOList, RemindEnum.账款评级.getCode()));
+                unreadInfo.setUnreadOverdueCount(getRemindTypeUnread(readInfo.getId(), remindBOList, RemindEnum.逾期提醒.getCode()));
+                unreadInfo.setUnreadRiskCount(getRemindTypeUnread(readInfo.getId(), remindBOList, RemindEnum.风险预警.getCode()));
+                unreadInfoList.add(unreadInfo);
+            }
+        });
+        return unreadInfoList;
+    }
+
+    /**
+     * 计算未读数量
+     * @param currentId currentId
+     * @param billRemindBOList billRemindBOList
+     * @param remindType remindType
+     * @return java.lang.Integer
+     * @author xda
+     * @date 2022/4/30 14:31
+     */
+    public Integer getRemindTypeUnread(Long currentId, List<BillRemindBO> billRemindBOList, String remindType) {
+        if (Objects.isNull(currentId)) {
+            return 0;
+        }
+        Optional<BillRemindBO> first = billRemindBOList.stream().filter(t -> remindType.equals(t.getRemindType())).findFirst();
+        return first.map(billRemindBO -> (int) (billRemindBO.getRepalRemindHistoryId() - currentId)).orElse(0);
+    }
 }
 }

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

@@ -46,4 +46,17 @@
         AND REMIND_TIME >= #{localDateTime}) AS totalCount
         AND REMIND_TIME >= #{localDateTime}) AS totalCount
         FROM DUAL
         FROM DUAL
     </select>
     </select>
+
+
+
+    <select id="repalRemindHistoryMapper" parameterType="java.lang.Long" resultType="com.winhc.repal.model.bo.BillRemindBO">
+        SELECT t1.REPAL_BILL_ID AS repalBillId, t1.ID AS repalRemindHistoryId, t1.REMIND_TYPE AS remindType FROM REPAL_REMIND_HISTORY AS t1
+        INNER JOIN
+        (SELECT MAX(tt.ID) AS id, tt.REMIND_TYPE, tt.REPAL_BILL_ID FROM REPAL_REMIND_HISTORY AS tt WHERE
+        tt.REPAL_BILL_ID IN
+        <foreach item="item" index="index" collection="repalBillIdList" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        GROUP BY tt.REMIND_TYPE, tt.REPAL_BILL_ID) AS t2 ON t2.id = t1.ID
+    </select>
 </mapper>
 </mapper>