Kaynağa Gözat

feat:权限管理

zhangwei 3 yıl önce
ebeveyn
işleme
6dd6b1a160

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

@@ -2,9 +2,11 @@ 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.repal.model.dto.*;
 import com.winhc.repal.model.vo.RepalBillDetailVO;
 import com.winhc.repal.model.vo.RepalBillInfoVO;
+import com.winhc.repal.model.vo.RepalBillPageVO;
 import com.winhc.repal.service.RepalBillService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -69,7 +71,13 @@ public class RepalBillController {
         return BeanResponse.success(CodeMsg.SUCCESS, repalBillService.updateRepalBill(dto));
     }
 
-
+    @ApiOperation("获取客户下的账款列表(应收or应付)")
+    @RequestMapping(value = "/page/cust", method = RequestMethod.GET)
+    public BeanResponse<VOPage<RepalBillPageVO>> getCustRepalBillPage(@RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum,
+                                                                      @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize,
+                                                                      @RequestParam("custId")Long custId) {
+        return BeanResponse.success(CodeMsg.SUCCESS, repalBillService.getCustRepalBillPage(pageNum,pageSize,custId));
+    }
 
 
 

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

@@ -49,7 +49,7 @@ public class RepalCustomerController extends BaseController {
     @ApiOperation("客户详情")
     @GetMapping(value = "/cust/{custId}")
     public BeanResponse<RepalCustomerDetailVO> getRepalCustomerDetail(@PathVariable("custId")Long custId){
-        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.getDetailById(custId));
+        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.getDetailById(custId,getUser(),Dict.custTypeEnum.客户.getCode()));
     }
 
     @ApiOperation("分页查询供应商")
@@ -73,7 +73,7 @@ public class RepalCustomerController extends BaseController {
     @ApiOperation("供应商详情")
     @GetMapping(value = "/supply/{custId}")
     public BeanResponse<RepalCustomerDetailVO> getRepalSupplyDetail(@PathVariable("custId")Long custId){
-        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.getDetailById(custId));
+        return BeanResponse.success(CodeMsg.SUCCESS,repalCustomerService.getDetailById(custId,getUser(),Dict.custTypeEnum.供应商.getCode()));
     }
 
     @ApiOperation("删除客户/供应商")

+ 18 - 2
src/main/java/com/winhc/repal/model/vo/RepalCustomerDetailVO.java

@@ -1,5 +1,6 @@
 package com.winhc.repal.model.vo;
 
+import com.winhc.repal.entity.RepalBillOperLog;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -14,7 +15,7 @@ import java.util.List;
  */
 @Data
 @Accessors(chain = true)
-@ApiModel(value="RepalCustomer VO对象", description="回款宝客户表")
+@ApiModel("客户/供应商详情")
 public class RepalCustomerDetailVO {
 
     @ApiModelProperty(value = "客户id")
@@ -57,11 +58,26 @@ public class RepalCustomerDetailVO {
     private String totalMoneyStr;
 
     @ApiModelProperty(value = "已收回")
-    private String totalTransMoneyStr;
+    private String totalReceiptStr;
 
     @ApiModelProperty(value = "负责人")
     private List<RepalGroupMemberVO> charges;
 
+    @ApiModelProperty(value = "联系人")
+    private List<RepalLinkVO> links;
+
     @ApiModelProperty("未读动态数量依次是 逾期 风险预警 评级 财产")
     private List<Integer> dynamicCountList;
+
+    @ApiModelProperty("失信限高标签list")
+    private List<String> labelList;
+
+    @ApiModelProperty(value = "风险数量)")
+    private Integer riskNum;
+
+    @ApiModelProperty("财产线索)")
+    private Integer assetsNum;
+
+    @ApiModelProperty("账款记录")
+    private List<RepalBillDetailVO.BillMoneyChange> changeList;
 }

+ 0 - 8
src/main/java/com/winhc/repal/model/vo/RepalLinkVO.java

@@ -32,14 +32,6 @@ public class RepalLinkVO {
     @ApiModelProperty(value = "联系人微信")
     private String wechat;
 
-    @ApiModelProperty(value = "所属客户")
-    private Long custId;
-
-    @ApiModelProperty(value = "是否删除 0否 1是")
-    private Integer deleted;
-
-    @ApiModelProperty(value = "创建时间")
-    private LocalDateTime timeCreated;
 
 
 }

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

@@ -60,5 +60,13 @@ public interface RepalBillMapper extends BaseMapper<RepalBill> {
                                      @Param("repalBillStatus") Integer repalBillStatus,
                                      @Param("repalBookId") Long repalBookId);
 
-
+    /**
+     * 获取账款列表
+     * @param page page
+     * @param custId custId
+     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.winhc.repal.entity.RepalBill>
+     * @author xda
+     * @date 2022/4/13 17:44
+     */
+    Page<RepalBill> getCustRepalBillPage(Page<RepalBill> page, @Param("custId") Long custId);
 }

