Ver Fonte

回款管理部分接口

xda há 3 anos atrás
pai
commit
5af76fbad5

+ 13 - 3
src/main/java/com/winhc/repal/controller/RepalBillController.java

@@ -4,9 +4,7 @@ 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.model.vo.*;
 import com.winhc.repal.service.RepalBillService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -82,4 +80,16 @@ public class RepalBillController {
     public BeanResponse<Boolean> transferBill(@RequestBody TransferBillDTO dto) {
         return BeanResponse.success(CodeMsg.SUCCESS, repalBillService.transferBill(dto));
     }
+
+    @ApiOperation("回款管理列表")
+    @RequestMapping(value = "/returned", method = RequestMethod.GET)
+    public BeanResponse<VOPage<ReturnedBillVO>> getReturnedBillPage(ReturnedBillDTO dto) {
+        return BeanResponse.success(CodeMsg.SUCCESS, repalBillService.getReturnedBillPage(dto));
+    }
+
+    @ApiOperation("回款管理详情")
+    @RequestMapping(value = "/returned/detail/{repalChangeRecordId}", method = RequestMethod.GET)
+    public BeanResponse<ReturnedBillDetailVO> getReturnedBillDetail(@PathVariable("repalChangeRecordId") Long repalChangeRecordId) {
+        return BeanResponse.success(CodeMsg.SUCCESS, repalBillService.getReturnedBillDetail(repalChangeRecordId));
+    }
 }

+ 2 - 2
src/main/java/com/winhc/repal/model/bo/PageRequest.java

@@ -13,9 +13,9 @@ import lombok.Data;
 @ApiModel("分页")
 public class PageRequest {
 
-    @ApiModelProperty("pageNum")
+    @ApiModelProperty(value = "pageNum", required = true)
     private int pageNum = 1;
 
-    @ApiModelProperty("pageSize")
+    @ApiModelProperty(value = "pageSize", required = true)
     private int pageSize = 10;
 }

+ 31 - 0
src/main/java/com/winhc/repal/model/dto/ReturnedBillDTO.java

@@ -0,0 +1,31 @@
+package com.winhc.repal.model.dto;
+
+import com.winhc.repal.model.bo.PageRequest;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Description: ReturnedBillDTO
+ * @Author: xda
+ * @Date: 2022/5/19 10:09
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("回款列表")
+public class ReturnedBillDTO extends PageRequest {
+
+    @ApiModelProperty("搜索词")
+    private String keyword;
+
+    @ApiModelProperty(hidden = true)
+    private Long repalGroupId;
+
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+
+    @ApiModelProperty(value = "账本id", required = true)
+    private Long repalBookId;
+
+}

+ 3 - 0
src/main/java/com/winhc/repal/model/vo/RepalBillDetailVO.java

