diff --git a/anrui-buscenter/anrui-finmanage-ui/src/api/anruifinmanagement/paymentConfirmation.js b/anrui-buscenter/anrui-finmanage-ui/src/api/anruifinmanagement/paymentConfirmation.js index 442bfc7227..8ec468b91c 100644 --- a/anrui-buscenter/anrui-finmanage-ui/src/api/anruifinmanagement/paymentConfirmation.js +++ b/anrui-buscenter/anrui-finmanage-ui/src/api/anruifinmanagement/paymentConfirmation.js @@ -182,3 +182,35 @@ export function selectPageList(data) { } }) } + +// 出纳款项确认管理--回显、详情(金融收款确认) +export function rskDetails(data) { + return request({ + url: '/fin/fincollectionconfirmation/rskDetails/' + data, + method: 'get' + }) +} + +// 出纳款项管理--确认(金融收款确认) +export function rskCashierConfirm(data) { + return request({ + url: '/fin/fincollectionconfirmation/rskCashierConfirm', + method: 'post', + params: data, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) +} + +// 出纳款项管理--驳回(金融收款确认) +export function rskCashierReject(data) { + return request({ + url: '/fin/fincollectionconfirmation/rskCashierReject', + method: 'post', + params: data, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) +} diff --git a/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmation.vue b/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmation.vue index ed1b50f460..2cb5059bf5 100644 --- a/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmation.vue +++ b/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmation.vue @@ -149,6 +149,8 @@ + + @@ -159,6 +161,7 @@ import pageye from '@/components/pagination/pageye' import ButtonBar from '@/components/ButtonBar' import { typeValues, getButtonPermissions } from '@/api/jichuxinxi/dictcommons' import cashierConfirmationInfo from './cashierConfirmationInfo.vue' +import cashierConfirmationByFinancial from './cashierConfirmationByFinancial' import { getStorage } from '@/utils/auth' export default { @@ -167,7 +170,8 @@ export default { Pagination, pageye, ButtonBar, - cashierConfirmationInfo + cashierConfirmationInfo, + cashierConfirmationByFinancial }, data() { return { @@ -342,8 +346,13 @@ export default { this.getList() }, handUpdate(row) { - this.viewState = 2 - this.$refs['divInfo'].showInfo(row, this.viewState) + if (row.loan) { + this.viewState = 4 + this.$refs['divFinancial'].showInfo(row, this.viewState) + } else { + this.viewState = 2 + this.$refs['divInfo'].showInfo(row, this.viewState) + } }, handleDownLoad(row) { this.printSid = row.sid @@ -386,8 +395,13 @@ export default { }) }, handLook(row) { - this.viewState = 3 - this.$refs['divInfo'].showInfo(row, this.viewState) + if (row.loan) { + this.viewState = 5 + this.$refs['divFinancial'].showInfo(row, this.viewState) + } else { + this.viewState = 3 + this.$refs['divInfo'].showInfo(row, this.viewState) + } }, toRepush() { if (this.sids.length === 1) { diff --git a/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmationByFinancial.vue b/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmationByFinancial.vue new file mode 100644 index 0000000000..a60593c254 --- /dev/null +++ b/anrui-buscenter/anrui-finmanage-ui/src/views/anruifinmanagement/paymentConfirmation/cashierConfirmationByFinancial.vue @@ -0,0 +1,360 @@ + + + + + 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 3766f92e55..48a2e6a619 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 @@ -66,6 +66,7 @@ public enum ProcDefEnum { BEPADSINCEREAPPLY("逾期垫款申请", "process_h1mcb548:1:6712504"), BECOLLECTIONAPPLY("催收措施申请", "process_7xz17xva:1:7417504"), MONTHLYACCRUAL("当月应收计提申请", "process_7zpo52qj:1:7367504"), + LOANOVERDUEFIN("逾期对账申请(财务)", ""), /******************************测试流程id*********************************************/ diff --git a/anrui-riskcenter-ui/src/api/customerrepayment/customerrepayment.js b/anrui-riskcenter-ui/src/api/customerrepayment/customerrepayment.js new file mode 100644 index 0000000000..7c008c6c94 --- /dev/null +++ b/anrui-riskcenter-ui/src/api/customerrepayment/customerrepayment.js @@ -0,0 +1,22 @@ +import request from '@/utils/request' + +export default { + // 查询分页列表 -- 客户还款情况计划表 + listPage: function(params) { + return request({ + url: '/riskcenter/v1/loanrepaymenthistory/repaymentStatistics', + method: 'post', + data: params, + headers: { 'Content-Type': 'application/json' } + }) + }, + // 查询分页列表 -- 客户还款明细查询 + pageList: function(params) { + return request({ + url: '/riskcenter/v1/loanrepaymenthistory/repaymentDetailsList', + method: 'post', + data: params, + headers: { 'Content-Type': 'application/json' } + }) + }, +} diff --git a/anrui-riskcenter-ui/src/router/index.js b/anrui-riskcenter-ui/src/router/index.js index bc77bb0fbe..00d6b67710 100644 --- a/anrui-riskcenter-ui/src/router/index.js +++ b/anrui-riskcenter-ui/src/router/index.js @@ -449,6 +449,28 @@ export const constantRoutes = [ } ] }, + { + path: '/customerrepayment', + component: Layout, + redirect: '/customerrepayment', + meta: { + title: '客户还款' + }, + children: [ + { + path: '/customerrepayment/customerrepayment', + component: () => import('@/views/customerrepayment/customerrepayment.vue'), + name: 'CustomerRepayment', + meta: { title: '客户还款情况统计', noCache: true } + }, + { + path: '/customerrepayment/customerrepaymentdetails', + component: () => import('@/views/customerrepayment/customerrepaymentdetails.vue'), + name: 'CustomerRepaymentDetails', + meta: { title: '客户还款明细查询', noCache: true } + } + ] + }, { path: '/overduevehicle', component: Layout, diff --git a/anrui-riskcenter-ui/src/views/customerrepayment/customerrepayment.vue b/anrui-riskcenter-ui/src/views/customerrepayment/customerrepayment.vue new file mode 100644 index 0000000000..8bee66e7bc --- /dev/null +++ b/anrui-riskcenter-ui/src/views/customerrepayment/customerrepayment.vue @@ -0,0 +1,330 @@ + + + + diff --git a/anrui-riskcenter-ui/src/views/customerrepayment/customerrepaymentdetails.vue b/anrui-riskcenter-ui/src/views/customerrepayment/customerrepaymentdetails.vue new file mode 100644 index 0000000000..7c675da6fa --- /dev/null +++ b/anrui-riskcenter-ui/src/views/customerrepayment/customerrepaymentdetails.vue @@ -0,0 +1,346 @@ + + + + diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFin.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFin.java new file mode 100644 index 0000000000..6c489cd24b --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFin.java @@ -0,0 +1,43 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFin extends BaseEntity { + private static final long serialVersionUID = 9129799865000313133L; + @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/loanoverduefin/LoanOverdueFinDetailVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinDetailVo.java new file mode 100644 index 0000000000..c5ff940952 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinDetailVo.java @@ -0,0 +1,39 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +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/25 + **/ +@Data +public class LoanOverdueFinDetailVo { + + 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/loanoverduefin/LoanOverdueFinDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinDto.java new file mode 100644 index 0000000000..8b5d9dff0c --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinDto.java @@ -0,0 +1,33 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto; +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFinDto implements Dto { + private static final long serialVersionUID = 924273052526415079L; + + 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/loanoverduefin/LoanOverdueFinFeign.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeign.java new file mode 100644 index 0000000000..8801ab7d98 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeign.java @@ -0,0 +1,79 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.CompleteDto; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeQuery; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeVo; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyTaskQuery; +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsVo; +import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutionsFeignFallback; +import com.yxt.anrui.riskcenter.api.loantemplate.LoanTemplateQuery; +import com.yxt.anrui.riskcenter.api.loantemplate.LoanTemplateVo; +import com.yxt.anrui.riskcenter.api.loantemplate.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/25 + **/ +@FeignClient( + contextId = "anrui-riskcenter-LoanOverdueFin", + name = "anrui-riskcenter", + path = "v1/LoanOverdueFin", + fallback = LoanOverdueFinFeignFallback.class) +public interface LoanOverdueFinFeign { + + @ApiOperation("分页列表") + @PostMapping("/listPage") + ResultBean> listPage(@RequestBody PagerQuery pq); + + @ApiOperation("新增或修改") + @PostMapping("/listPage") + ResultBean saveOrUpdate(@RequestBody LoanOverdueFinDto 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 SubmitApplyDto dto); + + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@Valid @RequestBody CompleteDto query); + + @ApiOperation(value = "获取上一个环节") + @GetMapping(value = "/getPreviousNodesForReject") + ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap OverdueApplyNodeQuery query); + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap OverdueApplyNodeQuery query); + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public ResultBean taskReject(@Valid @RequestBody OverdueApplyTaskQuery query); + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess") + public ResultBean revokeProcess(@Valid @RequestBody OverdueApplyTaskQuery query); + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess") + public ResultBean breakProcess(@Valid @RequestBody OverdueApplyTaskQuery query); + +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeignFallback.java new file mode 100644 index 0000000000..1f9a5e73f6 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeignFallback.java @@ -0,0 +1,12 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import org.springframework.stereotype.Component; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Component +public class LoanOverdueFinFeignFallback { +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinQuery.java new file mode 100644 index 0000000000..1f458fe4bb --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinQuery.java @@ -0,0 +1,34 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFinQuery implements Query { + private static final long serialVersionUID = -1932149333671928968L; + @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/loanoverduefin/LoanOverdueFinVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinVo.java new file mode 100644 index 0000000000..da3c3c15fe --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinVo.java @@ -0,0 +1,33 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFinVo implements Vo { + private static final long serialVersionUID = -3978574514391361081L; + + 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/loanoverduefin/SubmitApplyDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/SubmitApplyDto.java new file mode 100644 index 0000000000..aa899bdc77 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/SubmitApplyDto.java @@ -0,0 +1,19 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/26 + **/ +@Data +public class SubmitApplyDto extends LoanOverdueFinDto { + + private static final long serialVersionUID = -8306701581329373696L; + @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/loanoverduefin/flowable/CompleteDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/CompleteDto.java new file mode 100644 index 0000000000..cf7a4d5452 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/CompleteDto.java @@ -0,0 +1,37 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin.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/26 + **/ +@Data +public class CompleteDto implements Dto { + + private static final long serialVersionUID = -4538880395421097165L; + @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/loanoverduefin/flowable/OverdueApplyNodeQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/OverdueApplyNodeQuery.java new file mode 100644 index 0000000000..e44411f4ab --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/OverdueApplyNodeQuery.java @@ -0,0 +1,18 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/26 + **/ +@Data +public class OverdueApplyNodeQuery { + + @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/loanoverduefin/flowable/OverdueApplyNodeVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/OverdueApplyNodeVo.java new file mode 100644 index 0000000000..64fe839f72 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/OverdueApplyNodeVo.java @@ -0,0 +1,26 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin.flowable; + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/26 + **/ +@Data +public class OverdueApplyNodeVo implements Vo { + private static final long serialVersionUID = -1497825424519567460L; + + @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/loanoverduefin/flowable/OverdueApplyTaskQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/OverdueApplyTaskQuery.java new file mode 100644 index 0000000000..557ad84ba6 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/flowable/OverdueApplyTaskQuery.java @@ -0,0 +1,43 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/26 + **/ +@Data +public class OverdueApplyTaskQuery { + + /** + * 终止、驳回、撤回 + */ + @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/loanoverduefindetails/LoanOverdueFinDetails.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetails.java new file mode 100644 index 0000000000..cf30a9fbda --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetails.java @@ -0,0 +1,33 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefindetails; + +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFinDetails extends BaseEntity { + private static final long serialVersionUID = -6018143288593527991L; + + private String mainSid; + @ApiModelProperty("客户名称") + private String customerName; + @ApiModelProperty("客户sid") + private String customerSid; + @ApiModelProperty("贷款人sid") + private String loanSid; + @ApiModelProperty("贷款人") + private String loanName; + @ApiModelProperty("当前逾期金额") + private String overdueMoney; + @ApiModelProperty("累欠") + private String tiredDeficiency; + @ApiModelProperty("差异金额") + private String diffMoney; + + +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsDto.java new file mode 100644 index 0000000000..ce1f94cc77 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsDto.java @@ -0,0 +1,30 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefindetails; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFinDetailsDto implements Dto { + private static final long serialVersionUID = 7484921327629725722L; + + @ApiModelProperty("客户名称") + private String customerName; + @ApiModelProperty("客户sid") + private String customerSid; + @ApiModelProperty("贷款人sid") + private String loanSid; + @ApiModelProperty("贷款人") + private String loanName; + @ApiModelProperty("当前逾期金额") + private String overdueMoney; + @ApiModelProperty("累欠") + private String tiredDeficiency; + @ApiModelProperty("差异金额") + private String diffMoney; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsFeign.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsFeign.java new file mode 100644 index 0000000000..26c1c51f49 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsFeign.java @@ -0,0 +1,16 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefindetails; + +import org.springframework.cloud.openfeign.FeignClient; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@FeignClient( + contextId = "anrui-riskcenter-LoanOverdueFinDetails", + name = "anrui-riskcenter", + path = "v1/LoanOverdueFinDetails", + fallback = LoanOverdueFinDetailsFeignFallback.class) +public interface LoanOverdueFinDetailsFeign { +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsFeignFallback.java new file mode 100644 index 0000000000..67d199366f --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsFeignFallback.java @@ -0,0 +1,12 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefindetails; + +import org.springframework.stereotype.Component; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Component +public class LoanOverdueFinDetailsFeignFallback { +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsVo.java new file mode 100644 index 0000000000..63493487f8 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefindetails/LoanOverdueFinDetailsVo.java @@ -0,0 +1,12 @@ +package com.yxt.anrui.riskcenter.api.loanoverduefindetails; + +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Data +public class LoanOverdueFinDetailsVo { +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinMapper.java new file mode 100644 index 0000000000..16a974fd05 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinMapper.java @@ -0,0 +1,29 @@ +package com.yxt.anrui.riskcenter.biz.loanoverduefin; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.yxt.anrui.riskcenter.api.loanoverduefin.LoanOverdueFin; +import com.yxt.anrui.riskcenter.api.loanoverduefin.LoanOverdueFinDetailVo; +import com.yxt.anrui.riskcenter.api.loanoverduefin.LoanOverdueFinVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Mapper +public interface LoanOverdueFinMapper extends BaseMapper { + IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); + + LoanOverdueFinDetailVo 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/loanoverduefin/LoanOverdueFinMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinMapper.xml new file mode 100644 index 0000000000..9d8ab22350 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinMapper.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + UPDATE loan_overdue_fin + 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/loanoverduefin/LoanOverdueFinRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinRest.java new file mode 100644 index 0000000000..284cbca0d5 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinRest.java @@ -0,0 +1,91 @@ +package com.yxt.anrui.riskcenter.biz.loanoverduefin; + +import cn.hutool.core.bean.BeanUtil; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.riskcenter.api.loanoverduefin.*; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.CompleteDto; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeQuery; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeVo; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyTaskQuery; +import com.yxt.anrui.riskcenter.api.loantemplate.LoanTemplateVo; +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/25 + **/ +@RestController +@RequestMapping("v1/LoanOverdueFin") +public class LoanOverdueFinRest implements LoanOverdueFinFeign { + + @Autowired + private LoanOverdueFinService loanOverdueFinService; + + @Override + public ResultBean> listPage(PagerQuery pq) { + ResultBean> rb = ResultBean.fireFail(); + PagerVo pv = loanOverdueFinService.listPageVo(pq); + return rb.success().setData(pv); + } + + @Override + public ResultBean saveOrUpdate(LoanOverdueFinDto dto) { + return loanOverdueFinService.saveOrUpdateOver(dto); + } + + @Override + public ResultBean details(String sid) { + return loanOverdueFinService.details(sid); + } + + @Override + public ResultBean delBySids(String[] sids) { + return loanOverdueFinService.delAllBySids(sids); + } + + @Override + public ResultBean submitApply(SubmitApplyDto dto) { + return loanOverdueFinService.submitApply(dto); + } + + @Override + public ResultBean complete(CompleteDto query) { + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + bv.setModelId(""); + return loanOverdueFinService.complete(bv); + } + + @Override + public ResultBean> getPreviousNodesForReject(OverdueApplyNodeQuery query) { + return loanOverdueFinService.getPreviousNodesForReject(query); + } + + @Override + public ResultBean> getNextNodesForSubmit(OverdueApplyNodeQuery query) { + return loanOverdueFinService.getNextNodesForSubmit(query); + } + + @Override + public ResultBean taskReject(OverdueApplyTaskQuery query) { + return loanOverdueFinService.taskReject(query); + } + + @Override + public ResultBean revokeProcess(OverdueApplyTaskQuery query) { + return loanOverdueFinService.revokeProcess(query); + } + + @Override + public ResultBean breakProcess(OverdueApplyTaskQuery query) { + return loanOverdueFinService.breakProcess(query); + } +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinService.java new file mode 100644 index 0000000000..2e9c77f403 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinService.java @@ -0,0 +1,523 @@ +package com.yxt.anrui.riskcenter.biz.loanoverduefin; + +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.loanoverduefin.*; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeQuery; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeVo; +import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyTaskQuery; +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto; +import com.yxt.anrui.riskcenter.biz.loanoverduefindetails.LoanOverdueFinDetailsService; +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/25 + **/ +@Service +public class LoanOverdueFinService extends MybatisBaseService { + + @Autowired + private SysUserFeign sysUserFeign; + @Autowired + private SysStaffOrgFeign sysStaffOrgFeign; + @Autowired + private SysOrganizationFeign sysOrganizationFeign; + @Autowired + private FileUploadComponent fileUploadComponent; + @Autowired + private LoanOverdueFinDetailsService loanOverdueFinDetailsService; + @Autowired + private FlowFeign flowFeign; + @Autowired + private MessageFeign messageFeign; + @Autowired + private FlowTaskFeign flowTaskFeign; + @Autowired + private FlowableFeign flowableFeign; + + public PagerVo listPageVo(PagerQuery pq) { + LoanOverdueFinQuery 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 (lof.createTime,'%Y-%m-%d') >= date_format('" + createStart + "','%Y-%m-%d')"). + apply(StringUtils.isNotBlank(createEnd), "date_format (lof.createTime,'%Y-%m-%d') <= date_format('" + createEnd + "','%Y-%m-%d')" + ); + if (StringUtils.isNotBlank(query.getUseOrgName())) { + qw.like("lof.useOrgName", query.getUseOrgName()); + } + + if (StringUtils.isNotBlank(query.getCreateByName())) { + qw.eq("lof.createByName", query.getCreateByName()); + } + if (StringUtils.isNotBlank(query.getCreateDept())) { + qw.eq("lof.createDept", query.getCreateDept()); + } + qw.apply(StringUtils.isNotBlank(query.getCloseDateStart()), "date_format (lof.closeDate,'%Y-%m-%d') >= date_format('" + query.getCloseDateStart() + "','%Y-%m-%d')"). + apply(StringUtils.isNotBlank(query.getCloseDateEnd()), "date_format (lof.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("lof.orgSidPath", orgSidPath); + } else if ("2".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i2); + qw.like("lof.orgSidPath", orgSidPath); + } else if ("3".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i3); + qw.like("lof.orgSidPath", orgSidPath); + } else if ("4".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i4); + qw.like("lof.orgSidPath", orgSidPath); + } else if ("5".equals(orgLevelKey)) { + qw.eq("lof.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; + } + + public ResultBean saveOrUpdateOver(LoanOverdueFinDto dto) { + ResultBean rb = ResultBean.fireFail(); + String sid = dto.getSid(); + if (StringUtils.isBlank(sid)) { + LoanOverdueFin loanOverdueFin = new LoanOverdueFin(); + BeanUtil.copyProperties(dto, loanOverdueFin, "sid"); + loanOverdueFin.setCreateBySid(dto.getUserSid()); + String orgPath = dto.getOrgPath(); + loanOverdueFin.setOrgSidPath(orgPath); + String useOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData(); + loanOverdueFin.setUseOrgSid(useOrgSid); + //创建组织使用组织 + ResultBean organizationResultBean = sysOrganizationFeign.fetchBySid(useOrgSid); + if (organizationResultBean.getData() != null) { + loanOverdueFin.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) { + loanOverdueFin.setCreateDept(sysOrganizationVoResultBean.getData().getName()); + loanOverdueFin.setCreateDeptSid(deptSid); + } + List filesList = dto.getFilesList(); + if (!filesList.isEmpty()) { + String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), ""); + loanOverdueFin.setFiles(files); + } + List detailsVoList = dto.getDetailsVoList(); + detailsVoList.removeAll(Collections.singleton(null)); + if (!detailsVoList.isEmpty()) { + loanOverdueFinDetailsService.saveOrUpdateDetails(detailsVoList, loanOverdueFin.getSid()); + } + sid = loanOverdueFin.getSid(); + } else { + LoanOverdueFin loanOverdueFin = fetchBySid(sid); + if (loanOverdueFin == null) { + return rb.setMsg("该申请不存在"); + } + BeanUtil.copyProperties(dto, loanOverdueFin, "sid"); + List filesList = dto.getFilesList(); + if (!filesList.isEmpty()) { + String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), ""); + loanOverdueFin.setFiles(files); + } + List detailsVoList = dto.getDetailsVoList(); + detailsVoList.removeAll(Collections.singleton(null)); + if (!detailsVoList.isEmpty()) { + loanOverdueFinDetailsService.saveOrUpdateDetails(detailsVoList, loanOverdueFin.getSid()); + } + } + return rb.success().setData(sid); + } + + public ResultBean details(String sid) { + ResultBean rb = ResultBean.fireFail(); + LoanOverdueFin loanOverdueFin = fetchBySid(sid); + if (loanOverdueFin == null) { + return rb.setMsg("该申请不存在"); + } + LoanOverdueFinDetailVo loanOverdueFinDetailVo = baseMapper.details(sid); + List detailsVoList = loanOverdueFinDetailsService.selectByMainSid(sid); + detailsVoList.removeAll(Collections.singleton(null)); + if (!detailsVoList.isEmpty()) { + loanOverdueFinDetailVo.setDetailsVoList(detailsVoList); + } + String files = loanOverdueFinDetailVo.getFiles(); + if (StringUtils.isNotBlank(files)) { + List fileList = Arrays.asList(files.split(",")).stream().map(c -> fileUploadComponent.getUrlPrefix() + c).collect(Collectors.toList()); + loanOverdueFinDetailVo.setFilesList(fileList); + } + return rb.success().setData(loanOverdueFinDetailVo); + } + + 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++) { + loanOverdueFinDetailsService.deleteByMainSid(sidss.get(i)); + } + delBySids(sids); + return rb.success().setMsg("删除成功"); + } + + public ResultBean submitApply(SubmitApplyDto dto) { + ResultBean rb = ResultBean.fireFail(); + LoanOverdueFin loanOverdueFin = fetchBySid(dto.getSid()); + int r = submitBusinessData(dto, loanOverdueFin); + if (r == 3) { + return rb.setMsg("该申请不存在"); + } + if (r == 0) { + return rb.setMsg("操作失败!提交的数据不一致"); + } + ResultBean resultBean = saveOrUpdateOver(dto); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + String businessSid = resultBean.getData(); + loanOverdueFin = 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(loanOverdueFin.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)); + loanOverdueFin = 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()); + LoanOverdueFin finalLoanOverdueFin = loanOverdueFin; + 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(finalLoanOverdueFin.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(loanOverdueFin.getTaskId()); + bv.setTaskDefKey(loanOverdueFin.getTaskDefKey()); + bv.setComment("重新提交"); + bv.setInstanceId(dto.getInstanceId()); + return complete(bv); + } + return rb; + } + + private int submitBusinessData(SubmitApplyDto dto, LoanOverdueFin loanOverdueFin) { + int r = 0; + if (StringUtils.isBlank(dto.getSid())) { + r = 1; + } else { + if (loanOverdueFin != null) { + String businessTaskId = loanOverdueFin.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; + } + + private int updateFlowFiled(Map beanToMap) { + return baseMapper.updateFlowFiled(beanToMap); + } + + public ResultBean complete(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = bv.getBusinessSid(); + LoanOverdueFin loanOverdueFin = fetchBySid(businessSid); + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + bv.setFormVariables(variables); + bv.setOrgSidPath(loanOverdueFin.getOrgSidPath()); + bv.setModelId(loanOverdueFin.getProcDefId()); + if (bv.getTaskId().equals(loanOverdueFin.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 { + //极光推送 + loanOverdueFin = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + messageFlowVo.setProcDefId(loanOverdueFin.getProcDefId()); + messageFlowVo.setProcInsId(loanOverdueFin.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName("逾期对账申请(财务)"); + messageFlowableQuery.setMsgContent(loanOverdueFin.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("逾期对账申请(财务)"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + } + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } + } + + public ResultBean> getPreviousNodesForReject(OverdueApplyNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + LoanOverdueFin loanOverdueFin = fetchBySid(query.getBusinessSid()); + bv.setModelId(loanOverdueFin.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), OverdueApplyNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean> getNextNodesForSubmit(OverdueApplyNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + LoanOverdueFin loanOverdueFin = fetchBySid(query.getBusinessSid()); + bv.setModelId(loanOverdueFin.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), OverdueApplyNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean taskReject(OverdueApplyTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = query.getBusinessSid(); + LoanOverdueFin loanOverdueFin = fetchBySid(businessSid); + if (loanOverdueFin == null) { + return rb.setMsg("该申请不存在"); + } + String businessTaskId = loanOverdueFin.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); + //极光推送 + loanOverdueFin = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + String procId = loanOverdueFin.getProcInstId(); + messageFlowVo.setProcInsId(procId); + messageFlowVo.setProcDefId(loanOverdueFin.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(loanOverdueFin.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + } + + messageFlowableQuery.setMsgTitle("逾期对账申请(财务)"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean revokeProcess(OverdueApplyTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + LoanOverdueFin loanOverdueFin = fetchBySid(query.getBusinessSid()); + String businessTaskId = loanOverdueFin.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 breakProcess(OverdueApplyTaskQuery 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("请填写意见"); + } + LoanOverdueFin loanOverdueFin = fetchBySid(query.getBusinessSid()); + String businessTaskId = loanOverdueFin.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (query.getUserSid().equals(loanOverdueFin.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("操作失败!提交的数据不一致!"); + } +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsMapper.java new file mode 100644 index 0000000000..7ac09d366c --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsMapper.java @@ -0,0 +1,20 @@ +package com.yxt.anrui.riskcenter.biz.loanoverduefindetails; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetails; +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Mapper +public interface LoanOverdueFinDetailsMapper 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/loanoverduefindetails/LoanOverdueFinDetailsMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsMapper.xml new file mode 100644 index 0000000000..6206e0c51c --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsMapper.xml @@ -0,0 +1,22 @@ + + + + + delete + from loan_overdue_fin_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/loanoverduefindetails/LoanOverdueFinDetailsRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsRest.java new file mode 100644 index 0000000000..b072fe2414 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsRest.java @@ -0,0 +1,14 @@ +package com.yxt.anrui.riskcenter.biz.loanoverduefindetails; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@RestController +@RequestMapping("v1/LoanOverdueFinDetails") +public class LoanOverdueFinDetailsRest { +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsService.java new file mode 100644 index 0000000000..472545fcbd --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefindetails/LoanOverdueFinDetailsService.java @@ -0,0 +1,36 @@ +package com.yxt.anrui.riskcenter.biz.loanoverduefindetails; + +import cn.hutool.core.bean.BeanUtil; +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetails; +import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.core.result.ResultBean; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/12/25 + **/ +@Service +public class LoanOverdueFinDetailsService extends MybatisBaseService { + public void saveOrUpdateDetails(List detailsVoList, String sid) { + baseMapper.deleteByMainSid(sid); + detailsVoList.stream().forEach(dto -> { + LoanOverdueFinDetails loanOverdueFinDetails = new LoanOverdueFinDetails(); + BeanUtil.copyProperties(dto, loanOverdueFinDetails, "sid"); + loanOverdueFinDetails.setMainSid(sid); + baseMapper.insert(loanOverdueFinDetails); + }); + } + + 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 23ac7d9e32..3aa03c0a46 100644 --- a/doc/databases/risk_center.sql +++ b/doc/databases/risk_center.sql @@ -1256,6 +1256,71 @@ CREATE TABLE `loan_fund_day` DEFAULT CHARSET = utf8 COMMENT ='每日资金占用费记录表'; +-- 逾期对账申请(财务)管理 +DROP TABLE IF EXISTS `loan_overdue_fin`; +CREATE TABLE `loan_overdue_fin` +( + `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_fin_details`; +CREATE TABLE `loan_overdue_fin_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', + `customerName` varchar(64) DEFAULT NULL COMMENT '客户名称', + `customerSid` varchar(64) DEFAULT NULL COMMENT '客户sid', + `loanSid` varchar(64) DEFAULT NULL COMMENT '贷款人sid', + `loanName` varchar(64) DEFAULT NULL COMMENT '贷款人名称', + `overdueMoney` decimal(10, 2) DEFAULT NULL COMMENT '当前逾期金额', + `tiredDeficiency` 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 ='逾期对账申请(财务)管理-明细'; + + + + + diff --git a/doc/databases/报表中心.sql b/doc/databases/报表中心.sql index 02cdcd33c9..d2185666db 100644 --- a/doc/databases/报表中心.sql +++ b/doc/databases/报表中心.sql @@ -81,7 +81,7 @@ UPDATE daily_report r INNER JOIN (select count(bbv.id) as scount, bbv.modelSid, bbv.modelConfigSid, bbm.orgSid useOrgSid from anrui_buscenter.bus_main_deposit bbm left join anrui_buscenter.bus_deposit_vehicle bbv on bbv.billSid = bbm.sid - where bbm.createTime like concat('%', CURDATE(), '%') + where bbm.createTime like concat('%', CURDATE(), '%') and bbm.nodeState = '已办结' GROUP BY `useOrgSid`, `modelSid`, `modelConfigSid` @@ -98,7 +98,7 @@ UPDATE daily_report r INNER JOIN (select count(bbv.id) as scount, bbv.modelSid, bbv.modelConfigSid, bbm.orgSid useOrgSid from anrui_buscenter.bus_main_deposit bbm left join anrui_buscenter.bus_deposit_vehicle bbv on bbv.billSid = bbm.sid - where bbm.createTime like concat('%', DATE_FORMAT(CURDATE(), '%Y-%m'), '%') + where bbm.createTime like concat('%', DATE_FORMAT(CURDATE(), '%Y-%m'), '%') and bbm.nodeState = '已办结' GROUP BY `useOrgSid`, `modelSid`, `modelConfigSid` @@ -116,7 +116,7 @@ UPDATE daily_report r left join anrui_buscenter.bus_sales_order_model bm on bm.salesOrderSid = bo.sid left join anrui_buscenter.bus_sales_order_vehicle bv on bv.salesOrderSid = bo.sid where bo.closingDate like concat('%', CURDATE(), '%') - and bo.payTypeKey = 1 + and bo.payTypeKey = 1 and bo.nodeState = '已办结' group by useOrgSid, modelSid, modelConfigSid ) AS s ON r.useOrgSid = s.useOrgSid AND r.vehModelSid = s.modelSid @@ -130,7 +130,7 @@ UPDATE daily_report r left join anrui_buscenter.bus_sales_order_model bm on bm.salesOrderSid = bo.sid left join anrui_buscenter.bus_sales_order_vehicle bv on bv.salesOrderSid = bo.sid where bo.closingDate like concat('%', CURDATE(), '%') - and bo.payTypeKey = 2 + and bo.payTypeKey = 2 and bo.nodeState = '已办结' group by useOrgSid, modelSid, modelConfigSid ) AS s ON r.useOrgSid = s.useOrgSid AND r.vehModelSid = s.modelSid @@ -164,7 +164,7 @@ UPDATE daily_report r left join anrui_buscenter.bus_sales_order_model bm on bm.salesOrderSid = bo.sid left join anrui_buscenter.bus_sales_order_vehicle bv on bv.salesOrderSid = bo.sid where bo.closingDate like concat('%', DATE_FORMAT(CURDATE(), '%Y-%m'), '%') - and bo.payTypeKey = 1 + and bo.payTypeKey = 1 and bo.nodeState = '已办结' group by useOrgSid, modelSid, modelConfigSid ) AS s ON r.useOrgSid = s.useOrgSid AND r.vehModelSid = s.modelSid @@ -178,7 +178,7 @@ UPDATE daily_report r left join anrui_buscenter.bus_sales_order_model bm on bm.salesOrderSid = bo.sid left join anrui_buscenter.bus_sales_order_vehicle bv on bv.salesOrderSid = bo.sid where bo.closingDate like concat('%', DATE_FORMAT(CURDATE(), '%Y-%m'), '%') - and bo.payTypeKey = 2 + and bo.payTypeKey = 2 and bo.nodeState = '已办结' group by useOrgSid, modelSid, modelConfigSid ) AS s ON r.useOrgSid = s.useOrgSid AND r.vehModelSid = s.modelSid @@ -604,7 +604,8 @@ update daily_report r inner join (select sum(cc.scount) as scount,cc.useOrgSid, left join anrui_buscenter.bus_sales_order_model bm on bm.salesOrderSid = bo.sid left join anrui_fin.fin_uncollected_receivables_detailed fd on fd.busVinSid = bv.sid left join anrui_fin.fin_selected_receivables_detailed fs on fs.receivablesSid = fd.sid - where ba.nodeState = '已办结' + left join anrui_base.base_vehicle bbv on bbv.sid = bv.linkSid + where ba.nodeState = '已办结' and ba.paymentMethodKey = 1 and bbv.vehicleState = '0002' group by bv.sid, ba.useOrgSid, bm.modelSid, bm.modelConfigSid having sum(fd.reveivableMoney) > ifnull(sum(fs.subscriptionMoney), 0)) cc ) s @@ -641,7 +642,8 @@ update daily_report r inner join (select sum(cc.scount) as scount,cc.useOrgSid, left join anrui_buscenter.bus_sales_order_model bm on bm.salesOrderSid = bo.sid left join anrui_fin.fin_uncollected_receivables_detailed fd on fd.busVinSid = bv.sid left join anrui_fin.fin_selected_receivables_detailed fs on fs.receivablesSid = fd.sid - where ba.nodeState = '已办结' + left join anrui_base.base_vehicle bbv on bbv.sid = bv.linkSid + where ba.nodeState = '已办结' and ba.paymentMethodKey = 1 and bbv.vehicleState = '0002' group by bv.sid, ba.useOrgSid, bm.modelSid, bm.modelConfigSid having sum(fd.reveivableMoney) > ifnull(sum(fs.subscriptionMoney), 0)) cc ) s