diff --git a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java index 48a2e6a619..4cba6a1576 100644 --- a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java +++ b/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*********************************************/ diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBank.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBank.java new file mode 100644 index 0000000000..dc309fc27a --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDetailVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDetailVo.java new file mode 100644 index 0000000000..14d7638b97 --- /dev/null +++ b/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 filesList = new ArrayList<>(); + private List detailsVoList = new ArrayList<>(); + + @ApiModelProperty("申请人") + private String createByName; + @ApiModelProperty("申请部门sid") + private String createDeptSid; + @ApiModelProperty("申请部门") + private String createDept; + + private String remarks; + + private String files; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankDto.java new file mode 100644 index 0000000000..c9440f8ddc --- /dev/null +++ b/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 filesList = new ArrayList<>(); + + private String remarks; + + private List detailsVoList = new ArrayList<>(); +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeign.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeign.java new file mode 100644 index 0000000000..db8acf144f --- /dev/null +++ b/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> listPage(@RequestBody PagerQuery pq); + + @ApiOperation("新增或修改") + @PostMapping("/saveOrUpdate") + ResultBean saveOrUpdate(@RequestBody LoanOverdueBankDto dto); + + @ApiOperation("详情初始化") + @PostMapping("/details") + ResultBean 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> getPreviousNodesForReject(@Valid @SpringQueryMap OverdueBankApplyNodeQuery query); + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + ResultBean> 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); +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankFeignFallback.java new file mode 100644 index 0000000000..a2e2e9de59 --- /dev/null +++ b/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 { +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankQuery.java new file mode 100644 index 0000000000..3695d0d611 --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/LoanOverdueBankVo.java new file mode 100644 index 0000000000..21b4ac9c58 --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/CompleteBankDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/CompleteBankDto.java new file mode 100644 index 0000000000..57b901a3da --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeQuery.java new file mode 100644 index 0000000000..cd9e98ad6b --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyNodeVo.java new file mode 100644 index 0000000000..39faf630e2 --- /dev/null +++ b/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 candidateGroups; + @ApiModelProperty(value = "是否是最后环节") + private String endTask; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyTaskQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/OverdueBankApplyTaskQuery.java new file mode 100644 index 0000000000..6188a4171a --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/SubmitApplyBankDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebank/flowable/SubmitApplyBankDto.java new file mode 100644 index 0000000000..9df3008d6d --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetails.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetails.java new file mode 100644 index 0000000000..e1e111364d --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetailsDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduebankdetails/LoanOverdueBankDetailsDto.java new file mode 100644 index 0000000000..0d93e50e8a --- /dev/null +++ b/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; +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.java new file mode 100644 index 0000000000..8bcb7522ff --- /dev/null +++ b/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 { + IPage selectPageVo(IPage page, QueryWrapper qw); + + LoanOverdueBankDetailVo details(String sid); + + int selectBySid(String join); + + int updateFlowFiled(Map beanToMap); +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.xml new file mode 100644 index 0000000000..b83e60a5b2 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + UPDATE loan_overdue_bank + SET nodeState=#{nodeState} + + , taskDefKey=#{taskDefKey} + + + , procDefId=#{procDefId} + + + , procInstId=#{procInsId} + + + , taskId=#{taskId} + + WHERE sid = #{sid} + + \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankRest.java new file mode 100644 index 0000000000..46f3da55ca --- /dev/null +++ b/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> listPage(PagerQuery pq) { + ResultBean> rb = ResultBean.fireFail(); + PagerVo pv = loanOverdueBankService.listPageVo(pq); + return rb.success().setData(pv); + } + + @Override + public ResultBean saveOrUpdate(LoanOverdueBankDto dto) { + return loanOverdueBankService.saveOrUpdateBank(dto); + } + + @Override + public ResultBean 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> getPreviousNodesForReject(OverdueBankApplyNodeQuery query) { + return loanOverdueBankService.getPreviousNodesForReject(query); + } + + @Override + public ResultBean> 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); + } +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebank/LoanOverdueBankService.java new file mode 100644 index 0000000000..dabfe7b6b1 --- /dev/null +++ b/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 { + + @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 resultBean = flowableFeign.breakProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + Map 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 resultBean = flowableFeign.breakProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + Map 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 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 variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + ResultBean resultBean = flowableFeign.taskReject(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = resultBean.getData(); + Map 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> 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 stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean> getNextNodesForSubmit(OverdueBankApplyNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + LoanOverdueBank loanOverdueBank = fetchBySid(query.getBusinessSid()); + bv.setModelId(loanOverdueBank.getProcDefId()); + ResultBean>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给TemplateApplyNodeVo + List 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> getPreviousNodesForReject(OverdueBankApplyNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + LoanOverdueBank loanOverdueBank = fetchBySid(query.getBusinessSid()); + bv.setModelId(loanOverdueBank.getProcDefId()); + ResultBean>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给TemplateApplyNodeVo + List 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 variables = new HashMap<>(); + Map 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 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 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 resultBean = saveOrUpdateBank(dto); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + String businessSid = resultBean.getData(); + loanOverdueBank = fetchBySid(businessSid); + //创建BusinessVariables实体对象 + BusinessVariables bv = new BusinessVariables(); + //流程中的参数赋值、若有网关,则赋值网关中判断的字段。 + Map variables = new HashMap<>(); + Map 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 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(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 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 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 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 details(String sid) { + ResultBean rb = ResultBean.fireFail(); + LoanOverdueBank loanOverdueBank = fetchBySid(sid); + if (loanOverdueBank == null) { + return rb.setMsg("该申请不存在"); + } + LoanOverdueBankDetailVo loanOverdueBankDetailVo = baseMapper.details(sid); + List detailsVoList = loanOverdueBankDetailsService.selectByMainSid(sid); + detailsVoList.removeAll(Collections.singleton(null)); + if (!detailsVoList.isEmpty()) { + loanOverdueBankDetailVo.setDetailsVoList(detailsVoList); + } + String files = loanOverdueBankDetailVo.getFiles(); + if (StringUtils.isNotBlank(files)) { + List fileList = Arrays.asList(files.split(",")).stream().map(c -> fileUploadComponent.getUrlPrefix() + c).collect(Collectors.toList()); + loanOverdueBankDetailVo.setFilesList(fileList); + } + return rb.success().setData(loanOverdueBankDetailVo); + } + + public ResultBean saveOrUpdateBank(LoanOverdueBankDto dto) { + ResultBean 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 organizationResultBean = sysOrganizationFeign.fetchBySid(useOrgSid); + if (organizationResultBean.getData() != null) { + loanOverdueBank.setUseOrgName(organizationResultBean.getData().getName()); + } + //申请部门 + List orgList = Arrays.asList(orgPath.split("/")); + String deptSid = orgList.get(orgList.size() - 1); + ResultBean sysOrganizationVoResultBean = sysOrganizationFeign.fetchBySid(deptSid); + if (sysOrganizationVoResultBean.getData() != null) { + loanOverdueBank.setCreateDept(sysOrganizationVoResultBean.getData().getName()); + loanOverdueBank.setCreateDeptSid(deptSid); + } + List filesList = dto.getFilesList(); + if (!filesList.isEmpty()) { + String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), ""); + loanOverdueBank.setFiles(files); + } + List 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 filesList = dto.getFilesList(); + if (!filesList.isEmpty()) { + String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), ""); + loanOverdueBank.setFiles(files); + } + List detailsVoList = dto.getDetailsVoList(); + detailsVoList.removeAll(Collections.singleton(null)); + if (!detailsVoList.isEmpty()) { + loanOverdueBankDetailsService.saveOrUpdateDetails(detailsVoList, loanOverdueBank.getSid()); + } + } + return rb.success().setData(sid); + } + + public PagerVo listPageVo(PagerQuery pq) { + LoanOverdueBankQuery query = pq.getParams(); + QueryWrapper 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 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 p = new PagerVo<>(); + return p; + } + } else { + PagerVo p = new PagerVo<>(); + return p; + } + } + } + qw.orderByDesc("lof.createTime"); + IPage page = PagerUtil.queryToPage(pq); + IPage pagging = baseMapper.selectPageVo(page, qw); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.java new file mode 100644 index 0000000000..4f97783e61 --- /dev/null +++ b/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 { + int deleteByMainSid(String sid); + + List selectByMainSid(String sid); +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.xml new file mode 100644 index 0000000000..6c2a8d16cf --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsMapper.xml @@ -0,0 +1,28 @@ + + + + + delete + from loan_overdue_bank_details + where mainSid = #{sid} + + + + \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduebankdetails/LoanOverdueBankDetailsService.java new file mode 100644 index 0000000000..ac3a727e7b --- /dev/null +++ b/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 { + public void saveOrUpdateDetails(List 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 selectByMainSid(String sid) { + return baseMapper.selectByMainSid(sid); + } + + public int deleteByMainSid(String s) { + return baseMapper.deleteByMainSid(s); + } +} diff --git a/doc/databases/risk_center.sql b/doc/databases/risk_center.sql index 3aa03c0a46..f79122f4bf 100644 --- a/doc/databases/risk_center.sql +++ b/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 ='逾期对账申请(资方)管理-明细'; + +