@@ -62,6 +62,9 @@ public class RepalBillDetailVO {
     @ApiModelProperty(value = "分数趋势,1上升,2下降。0持平")
     private Integer diagnosisScoreTrend;
 
+    @ApiModelProperty(value = "评估等级")
+    private String diagnosisGrade;
+
     @ApiModelProperty(value = "本次评估等级描述")
     private String diagnosisGradeDesc;
 

+ 71 - 0
src/main/java/com/winhc/repal/model/vo/ReturnedBillDetailVO.java

@@ -0,0 +1,71 @@
+package com.winhc.repal.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @Description: ReturnedBillDetailVO
+ * @Author: xda
+ * @Date: 2022/5/19 12:46
+ */
+@Data
+@ApiModel("回款详情")
+public class ReturnedBillDetailVO {
+
+    @ApiModelProperty(value = "账款id")
+    private Long repalBillId;
+
+    @ApiModelProperty("回款记录id")
+    private Long repalChangeRecordId;
+
+    @ApiModelProperty(value = "客户性质 1企业 2个人 3政府事业单位")
+    private Integer custProperty;
+
+    @ApiModelProperty(value = "客户名称")
+    private String custName;
+
+    @ApiModelProperty(value = "回款人name")
+    private String userName;
+
+    @ApiModelProperty("回款日期,string, yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate recordDate;
+
+    @ApiModelProperty("账单状态,1进行中,2已逾期,3已收回")
+    private Integer repalBillStatus;
+
+    @ApiModelProperty("回款金额string")
+    private String moneyStr;
+
+    @ApiModelProperty(value = "负责人name,、分隔")
+    private String responsiblePersonNames;
+
+    @ApiModelProperty("到期日期,字符串,格式yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate endDate;
+
+    @ApiModelProperty(value = "账款总金额")
+    private String totalMoneyStr;
+
+    @ApiModelProperty(value = "待收金额")
+    private String receivableStr;
+
+    @ApiModelProperty(value = "分数趋势,1上升,2下降。0持平")
+    private Integer diagnosisScoreTrend;
+
+    @ApiModelProperty(value = "评估等级")
+    private String diagnosisGrade;
+
+    @ApiModelProperty(value = "本次评估分数")
+    private String diagnosisScore;
+
+    @ApiModelProperty("动态countList")
+    private List<Integer> dynamicCountList;
+}

+ 49 - 0
src/main/java/com/winhc/repal/model/vo/ReturnedBillVO.java

@@ -0,0 +1,49 @@
+package com.winhc.repal.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Description: ReturnedBillVO
+ * @Author: xda
+ * @Date: 2022/5/19 09:58
+ */
+@Data
+@ApiModel("回款列表vo")
+public class ReturnedBillVO {
+
+    @ApiModelProperty("账款id")
+    private Long repalBillId;
+
+    @ApiModelProperty("回款记录id")
+    private Long repalChangeRecordId;
+
+    @ApiModelProperty(value = "客户性质 1企业 2个人 3政府事业单位")
+    private Integer custProperty;
+
+    @ApiModelProperty(value = "客户名称")
+    private String custName;
+
+    @ApiModelProperty(value = "回款人name")
+    private String userName;
+
+    @ApiModelProperty("回款日期,string, yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate recordDate;
+
+    @ApiModelProperty("账单状态,1进行中,2已逾期,3已收回")
+    private Integer repalBillStatus;
+
+    @ApiModelProperty("回款金额string")
+    private String moneyStr;
+
+    @ApiModelProperty(hidden = true)
+    private BigDecimal money;
+}

+ 4 - 0
src/main/java/com/winhc/repal/model/vo/ReturnedMoneyVO.java

@@ -1,8 +1,10 @@
 package com.winhc.repal.model.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
 
@@ -19,5 +21,7 @@ public class ReturnedMoneyVO {
     private String moneyStr;
 
     @ApiModelProperty("回款日期,string, yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate date;
 }

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

@@ -1,7 +1,10 @@
 package com.winhc.repal.repository;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.winhc.repal.entity.RepalChangeRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.winhc.repal.model.dto.ReturnedBillDTO;
+import com.winhc.repal.model.vo.ReturnedBillVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -33,4 +36,14 @@ public interface RepalChangeRecordMapper extends BaseMapper<RepalChangeRecord> {
                                           @Param("start") LocalDate start,
                                           @Param("end") LocalDate end);
 
+    /**
+     * 回款列表
+     * @param page page
+     * @param dto dto
+     * @return java.util.List<com.winhc.repal.model.vo.ReturnedBillVO>
+     * @author xda
+     * @date 2022/5/19 10:16
+     */
+    Page<ReturnedBillVO> getReturnedBill(Page<ReturnedBillVO> page, ReturnedBillDTO dto);
+
 }

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

@@ -182,4 +182,23 @@ public interface RepalBillService extends IService<RepalBill> {
      */
     Boolean transferBill(TransferBillDTO dto);
 
+    /**
+     * 回款列表
+     * @param dto dto 
+     * @return com.winhc.common.model.base.VOPage<com.winhc.repal.model.vo.ReturnedBillVO>
+     * @author xda
+     * @date 2022/5/19 10:11 
+     */
+    VOPage<ReturnedBillVO> getReturnedBillPage(ReturnedBillDTO dto);
+
+
+    /**
+     * 回款详情
+     * @param repalChangeRecordId repalChangeRecordId 
+     * @return com.winhc.repal.model.vo.ReturnedBillDetailVO
+     * @author xda
+     * @date 2022/5/19 12:51 
+     */
+    ReturnedBillDetailVO getReturnedBillDetail(Long repalChangeRecordId);
+
 }

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

@@ -16,6 +16,16 @@ import java.util.List;
  */
 public interface RepalGroupMemberService extends IService<RepalGroupMember> {
 
+
+    /**
+     * 根据userId获取member
+     * @param userId userId
+     * @return com.winhc.repal.entity.RepalGroupMember
+     * @author xda
+     * @date 2022/5/19 12:59
+     */
+    RepalGroupMember getMemberByUserId(Long userId);
+
     /**
      * 获取用户组织id
      * @param userId userId

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

@@ -27,6 +27,7 @@ import com.winhc.repal.model.bo.*;
 import com.winhc.repal.model.dto.*;
 import com.winhc.repal.model.vo.*;
 import com.winhc.repal.repository.RepalBillMapper;
+import com.winhc.repal.repository.RepalChangeRecordMapper;
 import com.winhc.repal.repository.RepalResponsiblePersonMapper;
 import com.winhc.repal.service.*;
 import com.winhc.repal.util.DiagnosisUtil;
@@ -857,4 +858,74 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
                 .set(RepalCustChargeRel::getMemberUserId, dto.getTransferUserId()));
         return true;
     }
+
+    @Autowired
+    private RepalChangeRecordMapper repalChangeRecordMapper;
+
+    @Override
+    public VOPage<ReturnedBillVO> getReturnedBillPage(ReturnedBillDTO dto) {
+        VOPage<ReturnedBillVO> voPage = new VOPage<>();
+        voPage.setPageNum(dto.getPageNum());
+        voPage.setPageSize(dto.getPageSize());
+        Page<ReturnedBillVO> recordPage = new Page<>(dto.getPageNum(), dto.getPageSize());
+        //
+        long userId = UserContextUtil.getUser().getUserId();
+        boolean allFlag = repalRolePermissionService.checkUserPermission(userId, PermissionEnum.QUERY_ALL_RECEIVABLE.getCode());
+        dto.setUserId(allFlag ? null : userId);
+        dto.setRepalGroupId(repalGroupMemberService.getUserGroupId(userId));
+        recordPage = repalChangeRecordMapper.getReturnedBill(recordPage, dto);
+        voPage.setTotalPage(Math.toIntExact(recordPage.getPages()));
+        voPage.setTotalNum(recordPage.getTotal());
+        if (CollUtil.isEmpty(recordPage.getRecords())) {
+            return voPage;
+        }
+        for (ReturnedBillVO record : recordPage.getRecords()) {
+            record.setMoneyStr(record.getMoney().setScale(2).toString());
+        }
+        voPage.setDataList(recordPage.getRecords());
+        return voPage;
+    }
+
+    @Override
+    public ReturnedBillDetailVO getReturnedBillDetail(Long repalChangeRecordId) {
+        ReturnedBillDetailVO vo = new ReturnedBillDetailVO();
+        RepalChangeRecord record = repalChangeRecordService.getById(repalChangeRecordId);
+        if (Objects.isNull(record)) {
+            throw new CommonException(CodeMsg.FAILED, "查询失败");
+        }
+        BeanUtils.copyProperties(record, vo);
+        vo.setRepalChangeRecordId(repalChangeRecordId);
+        RepalBill bill = this.getById(record.getRepalBillId());
+        RepalCustomer cust = repalCustomerService.getById(bill.getCustomerId());
+        List<String> nameList = repalResponsiblePersonService.getResponsiblePersonName(bill.getId());
+        if (CollUtil.isNotEmpty(nameList)) {
+            vo.setResponsiblePersonNames(CollUtil.isEmpty(nameList) ? "" : String.join("、", nameList));
+        }
+        vo.setEndDate(bill.getEndDate());
+        vo.setTotalMoneyStr(bill.getTotalMoney().setScale(2).toString());
+        vo.setReceivableStr(bill.getReceivable().setScale(2).toString());
+        vo.setCustProperty(cust.getCustProperty());
+        vo.setCustName(cust.getCustName());
+        vo.setUserName(record.getOperUserName());
+        vo.setRepalBillStatus(bill.getRepalBillStatus());
+        vo.setMoneyStr(record.getTransMoney().setScale(2).toString());
+        // 评分趋势
+        vo.setDiagnosisGrade(bill.getDiagnosisGrade());
+        vo.setDiagnosisScoreTrend(DiagnosisUtil.getDiagnosisScoreTrend(bill.getPreDiagnosisScore(), bill.getDiagnosisScore(), bill.getPreDiagnosisGrade(), bill.getDiagnosisGrade()));
+        if (Objects.nonNull(bill.getDiagnosisScore())) {
+            vo.setDiagnosisScore(bill.getDiagnosisScore().stripTrailingZeros().toPlainString());
+        }
+        RepalRemindReadInfo repalRemindReadInfo = repalRemindReadInfoService.getReadInfoByUserId(UserContextUtil.getUser().getUserId(), bill.getId(),bill.getRepalBookId());
+        RepalBillRemindUnReadVO readVO = repalRemindHistoryService.getBillRemindUnReadVO(repalRemindReadInfo.getRiskRemindId(),
+                repalRemindReadInfo.getRankRemindId(),repalRemindReadInfo.getOverdueRemindId(),
+                repalRemindReadInfo.getFinanceRemindId(),bill.getRepalBookId(),bill.getId(),
+                null, null);
+        vo.setDynamicCountList(new ArrayList<Integer>(){{
+            add(readVO.getUnreadRiskCount());
+            add(readVO.getUnreadFinanceCount());
+            add(readVO.getUnreadRankCount());
+            add(readVO.getUnreadOverdueCount());
+        }});
+        return vo;
+    }
 }

+ 7 - 0
src/main/java/com/winhc/repal/service/impl/RepalGroupMemberServiceImpl.java

@@ -65,6 +65,13 @@ public class RepalGroupMemberServiceImpl extends ServiceImpl<RepalGroupMemberMap
     private RepalRolePermissionService repalRolePermissionService;
 
     @Override
+    public RepalGroupMember getMemberByUserId(Long userId) {
+        return this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
+                .eq(RepalGroupMember::getUserId, userId)
+                .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
+    }
+
+    @Override
     public Long getUserGroupId(Long userId) {
         RepalGroupMember repalGroupMember = this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
                 .eq(RepalGroupMember::getUserId, userId)

+ 24 - 0
src/main/resources/mapper/RepalChangeRecordMapper.xml

@@ -23,4 +23,28 @@
         GROUP BY record.RECORD_DATE
     </select>
 
+
+    <select id="getReturnedBill" parameterType="com.winhc.repal.model.dto.ReturnedBillDTO" resultType="com.winhc.repal.model.vo.ReturnedBillVO">
+        SELECT
+        bill.ID AS repalBillId, record.OPER_USER_NAME AS userName,
+        cust.CUST_PROPERTY AS custProperty, bill.CUSTOMER_NAME AS custName, record.ID AS repalChangeRecordId,
+        record.RECORD_DATE AS recordDate, bill.REPAL_BILL_STATUS AS repalBillStatus, record.TRANS_MONEY AS money
+        FROM REPAL_CHANGE_RECORD AS record
+        LEFT JOIN REPAL_BILL AS bill ON record.REPAL_BILL_ID = bill.ID
+        <if test="param2.userId != null">
+            LEFT JOIN REPAL_RESPONSIBLE_PERSON AS person ON person.REPAL_BILL_ID = bill.ID
+        </if>
+        LEFT JOIN REPAL_CUSTOMER AS cust ON bill.CUSTOMER_ID = cust.CUST_ID
+        WHERE bill.REPAL_GROUP_ID = #{param2.repalGroupId}
+        AND bill.REPAL_BILL_TYPE = 1
+        AND record.REPAL_BOOK_ID = #{param2.repalBookId}
+        <if test="param2.userId != null">
+            AND person.USER_ID = #{param2.userId}
+        </if>
+        <if test="param2.keyword != null and param2.keyword != ''">
+            AND bill.CUSTOMER_NAME LIKE concat('%', #{param2.keyword}, '%')
+        </if>
+        ORDER BY recordDate DESC, record.ID DESC
+    </select>
+
 </mapper>