Browse Source

逾期对账资方

master
dimengzhe 1 year ago
parent
commit
6891651c1c
  1. 1
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java
  2. 43
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBank.java
  3. 40
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDetailVo.java
  4. 32
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDto.java
  5. 70
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeign.java
  6. 12
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeignFallback.java
  7. 35
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankQuery.java
  8. 33
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankVo.java
  9. 37
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/CompleteBankDto.java
  10. 20
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeQuery.java
  11. 24
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeVo.java
  12. 44
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyTaskQuery.java
  13. 21
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/SubmitApplyBankDto.java
  14. 44
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetails.java
  15. 43
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetailsDto.java
  16. 27
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.java
  17. 42
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.xml
  18. 88
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankRest.java
  19. 526
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankService.java
  20. 20
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.java
  21. 28
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.xml
  22. 37
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsService.java
  23. 68
      doc/databases/risk_center.sql

1
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java

@ -67,6 +67,7 @@ public enum ProcDefEnum {
BECOLLECTIONAPPLY("催收措施申请", "process_7xz17xva:1:7417504"),
MONTHLYACCRUAL("当月应收计提申请", "process_7zpo52qj:1:7367504"),
LOANOVERDUEFIN("逾期对账申请(财务)", ""),
LOANOVERDUEBANK("逾期对账申请(资方)", ""),
/******************************测试流程id*********************************************/

43
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBank.java

@ -0,0 +1,43 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Data
public class LoanOverdueBank extends BaseEntity {
private static final long serialVersionUID = -4979411631407871211L;
@ApiModelProperty("发起人")
private String createByName;
@ApiModelProperty("发起部门sid")
private String createDeptSid;
@ApiModelProperty("发起部门")
private String createDept;
@ApiModelProperty("截止时间")
private String stopDate;
@ApiModelProperty("附件")
private String files;
@ApiModelProperty("流程状态")
private String nodeState;
@ApiModelProperty("分公司sid")
private String useOrgSid;
@ApiModelProperty("分公司")
private String useOrgName;
@ApiModelProperty("办结日期")
private String closeDate;
@ApiModelProperty("实例id")
private String procInstId;
@ApiModelProperty("流程定义id")
private String procDefId;
@ApiModelProperty("任务id")
private String taskId;
@ApiModelProperty("环节id")
private String taskDefKey;
@ApiModelProperty("机构全路径sid")
private String orgSidPath;
}

40
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDetailVo.java

@ -0,0 +1,40 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetailsDto;
import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class LoanOverdueBankDetailVo {
private String sid;
@ApiModelProperty("用户sid")
private String userSid;
@ApiModelProperty("机构全路径sid")
private String orgPath;
@ApiModelProperty("截止时间")
private String stopDate;
@ApiModelProperty("附件")
private List<String> filesList = new ArrayList<>();
private List<LoanOverdueBankDetailsDto> detailsVoList = new ArrayList<>();
@ApiModelProperty("申请人")
private String createByName;
@ApiModelProperty("申请部门sid")
private String createDeptSid;
@ApiModelProperty("申请部门")
private String createDept;
private String remarks;
private String files;
}

32
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDto.java

@ -0,0 +1,32 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetailsDto;
import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class LoanOverdueBankDto {
private String sid;
@ApiModelProperty("用户sid")
private String userSid;
@ApiModelProperty("机构全路径sid")
private String orgPath;
@ApiModelProperty("截止时间")
private String stopDate;
@ApiModelProperty("附件")
private List<String> filesList = new ArrayList<>();
private String remarks;
private List<LoanOverdueBankDetailsDto> detailsVoList = new ArrayList<>();
}

70
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeign.java

@ -0,0 +1,70 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import com.yxt.anrui.riskcenter.api.loanoverduebank.flowable.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@FeignClient(
contextId = "anrui-riskcenter-LoanOverdueBank",
name = "anrui-riskcenter",
path = "v1/LoanOverdueBank",
fallback = LoanOverdueBankFeignFallback.class)
public interface LoanOverdueBankFeign {
@ApiOperation("分页列表")
@PostMapping("/listPage")
ResultBean<PagerVo<LoanOverdueBankVo>> listPage(@RequestBody PagerQuery<LoanOverdueBankQuery> pq);
@ApiOperation("新增或修改")
@PostMapping("/saveOrUpdate")
ResultBean<String> saveOrUpdate(@RequestBody LoanOverdueBankDto dto);
@ApiOperation("详情初始化")
@PostMapping("/details")
ResultBean<LoanOverdueBankDetailVo> details(@RequestParam("sid") String sid);
@ApiOperation("删除/批量删除")
@DeleteMapping("/delBySids")
ResultBean delBySids(@RequestBody String[] sids);
@ApiOperation("提交")
@PostMapping("/submitApply")
public ResultBean submitApply(@Valid @RequestBody SubmitApplyBankDto dto);
@ApiOperation(value = "办理(同意)")
@PostMapping("/complete")
public ResultBean complete(@Valid @RequestBody CompleteBankDto query);
@ApiOperation(value = "获取上一个环节")
@GetMapping(value = "/getPreviousNodesForReject")
ResultBean<List<OverdueBankApplyNodeVo>> getPreviousNodesForReject(@Valid @SpringQueryMap OverdueBankApplyNodeQuery query);
@ApiOperation(value = "获取下一个环节")
@GetMapping(value = "/getNextNodesForSubmit")
ResultBean<List<OverdueBankApplyNodeVo>> getNextNodesForSubmit(@Valid @SpringQueryMap OverdueBankApplyNodeQuery query);
@ApiOperation(value = "驳回任务")
@PostMapping(value = "/reject")
public ResultBean taskReject(@Valid @RequestBody OverdueBankApplyTaskQuery query);
@ApiOperation(value = "撤回流程")
@PostMapping(value = "/revokeProcess")
public ResultBean revokeProcess(@Valid @RequestBody OverdueBankApplyTaskQuery query);
@ApiOperation(value = "终止任务")
@PostMapping(value = "/breakProcess")
public ResultBean breakProcess(@Valid @RequestBody OverdueBankApplyTaskQuery query);
}

12
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeignFallback.java

@ -0,0 +1,12 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import org.springframework.stereotype.Component;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Component
public class LoanOverdueBankFeignFallback {
}

35
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankQuery.java

@ -0,0 +1,35 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Data
public class LoanOverdueBankQuery implements Query {
private static final long serialVersionUID = 9176388397416523911L;
@ApiModelProperty("分公司")
private String useOrgName;
@ApiModelProperty("申请部门")
private String createDept;
@ApiModelProperty("申请人")
private String createByName;
@ApiModelProperty("申请开始时间")
private String createStart;
@ApiModelProperty("申请结束时间")
private String createEnd;
@ApiModelProperty("办结开始时间")
private String closeDateStart;
@ApiModelProperty("办结结束时间")
private String closeDateEnd;
@ApiModelProperty("菜单url")
private String menuUrl;
private String orgPath;
private String userSid;
}

33
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankVo.java

@ -0,0 +1,33 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Data
public class LoanOverdueBankVo implements Vo {
private static final long serialVersionUID = 3314303325742136757L;
private String sid;
@ApiModelProperty("流程状态")
private String nodeState;
@ApiModelProperty("分公司")
private String useOrgName;
@ApiModelProperty("申请部门")
private String createDept;
@ApiModelProperty("申请人")
private String createByName;
@ApiModelProperty("申请日期")
private String createTime;
@ApiModelProperty("办结日期")
private String closeDate;
@ApiModelProperty("截止时间")
private String stopDate;
@ApiModelProperty("备注")
private String remarks;
}

37
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/CompleteBankDto.java

@ -0,0 +1,37 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank.flowable;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class CompleteBankDto implements Dto {
private static final long serialVersionUID = 8035206652947891222L;
@ApiModelProperty(value = "用户sid")
@NotBlank(message = "参数错误:userSid")
private String userSid;
@ApiModelProperty(value = "用户全路径sid")
private String orgSidPath;
@ApiModelProperty(value = "节点id")
@NotBlank(message = "参数错误:taskDefKey")
private String taskDefKey;
@ApiModelProperty(value = "任务id")
@NotBlank(message = "参数错误:taskId")
private String taskId;
@ApiModelProperty(value = "流程id")
@NotBlank(message = "参数错误:instanceId")
private String instanceId;
@ApiModelProperty(value = "意见")
private String comment;
@ApiModelProperty(value = "业务sid")
@NotBlank(message = "参数错误:businessSid")
private String businessSid;
}

20
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeQuery.java

@ -0,0 +1,20 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank.flowable;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class OverdueBankApplyNodeQuery implements Query {
private static final long serialVersionUID = -1980506813050411605L;
@ApiModelProperty(value = "环节定义id")
private String taskDefKey;
@ApiModelProperty(value = "业务sid")
private String businessSid;
}

24
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeVo.java

@ -0,0 +1,24 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank.flowable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class OverdueBankApplyNodeVo {
@ApiModelProperty(value = "节点名称")
private String name;
@ApiModelProperty(value = "节点id")
private String id;
@ApiModelProperty(value = "审批组")
private List<String> candidateGroups;
@ApiModelProperty(value = "是否是最后环节")
private String endTask;
}

44
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyTaskQuery.java

@ -0,0 +1,44 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank.flowable;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class OverdueBankApplyTaskQuery {
/**
* 终止驳回撤回
*/
@ApiModelProperty("任务Id")
@NotBlank(message = "参数错误:taskId")
private String taskId;
/**
* 终止驳回撤回
*/
@ApiModelProperty("业务sid")
@NotBlank(message = "参数错误:businessSid")
private String businessSid;
/**
* 终止驳回
*/
@ApiModelProperty("任务意见")
private String comment;
/**
* 终止撤回驳回
*/
@ApiModelProperty("用户Sid")
private String userSid;
/**
* 终止
*/
@ApiModelProperty("流程实例Id")
private String instanceId;
}

21
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/SubmitApplyBankDto.java

@ -0,0 +1,21 @@
package com.yxt.anrui.riskcenter.api.loanoverduebank.flowable;
import com.yxt.anrui.riskcenter.api.loanoverduebank.LoanOverdueBankDto;
import com.yxt.anrui.riskcenter.api.loanoverduefin.LoanOverdueFinDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class SubmitApplyBankDto extends LoanOverdueBankDto {
private static final long serialVersionUID = 0L;
@ApiModelProperty("流程实例id")
private String instanceId;
@ApiModelProperty("任务id")
private String taskId;
}

44
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetails.java

@ -0,0 +1,44 @@
package com.yxt.anrui.riskcenter.api.loanoverduebankdetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Data
public class LoanOverdueBankDetails {
private String mainSid;
@ApiModelProperty("贷款合同编号")
private String loanContractNo;
@ApiModelProperty("客户名称")
private String customerName;
@ApiModelProperty("客户sid")
private String customerSid;
@ApiModelProperty("贷款人sid")
private String loanSid;
@ApiModelProperty("贷款人")
private String loanName;
@ApiModelProperty("资方合同编号")
private String bankContractNo;
@ApiModelProperty("资方")
private String bankName;
@ApiModelProperty("资方sid")
private String bankSid;
@ApiModelProperty("期数")
private String period;
@ApiModelProperty("平台逾期月还")
private BigDecimal overdueMoney;
@ApiModelProperty("资方逾期月还")
private BigDecimal bankOverdueMoney;
@ApiModelProperty("资方逾期利息")
private BigDecimal bankOverdueInterest;
@ApiModelProperty("差异金额")
private BigDecimal diffMoney;
}

43
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetailsDto.java

@ -0,0 +1,43 @@
package com.yxt.anrui.riskcenter.api.loanoverduebankdetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Data
public class LoanOverdueBankDetailsDto {
@ApiModelProperty("贷款合同编号")
private String loanContractNo;
@ApiModelProperty("客户名称")
private String customerName;
@ApiModelProperty("客户sid")
private String customerSid;
@ApiModelProperty("贷款人sid")
private String loanSid;
@ApiModelProperty("贷款人")
private String loanName;
@ApiModelProperty("资方合同编号")
private String bankContractNo;
@ApiModelProperty("资方")
private String bankName;
@ApiModelProperty("资方sid")
private String bankSid;
@ApiModelProperty("期数")
private String period;
@ApiModelProperty("平台逾期月还")
private String overdueMoney;
@ApiModelProperty("资方逾期月还")
private String bankOverdueMoney;
@ApiModelProperty("资方逾期利息")
private String bankOverdueInterest;
@ApiModelProperty("差异金额")
private String diffMoney;
}

27
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.java

@ -0,0 +1,27 @@
package com.yxt.anrui.riskcenter.biz.loanoverduebank;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.riskcenter.api.loanoverduebank.LoanOverdueBank;
import com.yxt.anrui.riskcenter.api.loanoverduebank.LoanOverdueBankDetailVo;
import com.yxt.anrui.riskcenter.api.loanoverduebank.LoanOverdueBankVo;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Mapper
public interface LoanOverdueBankMapper extends BaseMapper<LoanOverdueBank> {
IPage<LoanOverdueBankVo> selectPageVo(IPage<LoanOverdueBank> page, QueryWrapper<LoanOverdueBank> qw);
LoanOverdueBankDetailVo details(String sid);
int selectBySid(String join);
int updateFlowFiled(Map<String, Object> beanToMap);
}

42
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.xml

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.anrui.riskcenter.biz.loanoverduebank.LoanOverdueBankMapper">
<select id="details" resultType="com.yxt.anrui.riskcenter.api.loanoverduebank.LoanOverdueBankDetailVo">
select lob.sid,
lob.files,
lob.remarks,
lob.createByName,
lob.createBySid userSid,
lob.createDept,
lob.createDeptSid,
lob.orgSidPath orgPath,
lob.stopDate
from loan_overdue_bank lob
where sid = #{sid}
</select>
<select id="selectBySid" resultType="int">
select count(*)
from loan_overdue_bank
where length(nodeState) > 0
and find_in_set(sid, #{list})
</select>
<update id="updateFlowFiled">
UPDATE loan_overdue_bank
SET nodeState=#{nodeState}
<if test="taskDefKey != null and taskDefKey != ''">
, taskDefKey=#{taskDefKey}
</if>
<if test="procDefId != null and procDefId != ''">
, procDefId=#{procDefId}
</if>
<if test="procInsId != null and procInsId != ''">
, procInstId=#{procInsId}
</if>
<if test="taskId != null and taskId != ''">
, taskId=#{taskId}
</if>
WHERE sid = #{sid}
</update>
</mapper>

88
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankRest.java

@ -0,0 +1,88 @@
package com.yxt.anrui.riskcenter.biz.loanoverduebank;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.riskcenter.api.loanoverduebank.*;
import com.yxt.anrui.riskcenter.api.loanoverduebank.flowable.*;
import com.yxt.anrui.riskcenter.api.loanoverduefin.LoanOverdueFinVo;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@RestController
@RequestMapping("v1/LoanOverdueBank")
public class LoanOverdueBankRest implements LoanOverdueBankFeign {
@Autowired
private LoanOverdueBankService loanOverdueBankService;
@Override
public ResultBean<PagerVo<LoanOverdueBankVo>> listPage(PagerQuery<LoanOverdueBankQuery> pq) {
ResultBean<PagerVo<LoanOverdueBankVo>> rb = ResultBean.fireFail();
PagerVo<LoanOverdueBankVo> pv = loanOverdueBankService.listPageVo(pq);
return rb.success().setData(pv);
}
@Override
public ResultBean<String> saveOrUpdate(LoanOverdueBankDto dto) {
return loanOverdueBankService.saveOrUpdateBank(dto);
}
@Override
public ResultBean<LoanOverdueBankDetailVo> details(String sid) {
return loanOverdueBankService.details(sid);
}
@Override
public ResultBean delBySids(String[] sids) {
return loanOverdueBankService.delAllBySids(sids);
}
@Override
public ResultBean submitApply(SubmitApplyBankDto dto) {
return loanOverdueBankService.submitApply(dto);
}
@Override
public ResultBean complete(CompleteBankDto query) {
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
bv.setModelId("");
return loanOverdueBankService.complete(bv);
}
@Override
public ResultBean<List<OverdueBankApplyNodeVo>> getPreviousNodesForReject(OverdueBankApplyNodeQuery query) {
return loanOverdueBankService.getPreviousNodesForReject(query);
}
@Override
public ResultBean<List<OverdueBankApplyNodeVo>> getNextNodesForSubmit(OverdueBankApplyNodeQuery query) {
return loanOverdueBankService.getNextNodesForSubmit(query);
}
@Override
public ResultBean taskReject(OverdueBankApplyTaskQuery query) {
return loanOverdueBankService.taskReject(query);
}
@Override
public ResultBean revokeProcess(OverdueBankApplyTaskQuery query) {
return loanOverdueBankService.revokeProcess(query);
}
@Override
public ResultBean breakProcess(OverdueBankApplyTaskQuery query) {
return loanOverdueBankService.breakProcess(query);
}
}

526
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankService.java

@ -0,0 +1,526 @@
package com.yxt.anrui.riskcenter.biz.loanoverduebank;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.portal.api.sysuser.PrivilegeQuery;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.riskcenter.api.loanoverduebank.*;
import com.yxt.anrui.riskcenter.api.loanoverduebank.flowable.OverdueBankApplyNodeQuery;
import com.yxt.anrui.riskcenter.api.loanoverduebank.flowable.OverdueBankApplyNodeVo;
import com.yxt.anrui.riskcenter.api.loanoverduebank.flowable.OverdueBankApplyTaskQuery;
import com.yxt.anrui.riskcenter.api.loanoverduebank.flowable.SubmitApplyBankDto;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetailsDto;
import com.yxt.anrui.riskcenter.biz.loanoverduebankdetails.LoanOverdueBankDetailsService;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import com.yxt.messagecenter.api.message.MessageFeign;
import com.yxt.messagecenter.api.message.MessageFlowVo;
import com.yxt.messagecenter.api.message.MessageFlowableQuery;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/26
**/
@Service
public class LoanOverdueBankService extends MybatisBaseService<LoanOverdueBankMapper, LoanOverdueBank> {
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private SysOrganizationFeign sysOrganizationFeign;
@Autowired
private FileUploadComponent fileUploadComponent;
@Autowired
private LoanOverdueBankDetailsService loanOverdueBankDetailsService;
@Autowired
private FlowFeign flowFeign;
@Autowired
private MessageFeign messageFeign;
@Autowired
private FlowTaskFeign flowTaskFeign;
@Autowired
private FlowableFeign flowableFeign;
public ResultBean breakProcess(OverdueBankApplyTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
LoanOverdueBank loanOverdueBank = fetchBySid(query.getBusinessSid());
String businessTaskId = loanOverdueBank.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (query.getUserSid().equals(loanOverdueBank.getCreateBySid())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
Map<String, Object> map = BeanUtil.beanToMap(resultBean.getData());
updateFlowFiled(map);
return rb.success().setData(resultBean.getData());
} else {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
Map<String, Object> map = BeanUtil.beanToMap(resultBean.getData());
updateFlowFiled(map);
return rb.success().setData(resultBean.getData());
}
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean revokeProcess(OverdueBankApplyTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
LoanOverdueBank loanOverdueBank = fetchBySid(query.getBusinessSid());
String businessTaskId = loanOverdueBank.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.revokeProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
return rb.success().setData(resultBean.getData());
}
}
return rb.setMsg("操作失败,提交的数据不一致!");
}
public ResultBean taskReject(OverdueBankApplyTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
String businessSid = query.getBusinessSid();
LoanOverdueBank loanOverdueBank = fetchBySid(businessSid);
if (loanOverdueBank == null) {
return rb.setMsg("该申请不存在");
}
String businessTaskId = loanOverdueBank.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.taskReject(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
Map<String, Object> map = BeanUtil.beanToMap(ufVo);
//更新业务中的流程相关的参数
updateFlowFiled(map);
//极光推送
loanOverdueBank = fetchBySid(businessSid);
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
String procId = loanOverdueBank.getProcInstId();
messageFlowVo.setProcInsId(procId);
messageFlowVo.setProcDefId(loanOverdueBank.getProcDefId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("逾期对账申请(资方)");
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskFeign.getLatestTasks(procId);
String nextName = listResultBean.getData().get(0).getName_();
String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_();
if ("发起申请".equals(nextName)) {
messageFlowableQuery.setMsgContent("您提交的" + messageFlowableQuery.getModuleName() + "已被驳回,请重新提交");
} else {
messageFlowableQuery.setMsgContent(loanOverdueBank.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
}
messageFlowableQuery.setMsgTitle("逾期对账申请(财务)");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
return rb.success();
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean<List<OverdueBankApplyNodeVo>> getNextNodesForSubmit(OverdueBankApplyNodeQuery query) {
ResultBean<List<OverdueBankApplyNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
LoanOverdueBank loanOverdueBank = fetchBySid(query.getBusinessSid());
bv.setModelId(loanOverdueBank.getProcDefId());
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给TemplateApplyNodeVo
List<OverdueBankApplyNodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), OverdueBankApplyNodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean<List<OverdueBankApplyNodeVo>> getPreviousNodesForReject(OverdueBankApplyNodeQuery query) {
ResultBean<List<OverdueBankApplyNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
LoanOverdueBank loanOverdueBank = fetchBySid(query.getBusinessSid());
bv.setModelId(loanOverdueBank.getProcDefId());
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给TemplateApplyNodeVo
List<OverdueBankApplyNodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), OverdueBankApplyNodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean complete(BusinessVariables bv) {
ResultBean rb = ResultBean.fireFail();
String businessSid = bv.getBusinessSid();
LoanOverdueBank loanOverdueBank = fetchBySid(businessSid);
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
bv.setFormVariables(variables);
bv.setOrgSidPath(loanOverdueBank.getOrgSidPath());
bv.setModelId(loanOverdueBank.getProcDefId());
if (bv.getTaskId().equals(loanOverdueBank.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
if ("Event_end".equals(resultBean.getData().getTaskDefKey())) {
} else {
//极光推送
loanOverdueBank = fetchBySid(businessSid);
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowVo.setProcDefId(loanOverdueBank.getProcDefId());
messageFlowVo.setProcInsId(loanOverdueBank.getProcInstId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("逾期对账申请(资方)");
messageFlowableQuery.setMsgContent(loanOverdueBank.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("逾期对账申请(资方)");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
}
return rb.success().setData(resultBean.getData());
} else {
return rb.setMsg("操作失败!提交的数据不一致");
}
}
public ResultBean submitApply(SubmitApplyBankDto dto) {
ResultBean rb = ResultBean.fireFail();
LoanOverdueBank loanOverdueBank = fetchBySid(dto.getSid());
int r = submitBusinessData(dto, loanOverdueBank);
if (r == 3) {
return rb.setMsg("该申请不存在");
}
if (r == 0) {
return rb.setMsg("操作失败!提交的数据不一致");
}
ResultBean<String> resultBean = saveOrUpdateBank(dto);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
String businessSid = resultBean.getData();
loanOverdueBank = fetchBySid(businessSid);
//创建BusinessVariables实体对象
BusinessVariables bv = new BusinessVariables();
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
//用户的部门全路径sid
bv.setOrgSidPath(loanOverdueBank.getOrgSidPath());
bv.setBusinessSid(businessSid);
bv.setUserSid(dto.getUserSid());
bv.setFormVariables(variables);
if (r == 1) {
//ToDo:流程定义id
bv.setModelId(ProcDefEnum.LOANOVERDUEFIN.getProDefId());
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
if (!voResultBean.getSuccess()) {
return rb.setMsg(voResultBean.getMsg());
}
UpdateFlowFieldVo ufVo = voResultBean.getData();
updateFlowFiled(BeanUtil.beanToMap(ufVo));
loanOverdueBank = fetchBySid(businessSid);
//==================================添加线程
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
LoanOverdueBank finalLoanOverdueBank = loanOverdueBank;
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("逾期对账申请(资方)");
messageFlowableQuery.setMsgContent(finalLoanOverdueBank.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("逾期对账申请(资方)");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
//==================================添加线程
return voResultBean;
}
if (r == 2) {
// ToDo:驳回到发起人后再次提交
if (StringUtils.isBlank(dto.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
bv.setTaskId(loanOverdueBank.getTaskId());
bv.setTaskDefKey(loanOverdueBank.getTaskDefKey());
bv.setComment("重新提交");
bv.setInstanceId(dto.getInstanceId());
return complete(bv);
}
return rb;
}
private int updateFlowFiled(Map<String, Object> beanToMap) {
return baseMapper.updateFlowFiled(beanToMap);
}
private int submitBusinessData(SubmitApplyBankDto dto, LoanOverdueBank loanOverdueBank) {
int r = 0;
if (StringUtils.isBlank(dto.getSid())) {
r = 1;
} else {
if (loanOverdueBank != null) {
String businessTaskId = loanOverdueBank.getTaskId();
if (StringUtils.isBlank(businessTaskId) && StringUtils.isBlank(dto.getTaskId())) {
//新提交
r = 1;
} else if (StringUtils.isNotBlank(businessTaskId) && businessTaskId.equals(dto.getTaskId())) {
//二次提交//只有数据一致的时候才能进行下一步
r = 2;
}
} else {
r = 3;
}
}
return r;
}
public ResultBean delAllBySids(String[] sids) {
ResultBean rb = ResultBean.fireFail();
//查询该sid中是否有流程不是待提交的
int count = baseMapper.selectBySid(StringUtils.join(sids, ","));
if (count > 0) {
return rb.setMsg("删除的数据中包含已经提交审批的数据,删除失败");
}
List<String> sidss = Arrays.asList(sids);
for (int i = 0; i < sidss.size(); i++) {
loanOverdueBankDetailsService.deleteByMainSid(sidss.get(i));
}
delBySids(sids);
return rb.success().setMsg("删除成功");
}
public ResultBean<LoanOverdueBankDetailVo> details(String sid) {
ResultBean<LoanOverdueBankDetailVo> rb = ResultBean.fireFail();
LoanOverdueBank loanOverdueBank = fetchBySid(sid);
if (loanOverdueBank == null) {
return rb.setMsg("该申请不存在");
}
LoanOverdueBankDetailVo loanOverdueBankDetailVo = baseMapper.details(sid);
List<LoanOverdueBankDetailsDto> detailsVoList = loanOverdueBankDetailsService.selectByMainSid(sid);
detailsVoList.removeAll(Collections.singleton(null));
if (!detailsVoList.isEmpty()) {
loanOverdueBankDetailVo.setDetailsVoList(detailsVoList);
}
String files = loanOverdueBankDetailVo.getFiles();
if (StringUtils.isNotBlank(files)) {
List<String> fileList = Arrays.asList(files.split(",")).stream().map(c -> fileUploadComponent.getUrlPrefix() + c).collect(Collectors.toList());
loanOverdueBankDetailVo.setFilesList(fileList);
}
return rb.success().setData(loanOverdueBankDetailVo);
}
public ResultBean<String> saveOrUpdateBank(LoanOverdueBankDto dto) {
ResultBean<String> rb = ResultBean.fireFail();
String sid = dto.getSid();
if (StringUtils.isBlank(sid)) {
LoanOverdueBank loanOverdueBank = new LoanOverdueBank();
BeanUtil.copyProperties(dto, loanOverdueBank, "sid");
loanOverdueBank.setCreateBySid(dto.getUserSid());
String orgPath = dto.getOrgPath();
loanOverdueBank.setOrgSidPath(orgPath);
String useOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData();
loanOverdueBank.setUseOrgSid(useOrgSid);
//创建组织使用组织
ResultBean<SysOrganizationVo> organizationResultBean = sysOrganizationFeign.fetchBySid(useOrgSid);
if (organizationResultBean.getData() != null) {
loanOverdueBank.setUseOrgName(organizationResultBean.getData().getName());
}
//申请部门
List<String> orgList = Arrays.asList(orgPath.split("/"));
String deptSid = orgList.get(orgList.size() - 1);
ResultBean<SysOrganizationVo> sysOrganizationVoResultBean = sysOrganizationFeign.fetchBySid(deptSid);
if (sysOrganizationVoResultBean.getData() != null) {
loanOverdueBank.setCreateDept(sysOrganizationVoResultBean.getData().getName());
loanOverdueBank.setCreateDeptSid(deptSid);
}
List<String> filesList = dto.getFilesList();
if (!filesList.isEmpty()) {
String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), "");
loanOverdueBank.setFiles(files);
}
List<LoanOverdueBankDetailsDto> detailsVoList = dto.getDetailsVoList();
detailsVoList.removeAll(Collections.singleton(null));
if (!detailsVoList.isEmpty()) {
loanOverdueBankDetailsService.saveOrUpdateDetails(detailsVoList, loanOverdueBank.getSid());
}
sid = loanOverdueBank.getSid();
} else {
LoanOverdueBank loanOverdueBank = fetchBySid(sid);
if (loanOverdueBank == null) {
return rb.setMsg("该申请不存在");
}
BeanUtil.copyProperties(dto, loanOverdueBank, "sid");
List<String> filesList = dto.getFilesList();
if (!filesList.isEmpty()) {
String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), "");
loanOverdueBank.setFiles(files);
}
List<LoanOverdueBankDetailsDto> detailsVoList = dto.getDetailsVoList();
detailsVoList.removeAll(Collections.singleton(null));
if (!detailsVoList.isEmpty()) {
loanOverdueBankDetailsService.saveOrUpdateDetails(detailsVoList, loanOverdueBank.getSid());
}
}
return rb.success().setData(sid);
}
public PagerVo<LoanOverdueBankVo> listPageVo(PagerQuery<LoanOverdueBankQuery> pq) {
LoanOverdueBankQuery query = pq.getParams();
QueryWrapper<LoanOverdueBank> qw = new QueryWrapper<>();
if (query != null) {
String createStart = query.getCreateStart();
String createEnd = query.getCreateEnd();
qw.apply(StringUtils.isNotBlank(createStart), "date_format (lob.createTime,'%Y-%m-%d') >= date_format('" + createStart + "','%Y-%m-%d')").
apply(StringUtils.isNotBlank(createEnd), "date_format (lob.createTime,'%Y-%m-%d') <= date_format('" + createEnd + "','%Y-%m-%d')"
);
if (StringUtils.isNotBlank(query.getUseOrgName())) {
qw.like("lob.useOrgName", query.getUseOrgName());
}
if (StringUtils.isNotBlank(query.getCreateByName())) {
qw.eq("lob.createByName", query.getCreateByName());
}
if (StringUtils.isNotBlank(query.getCreateDept())) {
qw.eq("lob.createDept", query.getCreateDept());
}
qw.apply(StringUtils.isNotBlank(query.getCloseDateStart()), "date_format (lob.closeDate,'%Y-%m-%d') >= date_format('" + query.getCloseDateStart() + "','%Y-%m-%d')").
apply(StringUtils.isNotBlank(query.getCloseDateEnd()), "date_format (lob.closeDate,'%Y-%m-%d') <= date_format('" + query.getCloseDateEnd() + "','%Y-%m-%d')"
);
//========================================数据授权开始
if (StringUtils.isNotBlank(query.getMenuUrl())) {
//=======================
PrivilegeQuery privilegeQuery = new PrivilegeQuery();
privilegeQuery.setOrgPath(query.getOrgPath());
privilegeQuery.setMenuUrl(query.getMenuUrl());
privilegeQuery.setUserSid(query.getUserSid());
ResultBean<String> defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery);
if (StringUtils.isNotBlank(defaultIdReltBean.getData())) {
//数据权限ID(1集团、2事业部、3分公司、4部门、5个人)
String orgSidPath = query.getOrgPath();
orgSidPath = orgSidPath + "/";
int i1 = orgSidPath.indexOf("/");
int i2 = orgSidPath.indexOf("/", i1 + 1);
int i3 = orgSidPath.indexOf("/", i2 + 1);
int i4 = orgSidPath.indexOf("/", i3 + 1);
String orgLevelKey = defaultIdReltBean.getData();
if ("1".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i1);
qw.like("lob.orgSidPath", orgSidPath);
} else if ("2".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i2);
qw.like("lob.orgSidPath", orgSidPath);
} else if ("3".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i3);
qw.like("lob.orgSidPath", orgSidPath);
} else if ("4".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i4);
qw.like("lob.orgSidPath", orgSidPath);
} else if ("5".equals(orgLevelKey)) {
qw.eq("lob.createBySid", query.getUserSid());
} else {
PagerVo<LoanOverdueBankVo> p = new PagerVo<>();
return p;
}
} else {
PagerVo<LoanOverdueBankVo> p = new PagerVo<>();
return p;
}
}
}
qw.orderByDesc("lof.createTime");
IPage<LoanOverdueBank> page = PagerUtil.queryToPage(pq);
IPage<LoanOverdueBankVo> pagging = baseMapper.selectPageVo(page, qw);
PagerVo<LoanOverdueBankVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
}

20
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.java

@ -0,0 +1,20 @@
package com.yxt.anrui.riskcenter.biz.loanoverduebankdetails;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetails;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetailsDto;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Mapper
public interface LoanOverdueBankDetailsMapper extends BaseMapper<LoanOverdueBankDetails> {
int deleteByMainSid(String sid);
List<LoanOverdueBankDetailsDto> selectByMainSid(String sid);
}

28
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.xml

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.anrui.riskcenter.biz.loanoverduebankdetails.LoanOverdueBankDetailsMapper">
<delete id="deleteByMainSid">
delete
from loan_overdue_bank_details
where mainSid = #{sid}
</delete>
<select id="selectByMainSid"
resultType="com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetailsDto">
select customerName,
customerSid,
loanName,
loanSid,
overdueMoney,
loanContractNo,
bankContractNo,
bankSid,
bankName,
period,
bankOverdueMoney,
bankOverdueInterest,
diffMoney
from loan_overdue_bank_details
where mainSid = #{sid}
</select>
</mapper>

37
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsService.java

@ -0,0 +1,37 @@
package com.yxt.anrui.riskcenter.biz.loanoverduebankdetails;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.riskcenter.api.loanoverduebank.LoanOverdueBank;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetails;
import com.yxt.anrui.riskcenter.api.loanoverduebankdetails.LoanOverdueBankDetailsDto;
import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetails;
import com.yxt.common.base.service.MybatisBaseService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2023/12/27
**/
@Service
public class LoanOverdueBankDetailsService extends MybatisBaseService<LoanOverdueBankDetailsMapper, LoanOverdueBankDetails> {
public void saveOrUpdateDetails(List<LoanOverdueBankDetailsDto> detailsVoList, String sid) {
baseMapper.deleteByMainSid(sid);
detailsVoList.stream().forEach(dto -> {
LoanOverdueBankDetails loanOverdueBankDetails = new LoanOverdueBankDetails();
BeanUtil.copyProperties(dto, loanOverdueBankDetails, "sid");
loanOverdueBankDetails.setMainSid(sid);
baseMapper.insert(loanOverdueBankDetails);
});
}
public List<LoanOverdueBankDetailsDto> selectByMainSid(String sid) {
return baseMapper.selectByMainSid(sid);
}
public int deleteByMainSid(String s) {
return baseMapper.deleteByMainSid(s);
}
}

68
doc/databases/risk_center.sql

@ -1318,6 +1318,74 @@ CREATE TABLE `loan_overdue_fin_details`
DEFAULT CHARSET = utf8 COMMENT ='逾期对账申请(财务)管理-明细';
-- 逾期对账申请(资方)管理
DROP TABLE IF EXISTS `loan_overdue_bank`;
CREATE TABLE `loan_overdue_bank`
(
`id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id',
`sid` varchar(64) NOT NULL COMMENT 'sid',
`lockVersion` int(32) DEFAULT '0' COMMENT '版本锁',
`createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modifyTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用',
`state` int(32) DEFAULT '1' COMMENT '状态',
`isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid',
`updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid',
`createByName` varchar(64) DEFAULT NULL COMMENT '发起人',
`createDeptSid` varchar(64) DEFAULT NULL COMMENT '发起部门sid',
`createDept` varchar(64) DEFAULT NULL COMMENT '发起部门',
`stopDate` varchar(64) DEFAULT NULL COMMENT '截止时间',
`files` text DEFAULT NULL COMMENT '附件',
`nodeState` varchar(64) DEFAULT NULL COMMENT '流程状态',
`useOrgSid` varchar(64) DEFAULT NULL COMMENT '分公司sid',
`useOrgName` varchar(64) DEFAULT NULL COMMENT '分公司',
`closeDate` varchar(64) DEFAULT NULL COMMENT '办结日期',
`procInstId` varchar(64) DEFAULT NULL COMMENT '实例id',
`procDefId` varchar(64) DEFAULT NULL COMMENT '流程定义id',
`taskId` varchar(64) DEFAULT NULL COMMENT '任务id',
`taskDefKey` varchar(64) DEFAULT NULL COMMENT '环节id',
`orgSidPath` varchar(64) DEFAULT NULL COMMENT '机构全路径sid',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE = INNODB
DEFAULT CHARSET = utf8 COMMENT ='逾期对账申请(资方)管理';
DROP TABLE IF EXISTS `loan_overdue_bank_details`;
CREATE TABLE `loan_overdue_bank_details`
(
`id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id',
`sid` varchar(64) NOT NULL COMMENT 'sid',
`lockVersion` int(32) DEFAULT '0' COMMENT '版本锁',
`createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modifyTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用',
`state` int(32) DEFAULT '1' COMMENT '状态',
`isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid',
`updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid',
`mainSid` varchar(64) DEFAULT NULL COMMENT '主表sid',
`loanContractNo` varchar(64) DEFAULT NULL COMMENT '贷款合同编号',
`customerName` varchar(64) DEFAULT NULL COMMENT '客户名称',
`customerSid` varchar(64) DEFAULT NULL COMMENT '客户sid',
`loanSid` varchar(64) DEFAULT NULL COMMENT '贷款人sid',
`bankContractNo` varchar(64) DEFAULT NULL COMMENT '资方合同编号',
`bankName` varchar(64) DEFAULT NULL COMMENT '资方',
`bankSid` varchar(64) DEFAULT NULL COMMENT '资方sid',
`loanName` varchar(64) DEFAULT NULL COMMENT '贷款人名称',
`period` varchar(64) DEFAULT NULL COMMENT '期数',
`overdueMoney` decimal(10, 2) DEFAULT NULL COMMENT '平台逾期月还',
`bankOverdueMoney` decimal(10, 2) DEFAULT NULL COMMENT '资方逾期月还',
`bankOverdueInterest` decimal(10, 2) DEFAULT NULL COMMENT '资方逾期利息',
`diffMoney` decimal(10, 2) DEFAULT NULL COMMENT '差异金额',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE = INNODB
DEFAULT CHARSET = utf8 COMMENT ='逾期对账申请(资方)管理-明细';

Loading…
Cancel
Save