+ 4 - 1
src/main/java/com/winhc/repal/repository/RepalCustomerMapper.java

@@ -26,5 +26,8 @@ public interface RepalCustomerMapper extends BaseMapper<RepalCustomer> {
                                           @Param("groupId") Long groupId,
                                           @Param("custProperty")Integer custProperty,
                                           @Param("sortType")Integer sortType,
-                                          @Param("custType")Integer custType);
+                                          @Param("custType")Integer custType,
+                                          @Param("billType")Integer billType,
+                                          @Param("allFlag")boolean allFlag,
+                                          @Param("userId")Long userId);
 }

+ 9 - 0
src/main/java/com/winhc/repal/service/RepalBillService.java

@@ -96,4 +96,13 @@ public interface RepalBillService extends IService<RepalBill> {
      * @return
      */
     boolean checkAllBillRefreshStatus(Long repalBookId, Long repalBillId);
+
+    /**
+     * 分页查询客户下所有的账款(不校验权限)
+     * @param pageNum
+     * @param pageSize
+     * @param custId
+     * @return
+     */
+    VOPage<RepalBillPageVO> getCustRepalBillPage(Integer pageNum, Integer pageSize, Long custId);
 }

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

@@ -45,7 +45,7 @@ public interface RepalCustomerService extends IService<RepalCustomer> {
       * @param custId
       * @return
       */
-     RepalCustomerDetailVO getDetailById(Long custId);
+     RepalCustomerDetailVO getDetailById(Long custId,UserBean userBean,Integer custType);
 
      /**
       * 删除客户/供应商

+ 42 - 0
src/main/java/com/winhc/repal/service/impl/RepalBillServiceImpl.java

@@ -444,4 +444,46 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         }
         return true;
     }
+
+    @Override
+    public VOPage<RepalBillPageVO> getCustRepalBillPage(Integer pageNum, Integer pageSize, Long custId) {
+        VOPage<RepalBillPageVO> voPage = new VOPage<>();
+        voPage.setPageSize(pageSize);
+        voPage.setPageNum(pageNum);
+        // 分页数据
+        Page<RepalBill> repalBillPage = new Page<>(pageNum,pageSize);
+        repalBillPage = repalBillMapper.getCustRepalBillPage(repalBillPage,custId);
+        voPage.setTotalPage(Math.toIntExact(repalBillPage.getPages()));
+        voPage.setTotalNum(repalBillPage.getTotal());
+        voPage.setDataList(new ArrayList<>());
+        if (CollUtil.isEmpty(repalBillPage.getRecords())) {
+            return voPage;
+        }
+        // 未读消息
+        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, UserBillUnreadInfoBO> finalUnreadInfoMap = unreadInfoMap;
+        voPage.setDataList(repalBillPage.getRecords().stream().map(t -> {
+            RepalBillPageVO vo = new RepalBillPageVO();
+            BeanUtils.copyProperties(t, vo);
+            vo.setRepalBillId(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;
+        }).collect(Collectors.toList()));
+        return voPage;
+    }
 }

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

@@ -6,16 +6,25 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.module.login.usersession.UserBean;
+import com.winhc.common.base.ApiDataResult;
 import com.winhc.common.enums.CodeMsg;
 import com.winhc.common.exception.CommonException;
+import com.winhc.repal.cloud.DataMiddlewareService;
+import com.winhc.repal.cloud.dto.GetCompanyRiskNumDTO;
+import com.winhc.repal.cloud.dto.GetCreditPunishmentLabelDTO;
+import com.winhc.repal.cloud.dto.GetFinanceDynamicNumDTO;
+import com.winhc.repal.cloud.vo.CompanyRiskNumVO;
+import com.winhc.repal.cloud.vo.CreditPunishmentLabelListVO;
+import com.winhc.repal.cloud.vo.FinanceDynamicNumVO;
 import com.winhc.repal.entity.*;
-import com.winhc.repal.enums.Dict;
+import com.winhc.repal.enums.*;
 import com.winhc.repal.model.bo.RepalCustomerInfoBO;
 import com.winhc.repal.model.dto.*;
 import com.winhc.repal.model.vo.*;
 import com.winhc.repal.repository.RepalCustomerMapper;
 import com.winhc.repal.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.winhc.repal.util.UserContextUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -26,11 +35,9 @@ import com.winhc.common.model.base.VOPage;
 import com.winhc.repal.model.cvt.RepalCustomerConvert;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -46,6 +53,9 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
     private RepalCustomerMapper repalCustomerMapper;
 
     @Autowired
+    private RepalBookService repalBookService;
+
+    @Autowired
     private RepalBillService repalBillService;
 
     @Autowired
@@ -63,10 +73,23 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
     @Autowired
     private RepalLinkService repalLinkService;
 
+    @Autowired
+    private DataMiddlewareService dataMiddlewareService;
+
+    @Autowired
+    private RepalChangeRecordService repalChangeRecordService;
+
+    @Autowired
+    private RepalRolePermissionService repalRolePermissionService;
+
      @Override
      public VOPage<RepalCustomerInfoVO> find(RepalCustomerQueryDTO dto,UserBean userBean) {
+         //权限
+         boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
+                 Dict.custTypeEnum.客户.getCode().equals(dto.getCustType()) ? PermissionEnum.QUERY_ALL_CUST.getCode() : PermissionEnum.QUERY_ALL_SUPPLY.getCode());
          Page<RepalCustomerInfoBO> page = new Page<>(dto.getPageNum(),dto.getPageSize());
-         page = repalCustomerMapper.getCustPage(page, dto.getRepalGroupId(),dto.getCustProperty(),dto.getSortType(),dto.getCustType());
+         int billType = Dict.custTypeEnum.客户.getCode().equals(dto.getCustType()) ? RepalBillTypeEnum.RECEIVABLE.getCode() : RepalBillTypeEnum.RECEIPT.getCode();
+         page = repalCustomerMapper.getCustPage(page, dto.getRepalGroupId(),dto.getCustProperty(),dto.getSortType(),dto.getCustType(),billType,allFlag,userBean.getUserId());
          VOPage<RepalCustomerInfoVO> result = new VOPage<>(dto.getPageNum(), dto.getPageSize(), page.getTotal(), new ArrayList<>());
          if(CollUtil.isEmpty(page.getRecords())){
              return result;
@@ -86,13 +109,15 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
              vo.setReceivableStr(customerInfo.getReceivable().stripTrailingZeros().toPlainString());
              vo.setTotalMoneyStr(customerInfo.getTotalMoney().stripTrailingZeros().toPlainString());
              //查询未读动态数量
-             List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class)
-                     .eq(RepalBill::getCustomerId,customerInfo.getCustId())
-                     .eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
-             if(CollUtil.isNotEmpty(repalBills)) {
-                 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()));
+             if(Dict.custTypeEnum.客户.getCode().equals(dto.getCustType())) {
+                 List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class)
+                         .eq(RepalBill::getCustomerId, customerInfo.getCustId())
+                         .eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
+                 if (CollUtil.isNotEmpty(repalBills)) {
+                     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()));
+                     }
                  }
              }
              //负责人
@@ -120,14 +145,18 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
     @Override
     @Transactional
     public RepalCustomerDetailVO addCustomer(RepalCustomerDTO dto,UserBean userBean) {
+        boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
+                Dict.custTypeEnum.客户.getCode().equals(dto.getCustType()) ? PermissionEnum.ADD_CUST.getCode() : PermissionEnum.ADD_SUPPLY.getCode());
+        if(!allFlag){
+            throw new CommonException(CodeMsg.FAILED,"暂无此权限,可联系超级管理员在我的-成员管理页面开通");
+        }
+        //查组织id
         RepalGroupMember repalGroupMember = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
                 .eq(RepalGroupMember::getUserId,userBean.getUserId())
                 .eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()),false);
         if(ObjectUtil.isNull(repalGroupMember)){
-            throw new CommonException(CodeMsg.FAILED,"您没有新增客户的权限");
+            throw new CommonException(CodeMsg.FAILED,"您还未加入该组织,请联系超级管理员");
         }
-        //todo 其他校验权限
-
          RepalCustomer repalCustomer = new RepalCustomer();
          BeanUtils.copyProperties(dto,repalCustomer);
          repalCustomer.setRepalGroupId(repalGroupMember.getRepalGroupId());
@@ -178,19 +207,22 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
          repalBillOperLog.setBizType(actionCodeEnum.getBizType());
          repalBillOperLog.setActionName(actionCodeEnum.name());
          repalBillOperLogService.save(repalBillOperLog);
-         return getDetailById(repalCustomer.getCustId());
+         return getDetailById(repalCustomer.getCustId(),userBean,dto.getCustType());
     }
 
     @Override
     public RepalCustomerDetailVO updateCustomer(RepalCustomerUpdateDTO dto, UserBean userBean) {
+        boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
+                Dict.custTypeEnum.客户.getCode().equals(dto.getCustType()) ? PermissionEnum.UPDATE_CUST.getCode() : PermissionEnum.UPDATE_SUPPLY.getCode());
+        if(!allFlag){
+            throw new CommonException(CodeMsg.FAILED,"暂无此权限,可联系超级管理员在我的-成员管理页面开通");
+        }
         RepalGroupMember repalGroupMember = repalGroupMemberService.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
                 .eq(RepalGroupMember::getUserId,userBean.getUserId())
                 .eq(RepalGroupMember::getDeleted,Dict.DeletedStatusEnunm.否.getCode()),false);
         if(ObjectUtil.isNull(repalGroupMember)){
-            throw new CommonException(CodeMsg.FAILED,"您没有新增客户的权限");
+            throw new CommonException(CodeMsg.FAILED,"您还未加入该组织,请联系超级管理员");
         }
-        //todo 其他校验权限
-
         RepalCustomer repalCustomer = getById(dto.getCustId());
         if(ObjectUtil.isNull(repalCustomer)){
             throw new CommonException(CodeMsg.FAILED,"客户或供应商不存在");
@@ -344,24 +376,116 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
         repalBillOperLog.setActionName(actionCodeEnum.name());
         repalBillOperLog.setActionContent(JSON.toJSONString(operLogContents));
         repalBillOperLogService.save(repalBillOperLog);
-        return getDetailById(dto.getCustId());
+        return getDetailById(dto.getCustId(),userBean,dto.getCustType());
     }
 
     @Override
-    public RepalCustomerDetailVO getDetailById(Long custId) {
-        return null;
+    public RepalCustomerDetailVO getDetailById(Long custId,UserBean userBean,Integer custType) {
+        //不做权限判断,默认通过列表的权限
+         RepalCustomer repalCustomer = getById(custId);
+         if(ObjectUtil.isNotNull(repalCustomer)){
+             throw new CommonException(CodeMsg.FAILED,"客户或供应商不存在");
+         }
+        RepalCustomerDetailVO result = new RepalCustomerDetailVO();
+        BeanUtils.copyProperties(repalCustomer,result);
+        //查询负责人
+        List<RepalCustChargeRel> rels = repalCustChargeRelService.list(Wrappers.lambdaQuery(RepalCustChargeRel.class)
+                .eq(RepalCustChargeRel::getCustId,custId));
+        if(CollUtil.isNotEmpty(rels)){
+            List<RepalGroupMember> repalGroupMembers = repalGroupMemberService.list(Wrappers.lambdaQuery(RepalGroupMember.class)
+                    .in(RepalGroupMember::getUserId,rels.stream().map(RepalCustChargeRel::getMemberUserId).collect(Collectors.toList())));
+            List<RepalGroupMemberVO> memberList = new ArrayList<>();
+            result.setCharges(memberList);
+            for(RepalGroupMember groupMember:repalGroupMembers){
+                RepalGroupMemberVO member = new RepalGroupMemberVO();
+                memberList.add(member);
+                member.setMemberUserName(groupMember.getMemberUserName());
+                member.setUserId(groupMember.getUserId());
+                member.setId(groupMember.getId());
+                member.setRepalGroupId(groupMember.getRepalGroupId());
+                member.setRoleType(groupMember.getRoleType());
+            }
+        }
+        // 标签
+        if (Dict.custTypeEnum.客户.getCode().equals(custType) && StrUtil.isNotBlank(repalCustomer.getCompanyId())) {
+            // 失信限高标签
+            ApiDataResult<List<CreditPunishmentLabelListVO>> labelResult = dataMiddlewareService.getCreditPunishmentLabelList(new GetCreditPunishmentLabelDTO(Collections.singletonList(repalCustomer.getCompanyId())));
+            if (Objects.nonNull(labelResult) && CollUtil.isNotEmpty(labelResult.getData())) {
+                result.setLabelList(labelResult.getData().get(0).getLabelList());
+            }
+            // 财产数量
+            ApiDataResult<List<FinanceDynamicNumVO>> financeResult = dataMiddlewareService.getFinanceDynamicNumV8List(new GetFinanceDynamicNumDTO().setCompanyIdList(Collections.singletonList(repalCustomer.getCompanyId())));
+            if (Objects.nonNull(financeResult) && CollUtil.isNotEmpty(financeResult.getData())) {
+                result.setAssetsNum(financeResult.getData().get(0).getFinanceDynamicNum());
+            }
+            // 风险数量
+            ApiDataResult<List<CompanyRiskNumVO>> riskResult = dataMiddlewareService.getCompanyRiskNumList(new GetCompanyRiskNumDTO(Collections.singletonList(repalCustomer.getCompanyId())));
+            if (Objects.nonNull(riskResult) && CollUtil.isNotEmpty(riskResult.getData())) {
+                result.setRiskNum(riskResult.getData().get(0).getRiskNum());
+            }
+        }
+        //账款汇总
+        List<RepalBill> repalBills = repalBillService.list(Wrappers.lambdaQuery(RepalBill.class).eq(RepalBill::getCustomerId,custId).eq(RepalBill::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+        if(CollUtil.isNotEmpty(repalBills)){
+            if(Dict.custTypeEnum.客户.getCode().equals(custType)) {
+                result.setRepalBillCount(repalBills.size());
+                result.setReceivableStr(repalBills.stream().map(RepalBill::getReceivable).reduce(BigDecimal.ZERO,BigDecimal::add).stripTrailingZeros().toPlainString());
+                result.setTotalMoneyStr(repalBills.stream().map(RepalBill::getTotalMoney).reduce(BigDecimal.ZERO,BigDecimal::add).stripTrailingZeros().toPlainString());
+                result.setTotalOverdueStr(repalBills.stream().filter(x-> RepalBillStatusEnum.OVERDUE.getCode().equals(x.getRepalBillStatus())).map(RepalBill::getReceivable).reduce(BigDecimal.ZERO,BigDecimal::add).stripTrailingZeros().toPlainString());
+                result.setTotalReceiptStr(repalBills.stream().map(RepalBill::getReceipt).reduce(BigDecimal.ZERO,BigDecimal::add).stripTrailingZeros().toPlainString());
+                //动态
+                RepalBillRemindUnReadVO unRead = repalRemindHistoryService.getRemindUnReadVO(repalBills, userBean.getUserId());
+                if (ObjectUtil.isNotNull(unRead) && unRead.getUnreadTotalCount() > 0) {
+                    result.setDynamicCountList(Stream.of(unRead.getUnreadOverdueCount(), unRead.getUnreadRiskCount(), unRead.getUnreadRankCount(), unRead.getUnreadFinanceCount()).collect(Collectors.toList()));
+                }
+            }
+            //账款记录
+            List<RepalChangeRecord> repalChangeRecordList = repalChangeRecordService.list(Wrappers.lambdaQuery(RepalChangeRecord.class)
+                    .in(RepalChangeRecord::getRepalBillId, repalBills.stream().map(RepalBill::getId).collect(Collectors.toList()))
+                    .eq(RepalChangeRecord::getDeleted, DeletedStatusEnum.NORMAL.getCode())
+                    .orderByDesc(RepalChangeRecord::getId));
+            if (CollUtil.isNotEmpty(repalChangeRecordList)) {
+                result.setChangeList(repalChangeRecordList.stream().map(t -> {
+                    RepalBillDetailVO.BillMoneyChange billMoneyChange = new RepalBillDetailVO.BillMoneyChange();
+                    billMoneyChange.setChangeTime(t.getTimeCreated());
+                    billMoneyChange.setChangeDesc(t.getOperUserName() + " 增加回款 " + t.getTransMoney().stripTrailingZeros().toPlainString());
+                    return billMoneyChange;
+                }).collect(Collectors.toList()));
+            }
+        }else {
+            result.setRepalBillCount(0);
+            result.setReceivableStr("0");
+            result.setTotalMoneyStr("0");
+            result.setTotalOverdueStr("0");
+            result.setTotalReceiptStr("0");
+            result.setDynamicCountList(Arrays.asList(0,0,0,0));
+        }
+        //联系人
+        List<RepalLink> repalLinks =  repalLinkService.list(Wrappers.lambdaQuery(RepalLink.class).eq(RepalLink::getCustId,custId).eq(RepalLink::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+        if(CollUtil.isNotEmpty(repalLinks)){
+            List<RepalLinkVO> repalLinkVOs = new ArrayList<>();
+            result.setLinks(repalLinkVOs);
+            for(RepalLink repalLink:repalLinks){
+                RepalLinkVO repalLinkVO = new RepalLinkVO();
+                repalLinkVOs.add(repalLinkVO);
+                BeanUtils.copyProperties(repalLink,repalLinkVO);
+            }
+        }
+        return result;
     }
 
     @Override
     @Transactional
     public Boolean deleteCustomer(Long custId, UserBean userBean) {
-        //删除客户
         RepalCustomer repalCustomer = getById(custId);
         if(ObjectUtil.isNull(custId)){
             throw new CommonException(CodeMsg.FAILED,"客户或供应商不存在");
         }
-        //todo 权限判断
-
+        boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(),
+                Dict.custTypeEnum.客户.getCode().equals(repalCustomer.getCustType()) ? PermissionEnum.UPDATE_CUST.getCode() : PermissionEnum.UPDATE_SUPPLY.getCode());
+        if(!allFlag){
+            throw new CommonException(CodeMsg.FAILED,"暂无此权限,可联系超级管理员在我的-成员管理页面开通");
+        }
         repalCustomer.setDeleted(Dict.DeletedStatusEnunm.是.getCode());
         updateById(repalCustomer);
         //删除客户对应的账款
@@ -369,9 +493,7 @@ public class RepalCustomerServiceImpl extends ServiceImpl<RepalCustomerMapper, R
                 .eq(RepalBill::getCustomerId,custId)
                 .eq(RepalBill::getDeleted, Dict.DeletedStatusEnunm.否.getCode()));
         if(CollUtil.isNotEmpty(repalBills)){
-            for(RepalBill repalBill:repalBills){
-                repalBillService.deleteRepalBillById(new DeleteRepalBillDTO().setRepalBillId(repalBill.getId()));
-            }
+            throw new CommonException(CodeMsg.FAILED,"请先删除该"+(Dict.custTypeEnum.客户.getCode().equals(repalCustomer.getCustType()) ? Dict.custTypeEnum.客户.name() : Dict.custTypeEnum.供应商.name())+"的关联账款");
         }
         //操作记录
         Dict.ActionCodeEnum actionCodeEnum = Dict.ActionCodeEnum.删除客户;

+ 8 - 0
src/main/resources/mapper/RepalBillMapper.xml

@@ -112,4 +112,12 @@
         AND bill.REPAL_BILL_TYPE = #{repalGroupType}
 
     </select>
+    <select id="getCustRepalBillPage" resultType="com.winhc.repal.entity.RepalBill">
+        SELECT bill.* FROM REPAL_BILL AS bill
+        <where>
+            AND bill.CUSTOMER_ID = #{custId}
+            AND bill.DELETED = 0
+        </where>
+            ORDER BY bill.ID DESC
+    </select>
 </mapper>

+ 7 - 6
src/main/resources/mapper/RepalCustomerMapper.xml

@@ -13,14 +13,15 @@
             SUM(B.RECEIVABLE) as receivable
         FROM
             REPAL_CUSTOMER A
-                LEFT JOIN REPAL_BILL B ON A.CUST_ID = B.CUSTOMER_ID
-                AND B.DELETED = 0
-        WHERE A.CUST_TYPE = 1
-        AND A.REPAL_GROUP_ID = #{groupId}
-        AND A.REPAL_BILL_TYPE = 1
+        LEFT JOIN REPAL_BILL B ON A.CUST_ID = B.CUSTOMER_ID AND B.DELETED = 0
+        WHERE A.REPAL_GROUP_ID = #{groupId}
+        AND B.REPAL_BILL_TYPE = #{billType}
         AND A.CUST_TYPE = #{custType}
+        <if test="!allFlag">
+            AND EXISTS (SELECT 1 FROM REPAL_CUST_CHARGE_REL C WHERE A.CUST_ID = C.CUST_ID AND C.MEMBER_USER_ID = #{userId})
+        </if>
         <if test="custProperty != null">
-            A.CUST_PROPERTY = #{custProperty}
+            AND A.CUST_PROPERTY = #{custProperty}
         </if>
         GROUP BY A.CUST_ID
         <if test="sortType == 2 ">