From d08292556b835e6d3d36318ba41e119af4a70e78 Mon Sep 17 00:00:00 2001 From: fanzongzhe <285169773@qq.com> Date: Fri, 21 Jul 2023 10:15:17 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E7=BB=8F=E9=94=80=E5=95=86=E5=A4=87?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/basedistributor/BaseDistributor.java | 14 + .../BaseDistributorDetailsVo.java | 11 +- .../basedistributor/BaseDistributorDto.java | 1 + .../basedistributor/BaseDistributorFeign.java | 51 +- .../BaseDistributorFeignFallback.java | 51 + .../basedistributor/BaseDistributorVo.java | 7 + .../basedistributor/app/BaseDisDetailsVo.java | 3 +- .../app/BaseDistribuDeailVo.java | 3 +- .../app/BaseDistributorsVo.java | 2 + .../flow/AppSubmitDistributorApplyDto.java | 23 + .../flow/BaseDistributorCompleteDto.java | 40 + .../flow/BaseDistributorTaskQuery.java | 56 + .../basedistributor/flow/GetNodeQuery.java | 26 + .../api/basedistributor/flow/GetNodeVo.java | 25 + .../flow/SubmitBaseDistributorApplyDto.java | 22 + .../BaseDistributorMapper.java | 2 + .../basedistributor/BaseDistributorMapper.xml | 37 +- .../basedistributor/BaseDistributorRest.java | 71 + .../BaseDistributorService.java | 708 ++++++++- .../biz/bushandover/BusHandoverService.java | 3 +- .../BusVehicleDataHandoverService.java | 2 +- .../ftl/receiveVehicleConfirmation.ftl | 34 +- .../main/resources/ftl/vinHandoverData.ftl | 1287 +++++++++++++++++ .../autoservice/distributor/DisDetailsVo.java | 4 + .../distributor/DisInitDetailsVo.java | 5 +- .../distributor/DistributorFeign.java | 44 + .../distributor/DistributorVo.java | 4 +- .../flowable/CompleteDistributorDto.java | 33 + .../flowable/DistributorFlowableQuery.java | 21 + .../flowable/DistributorTaskQuery.java | 44 + .../flowable/SubmitDistributorApplyDto.java | 22 + .../distributor/DistributorRest.java | 39 + .../distributor/DistributorService.java | 139 ++ 33 files changed, 2800 insertions(+), 34 deletions(-) create mode 100644 anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/AppSubmitDistributorApplyDto.java create mode 100644 anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorCompleteDto.java create mode 100644 anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorTaskQuery.java create mode 100644 anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeQuery.java create mode 100644 anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeVo.java create mode 100644 anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/SubmitBaseDistributorApplyDto.java create mode 100644 anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/vinHandoverData.ftl create mode 100644 anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/autoservice/distributor/flowable/CompleteDistributorDto.java create mode 100644 anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/autoservice/distributor/flowable/DistributorFlowableQuery.java create mode 100644 anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/autoservice/distributor/flowable/DistributorTaskQuery.java create mode 100644 anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/autoservice/distributor/flowable/SubmitDistributorApplyDto.java diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributor.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributor.java index 1d33ebc4f0..1603efd718 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributor.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributor.java @@ -98,4 +98,18 @@ public class BaseDistributor extends BaseEntity { private String disLevelKey; @ApiModelProperty("级别value") private String disLevelValue; + @ApiModelProperty("流程定义的id") + private String procDefId; + @ApiModelProperty("环节定义的sid") + private String nodeSid; + @ApiModelProperty("流程实例的id") + private String procInstId; + @ApiModelProperty("流程状态") + private String nodeState; + @ApiModelProperty("任务id") + private String taskId; + @ApiModelProperty("使用组织全路径") + private String orgSidPath; + @ApiModelProperty("办结日期") + private Date closingDate; } diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDetailsVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDetailsVo.java index 99541a864a..8629d64dfa 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDetailsVo.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDetailsVo.java @@ -24,7 +24,7 @@ public class BaseDistributorDetailsVo implements Vo { @ApiModelProperty("统一社会信用代码") private String registNum; @ApiModelProperty("成立时间") - @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date setUpTime; @ApiModelProperty("注册(登记)地址") private String registDetailAddress; @@ -71,7 +71,7 @@ public class BaseDistributorDetailsVo implements Vo { @ApiModelProperty("是否担保 0是/1否") private String isGuarantee; @ApiModelProperty("开始合作日期") - @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date startCoopDate; @ApiModelProperty("创建组织") private String createOrg; @@ -101,4 +101,11 @@ public class BaseDistributorDetailsVo implements Vo { private List frsfzList; @ApiModelProperty("其他资料附件list") private List qtzlList; + @ApiModelProperty("taskId") + private String taskId; // taskId + @ApiModelProperty("流程实例的sid") + private String procInsId; // 流程实例的sid + @ApiModelProperty("userSid") + private String userSid; + private String orgSidPath; } diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDto.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDto.java index ca99df98a4..2f6987158a 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDto.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorDto.java @@ -108,4 +108,5 @@ public class BaseDistributorDto implements Dto { private List frsfzList; @ApiModelProperty("其他资料附件list") private List qtzlList; + private String orgSidPath; } \ No newline at end of file diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeign.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeign.java index 98106f87f5..e4965fae94 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeign.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeign.java @@ -1,12 +1,14 @@ package com.yxt.anrui.base.api.basedistributor; import com.yxt.anrui.base.api.basedistributor.app.*; +import com.yxt.anrui.base.api.basedistributor.flow.*; 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.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.*; @@ -82,8 +84,46 @@ public interface BaseDistributorFeign { @ApiOperation("PC端-中介人员-经销商列表") @PostMapping("/getDistributors") ResultBean> getDistributors(@RequestBody BaseDistributorsListQuery pagerQuery); - //---------------------------------------移动端-------------------------------------------------// + //---------------------------------------------- 流程接口 --------------------------------------------------/ + @ApiOperation("经销商备案提交") + @PostMapping("/submit") + public ResultBean submitRecordApplication(@RequestBody @Valid SubmitBaseDistributorApplyDto dto); + + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@Valid @RequestBody BaseDistributorCompleteDto dto); + + //分公司到风控中心同意 + @ApiOperation(value = "办理(同意)") + @PostMapping("/companyToDivisionOperate") + public ResultBean companyToDivisionOperate(@Valid @RequestBody BaseDistributorCompleteDto query); + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess") + public ResultBean revokeProcess(@ApiParam(value = "工作流任务相关--请求参数") @RequestBody BaseDistributorTaskQuery query); + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public ResultBean taskReject(@ApiParam(value = "工作流任务相关--请求参数") @RequestBody BaseDistributorTaskQuery query); + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess") + public ResultBean breakProcess(@RequestBody BaseDistributorTaskQuery query); + + @ApiOperation(value = "流程历史流转记录") + @GetMapping(value = "/task/flowRecord/{procInsId}/{deployId}") + public ResultBean flowRecord(@ApiParam(value = "流程实例id") @PathVariable(value = "procInsId") String procInsId); + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap GetNodeQuery query); + + @ApiOperation(value = "获取上一个环节") + @GetMapping(value = "/getPreviousNodesForReject") + ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap GetNodeQuery query); + + //---------------------------------------移动端-------------------------------------------------// @ApiOperation("移动端-销售订单-经销商分页列 表") @PostMapping("/getDistributorList") ResultBean> getDistributorList(@RequestBody PagerQuery pagerQuery); @@ -142,13 +182,18 @@ public interface BaseDistributorFeign { @ApiOperation("查询所有经销商信息") @GetMapping("/selectAllDisList") - ResultBean> selectAllDisList(@RequestParam("orgSid") String orgSid,@RequestParam("staffSid") String staffSid); + ResultBean> selectAllDisList(@RequestParam("orgSid") String orgSid, @RequestParam("staffSid") String staffSid); @ApiOperation("移动端查询经销商和客户信息") @GetMapping("/invoiceName") - ResultBean> invoiceName(@RequestParam("userSid") String userSid,@RequestParam("orgPath") String orgPath,@RequestParam(value = "search",required = false) String search); + ResultBean> invoiceName(@RequestParam("userSid") String userSid, @RequestParam("orgPath") String orgPath, @RequestParam(value = "search", required = false) String search); @ApiOperation("根据sid查询所有经销商信息") @GetMapping("/selectDisListBySid/{sid}") ResultBean selectDisListBySid(@PathVariable("sid") String sid); + + //---------------------------------------移动端流程---------------------------------------------// + @ApiOperation("经销商备案提交") + @PostMapping("/submitDistributor") + public ResultBean submitDistributor(@RequestBody @Valid AppSubmitDistributorApplyDto dto); } \ No newline at end of file diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeignFallback.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeignFallback.java index de95d0f4f4..8f2e2f8b36 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeignFallback.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorFeignFallback.java @@ -1,6 +1,7 @@ package com.yxt.anrui.base.api.basedistributor; import com.yxt.anrui.base.api.basedistributor.app.*; +import com.yxt.anrui.base.api.basedistributor.flow.*; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; @@ -82,6 +83,51 @@ public class BaseDistributorFeignFallback implements BaseDistributorFeign { return null; } + @Override + public ResultBean submitRecordApplication(SubmitBaseDistributorApplyDto dto) { + return null; + } + + @Override + public ResultBean complete(BaseDistributorCompleteDto dto) { + return null; + } + + @Override + public ResultBean companyToDivisionOperate(BaseDistributorCompleteDto query) { + return null; + } + + @Override + public ResultBean revokeProcess(BaseDistributorTaskQuery query) { + return null; + } + + @Override + public ResultBean taskReject(BaseDistributorTaskQuery query) { + return null; + } + + @Override + public ResultBean breakProcess(BaseDistributorTaskQuery query) { + return null; + } + + @Override + public ResultBean flowRecord(String procInsId) { + return null; + } + + @Override + public ResultBean> getNextNodesForSubmit(GetNodeQuery query) { + return null; + } + + @Override + public ResultBean> getPreviousNodesForReject(GetNodeQuery query) { + return null; + } + @Override public ResultBean> getDistributorList(PagerQuery pagerQuery) { return null; @@ -167,5 +213,10 @@ public class BaseDistributorFeignFallback implements BaseDistributorFeign { return null; } + @Override + public ResultBean submitDistributor(AppSubmitDistributorApplyDto dto) { + return null; + } + } \ No newline at end of file diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorVo.java index 8c3c617c99..96018d6534 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorVo.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/BaseDistributorVo.java @@ -102,4 +102,11 @@ public class BaseDistributorVo implements Vo { private String disLevelValue; @ApiModelProperty("是否关联(0未关联,1已关联)") private String isRelation; + @ApiModelProperty("备案状态") + private String state; + private String procDefId; + @ApiModelProperty("实例id") + private String procInstId; + @ApiModelProperty("流程状态") + private String nodeState; } diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDisDetailsVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDisDetailsVo.java index 49ac1bf739..773b9075f7 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDisDetailsVo.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDisDetailsVo.java @@ -22,6 +22,7 @@ public class BaseDisDetailsVo implements Vo { private BaseFileVo fileInfo; @ApiModelProperty(value = "人员列表") private List records; - + private String procInstId; + private String taskId; } diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistribuDeailVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistribuDeailVo.java index 89f8fe6124..fe76a6da4d 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistribuDeailVo.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistribuDeailVo.java @@ -20,7 +20,8 @@ public class BaseDistribuDeailVo implements Vo { private Integer invoiceInfoState; @ApiModelProperty(value = "文件信息状态") private Integer fileInfoState; - + private String procInstId; + private String taskId; private List records; } diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistributorsVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistributorsVo.java index 3f75aa9f16..89b31a2269 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistributorsVo.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/app/BaseDistributorsVo.java @@ -31,4 +31,6 @@ public class BaseDistributorsVo implements Vo { private String invoPhone; @ApiModelProperty(value = "成立日期") private String setUpTime; + //private String nodeState; + private boolean updateBtn; } diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/AppSubmitDistributorApplyDto.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/AppSubmitDistributorApplyDto.java new file mode 100644 index 0000000000..60810c8704 --- /dev/null +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/AppSubmitDistributorApplyDto.java @@ -0,0 +1,23 @@ +package com.yxt.anrui.base.api.basedistributor.flow; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Administrator + * @description + * @date 2023/7/14 9:15 + */ +@Data +public class AppSubmitDistributorApplyDto implements Dto { + @ApiModelProperty("distributorSid") + private String distributorSid; + @ApiModelProperty("任务id") + private String taskId; + @ApiModelProperty("流程实例id") + @JsonProperty("procInsId") + private String instanceId; + +} diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorCompleteDto.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorCompleteDto.java new file mode 100644 index 0000000000..c02d08103d --- /dev/null +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorCompleteDto.java @@ -0,0 +1,40 @@ +package com.yxt.anrui.base.api.basedistributor.flow; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.util.Map; + +/** + * @Author dimengzhe + * @Date 2022/6/28 9:01 + * @Description + */ +@Data +public class BaseDistributorCompleteDto implements Dto { + private static final long serialVersionUID = 3240453987322803352L; + @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 = "意见") + @NotBlank(message = "参数错误:comment") + private String comment; + @ApiModelProperty(value = "业务sid") + @NotBlank(message = "参数错误:businessSid") + private String businessSid; + @ApiModelProperty(value = "分支字段及业务字段") + private Map formVariables; +} diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorTaskQuery.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorTaskQuery.java new file mode 100644 index 0000000000..9715775bd1 --- /dev/null +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/BaseDistributorTaskQuery.java @@ -0,0 +1,56 @@ +package com.yxt.anrui.base.api.basedistributor.flow; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Author dimengzhe + * @Date 2022/6/28 17:29 + * @Description 终止、撤回、驳回查询参数 + */ +@Data +public class BaseDistributorTaskQuery implements Query { + private static final long serialVersionUID = -4006020771892400451L; + /** + * 终止、驳回、撤回 + */ + @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; + /*@ApiModelProperty("用户Id") + private String userId; + @ApiModelProperty("节点") + private String targetKey; + @ApiModelProperty("流程变量信息") + private Map values = new HashMap<>(); + @ApiModelProperty("审批人") + private String assignee; + @ApiModelProperty("候选人") + private List candidateUsers = new ArrayList<>(); + @ApiModelProperty("审批组") + private List candidateGroups = new ArrayList<>();*/ +} diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeQuery.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeQuery.java new file mode 100644 index 0000000000..35032b4e74 --- /dev/null +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeQuery.java @@ -0,0 +1,26 @@ +package com.yxt.anrui.base.api.basedistributor.flow; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Map; + +/** + * @Author dimengzhe + * @Date 2022/6/28 10:42 + * @Description + */ +@Data +public class GetNodeQuery implements Query { + private static final long serialVersionUID = -5674867230708197611L; + + @ApiModelProperty(value = "环节定义id") + private String taskDefKey; + @ApiModelProperty(value = "业务sid") + private String businessSid; + + @ApiModelProperty(value = "分支字段及业务字段") + private Map formVariables; + +} diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeVo.java new file mode 100644 index 0000000000..94d40520c8 --- /dev/null +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/GetNodeVo.java @@ -0,0 +1,25 @@ +package com.yxt.anrui.base.api.basedistributor.flow; + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author dimengzhe + * @Date 2022/6/28 11:09 + * @Description + */ +@Data +public class GetNodeVo implements Vo { + private static final long serialVersionUID = 8802774014747063504L; + @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-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/SubmitBaseDistributorApplyDto.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/SubmitBaseDistributorApplyDto.java new file mode 100644 index 0000000000..20a755f9c9 --- /dev/null +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basedistributor/flow/SubmitBaseDistributorApplyDto.java @@ -0,0 +1,22 @@ +package com.yxt.anrui.base.api.basedistributor.flow; + +import com.yxt.anrui.base.api.basedistributor.BaseDistributorDto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author dimengzhe + * @Date 2022/6/27 13:38 + * @Description + */ +@Data +public class SubmitBaseDistributorApplyDto extends BaseDistributorDto { + private static final long serialVersionUID = 378585162071125756L; + @ApiModelProperty("流程实例id") + private String instanceId; + @ApiModelProperty("任务id") + private String taskId; + @ApiModelProperty("业务sid") + private String sid; +} diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.java index d0410c1f7c..2aa5b669b5 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.java @@ -136,4 +136,6 @@ public interface BaseDistributorMapper extends BaseMapper { BaseDistributorListVo selectDisListBySid(String sid); List selectAppAllDisList(@Param("sid") String sid, @Param("search") String search); + + int updateFlowFiled(Map map); } \ No newline at end of file diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.xml b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.xml index 1964ffaf6c..beeed4c8f7 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.xml +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basedistributor/BaseDistributorMapper.xml @@ -12,7 +12,14 @@ bd.invoBankNum, bd.setUpTime, bd.isGuarantee, - bd.pDistributorName + bd.pDistributorName, + bd.procDefId, + bd.procInstId, + bd.nodeState, + case bd.state + when 1 then '未报备' + when 3 then '报备中' + when 2 then '已报备' end as `state` FROM base_distributor bd ${ew.sqlSegment} @@ -95,7 +102,7 @@ SELECT bd.sid, bd.disName, - case bd.state - when 1 then '未备案' - when 2 then '已备案' end as state, + bd.nodeState as state, if(length(bd.pDistributorName)>0,bd.pDistributorName,'无') as pDistributorName, bd.registNum, bd.registDetailAddress, bd.invoPhone, + bd.nodeState, DATE_FORMAT(bd.setUpTime, '%Y-%m-%d') as setUpTime FROM base_distributor bd @@ -168,7 +174,7 @@ @@ -194,6 +200,21 @@ invoBank = #{invoBank} where sid = #{sid} + + UPDATE base_distributor + SET nodeState=#{nodeState} + , nodeSid=#{taskDefKey} + + , procDefId=#{procDefId} + + + , procInstId=#{procInsId} + + + , taskId=#{taskId} + + WHERE sid = #{sid} + SELECT - fcc.sid, + fsrd.sid, fcc.useOrgSid, fcc.staffDeptName, fcc.staffUserSid AS staffSid, fcc.staffName, fcc.`billNo`, - fcc.`payerName`, + fsrd.`customerName`, bd.`draweeMobile` AS phone, fcc.collectionDate, fcc.collectionMoney, @@ -215,9 +215,9 @@ fcc.collectionMoney - COALESCE(SUM(ffc.`thisUseMoney`), 0) ) AS balance FROM - fin_collection_confirmation fcc - LEFT JOIN fin_selected_receivables_detailed fsrd - ON fcc.`sid` = fsrd.`collSid` + fin_selected_receivables_detailed fsrd + JOIN fin_collection_confirmation fcc + ON fcc.`sid` = fsrd.`collSid` AND fcc.`pushMessgae` = 1 LEFT JOIN anrui_buscenter.`bus_deposit` bd ON fcc.`busSid` = bd.`billSid` LEFT JOIN `fin_funds_carried_forward_veh` ffc diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java index 4fed445e92..74b765a6c5 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java @@ -2771,7 +2771,7 @@ public class FinCollectionConfirmationService extends MybatisBaseService wrapper.like("fcc.billNo", query.getName()).or().like("fcc.staffDeptName", query.getName()).or().like("fcc.staffName", query.getName()).or().like("fcc.payerName", query.getName()).or().like("bd.draweeMobile", query.getName())); } - qw.isNotNull("fcc.busSid"); - qw.groupBy("fcc.sid"); + qw.groupBy("fsrd.sid"); if (StringUtils.isNotBlank(query.getCollectionSmallMoney()) && StringUtils.isNotBlank(query.getCollectionBigMoney())){ qw.having("balance > 0").having("balance >= {0}", query.getCollectionSmallMoney()).having("balance <= {0}", query.getCollectionBigMoney()); }else { diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardapply/FinFundsCarriedForwardApplyService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardapply/FinFundsCarriedForwardApplyService.java index 834fc41e9a..d18bf54974 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardapply/FinFundsCarriedForwardApplyService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardapply/FinFundsCarriedForwardApplyService.java @@ -36,7 +36,6 @@ import com.yxt.anrui.base.api.commonappendix.CommonAppendixDto; import com.yxt.anrui.base.api.commonappendix.CommonAppendixFeign; import com.yxt.anrui.base.api.commonappendix.CommonAppendixVo; import com.yxt.anrui.base.common.utils.Rule; -import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder; import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign; import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle; import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign; @@ -53,12 +52,10 @@ import com.yxt.anrui.fin.api.finfundscarriedforwardveh.FinFundsCarriedForwardVeh import com.yxt.anrui.fin.api.finfundscarriedforwardveh.FinFundsCarriedForwardVehDto; import com.yxt.anrui.fin.api.finselectedreceivablesdetailed.FinSelectedReceivablesDetailed; import com.yxt.anrui.fin.api.finselectedreceivablesdetailed.FinSelectedReceivablesDetailedVo; -import com.yxt.anrui.fin.api.kingdee.FinKingDeeFeign; import com.yxt.anrui.fin.api.kingdee.otherarreceivable.OtherReceivable; import com.yxt.anrui.fin.biz.fincollectionconfirmation.FinCollectionConfirmationService; import com.yxt.anrui.fin.biz.finfundscarriedforwardveh.FinFundsCarriedForwardVehService; import com.yxt.anrui.fin.biz.finselectedreceivablesdetailed.FinSelectedReceivablesDetailedService; -import com.yxt.anrui.fin.biz.kingdee.FinKingDeeService; import com.yxt.anrui.fin.biz.kingdee.otherreceivablebill.OtherReceivableBillService; import com.yxt.anrui.flowable.api.flow.FlowableFeign; import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; @@ -360,24 +357,13 @@ public class FinFundsCarriedForwardApplyService extends MybatisBaseService finFundsCarriedForwardVehDetailsVos = dto.getFinFundsCarriedForwardVehDetailsVos(); List yxysFinFundsCarriedForwardYXYSKXVos = dto.getYxysFinFundsCarriedForwardYXYSKXVos(); if (finFundsCarriedForwardVehDetailsVos.size() > 1 && yxysFinFundsCarriedForwardYXYSKXVos.size() > 1) { @@ -591,100 +574,9 @@ public class FinFundsCarriedForwardApplyService extends MybatisBaseService finFundsCarriedForwardVehDetailsVos1 = data.getFinFundsCarriedForwardVehDetailsVos(); - List yxysFinFundsCarriedForwardYXYSKXVos1 = data.getYxysFinFundsCarriedForwardYXYSKXVos(); - String pdfPath = createPdf(sid, finFundsCarriedForwardApply.getCreateByName()).getData(); - baseMapper.updatePathBySid(pdfPath, sid); - List> jzCustNos = new ArrayList<>(); - List> ysCustNos = new ArrayList<>(); - for (FinFundsCarriedForwardVehDetailsVo finFundsCarriedForwardVehDetailsVo2 : finFundsCarriedForwardVehDetailsVos1) { - FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(finFundsCarriedForwardVehDetailsVo2.getBusSid()); - String custNo = ""; - if ("1".equals(finSelectedReceivablesDetailed.getPayTypeKey())) {//全款 - Map map = new HashMap<>(); - custNo = finSelectedReceivablesDetailed.getContractNo(); - map.put("type","全款"); - map.put("custNo",custNo); - jzCustNos.add(map); - } else {//贷款 - BaseVehicle baseVehicle = baseVehicleFeign.selectByVinNoAndOrgSid(finSelectedReceivablesDetailed.getVIN(), finSelectedReceivablesDetailed.getUseOrgSid()).getData(); - BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(finSelectedReceivablesDetailed.getContractNo(), baseVehicle.getSid()).getData(); - custNo = busSalesOrderVehicle.getTemporaryNo(); - Map map = new HashMap<>(); - map.put("type","贷款"); - map.put("custNo",custNo); - jzCustNos.add(map); - } - } - jzCustNos = jzCustNos.stream().distinct().collect(Collectors.toList()); - for (Map jzCustNo : jzCustNos) { - String custNo = (String) jzCustNo.get("custNo"); - OtherReceivable otherReceivable = new OtherReceivable(); - otherReceivable.setCommUnit(custNo); - otherReceivable.setCollectionOrg(sysOrganizationVo2.getOrgCode()); - otherReceivable.setBussDate(DateUtil.formatDate(new Date())); - List collectionDetailDtoList = new ArrayList<>(); - List stringList; - if (jzCustNo.get("type").equals("全款")){ - stringList = finFundsCarriedForwardVehService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - }else { - custNo = custNo.substring(0, custNo.length() - 2); - stringList = finFundsCarriedForwardVehService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - } - for (String s : stringList) { - OtherReceivable.CollectionDetailDto collectionDetailDto = new OtherReceivable.CollectionDetailDto(); - collectionDetailDto.setDearDept(sysOrganizationVo1.getOrgCode()); - collectionDetailDto.setExTaxMoney(s); - collectionDetailDtoList.add(collectionDetailDto); - } - otherReceivable.setCollectionDetails(collectionDetailDtoList); - otherReceivableBillService.otherReceivableBillService(otherReceivable); - } - for (AppFinFundsCarriedForwardYXYSKXVo yxysFinFundsCarriedForwardYXYSKXVo2 : yxysFinFundsCarriedForwardYXYSKXVos1) { - FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(yxysFinFundsCarriedForwardYXYSKXVo2.getSid()); - String custNo = ""; - if ("1".equals(finSelectedReceivablesDetailed.getPayTypeKey())) {//全款 - custNo = finSelectedReceivablesDetailed.getContractNo(); - Map map = new HashMap<>(); - map.put("type","全款"); - map.put("custNo",custNo); - ysCustNos.add(map); - } else {//贷款 - BaseVehicle baseVehicle = baseVehicleFeign.selectByVinNoAndOrgSid(finSelectedReceivablesDetailed.getVIN(), finSelectedReceivablesDetailed.getUseOrgSid()).getData(); - BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(finSelectedReceivablesDetailed.getContractNo(), baseVehicle.getSid()).getData(); - custNo = busSalesOrderVehicle.getTemporaryNo(); - Map map = new HashMap<>(); - map.put("type","贷款"); - map.put("custNo",custNo); - ysCustNos.add(map); - } - } - ysCustNos = ysCustNos.stream().distinct().collect(Collectors.toList()); - for (Map ysCustNo : ysCustNos) { - OtherReceivable otherReceivable = new OtherReceivable(); - String custNo = (String)ysCustNo.get("custNo"); - otherReceivable.setCommUnit(custNo); - otherReceivable.setCollectionOrg(sysOrganizationVo2.getOrgCode()); - otherReceivable.setBussDate(DateUtil.formatDate(new Date())); - List collectionDetailDtoList = new ArrayList<>(); - List stringList; - if (ysCustNo.get("type").equals("全款")){ - stringList = finSelectedReceivablesDetailedService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - }else { - custNo = custNo.substring(0, custNo.length() - 2); - stringList = finSelectedReceivablesDetailedService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - } - for (String s : stringList) { - OtherReceivable.CollectionDetailDto collectionDetailDto = new OtherReceivable.CollectionDetailDto(); - collectionDetailDto.setDearDept(sysOrganizationVo1.getOrgCode()); - collectionDetailDto.setExTaxMoney("-" + s); - collectionDetailDtoList.add(collectionDetailDto); - } - otherReceivable.setCollectionDetails(collectionDetailDtoList); - otherReceivableBillService.otherReceivableBillService(otherReceivable); - } - //baseMapper.updateNodeStateBySid("已办结",finFundsCarriedForwardApply.getSid()); + //String pdfPath = createPdf(sid, finFundsCarriedForwardApply.getCreateByName()).getData(); + //baseMapper.updatePathBySid(pdfPath, sid); + tsqtysd(sid); return rb.success(); } } @@ -767,6 +659,180 @@ public class FinFundsCarriedForwardApplyService extends MybatisBaseService finFundsCarriedForwardVehDetailsVos = data.getFinFundsCarriedForwardVehDetailsVos(); + //转入 + List yxysFinFundsCarriedForwardYXYSKXVos = data.getYxysFinFundsCarriedForwardYXYSKXVos(); + //分公司信息 + SysOrganizationVo sysOrganizationVo1 = sysOrganizationFeign.fetchBySid(data.getUseOrgSid()).getData(); + //销售部门信息 + SysOrganizationVo sysOrganizationVo2 = sysOrganizationFeign.fetchBySid(data.getSaleDeptSid()).getData(); + List zcList = new ArrayList<>(); + List zrList = new ArrayList<>(); + //构建对象 + for (FinFundsCarriedForwardVehDetailsVo finFundsCarriedForwardVehDetailsVo : finFundsCarriedForwardVehDetailsVos) { + TzDto zc = new TzDto(); + zc.setBusSid(finFundsCarriedForwardVehDetailsVo.getBusSid()); + zc.setTzType("转出"); + zc.setCustSid(finFundsCarriedForwardVehDetailsVo.getCustomerSid()); + zc.setConNo(finFundsCarriedForwardVehDetailsVo.getBusBillNo()); + zc.setName(finFundsCarriedForwardVehDetailsVo.getCustomerName()); + zc.setVinNo(finFundsCarriedForwardVehDetailsVo.getVinNo()); + zc.setDcje(Integer.valueOf(finFundsCarriedForwardVehDetailsVo.getThisUseMoney())); + zcList.add(zc); + } + for (AppFinFundsCarriedForwardYXYSKXVo yxysFinFundsCarriedForwardYXYSKXVo : yxysFinFundsCarriedForwardYXYSKXVos) { + TzDto zr = new TzDto(); + zr.setBusSid(yxysFinFundsCarriedForwardYXYSKXVo.getSid()); + zr.setTzType("转入"); + zr.setCustSid(yxysFinFundsCarriedForwardYXYSKXVo.getCustomerSid()); + zr.setConNo(yxysFinFundsCarriedForwardYXYSKXVo.getContractId()); + zr.setName(yxysFinFundsCarriedForwardYXYSKXVo.getName()); + zr.setVinNo(yxysFinFundsCarriedForwardYXYSKXVo.getVin()); + zr.setDrje(Integer.parseInt(yxysFinFundsCarriedForwardYXYSKXVo.getConfirmMoney())); + zrList.add(zr); + } + //2.设置listi和listo中财务系统客户编码值 + if ("简易订单订金".equals(data.getSource())) { + for (TzDto zc : zcList) { + //从已认款中获取客户编码 + if (StringUtils.isNotBlank(zc.getCustSid())) { + CrmCustomerTempVo crmCustomerTempVo = crmCustomerTempFeign.fetchSid(zc.getCustSid()).getData(); + zc.setCustNo(crmCustomerTempVo.getCustomerNo()); + } else { + List finCustNameAndPhoneList = finFundsCarriedForwardVehService.fetchNameAndPhoneByBusSid(zc.getBusSid()); + for (FinCustNameAndPhone finCustNameAndPhone : finCustNameAndPhoneList) { + String custNo = getPrefix(finCustNameAndPhone.getStaffSid(), finCustNameAndPhone.getDraweeName(), finCustNameAndPhone.getDraweeMobile()); + zc.setCustNo(custNo); + } + } + } + } else { + for (TzDto zc : zcList) { + zc.setCustNo(getCustNoCW(zc.getBusSid())); + } + } + for (TzDto zr : zrList) { + zr.setCustNo(getCustNoCW(zr.getBusSid())); + } + List listOne; + List listMany; + if (zcList.size() > 1) { + listOne = zcList; + listMany = zrList; + } else { + listOne = zrList; + listMany = zcList; + } + //3.循环判断多条中是否存在相同的财务系统客户编码,如果有相同的则合并为一条,结转金额相加 + List manyRemoveList = manyHB(listMany); + Boolean aBoolean = subMoney(listOne, manyRemoveList); + if (!aBoolean) { + return; + } + //5.判断一条的余额是否大于0,大于0推送,否则不推送 + if (listOne.get(0).getDrje() > 0 || listOne.get(0).getDcje() > 0) { + //一条的推送 + OtherReceivable otherReceivableOne = new OtherReceivable(); + otherReceivableOne.setBillNo(data.getBillNo()); + otherReceivableOne.setCommUnit(listOne.get(0).getCustNo()); + otherReceivableOne.setCollectionOrg(sysOrganizationVo1.getOrgCode()); + otherReceivableOne.setBussDate(DateUtil.formatDate(new Date())); + List collectionDetailDtoListOne = new ArrayList<>(); + OtherReceivable.CollectionDetailDto collectionDetailDtoOne = new OtherReceivable.CollectionDetailDto(); + collectionDetailDtoOne.setDearDept(sysOrganizationVo2.getOrgCode()); + if (listOne.get(0).getTzType().equals("转入")) { + collectionDetailDtoOne.setExTaxMoney("-" + listOne.get(0).getDrje()); + } else { + collectionDetailDtoOne.setExTaxMoney(listOne.get(0).getDcje().toString()); + } + collectionDetailDtoListOne.add(collectionDetailDtoOne); + otherReceivableOne.setCollectionDetails(collectionDetailDtoListOne); + otherReceivableBillService.otherReceivableBillService(otherReceivableOne); + //多条的推送 + OtherReceivable otherReceivableMany = new OtherReceivable(); + int i = 1; + for (TzDto tzDto : manyRemoveList) { + String temporaryNum = String.format("%02d", i); + otherReceivableMany.setBillNo(data.getBillNo() + "-" + temporaryNum); + otherReceivableMany.setCommUnit(tzDto.getCustNo()); + otherReceivableMany.setCollectionOrg(sysOrganizationVo1.getOrgCode()); + otherReceivableMany.setBussDate(DateUtil.formatDate(new Date())); + List collectionDetailDtoListMany = new ArrayList<>(); + OtherReceivable.CollectionDetailDto collectionDetailDtoMany = new OtherReceivable.CollectionDetailDto(); + collectionDetailDtoMany.setDearDept(sysOrganizationVo2.getOrgCode()); + if (tzDto.getTzType().equals("转入")) { + collectionDetailDtoMany.setExTaxMoney("-" + tzDto.getDrje()); + } else { + collectionDetailDtoMany.setExTaxMoney(tzDto.getDcje().toString()); + } + collectionDetailDtoListMany.add(collectionDetailDtoMany); + otherReceivableMany.setCollectionDetails(collectionDetailDtoListMany); + otherReceivableBillService.otherReceivableBillService(otherReceivableMany); + i = i + 1; + } + } + } + + /* + * 财务中的客户编码 + * */ + private String getCustNoCW(String busSid) { + String custNo = ""; + FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(busSid); + if ("1".equals(finSelectedReceivablesDetailed.getPayTypeKey())) {//全款 + custNo = finSelectedReceivablesDetailed.getContractNo(); + } else {//贷款 + if (finSelectedReceivablesDetailed.getVIN().length() > 3) { + BaseVehicle baseVehicle = baseVehicleFeign.selectByVinNoAndOrgSid(finSelectedReceivablesDetailed.getVIN(), finSelectedReceivablesDetailed.getUseOrgSid()).getData(); + BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(finSelectedReceivablesDetailed.getContractNo(), baseVehicle.getSid()).getData(); + custNo = busSalesOrderVehicle.getTemporaryNo(); + } else { + //没有车架号,拼接合同号和临时编号 + custNo = finSelectedReceivablesDetailed.getContractNo() + finSelectedReceivablesDetailed.getVIN(); + } + } + return custNo; + } + + private List manyHB(List list) { + //转出为多条,转入为一条 + List manyRemoveList = new ArrayList<>(); + list.parallelStream().collect(Collectors.groupingBy(tzDto -> tzDto.getCustNo(), Collectors.toList())).forEach((id, transfer) -> { + transfer.stream().reduce((a, b) -> new TzDto( + a.getBusSid(), + a.getTzType(), + a.getConNo(), + a.getName(), + a.getCustNo(), + a.getVinNo(), + a.getDcje() + b.getDcje())).ifPresent(manyRemoveList::add); + }); + return manyRemoveList; + } + + private Boolean subMoney(List listOne, List removeList) { + //4.对比一条的和多条的是否存在相同的客户编码,相同的结转金额相减,多条中相同客户编码的记录去除 + String custNo = listOne.get(0).getCustNo(); + for (TzDto tzDto : removeList) { + if (tzDto.getCustNo().equals(custNo)) { + if (tzDto.getTzType().equals("转入")) { + listOne.get(0).setDcje(listOne.get(0).getDcje() - tzDto.getDrje()); + } else { + listOne.get(0).setDrje(listOne.get(0).getDrje() - tzDto.getDcje()); + } + removeList.remove(tzDto); + } + if (removeList.size() == 0) { + return false; + } + } + return true; + } + /** * 更新流程相关的状态 * @@ -1020,170 +1086,7 @@ public class FinFundsCarriedForwardApplyService extends MybatisBaseService finFundsCarriedForwardVehDetailsVos = data.getFinFundsCarriedForwardVehDetailsVos(); - List> jyddNos = new ArrayList<>(); - List> jzCustNos = new ArrayList<>(); - List> ysCustNos = new ArrayList<>(); - if ("简易订单订金".equals(finFundsCarriedForwardApply.getSource())) { - List finFundsCarriedForwardVehDetailsVos1 = finFundsCarriedForwardVehService.fetchByMainSidAndGroupCustPhone(finFundsCarriedForwardApply.getSid()); - for (FinFundsCarriedForwardVehDetailsVo finFundsCarriedForwardVehDetailsVo : finFundsCarriedForwardVehDetailsVos1) { - FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(finFundsCarriedForwardVehDetailsVo.getBusSid()); - CrmCustomerTempVo crmCustomerTempVo = crmCustomerTempFeign.fetchSid(finSelectedReceivablesDetailed.getCustomerSid()).getData(); - Map map = new HashMap<>(); - map.put("custSid",crmCustomerTempVo.getSid()); - map.put("custNo",crmCustomerTempVo.getCustomerNo()); - jyddNos.add(map); - } - jyddNos = jyddNos.stream().distinct().collect(Collectors.toList()); - for (Map jyddNo : jyddNos) { - OtherReceivable otherReceivable = new OtherReceivable(); - String custNo = jyddNo.get("custNo"); - otherReceivable.setCommUnit(custNo); - otherReceivable.setCollectionOrg(sysOrganizationVo2.getOrgCode()); - otherReceivable.setBussDate(DateUtil.formatDate(new Date())); - List collectionDetailDtoList = new ArrayList<>(); - String custSid = jyddNo.get("custSid"); - List stringList = finFundsCarriedForwardVehService.fetchJzMoneyByCustSidAndMainSid(custSid, finFundsCarriedForwardApply.getSid()); - for (String s : stringList) { - OtherReceivable.CollectionDetailDto collectionDetailDto = new OtherReceivable.CollectionDetailDto(); - collectionDetailDto.setDearDept(sysOrganizationVo1.getOrgCode()); - collectionDetailDto.setExTaxMoney(s); - collectionDetailDtoList.add(collectionDetailDto); - } - otherReceivable.setCollectionDetails(collectionDetailDtoList); - otherReceivableBillService.otherReceivableBillService(otherReceivable); - } - for (AppFinFundsCarriedForwardYXYSKXVo yxysFinFundsCarriedForwardYXYSKXVo2 : yxysFinFundsCarriedForwardYXYSKXVos) { - FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(yxysFinFundsCarriedForwardYXYSKXVo2.getSid()); - String custNo = ""; - if ("1".equals(finSelectedReceivablesDetailed.getPayTypeKey())) {//全款 - custNo = finSelectedReceivablesDetailed.getContractNo(); - Map map = new HashMap<>(); - map.put("type","全款"); - map.put("custNo",custNo); - ysCustNos.add(map); - } else {//贷款 - BaseVehicle baseVehicle = baseVehicleFeign.selectByVinNoAndOrgSid(finSelectedReceivablesDetailed.getVIN(), finSelectedReceivablesDetailed.getUseOrgSid()).getData(); - BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(finSelectedReceivablesDetailed.getContractNo(), baseVehicle.getSid()).getData(); - custNo = busSalesOrderVehicle.getTemporaryNo(); - Map map = new HashMap<>(); - map.put("type","贷款"); - map.put("custNo",custNo); - ysCustNos.add(map); - } - } - ysCustNos = ysCustNos.stream().distinct().collect(Collectors.toList()); - for (Map ysCustNo : ysCustNos) { - OtherReceivable otherReceivable = new OtherReceivable(); - String custNo = (String)ysCustNo.get("custNo"); - otherReceivable.setCommUnit(custNo); - otherReceivable.setCollectionOrg(sysOrganizationVo2.getOrgCode()); - otherReceivable.setBussDate(DateUtil.formatDate(new Date())); - List collectionDetailDtoList = new ArrayList<>(); - List stringList; - if (ysCustNo.get("type").equals("全款")){ - stringList = finSelectedReceivablesDetailedService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - }else { - custNo = custNo.substring(0, custNo.length() - 2); - stringList = finSelectedReceivablesDetailedService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - } - for (String s : stringList) { - OtherReceivable.CollectionDetailDto collectionDetailDto = new OtherReceivable.CollectionDetailDto(); - collectionDetailDto.setDearDept(sysOrganizationVo1.getOrgCode()); - collectionDetailDto.setExTaxMoney("-" + s); - collectionDetailDtoList.add(collectionDetailDto); - } - otherReceivable.setCollectionDetails(collectionDetailDtoList); - otherReceivableBillService.otherReceivableBillService(otherReceivable); - } - } else if ("已认款".equals(finFundsCarriedForwardApply.getSource())) { - for (FinFundsCarriedForwardVehDetailsVo finFundsCarriedForwardVehDetailsVo2 : finFundsCarriedForwardVehDetailsVos) { - FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(finFundsCarriedForwardVehDetailsVo2.getBusSid()); - String custNo = ""; - if ("1".equals(finSelectedReceivablesDetailed.getPayTypeKey())) {//全款 - Map map = new HashMap<>(); - custNo = finSelectedReceivablesDetailed.getContractNo(); - map.put("type","全款"); - map.put("custNo",custNo); - jzCustNos.add(map); - } else {//贷款 - BaseVehicle baseVehicle = baseVehicleFeign.selectByVinNoAndOrgSid(finSelectedReceivablesDetailed.getVIN(), finSelectedReceivablesDetailed.getUseOrgSid()).getData(); - BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(finSelectedReceivablesDetailed.getContractNo(), baseVehicle.getSid()).getData(); - custNo = busSalesOrderVehicle.getTemporaryNo(); - Map map = new HashMap<>(); - map.put("type","贷款"); - map.put("custNo",custNo); - jzCustNos.add(map); - } - } - jzCustNos = jzCustNos.stream().distinct().collect(Collectors.toList()); - for (Map jzCustNo : jzCustNos) { - String custNo = (String) jzCustNo.get("custNo"); - OtherReceivable otherReceivable = new OtherReceivable(); - otherReceivable.setCommUnit(custNo); - otherReceivable.setCollectionOrg(sysOrganizationVo2.getOrgCode()); - otherReceivable.setBussDate(DateUtil.formatDate(new Date())); - List collectionDetailDtoList = new ArrayList<>(); - List stringList; - if (jzCustNo.get("type").equals("全款")){ - stringList = finFundsCarriedForwardVehService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - }else { - custNo = custNo.substring(0, custNo.length() - 2); - stringList = finFundsCarriedForwardVehService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - } - for (String s : stringList) { - OtherReceivable.CollectionDetailDto collectionDetailDto = new OtherReceivable.CollectionDetailDto(); - collectionDetailDto.setDearDept(sysOrganizationVo1.getOrgCode()); - collectionDetailDto.setExTaxMoney(s); - collectionDetailDtoList.add(collectionDetailDto); - } - otherReceivable.setCollectionDetails(collectionDetailDtoList); - otherReceivableBillService.otherReceivableBillService(otherReceivable); - } - for (AppFinFundsCarriedForwardYXYSKXVo yxysFinFundsCarriedForwardYXYSKXVo2 : yxysFinFundsCarriedForwardYXYSKXVos) { - FinSelectedReceivablesDetailed finSelectedReceivablesDetailed = finSelectedReceivablesDetailedService.fetchBySid(yxysFinFundsCarriedForwardYXYSKXVo2.getSid()); - String custNo = ""; - if ("1".equals(finSelectedReceivablesDetailed.getPayTypeKey())) {//全款 - custNo = finSelectedReceivablesDetailed.getContractNo(); - Map map = new HashMap<>(); - map.put("type","全款"); - map.put("custNo",custNo); - ysCustNos.add(map); - } else {//贷款 - BaseVehicle baseVehicle = baseVehicleFeign.selectByVinNoAndOrgSid(finSelectedReceivablesDetailed.getVIN(), finSelectedReceivablesDetailed.getUseOrgSid()).getData(); - BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(finSelectedReceivablesDetailed.getContractNo(), baseVehicle.getSid()).getData(); - custNo = busSalesOrderVehicle.getTemporaryNo(); - Map map = new HashMap<>(); - map.put("type","贷款"); - map.put("custNo",custNo); - ysCustNos.add(map); - } - } - ysCustNos = ysCustNos.stream().distinct().collect(Collectors.toList()); - for (Map ysCustNo : ysCustNos) { - OtherReceivable otherReceivable = new OtherReceivable(); - String custNo = (String)ysCustNo.get("custNo"); - otherReceivable.setCommUnit(custNo); - otherReceivable.setCollectionOrg(sysOrganizationVo2.getOrgCode()); - otherReceivable.setBussDate(DateUtil.formatDate(new Date())); - List collectionDetailDtoList = new ArrayList<>(); - List stringList; - if (ysCustNo.get("type").equals("全款")){ - stringList = finSelectedReceivablesDetailedService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - }else { - custNo = custNo.substring(0, custNo.length() - 2); - stringList = finSelectedReceivablesDetailedService.fetchJzMoneyByContractNoAndMainSid(custNo, finFundsCarriedForwardApply.getSid()); - } - for (String s : stringList) { - OtherReceivable.CollectionDetailDto collectionDetailDto = new OtherReceivable.CollectionDetailDto(); - collectionDetailDto.setDearDept(sysOrganizationVo1.getOrgCode()); - collectionDetailDto.setExTaxMoney("-" + s); - collectionDetailDtoList.add(collectionDetailDto); - } - otherReceivable.setCollectionDetails(collectionDetailDtoList); - otherReceivableBillService.otherReceivableBillService(otherReceivable); - } - } + tsqtysd(businessSid); } else { //极光推送 finFundsCarriedForwardApply = fetchBySid(businessSid); @@ -1339,31 +1242,27 @@ public class FinFundsCarriedForwardApplyService extends MybatisBaseService zcList = new ArrayList<>(); - List zrList = new ArrayList<>(); + List tzList = new ArrayList<>(); for (FinFundsCarriedForwardVehDetailsVo finFundsCarriedForwardVehDetailsVo : finFundsCarriedForwardVehDetailsVos) { - ZC zc = new ZC(); - zc.setZc("转出"); - zc.setConNo(finFundsCarriedForwardVehDetailsVo.getBusBillNo()); - zc.setName(finFundsCarriedForwardVehDetailsVo.getCustomerName()); - zc.setVinNo(finFundsCarriedForwardVehDetailsVo.getVinNo()); - zc.setDcje(finFundsCarriedForwardVehDetailsVo.getThisUseMoney()); - zc.setDcqye(finFundsCarriedForwardVehDetailsVo.getBalance()); - zc.setDchye(new BigDecimal(finFundsCarriedForwardVehDetailsVo.getBalance()).subtract(new BigDecimal(finFundsCarriedForwardVehDetailsVo.getThisUseMoney())).toString()); - zcList.add(zc); + TzDto tzDto = new TzDto(); + tzDto.setTzType("转出"); + tzDto.setConNo(finFundsCarriedForwardVehDetailsVo.getBusBillNo()); + tzDto.setName(finFundsCarriedForwardVehDetailsVo.getCustomerName()); + tzDto.setVinNo(finFundsCarriedForwardVehDetailsVo.getVinNo()); + tzDto.setDcje(Integer.parseInt(finFundsCarriedForwardVehDetailsVo.getThisUseMoney())); + tzList.add(tzDto); } for (AppFinFundsCarriedForwardYXYSKXVo yxysFinFundsCarriedForwardYXYSKXVo : yxysFinFundsCarriedForwardYXYSKXVos) { - ZR zr = new ZR(); - zr.setZr("转入"); - zr.setConNo(yxysFinFundsCarriedForwardYXYSKXVo.getContractId()); - zr.setName(yxysFinFundsCarriedForwardYXYSKXVo.getName()); - zr.setVinNo(yxysFinFundsCarriedForwardYXYSKXVo.getVin()); - zr.setDrje(yxysFinFundsCarriedForwardYXYSKXVo.getConfirmMoney().toString()); - zrList.add(zr); + TzDto tzDto = new TzDto(); + tzDto.setTzType("转入"); + tzDto.setConNo(yxysFinFundsCarriedForwardYXYSKXVo.getContractId()); + tzDto.setName(yxysFinFundsCarriedForwardYXYSKXVo.getName()); + tzDto.setVinNo(yxysFinFundsCarriedForwardYXYSKXVo.getVin()); + tzDto.setDrje(Integer.parseInt(yxysFinFundsCarriedForwardYXYSKXVo.getConfirmMoney())); + tzList.add(tzDto); } dataMap.put("saleDate", DateUtil.formatDate(new Date())); - dataMap.put("zcList", zcList); - dataMap.put("zrList", zrList); + dataMap.put("tzList", tzList); dataMap.put("makeName", data.getCreateByName() + data.getCreateByDate()); //获取模板 //模板路径 diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.java index eea52097c6..b727069cfe 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.yxt.anrui.fin.api.finfundscarriedforwardapply.FinCustNameAndPhone; import com.yxt.anrui.fin.api.finfundscarriedforwardveh.FinFundsCarriedForwardVehDetailsVo; import org.apache.ibatis.annotations.*; import com.yxt.anrui.fin.api.finfundscarriedforwardveh.FinFundsCarriedForwardVeh; @@ -77,9 +78,5 @@ public interface FinFundsCarriedForwardVehMapper extends BaseMapper sidsList); - List fetchByMainSidAndGroupCustPhone(String sid); - - List fetchJzMoneyByContractNoAndMainSid(@Param("jzCustNo") String jzCustNo,@Param("sid") String sid); - - List fetchJzMoneyByCustSidAndMainSid(@Param("custSid") String custSid,@Param("sid") String sid); + List fetchNameAndPhoneByBusSid(String busSid); } \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.xml b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.xml index 7f8a0abc2e..6e71e906cf 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.xml +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehMapper.xml @@ -45,29 +45,21 @@ - + SELECT bd.`draweeName`, + bd.draweeMobile, + ffa.`staffSid` FROM fin_funds_carried_forward_veh ffv + LEFT JOIN fin_funds_carried_forward_apply ffa + ON ffv.`mainSid` = ffa.`sid` + LEFT JOIN fin_selected_receivables_detailed fsrd + ON ffv.`busSid` = fsrd.`sid` LEFT JOIN fin_collection_confirmation fcc - ON ffv.`busSid` = fcc.`sid` + ON fsrd.`collSid` = fcc.`sid` + AND fcc.`pushMessgae` = 1 LEFT JOIN anrui_buscenter.`bus_deposit` bd ON fcc.`busSid` = bd.`billSid` - WHERE ffv.`mainSid` = #{sid} - GROUP BY bd.`draweeMobile` - - - - - \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehService.java index 721e7dd228..b5897781f1 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finfundscarriedforwardveh/FinFundsCarriedForwardVehService.java @@ -43,6 +43,7 @@ import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel; import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice; import com.yxt.anrui.buscenter.api.bussalesordersubmit.BusSalesOrderSubmit; import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle; +import com.yxt.anrui.fin.api.finfundscarriedforwardapply.FinCustNameAndPhone; import com.yxt.anrui.portal.api.flow.PCHistTaskListAndCommentList; import com.yxt.anrui.portal.api.sysorganization.SysOrganization; import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo; @@ -162,15 +163,7 @@ public class FinFundsCarriedForwardVehService extends MybatisBaseService fetchByMainSidAndGroupCustPhone(String sid) { - return baseMapper.fetchByMainSidAndGroupCustPhone(sid); - } - - public List fetchJzMoneyByContractNoAndMainSid(String jzCustNo, String sid) { - return baseMapper.fetchJzMoneyByContractNoAndMainSid(jzCustNo,sid); - } - - public List fetchJzMoneyByCustSidAndMainSid(String custSid, String sid) { - return baseMapper.fetchJzMoneyByCustSidAndMainSid(custSid,sid); + public List fetchNameAndPhoneByBusSid(String busSid) { + return baseMapper.fetchNameAndPhoneByBusSid(busSid); } } \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.java index e23da0bbed..ff50224259 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.java @@ -161,4 +161,6 @@ public interface FinSelectedReceivablesDetailedMapper extends BaseMapper selectPageLists(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw, @Param("name") String name); + + FinSelectedReceivablesDetailed fetchYeBySid(String busSid); } \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.xml b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.xml index d8c33850db..ccfc30c0b6 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.xml +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedMapper.xml @@ -487,4 +487,21 @@ WHERE fsr.`contractNo` = #{ysCustNo} AND fsr.`collSid` = #{sid} + + \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedService.java index dd497f100d..5140c6d1a2 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finselectedreceivablesdetailed/FinSelectedReceivablesDetailedService.java @@ -622,4 +622,8 @@ public class FinSelectedReceivablesDetailedService extends MybatisBaseService fetchJzMoneyByContractNoAndMainSid(String ysCustNo, String sid) { return baseMapper.fetchJzMoneyByContractNoAndMainSid(ysCustNo,sid); } + + public FinSelectedReceivablesDetailed fetchYeBySid(String busSid) { + return baseMapper.fetchYeBySid(busSid); + } } \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/OtherReceivableBillService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/OtherReceivableBillService.java index e4b3f64dea..dd450efe67 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/OtherReceivableBillService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/OtherReceivableBillService.java @@ -27,6 +27,11 @@ public class OtherReceivableBillService extends FinKingDeeService { //业务表的主表数据集合 Map map_fEntityModel_=new HashMap<>(); //物料的数组集合 + //单据编号 + if(otherReceivable.getBillNo()==null){ + return rb.setMsg("单据编号不能为空"); + } + map_fEntityModel_.put("FBillNo",otherReceivable.getBillNo()); //业务日期 if(otherReceivable.getBussDate()==null){ return rb.setMsg("业务日期不能为空"); diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/data_model.json b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/data_model.json index 37cc654b5d..d1ec9e70ad 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/data_model.json +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/otherreceivablebill/data_model.json @@ -3,7 +3,7 @@ "FBillTypeID": { "FNUMBER": "QTYSD01_SYS" }, - "FBillNo": "", + "FBillNo": "@KD_FBillNo", "FDATE": "@KD_FDATE", "FENDDATE_H": "1900-01-01", "FISINIT": "false", diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpreloancreditapply/LoanPreloanCreditApplyVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpreloancreditapply/LoanPreloanCreditApplyVo.java index 643aff62d2..1e3a7ca81c 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpreloancreditapply/LoanPreloanCreditApplyVo.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpreloancreditapply/LoanPreloanCreditApplyVo.java @@ -67,4 +67,8 @@ public class LoanPreloanCreditApplyVo implements Vo { private String zffkjg; @ApiModelProperty("申诉结果") private String ssjg; + @ApiModelProperty("是否可以办理") + private Boolean isEdit; + @ApiModelProperty("是否可以删除") + private Boolean isDelete; } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpreloancreditapply/LoanPreloanCreditApplyService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpreloancreditapply/LoanPreloanCreditApplyService.java index baec720838..3d5e7f2c4c 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpreloancreditapply/LoanPreloanCreditApplyService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpreloancreditapply/LoanPreloanCreditApplyService.java @@ -141,6 +141,16 @@ public class LoanPreloanCreditApplyService extends MybatisBaseService page = PagerUtil.queryToPage(pq); IPage pagging = baseMapper.selectPageVo(page, qw); + for (LoanPreloanCreditApplyVo record : pagging.getRecords()) { + String state = record.getState(); + if ("1".equals(state)){ + record.setIsEdit(true); + record.setIsDelete(true); + }else { + record.setIsEdit(false); + record.setIsDelete(false); + } + } PagerVo p = PagerUtil.pageToVo(pagging, null); return p; } @@ -224,6 +234,16 @@ public class LoanPreloanCreditApplyService extends MybatisBaseService page = PagerUtil.queryToPage(pq); IPage pagging = baseMapper.selectPageVo(page, qw); + for (LoanPreloanCreditApplyVo record : pagging.getRecords()) { + String state = record.getState(); + if ("0".equals(state)){ + record.setIsEdit(true); + record.setIsDelete(false); + }else { + record.setIsEdit(false); + record.setIsDelete(false); + } + } PagerVo p = PagerUtil.pageToVo(pagging, null); return p; } diff --git a/工作内容需要的文档/单据模板/款项结转打印模板/kxjz.ftl b/工作内容需要的文档/单据模板/款项结转打印模板/kxjz.ftl index 60c3b5ecae..173b1ef07d 100644 --- a/工作内容需要的文档/单据模板/款项结转打印模板/kxjz.ftl +++ b/工作内容需要的文档/单据模板/款项结转打印模板/kxjz.ftl @@ -75,7 +75,6 @@ - @@ -86,15 +85,13 @@ - - - - - - - - - + + + + + + + @@ -106,7 +103,6 @@ - @@ -121,14 +117,13 @@ - + - @@ -178,7 +173,6 @@ - @@ -193,14 +187,13 @@ - + - @@ -247,7 +240,6 @@ - @@ -256,19 +248,20 @@ + - + + - @@ -314,14 +307,13 @@ - + - @@ -367,14 +359,13 @@ - + - @@ -420,61 +411,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 物料编码 - - - - - - + @@ -482,166 +419,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 调出金额 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 调入金额 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 调出前余额 - - - - - - - - - - - - - @@ -652,442 +429,145 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 调出后余额 - - - - - <#list zcList as zc> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.zc!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.conNo!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.name!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.vinNo!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.dcje!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.drje!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.dcqye!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zc.dchye!} - - - - - - <#list zrList as zr> + + + + + + + + + + + + + + + + + + + + + + + + + + + + 物料编码 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 调出金额 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 调入金额 + + + + + <#list tzList as tz> @@ -1098,7 +578,6 @@ - @@ -1107,19 +586,20 @@ + - + + - @@ -1155,20 +635,19 @@ - ${zr.zr!} + ${tz.tzType!} - + - @@ -1199,20 +678,19 @@ - ${zr.conNo!} + ${tz.conNo!} - + - @@ -1230,6 +708,7 @@ + @@ -1243,13 +722,13 @@ - ${zr.name!} + ${tz.name!} - + @@ -1257,7 +736,6 @@ - @@ -1275,6 +753,7 @@ + @@ -1288,21 +767,19 @@ - ${zr.vinNo!} + ${tz.vinNo!} - - + - @@ -1338,124 +815,25 @@ - ${zr.dcje!} + ${tz.dcje!} - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zr.drje!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${zr.dcqye!} - - - - - - - - - - - - - - - - - - @@ -1480,7 +858,7 @@ - ${zr.dchye!} + ${tz.drje!} @@ -1496,7 +874,6 @@ - @@ -1517,7 +894,6 @@ - @@ -1571,7 +947,6 @@ - @@ -1611,14 +986,12 @@ - - @@ -1662,14 +1035,13 @@ - + - @@ -1731,7 +1103,7 @@ - + @@ -1745,14 +1117,14 @@ xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"> 1 - 65 - 260 + 45 + 140 0 0 - 2 + 0 false false - 260 + 140 WPS Office_11.1.0.14309_F1E327BC-269C-435d-A152-05C5408002CA 0 @@ -1768,7 +1140,7 @@ 2023-07-10T06:09:57Z God 文档存本地丢失不负责 - 2023-07-10T06:34:23Z + 2023-07-21T00:59:39Z @@ -1781,7 +1153,7 @@ 2052-11.1.0.14309 - 90FD13DE91554DE7BE7213573AD98205_13 + 7D19BE92512D49FCAB02D5921C488073_13 @@ -1873,11 +1245,11 @@ xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData" mc:Ignorable="w14"> - + @@ -1915,14 +1287,20 @@ + + - - - - + + + + + + + + + - @@ -2336,6 +1714,7 @@ + @@ -2350,7 +1729,7 @@ - + @@ -2360,39 +1739,39 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -2471,131 +1850,160 @@ - - - + + - + - - - + + - - - + + - + - - - + + - + - - - + + - - - + + - + - + - + + + + - - + - - + - - + + + + + + + - + + + + + + + - + - + + + + + + + + + + + + - - - - - - - - - - + + - + - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + - + + + diff --git a/工作内容需要的文档/单据模板/款项结转打印模板/款项结转(调账申请).doc b/工作内容需要的文档/单据模板/款项结转打印模板/款项结转(调账申请).doc index 3a10aca0ec3597fa0086e19e3248aa2f9d04402a..7773da139b373b3c62fe75ec27417ca8a1f234ec 100644 GIT binary patch delta 1579 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 F{SA+PENuV) From 059ffd3eac93769e8168254365407aceaff8eb71 Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Fri, 21 Jul 2023 11:49:44 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=80=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8F=90=E4=BA=A4=E5=8A=9E=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bussalesorder/BusSalesOrderService.java | 137 ++-- .../anrui/flowable/api/flow2/FlowFeign.java | 34 + .../flowable/api/flow2/FlowFeignback.java | 9 + .../anrui/flowable/biz/flow/FlowableRest.java | 8 +- .../anrui/flowable/biz/flow2/FlowMapper.java | 14 + .../anrui/flowable/biz/flow2/FlowMapper.xml | 4 + .../anrui/flowable/biz/flow2/FlowRest.java | 219 +++++++ .../anrui/flowable/biz/flow2/FlowService.java | 592 ++++++++++++++++++ 8 files changed, 951 insertions(+), 66 deletions(-) create mode 100644 anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java create mode 100644 anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java index a6f8573df5..25c131f6bf 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java @@ -138,6 +138,7 @@ import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.UnCollectionDto; import com.yxt.anrui.flowable.api.flow.FlowSelectVo; 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.FlowableQuery; @@ -252,6 +253,8 @@ public class BusSalesOrderService extends MybatisBaseService voResultBean = flowableFeign.startProcess(bv); + ResultBean voResultBean = flowFeign.startProcess(bv); if (!voResultBean.getSuccess()) { return rb.setMsg(voResultBean.getMsg()); } @@ -4819,7 +4825,7 @@ public class BusSalesOrderService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + ResultBean resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } UpdateFlowFieldVo ufVo = resultBean.getData(); updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); - + busSalesOrder = fetchBySid(bv.getBusinessSid()); //极光推送 if (!"Event_end".equals(resultBean.getData().getTaskDefKey())) { - //极光推送 - busSalesOrder = fetchBySid(bv.getBusinessSid()); - MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); - MessageFlowVo messageFlowVo = new MessageFlowVo(); - BeanUtil.copyProperties(ufVo, messageFlowVo); - ufVo.setProcInsId(busSalesOrder.getProcInstId()); - messageFlowableQuery.setUfVo(messageFlowVo); - messageFlowableQuery.setAppMap((Map) variables.get("app")); - messageFlowableQuery.setBusinessSid(bv.getBusinessSid()); - messageFlowableQuery.setModuleName("销售订单申请"); - messageFlowableQuery.setMsgContent(busSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); - messageFlowableQuery.setMsgTitle("销售订单"); - ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + 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()); + BusSalesOrder finalBusSalesOrder = busSalesOrder; + Future future1 = pool.submit(() -> { + //极光推送 + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + ufVo.setProcInsId(finalBusSalesOrder.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap((Map) variables.get("app")); + messageFlowableQuery.setBusinessSid(bv.getBusinessSid()); + messageFlowableQuery.setModuleName("销售订单申请"); + messageFlowableQuery.setMsgContent(finalBusSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("销售订单"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + }); + } catch (Exception e) { + e.printStackTrace(); + } } else { ResultBean details = getSaleOrderDetails(bv.getBusinessSid()); AppOrderDetailsVo vo = details.getData(); diff --git a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java new file mode 100644 index 0000000000..9e4f439e5f --- /dev/null +++ b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java @@ -0,0 +1,34 @@ +package com.yxt.anrui.flowable.api.flow2; + +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@FeignClient( + contextId = "anrui-flowable-Flow", + name = "anrui-flowable", + path = "v2/flow", + fallback = FlowFeignback.class) +public interface FlowFeign { + + @ApiOperation(value = "启动流程") + @PostMapping(value = "/startProcess") + @ResponseBody + ResultBean startProcess(@RequestBody BusinessVariables dto); + + @ApiOperation(value = "处理流程") + @PostMapping(value = "/handleProsess") + @ResponseBody + ResultBean handleProsess(@RequestBody BusinessVariables bv); +} diff --git a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java new file mode 100644 index 0000000000..4c644465b3 --- /dev/null +++ b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java @@ -0,0 +1,9 @@ +package com.yxt.anrui.flowable.api.flow2; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +public class FlowFeignback { +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java index c2353ab93b..5eb18271a3 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java @@ -284,11 +284,9 @@ public class FlowableRest implements FlowableFeign { public ResultBean startProcess(BusinessVariables dto) { log.info("startProcess.dto:{}", dto); ResultBean rb = ResultBean.fireFail(); - if (StringUtils.isBlank(dto.getBusinessSid())) { return rb.setMsg("businessSid 不能为空!"); } - if (dto.getFormVariables() == null) dto.setFormVariables(new HashMap()); Map formVariables = dto.getFormVariables(); @@ -296,20 +294,17 @@ public class FlowableRest implements FlowableFeign { String orgPath = dto.getOrgSidPath(); formVariables.put("createrOrgPath", orgPath);//发起人的组织结构sid } - dto.getFormVariables().put("businessSid", dto.getBusinessSid()); String nextNodeUserSids_ = dto.getNextNodeUserSids(); if (StringUtils.isBlank(nextNodeUserSids_)) { ResultBean nextNodeUserSidsOfCreate = getNextNodeUserSidsOfCreate(dto); boolean success = nextNodeUserSidsOfCreate.getSuccess(); if (!success) { -// return rb.setMsg(nextNodeUserSidsOfCreate.getMsg()); nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); } else { nextNodeUserSids_ = nextNodeUserSidsOfCreate.getData().getUserSid(); dto.getFormVariables().put(BusinessVariables.ORGPATH, nextNodeUserSidsOfCreate.getData().getOrgPath()); } - } dto.setNextNodeUserSids(nextNodeUserSids_); ResultBean resultBean1 = flowableService.businessStart(dto); @@ -431,7 +426,7 @@ public class FlowableRest implements FlowableFeign { //若下一环节用户与系统管理员一致,则自动审批 if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { adminContains = true; - }else{ + } else { //下一环节不为空,查询下一环节用户是否有转办人 if (nextUserSid != null) { List nextUserList = Arrays.asList(nextUserSid.split(",")); @@ -531,6 +526,7 @@ public class FlowableRest implements FlowableFeign { dto.setTaskId(vo.getTaskId()); dto.setTaskDefKey(taskDefKey); dto.setComment("系统自动跳过"); + dto.setNextNodeUserSids(""); return handleProsess(dto, false); } List flowElements = processService.calApprovePath(dto.getModelId(), dto.getModelId(), diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java new file mode 100644 index 0000000000..75a54ab80c --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java @@ -0,0 +1,14 @@ +package com.yxt.anrui.flowable.biz.flow2; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.anrui.flowable.api.flow.Flowable; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@Mapper +public interface FlowMapper extends BaseMapper { +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml new file mode 100644 index 0000000000..155d9f2b05 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java new file mode 100644 index 0000000000..0df8db0cf7 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java @@ -0,0 +1,219 @@ +package com.yxt.anrui.flowable.biz.flow2; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.api.flow2.FlowFeign; +import com.yxt.anrui.flowable.biz.process.ProcessService; +import com.yxt.anrui.flowable.feign.MessageFeign; +import com.yxt.anrui.flowable.feign.form.MessageFlowVo; +import com.yxt.anrui.flowable.feign.form.MessageFlowableQuery; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccFeign; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccVo; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserVo; +import com.yxt.anrui.portal.api.sysuser.UserByRolesAndOrgQuery; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.result.ResultBean; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; +import org.flowable.engine.HistoryService; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.*; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@RestController +@RequestMapping("v2/flow") +public class FlowRest implements FlowFeign { + Logger log = LoggerFactory.getLogger(FlowRest.class); + + @Autowired + private FlowService flowService; + @Autowired + private SysFlowccFeign sysFlowccFeign; + @Autowired + private SysUserFeign sysUserFeign; + + @Autowired + protected HistoryService historyService; + + @Autowired + private ProcessService processService; + + @Autowired + private MessageFeign messageFeign; + + @Override + public ResultBean startProcess(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + //获取表单中的参数 + Map formVariables = bv.getFormVariables(); + formVariables = formVariables == null ? new HashMap<>() : formVariables; + //发起人的组织全路径 + String orgPath = bv.getOrgSidPath(); + formVariables.put("createrOrgPath", orgPath); + formVariables.put("businessSid", bv.getBusinessSid()); + //获取下一环节待办人 + ResultBean userResultBean = flowService.getNextNodeUser(bv); + bv.setNextNodeUserSids(userResultBean.getData()); + //启动流程实例 + ResultBean startResultBean = flowService.businessStartProcessInstanceById(bv); + return startResultBean; + } + + @Override + public ResultBean handleProsess(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + ResultBean updateFlowFieldVoResultBean = flowService.handleProsess(bv, true); + //添加抄送 + log.info("流程返回:{}", JSONObject.toJSONString(updateFlowFieldVoResultBean)); + //需要判断办结后再执行 TODO + if (updateFlowFieldVoResultBean.getSuccess()) { + log.info("流程返回:{}", JSONObject.toJSONString(updateFlowFieldVoResultBean)); + if ("Event_end".equals(updateFlowFieldVoResultBean.getData().getTaskDefKey())) { + 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()); + + Future future1 = pool.submit(() -> { + HashMap map = new HashMap<>(); + map.put("bv", bv); + UpdateFlowFieldVo ufVo = updateFlowFieldVoResultBean.getData(); + ufVo.setTaskId(bv.getTaskId()); + map.put("uff", ufVo); + cc(map, bv.getTaskDefKey()); + }); + } catch (Exception e) { + e.printStackTrace(); + return rb.setMsg("抄送失败"); + } + } + } + return updateFlowFieldVoResultBean; + } + + /** + * 流程抄送的功能 + * + * @param map + * @return + */ + public ResultBean cc(Map map, String taskDefKey) { + ResultBean rb = ResultBean.fireFail(); + log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); + Object bv1 = map.get("bv"); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(bv1, bv); + Object uff1 = map.get("uff"); + UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); + BeanUtil.copyProperties(uff1, uff); + uff.setTaskDefKey(taskDefKey); + + //流程定义的id + String modelId = bv.getModelId(); + //将modelId根据冒号:分成三部分,取第一部分作为key + List stringList = Arrays.asList(modelId.split(":")); + modelId = stringList.get(0); + //抄送的角色的sid + ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); + //组织机构sid + String orgSidPath = bv.getOrgSidPath(); + if (roleSidByModelId.getData() == null) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + SysFlowccVo data = roleSidByModelId.getData(); + if (StringUtils.isBlank(data.getRoleSid())) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + List list = Arrays.asList(data.getRoleSid().split(",")); + UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery(); + userQuery.setRoleSids(list); + userQuery.setOrgSidPath(orgSidPath); + List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + log.info("抄送失败,没有用户!"); + return rb.setMsg("抄送失败,没有用户!"); + } + StringBuilder userName = new StringBuilder(); + StringBuilder userSids = new StringBuilder(); + sysUserVos.forEach(f -> { + userName.append(f.getName()).append(","); + userSids.append(f.getSid()).append(","); + }); + + //抄送的业务逻辑 + MessageFlowableQuery mfq = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(uff, messageFlowVo); + mfq.setUfVo(messageFlowVo); + //移动端的参数 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map processVariables = historicTaskInstance.getProcessVariables(); + String createrOrgPath = (String) processVariables.get("createrOrgPath"); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map app = new HashMap<>(); + if (processVariables.get("app") != null) { + app = (Map) processVariables.get("app"); + } + log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); + mfq.setAppMap(app); + mfq.setBusinessSid(bv.getBusinessSid()); + + mfq.setMsgContent("系统抄送的流程审批,请查看"); +// act_re_procdef + Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); + log.info("抄送成功-process:{}", process); + if (process == null) { + log.info("抄送失败,流程定义不存在!"); + return rb.setMsg("抄送失败,流程定义不存在!"); + } + mfq.setModuleName(process.get("NAME_")); + if (processVariables.containsKey("orderNames")) { + mfq.setMsgTitle(processVariables.get("orderNames").toString()); + } else { + mfq.setMsgTitle(process.get("NAME_")); + } + if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 + userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); + } + userSids.deleteCharAt(userSids.length() - 1); + mfq.setUserSids(userSids.toString()); + mfq.setOrgPath(createrOrgPath); + ResultBean resultBean = messageFeign.pushMessageCC(mfq); + log.info("抄送成功:{}", userName.toString()); + log.info("抄送成功-resultBean:{}", resultBean); + if (!resultBean.getSuccess()) { + log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); + return rb.setMsg("抄送失败,同送消息异常!"); + } + return rb.success().setMsg("抄送" + userName.toString() + "成功!"); + } +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java new file mode 100644 index 0000000000..8349c2bee1 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java @@ -0,0 +1,592 @@ +package com.yxt.anrui.flowable.biz.flow2; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.yxt.anrui.flowable.api.flow.Flowable; +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.api.flowcomment.FlowComment; +import com.yxt.anrui.flowable.api.flowtask.FlowTask; +import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; +import com.yxt.anrui.flowable.api.processcomment.ProcessCommentDto; +import com.yxt.anrui.flowable.api.utils.ProcDefEnum; +import com.yxt.anrui.flowable.biz.flowtask.FlowTaskService; +import com.yxt.anrui.flowable.biz.process.ExpressionCmd; +import com.yxt.anrui.flowable.biz.processcomment.ProcessCommentService; +import com.yxt.anrui.flowable.common.ProcessConstants; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigFeign; +import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigQuery; +import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigVvo; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserVo; +import com.yxt.anrui.portal.api.sysuser.UserQuery; +import com.yxt.anrui.portal.api.sysuser.UserssQuery; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.result.ResultBean; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.*; +import org.flowable.engine.*; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.DelegationState; +import org.flowable.task.api.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@Service +@Slf4j +public class FlowService extends MybatisBaseService { + + @Autowired + RepositoryService repositoryService; + @Autowired + RuntimeService runtimeService; + + @Autowired + ManagementService managementService; + @Autowired + ProcessEngineConfigurationImpl processEngineConfiguration; + @Autowired + private SysUserFeign sysUserFeign; + + @Autowired + protected IdentityService identityService; + @Autowired + protected TaskService taskService; + @Autowired + private SysFlowableConfigFeign sysFlowableConfigFeign; + @Autowired + private FlowTaskService flowTaskService; + @Autowired + private ProcessCommentService processCommentService; + + public ResultBean getNextNodeUser(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + //根据业务参数取流程流转的环节 信息 + List> list = (List>) getProcessCirculationNodesByMap(bv).getData(); + if (list == null || list.size() < 2) { + return rb.setMsg("流程设计问题"); + } + //取第二个环节的配置角色 + Object o = list.get(1).get("candidateGroups"); + if (o == null) { + return rb.setMsg("流程设计问题"); + } + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o)); + String roleSid = jsonArray.get(0).toString(); + //根据组织架构、角色两个参数取相关符合条件的用户信息 + UserQuery userQuery = new UserQuery(); + userQuery.setRoleSid(roleSid); + userQuery.setOrgSidPath(bv.getOrgSidPath()); + String nextNodeUserSids_ = ""; + List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + } else { + StringBuilder nextNodeUserSids = new StringBuilder(); + for (SysUserVo su : sysUserVos) { + nextNodeUserSids.append(su.getSid()).append(","); + } + //符合条件的用户的sid,拼接的字符串 + nextNodeUserSids_ = nextNodeUserSids.toString(); + nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); + } + return rb.success().setData(nextNodeUserSids_); + + } + + public ResultBean getProcessCirculationNodesByMap(BusinessVariables bv) { + ResultBean>> rb = new ResultBean>>(); + String modelId = bv.getModelId(); + List flowElements = calApprovePath(modelId, bv.getFormVariables()); + List> list = new ArrayList<>(); + for (FlowElement f : flowElements) { + Map map = new HashMap<>(); + map.put("name", f.getName()); + map.put("id", f.getId()); + String s = JSON.toJSONString(f); + JSONObject jsonObject = JSONObject.parseObject(s); + log.info("item:{}", jsonObject); + Object candidateGroups = jsonObject.get("candidateGroups"); + map.put("candidateGroups", candidateGroups); + list.add(map); + } +// List> list= JSON.parseObject(JSON.toJSONString(flowElements), new TypeReference>>() {}); + return rb.setData(list); + } + + /** + * 1. 首先拿到BpmnModel,所有流程定义信息都可以通过BpmnModel获取;若流程尚未发起,则用modelId查询最新部署的流程定义数据; + * 若流程已经发起,可以通过流程实例的processDefinitionId查询流程定义的历史数据。 + * + * @param variableMap 流程变量,用于计算条件分支 + */ + public List calApprovePath(String modelId, Map variableMap) { + BpmnModel bpmnModel = repositoryService.getBpmnModel(modelId); + Collection flowElements = new ArrayList<>(); + Collection flowElements2 = bpmnModel.getMainProcess().getFlowElements(); + flowElements.addAll(flowElements2); + List passElements = new ArrayList<>(); + dueStartElement(passElements, flowElements, variableMap); + return passElements; + } + + /** + * 2. 找到开始节点,通过它的目标节点,然后再不断往下找。 + */ + private void dueStartElement(List passElements, Collection flowElements, Map variableMap) { + Optional startElementOpt = flowElements.stream().filter(flowElement -> flowElement instanceof StartEvent).findFirst(); + startElementOpt.ifPresent(startElement -> { + flowElements.remove(startElement); + List outgoingFlows = ((StartEvent) startElement).getOutgoingFlows(); + String targetRef = outgoingFlows.get(0).getTargetRef(); + // 根据ID找到FlowElement + FlowElement targetElementOfStartElement = getFlowElement(flowElements, targetRef); + if (targetElementOfStartElement instanceof UserTask) { + this.getPassElementList(passElements, flowElements, targetElementOfStartElement, variableMap); + } + }); + } + + /** + * 3. 我只用到了UserTask、ExclusiveGateway、ParallelGateway,所以代码里只列举了这三种,如果用到了其他的,可以再自己补充 + */ + private void getPassElementList(List passElements, Collection flowElements, FlowElement curFlowElement, Map variableMap) { + // 任务节点 + if (curFlowElement instanceof UserTask) { + this.dueUserTaskElement(passElements, flowElements, curFlowElement, variableMap); + return; + } + // 排他网关 + if (curFlowElement instanceof ExclusiveGateway) { + this.dueExclusiveGateway(passElements, flowElements, curFlowElement, variableMap); + return; + } + // 并行网关 + if (curFlowElement instanceof ParallelGateway) { + this.dueParallelGateway(passElements, flowElements, curFlowElement, variableMap); + } + } + + private void dueUserTaskElement(List passElements, Collection flowElements, + FlowElement curFlowElement, Map variableMap) { + passElements.add(curFlowElement); + List outgoingFlows = ((UserTask) curFlowElement).getOutgoingFlows(); + String targetRef = outgoingFlows.get(0).getTargetRef(); + if (outgoingFlows.size() > 1) { + // 找到表达式成立的sequenceFlow + SequenceFlow sequenceFlow = getSequenceFlow(variableMap, outgoingFlows); + targetRef = sequenceFlow.getTargetRef(); + } + // 根据ID找到FlowElement + FlowElement targetElement = getFlowElement(flowElements, targetRef); + this.getPassElementList(passElements, flowElements, targetElement, variableMap); + } + + private void dueExclusiveGateway(List passElements, Collection flowElements, FlowElement curFlowElement, Map variableMap) { + // 获取符合条件的sequenceFlow的目标FlowElement + List exclusiveGatewayOutgoingFlows = ((ExclusiveGateway) curFlowElement).getOutgoingFlows(); + flowElements.remove(curFlowElement); + // 找到表达式成立的sequenceFlow + SequenceFlow sequenceFlow = getSequenceFlow(variableMap, exclusiveGatewayOutgoingFlows); + // 根据ID找到FlowElement + FlowElement targetElement = getFlowElement(flowElements, sequenceFlow.getTargetRef()); + this.getPassElementList(passElements, flowElements, targetElement, variableMap); + } + + private void dueParallelGateway(List passElements, Collection flowElements, FlowElement curFlowElement, Map variableMap) { + FlowElement targetElement; + List parallelGatewayOutgoingFlows = ((ParallelGateway) curFlowElement).getOutgoingFlows(); + for (SequenceFlow sequenceFlow : parallelGatewayOutgoingFlows) { + targetElement = getFlowElement(flowElements, sequenceFlow.getTargetRef()); + this.getPassElementList(passElements, flowElements, targetElement, variableMap); + } + } + + private FlowElement getFlowElement(Collection flowElements, String targetRef) { + return flowElements.stream().filter(flowElement -> targetRef.equals(flowElement.getId())).findFirst().orElse(null); + } + + /** + * 4. 根据传入的变量,计算出表达式成立的那一条SequenceFlow + * + * @param variableMap + * @param outgoingFlows + * @return + */ + private SequenceFlow getSequenceFlow(Map variableMap, List outgoingFlows) { + Optional sequenceFlowOpt = outgoingFlows.stream().filter(item -> { + try { + return this.getElValue(item.getConditionExpression(), variableMap); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + }).findFirst(); + return sequenceFlowOpt.orElse(outgoingFlows.get(0)); + } + + private boolean getElValue(String exp, Map variableMap) { + return managementService.executeCommand(new ExpressionCmd(runtimeService, processEngineConfiguration, null, exp, variableMap)); + } + + public ResultBean businessStartProcessInstanceById(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); + String procDefId = bv.getModelId(); + String userSid = bv.getUserSid(); + String nextNodeUserSids = bv.getNextNodeUserSids(); + Map variables = bv.getFormVariables(); + Map variablesSeconds = bv.getFormVariables(); + //根据流程定义id查询 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId) + .latestVersion().singleResult(); + if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { + return rb.setMsg("流程已被挂起,请先激活流程"); + } + // 设置流程发起人Id到流程中 + ResultBean sysUserVoResultBean = sysUserFeign.fetchBySid(userSid); + SysUserVo sysUser = sysUserVoResultBean.getData(); + identityService.setAuthenticatedUserId(sysUser.getSid()); + variables.put(ProcessConstants.PROCESS_INITIATOR, userSid); + variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid); + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); + // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题? + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); + if (Objects.nonNull(task)) { + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(), + sysUser.getName() + "发起流程申请"); + taskService.setAssignee(task.getId(), userSid); + taskService.setVariablesLocal(task.getId(), variables); + taskService.complete(task.getId(), variables); + } + + //根据流程实例的id查询最新的待办环节 + ResultBean> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId()); + List data = latestTasksNew.getData(); + LatestTaskVo latestTaskVo = data.get(0); + String id_ = latestTaskVo.getId_(); + String task_def_key_ = latestTaskVo.getTask_def_key_(); + //查询下一环节是否有转办并添加评论 + nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId()); + taskService.setAssignee(id_, nextNodeUserSids); + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) { + bv.setModelId(procDefId); + bv.setInstanceId(task.getProcessInstanceId()); + bv.setTaskId(id_); + bv.setUserSid(nextNodeUserSids); + bv.setBusinessSid(bv.getBusinessSid()); + bv.setTaskDefKey(task_def_key_); + bv.setFormVariables(variables); + bv.setOrgSidPath(bv.getOrgSidPath()); + bv.setComment("系统自动跳过!"); + bv.setFormVariables(variablesSeconds); + bv.setNextNodeUserSids(""); + ResultBean updateFlowFieldVoResultBean = handleProsess(bv, false); + if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) { + UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData(); + updateFlowFieldVo.setProcInsId(vo.getProcInsId()); + updateFlowFieldVo.setNodeState(vo.getNodeState()); + updateFlowFieldVo.setTaskId(vo.getTaskId()); + updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + } + if (bv.getUserSid().equals(nextNodeUserSids)) { + //如果申请人与下一环节审批人相同,则自动审批 + bv.setModelId(procDefId); + bv.setInstanceId(task.getProcessInstanceId()); + bv.setTaskId(id_); + bv.setUserSid(nextNodeUserSids); + bv.setBusinessSid(bv.getBusinessSid()); + bv.setTaskDefKey(task_def_key_); + bv.setFormVariables(variables); + bv.setOrgSidPath(bv.getOrgSidPath()); + bv.setFormVariables(variablesSeconds); + bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!"); + bv.setNextNodeUserSids(""); + ResultBean updateFlowFieldVoResultBean = handleProsess(bv, false); + if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) { + UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData(); + updateFlowFieldVo.setProcInsId(vo.getProcInsId()); + updateFlowFieldVo.setNodeState(vo.getNodeState()); + updateFlowFieldVo.setTaskId(vo.getTaskId()); + updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + } + updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); + updateFlowFieldVo.setNodeState(latestTaskVo.getName_()); + updateFlowFieldVo.setTaskId(id_); + updateFlowFieldVo.setTaskDefKey(task_def_key_); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + + /** + * 查询下一环节用户是否有转办用户,若有转办用户则添加转办评论 + * + * @param nextNodeUserSids 下一环节用户 + * @param instanceId 实例id + * @return + */ + public String change(String nextNodeUserSids, String instanceId) { + //查询下一环节是否有转办 + String firstSid = ""; + String firstName = ""; + //默认无转办 + boolean isChange = false; + if (StringUtils.isNotBlank(nextNodeUserSids)) { + List nextUserList = Arrays.asList(nextNodeUserSids.split(",")); + if (nextUserList.size() == 1) { + firstSid = nextUserList.get(0); + ResultBean userVoResultBean = sysUserFeign.fetchBySid(firstSid); + if (userVoResultBean.getData() != null) { + firstName = userVoResultBean.getData().getName(); + } + SysFlowableConfigQuery sysFlowableConfigQuery = new SysFlowableConfigQuery(); + sysFlowableConfigQuery.setUserSid(firstSid); + sysFlowableConfigQuery.setNowDate(new Date()); + ResultBean sysFlowableConfigVvoResultBean = sysFlowableConfigFeign.selectByUserSid(sysFlowableConfigQuery); + if (sysFlowableConfigVvoResultBean.getData() != null) { + if (StringUtils.isNotBlank(sysFlowableConfigVvoResultBean.getData().getChangeUserSid())) { + nextNodeUserSids = sysFlowableConfigVvoResultBean.getData().getChangeUserSid(); + isChange = true; + } + } + } + } + if (isChange) {//添加评论 + ResultBean userVoResultBean = sysUserFeign.fetchBySid(nextNodeUserSids); + ProcessCommentDto processCommentDto = new ProcessCommentDto(); + processCommentDto.setReviewerSid(firstSid); + if (userVoResultBean.getData() != null) { + String changeName = userVoResultBean.getData().getName(); + processCommentDto.setReviewer(firstName); + processCommentDto.setContent("交" + changeName + "转办"); + } + processCommentDto.setTime(new Date()); + processCommentDto.setProcessId(instanceId); + processCommentService.saveOrUpdateDto(processCommentDto); + } + return nextNodeUserSids; + } + + public ResultBean handleProsess(BusinessVariables bv, boolean b) { + ResultBean rb = ResultBean.fireFail(); + UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); + //获取表单中的参数 + Map formVariables = bv.getFormVariables(); + formVariables = formVariables == null ? new HashMap<>() : formVariables; + formVariables.put("businessSid", bv.getBusinessSid()); + String nextUserSid = bv.getNextNodeUserSids(); + String taskId = bv.getTaskId(); + String userSid = bv.getUserSid(); + String instanceId = bv.getInstanceId(); + String comment = bv.getComment(); + String nodeState = ""; + String taskDefKey = ""; + String orgPath = bv.getOrgSidPath(); + //设置下一环节审批人是否自动审批通过,默认否 + boolean contains = false; + //设置是否是管理员自动审批,默认否 + boolean adminContains = false; + if (StringUtils.isBlank(nextUserSid)) { + ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); + if (!stringResultBean.getSuccess()) { + //下一环节用户为空的情况 + nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + adminContains = true; + } else { + nextUserSid = stringResultBean.getData(); + } + } else { + //若下一环节用户与系统管理员一致,则自动审批 + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { + adminContains = true; + } + } + //查询任务id为taskId的任务是否存在 + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (Objects.isNull(task)) { + return rb.setMsg("任务不存在"); + } + String assignee = task.getAssignee(); + if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { + return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); + } + + if (DelegationState.PENDING.equals(task.getDelegationState())) { + //加签 + taskService.addComment(taskId, instanceId, + FlowComment.DELEGATE.getType(), comment); + taskService.resolveTask(taskId, formVariables); + } else { + //当前环节办理通过,且将下一环节用户放入流程中 + taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment); + log.error("taskid:{},userSid:{}", taskId, userSid); + log.error("formVariables:{}", JSON.toJSONString(formVariables)); + taskService.setAssignee(taskId, userSid); + taskService.complete(taskId, formVariables);//当前用户办理通过 + //根据流程实例的id取最新的待办环节,给环节设置上用户sid + ResultBean> ll = flowTaskService.getLatestTasksNew(instanceId); + if (ll.getData().size() > 0) { + LatestTaskVo latestTaskVo = ll.getData().get(0); + String id_ = latestTaskVo.getId_(); + //查询下一环节用户是否有转办人 + nextUserSid = change(nextUserSid, bv.getInstanceId()); + taskService.setAssignee(id_, nextUserSid);//将下一环节用户放入流程中 + vo.setTaskId(id_); + //在act_ru_variable表中增加环节上的业务参数的变量 + taskService.setVariablesLocal(id_, formVariables); + nodeState = latestTaskVo.getName_(); + taskDefKey = latestTaskVo.getTask_def_key_(); + } else { + nodeState = FlowComment.SETTLE.getRemark(); + taskDefKey = "Event_end"; + vo.setNodeState(FlowComment.SETTLE.getRemark()); + } + } + //设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批 + if (adminContains) { + bv.setUserSid(nextUserSid); + bv.setTaskId(vo.getTaskId()); + bv.setTaskDefKey(taskDefKey); + bv.setComment("系统自动跳过"); + bv.setNextNodeUserSids(""); + return handleProsess(bv, false); + } + //获取该流程所有要走的环节节点 + List flowElements = calApprovePath(bv.getModelId(), + bv.getFormVariables()); + for (int i = 0; i < flowElements.size(); i++) { + FlowElement flowElement = flowElements.get(i); + String id = flowElement.getId(); + if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { + //获取下下一环节 + FlowElement flowElement1 = flowElements.get(i + 1); + List sysUserVoLists2 = new ArrayList<>(); + if (i + 2 < flowElements.size()) { + //获取下下下一环节用户 + FlowElement flowElement2 = flowElements.get(i + 2); + if (flowElement2 instanceof UserTask) { + UserTask userTask = (UserTask) flowElement2; + List candidateGroups = userTask.getCandidateGroups(); + UserssQuery userssQuery = new UserssQuery(); + userssQuery.setCandidateGroups(candidateGroups); + userssQuery.setOrgSidPath(orgPath); + sysUserVoLists2 = sysUserFeign.getUsersByRoles(userssQuery).getData(); + if (sysUserVoLists2 == null) { + sysUserVoLists2 = new ArrayList<>(); + } + } + } + if (flowElement1 instanceof UserTask) { + UserTask userTask = (UserTask) flowElement1; + List candidateGroups = userTask.getCandidateGroups(); + List sysUserVoLists = new ArrayList<>(); + UserssQuery userssQuery = new UserssQuery(); + userssQuery.setCandidateGroups(candidateGroups); + userssQuery.setOrgSidPath(orgPath); + sysUserVoLists = sysUserFeign.getUsersByRoles(userssQuery).getData(); + if (sysUserVoLists == null) { + sysUserVoLists = new ArrayList<>(); + } + //当前环节运营部总经理 刘丽艳 点击同意 下一环节 事业部副总经理 (nextUserSid) 和事业部总经理(sysUserVoLists.get(0).getSid()) + //判断查询回来的用户的集合size是1 并且用户的sid和下一环节的用户的sid相同。 + if (sysUserVoLists.size() == 1 && sysUserVoLists.get(0).getSid().equals(nextUserSid)) { + contains = true; + break; + } + //如果下下一环节无用户,下下下一环节用户与下一环节用户相同且只有一个,则下一环节用户自动审批。 + if (sysUserVoLists.size() == 0 && sysUserVoLists2.size() == 1 && sysUserVoLists2.get(0).getSid().equals(nextUserSid)) { + contains = true; + break; + } + } + } + if (contains) { + break; + } + } + if (contains) { + bv.setUserSid(nextUserSid); + bv.setTaskId(vo.getTaskId()); + bv.setTaskDefKey(taskDefKey); + bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!"); + return handleProsess(bv, false); + } + vo.setProcInsId(instanceId); + vo.setProcDefId(bv.getModelId()); + vo.setNodeState(nodeState); + vo.setTaskDefKey(taskDefKey); + vo.setSid(bv.getBusinessSid()); + return rb.success().setData(vo); + } + + /** + * 获取下一环节用户 + * + * @param bv + * @return + */ + public ResultBean getNextNodeUserSidsOfSubmit(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + String orgPath = bv.getOrgSidPath(); + String taskDefKey = bv.getTaskDefKey(); + //根据业务参数取流程流转的环节 信息 + List> list = (List>) getProcessCirculationNodesByMap(bv).getData(); + Map task_map = new HashMap<>(); + boolean endTask = true; + for (int i = 0; i < list.size(); i++) { + String id = list.get(i).get("id").toString(); + if (id.equals(taskDefKey) && i + 1 < list.size()) { + task_map = list.get(i + 1); + endTask = false; + } + } + if (endTask) { + task_map.put("name", "结束"); + return rb.success(); + } else { + Object o = task_map.get("candidateGroups"); + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o)); + String roleSid = jsonArray.get(0).toString(); + //根据组织架构、角色两个参数取相关符合条件的用户信息 + UserQuery userQuery = new UserQuery(); + userQuery.setRoleSid(roleSid); + userQuery.setOrgSidPath(orgPath); + String nextNodeUserSids_ = ""; + List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + return rb; + } else { + StringBuilder nextNodeUserSids = new StringBuilder(); + for (SysUserVo su : sysUserVos) { + nextNodeUserSids.append(su.getSid()).append(","); + } + //符合条件的用户的sid,拼接的字符串 + nextNodeUserSids_ = nextNodeUserSids.toString(); + nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); + } + return rb.success().setData(nextNodeUserSids_); + } + + + } +} From bf9c8ed02b520f52152f83a8e9ab1160422de7bd Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Fri, 21 Jul 2023 14:12:54 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=BD=AC=E5=8A=9E=E6=B7=BB=E5=8A=A0=E6=8A=84=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anrui/flowable/biz/flow/FlowableRest.java | 7 + .../anrui/flowable/biz/flow2/FlowRest.java | 119 +-------------- .../anrui/flowable/biz/flow2/FlowService.java | 141 +++++++++++++++++- .../processcomment/ProcessCommentMapper.java | 2 + .../processcomment/ProcessCommentMapper.xml | 4 + .../processcomment/ProcessCommentService.java | 4 + 6 files changed, 153 insertions(+), 124 deletions(-) diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java index 5eb18271a3..4286cafc9f 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java @@ -205,6 +205,13 @@ public class FlowableRest implements FlowableFeign { if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); } + //查询是否有设置转办的,抄送给设置转办人员 + List zbUserSids = processCommentService.selectByIdAndComment("转办",bv.getInstanceId()); + zbUserSids.removeAll(Collections.singleton(null)); + if(!zbUserSids.isEmpty()){ + String zbUser = String.join(",",zbUserSids); + userSids.append(zbUser).append(","); + } userSids.deleteCharAt(userSids.length() - 1); mfq.setUserSids(userSids.toString()); mfq.setOrgPath(createrOrgPath); diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java index 0df8db0cf7..255bfa6c0a 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java @@ -44,19 +44,9 @@ public class FlowRest implements FlowFeign { @Autowired private FlowService flowService; - @Autowired - private SysFlowccFeign sysFlowccFeign; - @Autowired - private SysUserFeign sysUserFeign; @Autowired - protected HistoryService historyService; - - @Autowired - private ProcessService processService; - - @Autowired - private MessageFeign messageFeign; + private SysUserFeign sysUserFeign; @Override public ResultBean startProcess(BusinessVariables bv) { @@ -99,7 +89,7 @@ public class FlowRest implements FlowFeign { UpdateFlowFieldVo ufVo = updateFlowFieldVoResultBean.getData(); ufVo.setTaskId(bv.getTaskId()); map.put("uff", ufVo); - cc(map, bv.getTaskDefKey()); + flowService.cc(map, bv.getTaskDefKey()); }); } catch (Exception e) { e.printStackTrace(); @@ -110,110 +100,5 @@ public class FlowRest implements FlowFeign { return updateFlowFieldVoResultBean; } - /** - * 流程抄送的功能 - * - * @param map - * @return - */ - public ResultBean cc(Map map, String taskDefKey) { - ResultBean rb = ResultBean.fireFail(); - log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); - Object bv1 = map.get("bv"); - BusinessVariables bv = new BusinessVariables(); - BeanUtil.copyProperties(bv1, bv); - Object uff1 = map.get("uff"); - UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); - BeanUtil.copyProperties(uff1, uff); - uff.setTaskDefKey(taskDefKey); - //流程定义的id - String modelId = bv.getModelId(); - //将modelId根据冒号:分成三部分,取第一部分作为key - List stringList = Arrays.asList(modelId.split(":")); - modelId = stringList.get(0); - //抄送的角色的sid - ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); - //组织机构sid - String orgSidPath = bv.getOrgSidPath(); - if (roleSidByModelId.getData() == null) { - log.info("抄送失败,没有配置对应的角色!"); - return rb.setMsg("抄送失败,没有配置对应的角色!"); - } - SysFlowccVo data = roleSidByModelId.getData(); - if (StringUtils.isBlank(data.getRoleSid())) { - log.info("抄送失败,没有配置对应的角色!"); - return rb.setMsg("抄送失败,没有配置对应的角色!"); - } - List list = Arrays.asList(data.getRoleSid().split(",")); - UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery(); - userQuery.setRoleSids(list); - userQuery.setOrgSidPath(orgSidPath); - List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); - if (sysUserVos == null || sysUserVos.size() < 1) { - log.info("抄送失败,没有用户!"); - return rb.setMsg("抄送失败,没有用户!"); - } - StringBuilder userName = new StringBuilder(); - StringBuilder userSids = new StringBuilder(); - sysUserVos.forEach(f -> { - userName.append(f.getName()).append(","); - userSids.append(f.getSid()).append(","); - }); - - //抄送的业务逻辑 - MessageFlowableQuery mfq = new MessageFlowableQuery(); - MessageFlowVo messageFlowVo = new MessageFlowVo(); - BeanUtil.copyProperties(uff, messageFlowVo); - mfq.setUfVo(messageFlowVo); - //移动端的参数 - HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() - .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); - if (historicTaskInstance == null) { - log.info("抄送失败:没有获取到业务参数!"); - return rb.setMsg("抄送失败!"); - } - Map processVariables = historicTaskInstance.getProcessVariables(); - String createrOrgPath = (String) processVariables.get("createrOrgPath"); - if (historicTaskInstance == null) { - log.info("抄送失败:没有获取到业务参数!"); - return rb.setMsg("抄送失败!"); - } - Map app = new HashMap<>(); - if (processVariables.get("app") != null) { - app = (Map) processVariables.get("app"); - } - log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); - mfq.setAppMap(app); - mfq.setBusinessSid(bv.getBusinessSid()); - - mfq.setMsgContent("系统抄送的流程审批,请查看"); -// act_re_procdef - Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); - log.info("抄送成功-process:{}", process); - if (process == null) { - log.info("抄送失败,流程定义不存在!"); - return rb.setMsg("抄送失败,流程定义不存在!"); - } - mfq.setModuleName(process.get("NAME_")); - if (processVariables.containsKey("orderNames")) { - mfq.setMsgTitle(processVariables.get("orderNames").toString()); - } else { - mfq.setMsgTitle(process.get("NAME_")); - } - if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 - userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); - } - userSids.deleteCharAt(userSids.length() - 1); - mfq.setUserSids(userSids.toString()); - mfq.setOrgPath(createrOrgPath); - ResultBean resultBean = messageFeign.pushMessageCC(mfq); - log.info("抄送成功:{}", userName.toString()); - log.info("抄送成功-resultBean:{}", resultBean); - if (!resultBean.getSuccess()) { - log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); - return rb.setMsg("抄送失败,同送消息异常!"); - } - return rb.success().setMsg("抄送" + userName.toString() + "成功!"); - } } diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java index 8349c2bee1..2ef8b208b8 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java @@ -1,5 +1,6 @@ package com.yxt.anrui.flowable.biz.flow2; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -12,16 +13,19 @@ import com.yxt.anrui.flowable.api.processcomment.ProcessCommentDto; import com.yxt.anrui.flowable.api.utils.ProcDefEnum; import com.yxt.anrui.flowable.biz.flowtask.FlowTaskService; import com.yxt.anrui.flowable.biz.process.ExpressionCmd; +import com.yxt.anrui.flowable.biz.process.ProcessService; import com.yxt.anrui.flowable.biz.processcomment.ProcessCommentService; import com.yxt.anrui.flowable.common.ProcessConstants; +import com.yxt.anrui.flowable.feign.MessageFeign; +import com.yxt.anrui.flowable.feign.form.MessageFlowVo; +import com.yxt.anrui.flowable.feign.form.MessageFlowableQuery; import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigFeign; import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigQuery; import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigVvo; -import com.yxt.anrui.portal.api.sysuser.SysUserFeign; -import com.yxt.anrui.portal.api.sysuser.SysUserVo; -import com.yxt.anrui.portal.api.sysuser.UserQuery; -import com.yxt.anrui.portal.api.sysuser.UserssQuery; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccFeign; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccVo; +import com.yxt.anrui.portal.api.sysuser.*; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.result.ResultBean; @@ -33,6 +37,7 @@ import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.DelegationState; import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -70,6 +75,17 @@ public class FlowService extends MybatisBaseService { @Autowired private ProcessCommentService processCommentService; + @Autowired + protected HistoryService historyService; + + @Autowired + private ProcessService processService; + + @Autowired + private MessageFeign messageFeign; + @Autowired + private SysFlowccFeign sysFlowccFeign; + public ResultBean getNextNodeUser(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); //根据业务参数取流程流转的环节 信息 @@ -121,7 +137,6 @@ public class FlowService extends MybatisBaseService { map.put("candidateGroups", candidateGroups); list.add(map); } -// List> list= JSON.parseObject(JSON.toJSONString(flowElements), new TypeReference>>() {}); return rb.setData(list); } @@ -301,7 +316,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); - rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } } if (bv.getUserSid().equals(nextNodeUserSids)) { @@ -326,7 +341,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); - rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } } updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); @@ -586,7 +601,119 @@ public class FlowService extends MybatisBaseService { } return rb.success().setData(nextNodeUserSids_); } + } + /** + * 流程抄送的功能 + * + * @param map + * @return + */ + public ResultBean cc(Map map, String taskDefKey) { + ResultBean rb = ResultBean.fireFail(); + log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); + Object bv1 = map.get("bv"); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(bv1, bv); + Object uff1 = map.get("uff"); + UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); + BeanUtil.copyProperties(uff1, uff); + uff.setTaskDefKey(taskDefKey); + //流程定义的id + String modelId = bv.getModelId(); + //将modelId根据冒号:分成三部分,取第一部分作为key + List stringList = Arrays.asList(modelId.split(":")); + modelId = stringList.get(0); + //抄送的角色的sid + ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); + //组织机构sid + String orgSidPath = bv.getOrgSidPath(); + if (roleSidByModelId.getData() == null) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + SysFlowccVo data = roleSidByModelId.getData(); + if (StringUtils.isBlank(data.getRoleSid())) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + List list = Arrays.asList(data.getRoleSid().split(",")); + UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery(); + userQuery.setRoleSids(list); + userQuery.setOrgSidPath(orgSidPath); + List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + log.info("抄送失败,没有用户!"); + return rb.setMsg("抄送失败,没有用户!"); + } + StringBuilder userName = new StringBuilder(); + StringBuilder userSids = new StringBuilder(); + sysUserVos.forEach(f -> { + userName.append(f.getName()).append(","); + userSids.append(f.getSid()).append(","); + }); + + //抄送的业务逻辑 + MessageFlowableQuery mfq = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(uff, messageFlowVo); + mfq.setUfVo(messageFlowVo); + //移动端的参数 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map processVariables = historicTaskInstance.getProcessVariables(); + String createrOrgPath = (String) processVariables.get("createrOrgPath"); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map app = new HashMap<>(); + if (processVariables.get("app") != null) { + app = (Map) processVariables.get("app"); + } + log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); + mfq.setAppMap(app); + mfq.setBusinessSid(bv.getBusinessSid()); + + mfq.setMsgContent("系统抄送的流程审批,请查看"); +// act_re_procdef + Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); + log.info("抄送成功-process:{}", process); + if (process == null) { + log.info("抄送失败,流程定义不存在!"); + return rb.setMsg("抄送失败,流程定义不存在!"); + } + mfq.setModuleName(process.get("NAME_")); + if (processVariables.containsKey("orderNames")) { + mfq.setMsgTitle(processVariables.get("orderNames").toString()); + } else { + mfq.setMsgTitle(process.get("NAME_")); + } + if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 + userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); + } + //查询是否有设置转办的,抄送给设置转办人员 + List zbUserSids = processCommentService.selectByIdAndComment("转办",bv.getInstanceId()); + zbUserSids.removeAll(Collections.singleton(null)); + if(!zbUserSids.isEmpty()){ + String zbUser = String.join(",",zbUserSids); + userSids.append(zbUser).append(","); + } + userSids.deleteCharAt(userSids.length() - 1); + mfq.setUserSids(userSids.toString()); + mfq.setOrgPath(createrOrgPath); + ResultBean resultBean = messageFeign.pushMessageCC(mfq); + log.info("抄送成功:{}", userName.toString()); + log.info("抄送成功-resultBean:{}", resultBean); + if (!resultBean.getSuccess()) { + log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); + return rb.setMsg("抄送失败,同送消息异常!"); + } + return rb.success().setMsg("抄送" + userName.toString() + "成功!"); } } diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java index 2974556ee8..dcc3730a67 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java @@ -69,4 +69,6 @@ public interface ProcessCommentMapper extends BaseMapper { ProcessComment fetchBySid(@Param("sid")String sid); void insertByDto(ProcessCommentDto dto); + + List selectByIdAndComment(@Param("comment") String comment, @Param("instanceId") String instanceId); } \ No newline at end of file diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml index 3551c99e56..b44df399cb 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml @@ -17,4 +17,8 @@ insert into `process_comment` ( `sid`, `reviewer`, `reviewerSid`, `time`, `content`, `processId`, `processInstSid`,processFile) values(#{sid},#{reviewer},#{reviewerSid},#{time},#{content},#{processId},#{processInstSid},#{processFile}); + + \ No newline at end of file diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java index 05da790cc9..4095efe52f 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java @@ -135,4 +135,8 @@ public class ProcessCommentService extends MybatisBaseService selectByIdAndComment(String comment, String instanceId) { + return baseMapper.selectByIdAndComment(comment, instanceId); + } } \ No newline at end of file From f1bf79d93aef435c08c2fa5bbca10e8cbbcb8d6d Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Fri, 21 Jul 2023 11:49:44 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=80=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8F=90=E4=BA=A4=E5=8A=9E=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bussalesorder/BusSalesOrderService.java | 137 ++-- .../anrui/flowable/api/flow2/FlowFeign.java | 34 + .../flowable/api/flow2/FlowFeignback.java | 9 + .../anrui/flowable/biz/flow/FlowableRest.java | 8 +- .../anrui/flowable/biz/flow2/FlowMapper.java | 14 + .../anrui/flowable/biz/flow2/FlowMapper.xml | 4 + .../anrui/flowable/biz/flow2/FlowRest.java | 219 +++++++ .../anrui/flowable/biz/flow2/FlowService.java | 592 ++++++++++++++++++ 8 files changed, 951 insertions(+), 66 deletions(-) create mode 100644 anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java create mode 100644 anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java create mode 100644 anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java index a6f8573df5..25c131f6bf 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java @@ -138,6 +138,7 @@ import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.UnCollectionDto; import com.yxt.anrui.flowable.api.flow.FlowSelectVo; 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.FlowableQuery; @@ -252,6 +253,8 @@ public class BusSalesOrderService extends MybatisBaseService voResultBean = flowableFeign.startProcess(bv); + ResultBean voResultBean = flowFeign.startProcess(bv); if (!voResultBean.getSuccess()) { return rb.setMsg(voResultBean.getMsg()); } @@ -4819,7 +4825,7 @@ public class BusSalesOrderService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + ResultBean resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } UpdateFlowFieldVo ufVo = resultBean.getData(); updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); - + busSalesOrder = fetchBySid(bv.getBusinessSid()); //极光推送 if (!"Event_end".equals(resultBean.getData().getTaskDefKey())) { - //极光推送 - busSalesOrder = fetchBySid(bv.getBusinessSid()); - MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); - MessageFlowVo messageFlowVo = new MessageFlowVo(); - BeanUtil.copyProperties(ufVo, messageFlowVo); - ufVo.setProcInsId(busSalesOrder.getProcInstId()); - messageFlowableQuery.setUfVo(messageFlowVo); - messageFlowableQuery.setAppMap((Map) variables.get("app")); - messageFlowableQuery.setBusinessSid(bv.getBusinessSid()); - messageFlowableQuery.setModuleName("销售订单申请"); - messageFlowableQuery.setMsgContent(busSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); - messageFlowableQuery.setMsgTitle("销售订单"); - ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + 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()); + BusSalesOrder finalBusSalesOrder = busSalesOrder; + Future future1 = pool.submit(() -> { + //极光推送 + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + ufVo.setProcInsId(finalBusSalesOrder.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap((Map) variables.get("app")); + messageFlowableQuery.setBusinessSid(bv.getBusinessSid()); + messageFlowableQuery.setModuleName("销售订单申请"); + messageFlowableQuery.setMsgContent(finalBusSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("销售订单"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + }); + } catch (Exception e) { + e.printStackTrace(); + } } else { ResultBean details = getSaleOrderDetails(bv.getBusinessSid()); AppOrderDetailsVo vo = details.getData(); diff --git a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java new file mode 100644 index 0000000000..9e4f439e5f --- /dev/null +++ b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java @@ -0,0 +1,34 @@ +package com.yxt.anrui.flowable.api.flow2; + +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@FeignClient( + contextId = "anrui-flowable-Flow", + name = "anrui-flowable", + path = "v2/flow", + fallback = FlowFeignback.class) +public interface FlowFeign { + + @ApiOperation(value = "启动流程") + @PostMapping(value = "/startProcess") + @ResponseBody + ResultBean startProcess(@RequestBody BusinessVariables dto); + + @ApiOperation(value = "处理流程") + @PostMapping(value = "/handleProsess") + @ResponseBody + ResultBean handleProsess(@RequestBody BusinessVariables bv); +} diff --git a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java new file mode 100644 index 0000000000..4c644465b3 --- /dev/null +++ b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java @@ -0,0 +1,9 @@ +package com.yxt.anrui.flowable.api.flow2; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +public class FlowFeignback { +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java index c2353ab93b..5eb18271a3 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java @@ -284,11 +284,9 @@ public class FlowableRest implements FlowableFeign { public ResultBean startProcess(BusinessVariables dto) { log.info("startProcess.dto:{}", dto); ResultBean rb = ResultBean.fireFail(); - if (StringUtils.isBlank(dto.getBusinessSid())) { return rb.setMsg("businessSid 不能为空!"); } - if (dto.getFormVariables() == null) dto.setFormVariables(new HashMap()); Map formVariables = dto.getFormVariables(); @@ -296,20 +294,17 @@ public class FlowableRest implements FlowableFeign { String orgPath = dto.getOrgSidPath(); formVariables.put("createrOrgPath", orgPath);//发起人的组织结构sid } - dto.getFormVariables().put("businessSid", dto.getBusinessSid()); String nextNodeUserSids_ = dto.getNextNodeUserSids(); if (StringUtils.isBlank(nextNodeUserSids_)) { ResultBean nextNodeUserSidsOfCreate = getNextNodeUserSidsOfCreate(dto); boolean success = nextNodeUserSidsOfCreate.getSuccess(); if (!success) { -// return rb.setMsg(nextNodeUserSidsOfCreate.getMsg()); nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); } else { nextNodeUserSids_ = nextNodeUserSidsOfCreate.getData().getUserSid(); dto.getFormVariables().put(BusinessVariables.ORGPATH, nextNodeUserSidsOfCreate.getData().getOrgPath()); } - } dto.setNextNodeUserSids(nextNodeUserSids_); ResultBean resultBean1 = flowableService.businessStart(dto); @@ -431,7 +426,7 @@ public class FlowableRest implements FlowableFeign { //若下一环节用户与系统管理员一致,则自动审批 if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { adminContains = true; - }else{ + } else { //下一环节不为空,查询下一环节用户是否有转办人 if (nextUserSid != null) { List nextUserList = Arrays.asList(nextUserSid.split(",")); @@ -531,6 +526,7 @@ public class FlowableRest implements FlowableFeign { dto.setTaskId(vo.getTaskId()); dto.setTaskDefKey(taskDefKey); dto.setComment("系统自动跳过"); + dto.setNextNodeUserSids(""); return handleProsess(dto, false); } List flowElements = processService.calApprovePath(dto.getModelId(), dto.getModelId(), diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java new file mode 100644 index 0000000000..75a54ab80c --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java @@ -0,0 +1,14 @@ +package com.yxt.anrui.flowable.biz.flow2; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.anrui.flowable.api.flow.Flowable; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@Mapper +public interface FlowMapper extends BaseMapper { +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml new file mode 100644 index 0000000000..155d9f2b05 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java new file mode 100644 index 0000000000..0df8db0cf7 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java @@ -0,0 +1,219 @@ +package com.yxt.anrui.flowable.biz.flow2; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.api.flow2.FlowFeign; +import com.yxt.anrui.flowable.biz.process.ProcessService; +import com.yxt.anrui.flowable.feign.MessageFeign; +import com.yxt.anrui.flowable.feign.form.MessageFlowVo; +import com.yxt.anrui.flowable.feign.form.MessageFlowableQuery; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccFeign; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccVo; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserVo; +import com.yxt.anrui.portal.api.sysuser.UserByRolesAndOrgQuery; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.result.ResultBean; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; +import org.flowable.engine.HistoryService; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.*; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@RestController +@RequestMapping("v2/flow") +public class FlowRest implements FlowFeign { + Logger log = LoggerFactory.getLogger(FlowRest.class); + + @Autowired + private FlowService flowService; + @Autowired + private SysFlowccFeign sysFlowccFeign; + @Autowired + private SysUserFeign sysUserFeign; + + @Autowired + protected HistoryService historyService; + + @Autowired + private ProcessService processService; + + @Autowired + private MessageFeign messageFeign; + + @Override + public ResultBean startProcess(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + //获取表单中的参数 + Map formVariables = bv.getFormVariables(); + formVariables = formVariables == null ? new HashMap<>() : formVariables; + //发起人的组织全路径 + String orgPath = bv.getOrgSidPath(); + formVariables.put("createrOrgPath", orgPath); + formVariables.put("businessSid", bv.getBusinessSid()); + //获取下一环节待办人 + ResultBean userResultBean = flowService.getNextNodeUser(bv); + bv.setNextNodeUserSids(userResultBean.getData()); + //启动流程实例 + ResultBean startResultBean = flowService.businessStartProcessInstanceById(bv); + return startResultBean; + } + + @Override + public ResultBean handleProsess(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + ResultBean updateFlowFieldVoResultBean = flowService.handleProsess(bv, true); + //添加抄送 + log.info("流程返回:{}", JSONObject.toJSONString(updateFlowFieldVoResultBean)); + //需要判断办结后再执行 TODO + if (updateFlowFieldVoResultBean.getSuccess()) { + log.info("流程返回:{}", JSONObject.toJSONString(updateFlowFieldVoResultBean)); + if ("Event_end".equals(updateFlowFieldVoResultBean.getData().getTaskDefKey())) { + 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()); + + Future future1 = pool.submit(() -> { + HashMap map = new HashMap<>(); + map.put("bv", bv); + UpdateFlowFieldVo ufVo = updateFlowFieldVoResultBean.getData(); + ufVo.setTaskId(bv.getTaskId()); + map.put("uff", ufVo); + cc(map, bv.getTaskDefKey()); + }); + } catch (Exception e) { + e.printStackTrace(); + return rb.setMsg("抄送失败"); + } + } + } + return updateFlowFieldVoResultBean; + } + + /** + * 流程抄送的功能 + * + * @param map + * @return + */ + public ResultBean cc(Map map, String taskDefKey) { + ResultBean rb = ResultBean.fireFail(); + log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); + Object bv1 = map.get("bv"); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(bv1, bv); + Object uff1 = map.get("uff"); + UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); + BeanUtil.copyProperties(uff1, uff); + uff.setTaskDefKey(taskDefKey); + + //流程定义的id + String modelId = bv.getModelId(); + //将modelId根据冒号:分成三部分,取第一部分作为key + List stringList = Arrays.asList(modelId.split(":")); + modelId = stringList.get(0); + //抄送的角色的sid + ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); + //组织机构sid + String orgSidPath = bv.getOrgSidPath(); + if (roleSidByModelId.getData() == null) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + SysFlowccVo data = roleSidByModelId.getData(); + if (StringUtils.isBlank(data.getRoleSid())) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + List list = Arrays.asList(data.getRoleSid().split(",")); + UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery(); + userQuery.setRoleSids(list); + userQuery.setOrgSidPath(orgSidPath); + List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + log.info("抄送失败,没有用户!"); + return rb.setMsg("抄送失败,没有用户!"); + } + StringBuilder userName = new StringBuilder(); + StringBuilder userSids = new StringBuilder(); + sysUserVos.forEach(f -> { + userName.append(f.getName()).append(","); + userSids.append(f.getSid()).append(","); + }); + + //抄送的业务逻辑 + MessageFlowableQuery mfq = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(uff, messageFlowVo); + mfq.setUfVo(messageFlowVo); + //移动端的参数 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map processVariables = historicTaskInstance.getProcessVariables(); + String createrOrgPath = (String) processVariables.get("createrOrgPath"); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map app = new HashMap<>(); + if (processVariables.get("app") != null) { + app = (Map) processVariables.get("app"); + } + log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); + mfq.setAppMap(app); + mfq.setBusinessSid(bv.getBusinessSid()); + + mfq.setMsgContent("系统抄送的流程审批,请查看"); +// act_re_procdef + Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); + log.info("抄送成功-process:{}", process); + if (process == null) { + log.info("抄送失败,流程定义不存在!"); + return rb.setMsg("抄送失败,流程定义不存在!"); + } + mfq.setModuleName(process.get("NAME_")); + if (processVariables.containsKey("orderNames")) { + mfq.setMsgTitle(processVariables.get("orderNames").toString()); + } else { + mfq.setMsgTitle(process.get("NAME_")); + } + if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 + userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); + } + userSids.deleteCharAt(userSids.length() - 1); + mfq.setUserSids(userSids.toString()); + mfq.setOrgPath(createrOrgPath); + ResultBean resultBean = messageFeign.pushMessageCC(mfq); + log.info("抄送成功:{}", userName.toString()); + log.info("抄送成功-resultBean:{}", resultBean); + if (!resultBean.getSuccess()) { + log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); + return rb.setMsg("抄送失败,同送消息异常!"); + } + return rb.success().setMsg("抄送" + userName.toString() + "成功!"); + } +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java new file mode 100644 index 0000000000..8349c2bee1 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java @@ -0,0 +1,592 @@ +package com.yxt.anrui.flowable.biz.flow2; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.yxt.anrui.flowable.api.flow.Flowable; +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.api.flowcomment.FlowComment; +import com.yxt.anrui.flowable.api.flowtask.FlowTask; +import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; +import com.yxt.anrui.flowable.api.processcomment.ProcessCommentDto; +import com.yxt.anrui.flowable.api.utils.ProcDefEnum; +import com.yxt.anrui.flowable.biz.flowtask.FlowTaskService; +import com.yxt.anrui.flowable.biz.process.ExpressionCmd; +import com.yxt.anrui.flowable.biz.processcomment.ProcessCommentService; +import com.yxt.anrui.flowable.common.ProcessConstants; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigFeign; +import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigQuery; +import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigVvo; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserVo; +import com.yxt.anrui.portal.api.sysuser.UserQuery; +import com.yxt.anrui.portal.api.sysuser.UserssQuery; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.result.ResultBean; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.*; +import org.flowable.engine.*; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.DelegationState; +import org.flowable.task.api.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/7/20 + **/ +@Service +@Slf4j +public class FlowService extends MybatisBaseService { + + @Autowired + RepositoryService repositoryService; + @Autowired + RuntimeService runtimeService; + + @Autowired + ManagementService managementService; + @Autowired + ProcessEngineConfigurationImpl processEngineConfiguration; + @Autowired + private SysUserFeign sysUserFeign; + + @Autowired + protected IdentityService identityService; + @Autowired + protected TaskService taskService; + @Autowired + private SysFlowableConfigFeign sysFlowableConfigFeign; + @Autowired + private FlowTaskService flowTaskService; + @Autowired + private ProcessCommentService processCommentService; + + public ResultBean getNextNodeUser(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + //根据业务参数取流程流转的环节 信息 + List> list = (List>) getProcessCirculationNodesByMap(bv).getData(); + if (list == null || list.size() < 2) { + return rb.setMsg("流程设计问题"); + } + //取第二个环节的配置角色 + Object o = list.get(1).get("candidateGroups"); + if (o == null) { + return rb.setMsg("流程设计问题"); + } + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o)); + String roleSid = jsonArray.get(0).toString(); + //根据组织架构、角色两个参数取相关符合条件的用户信息 + UserQuery userQuery = new UserQuery(); + userQuery.setRoleSid(roleSid); + userQuery.setOrgSidPath(bv.getOrgSidPath()); + String nextNodeUserSids_ = ""; + List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + } else { + StringBuilder nextNodeUserSids = new StringBuilder(); + for (SysUserVo su : sysUserVos) { + nextNodeUserSids.append(su.getSid()).append(","); + } + //符合条件的用户的sid,拼接的字符串 + nextNodeUserSids_ = nextNodeUserSids.toString(); + nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); + } + return rb.success().setData(nextNodeUserSids_); + + } + + public ResultBean getProcessCirculationNodesByMap(BusinessVariables bv) { + ResultBean>> rb = new ResultBean>>(); + String modelId = bv.getModelId(); + List flowElements = calApprovePath(modelId, bv.getFormVariables()); + List> list = new ArrayList<>(); + for (FlowElement f : flowElements) { + Map map = new HashMap<>(); + map.put("name", f.getName()); + map.put("id", f.getId()); + String s = JSON.toJSONString(f); + JSONObject jsonObject = JSONObject.parseObject(s); + log.info("item:{}", jsonObject); + Object candidateGroups = jsonObject.get("candidateGroups"); + map.put("candidateGroups", candidateGroups); + list.add(map); + } +// List> list= JSON.parseObject(JSON.toJSONString(flowElements), new TypeReference>>() {}); + return rb.setData(list); + } + + /** + * 1. 首先拿到BpmnModel,所有流程定义信息都可以通过BpmnModel获取;若流程尚未发起,则用modelId查询最新部署的流程定义数据; + * 若流程已经发起,可以通过流程实例的processDefinitionId查询流程定义的历史数据。 + * + * @param variableMap 流程变量,用于计算条件分支 + */ + public List calApprovePath(String modelId, Map variableMap) { + BpmnModel bpmnModel = repositoryService.getBpmnModel(modelId); + Collection flowElements = new ArrayList<>(); + Collection flowElements2 = bpmnModel.getMainProcess().getFlowElements(); + flowElements.addAll(flowElements2); + List passElements = new ArrayList<>(); + dueStartElement(passElements, flowElements, variableMap); + return passElements; + } + + /** + * 2. 找到开始节点,通过它的目标节点,然后再不断往下找。 + */ + private void dueStartElement(List passElements, Collection flowElements, Map variableMap) { + Optional startElementOpt = flowElements.stream().filter(flowElement -> flowElement instanceof StartEvent).findFirst(); + startElementOpt.ifPresent(startElement -> { + flowElements.remove(startElement); + List outgoingFlows = ((StartEvent) startElement).getOutgoingFlows(); + String targetRef = outgoingFlows.get(0).getTargetRef(); + // 根据ID找到FlowElement + FlowElement targetElementOfStartElement = getFlowElement(flowElements, targetRef); + if (targetElementOfStartElement instanceof UserTask) { + this.getPassElementList(passElements, flowElements, targetElementOfStartElement, variableMap); + } + }); + } + + /** + * 3. 我只用到了UserTask、ExclusiveGateway、ParallelGateway,所以代码里只列举了这三种,如果用到了其他的,可以再自己补充 + */ + private void getPassElementList(List passElements, Collection flowElements, FlowElement curFlowElement, Map variableMap) { + // 任务节点 + if (curFlowElement instanceof UserTask) { + this.dueUserTaskElement(passElements, flowElements, curFlowElement, variableMap); + return; + } + // 排他网关 + if (curFlowElement instanceof ExclusiveGateway) { + this.dueExclusiveGateway(passElements, flowElements, curFlowElement, variableMap); + return; + } + // 并行网关 + if (curFlowElement instanceof ParallelGateway) { + this.dueParallelGateway(passElements, flowElements, curFlowElement, variableMap); + } + } + + private void dueUserTaskElement(List passElements, Collection flowElements, + FlowElement curFlowElement, Map variableMap) { + passElements.add(curFlowElement); + List outgoingFlows = ((UserTask) curFlowElement).getOutgoingFlows(); + String targetRef = outgoingFlows.get(0).getTargetRef(); + if (outgoingFlows.size() > 1) { + // 找到表达式成立的sequenceFlow + SequenceFlow sequenceFlow = getSequenceFlow(variableMap, outgoingFlows); + targetRef = sequenceFlow.getTargetRef(); + } + // 根据ID找到FlowElement + FlowElement targetElement = getFlowElement(flowElements, targetRef); + this.getPassElementList(passElements, flowElements, targetElement, variableMap); + } + + private void dueExclusiveGateway(List passElements, Collection flowElements, FlowElement curFlowElement, Map variableMap) { + // 获取符合条件的sequenceFlow的目标FlowElement + List exclusiveGatewayOutgoingFlows = ((ExclusiveGateway) curFlowElement).getOutgoingFlows(); + flowElements.remove(curFlowElement); + // 找到表达式成立的sequenceFlow + SequenceFlow sequenceFlow = getSequenceFlow(variableMap, exclusiveGatewayOutgoingFlows); + // 根据ID找到FlowElement + FlowElement targetElement = getFlowElement(flowElements, sequenceFlow.getTargetRef()); + this.getPassElementList(passElements, flowElements, targetElement, variableMap); + } + + private void dueParallelGateway(List passElements, Collection flowElements, FlowElement curFlowElement, Map variableMap) { + FlowElement targetElement; + List parallelGatewayOutgoingFlows = ((ParallelGateway) curFlowElement).getOutgoingFlows(); + for (SequenceFlow sequenceFlow : parallelGatewayOutgoingFlows) { + targetElement = getFlowElement(flowElements, sequenceFlow.getTargetRef()); + this.getPassElementList(passElements, flowElements, targetElement, variableMap); + } + } + + private FlowElement getFlowElement(Collection flowElements, String targetRef) { + return flowElements.stream().filter(flowElement -> targetRef.equals(flowElement.getId())).findFirst().orElse(null); + } + + /** + * 4. 根据传入的变量,计算出表达式成立的那一条SequenceFlow + * + * @param variableMap + * @param outgoingFlows + * @return + */ + private SequenceFlow getSequenceFlow(Map variableMap, List outgoingFlows) { + Optional sequenceFlowOpt = outgoingFlows.stream().filter(item -> { + try { + return this.getElValue(item.getConditionExpression(), variableMap); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + }).findFirst(); + return sequenceFlowOpt.orElse(outgoingFlows.get(0)); + } + + private boolean getElValue(String exp, Map variableMap) { + return managementService.executeCommand(new ExpressionCmd(runtimeService, processEngineConfiguration, null, exp, variableMap)); + } + + public ResultBean businessStartProcessInstanceById(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); + String procDefId = bv.getModelId(); + String userSid = bv.getUserSid(); + String nextNodeUserSids = bv.getNextNodeUserSids(); + Map variables = bv.getFormVariables(); + Map variablesSeconds = bv.getFormVariables(); + //根据流程定义id查询 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId) + .latestVersion().singleResult(); + if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { + return rb.setMsg("流程已被挂起,请先激活流程"); + } + // 设置流程发起人Id到流程中 + ResultBean sysUserVoResultBean = sysUserFeign.fetchBySid(userSid); + SysUserVo sysUser = sysUserVoResultBean.getData(); + identityService.setAuthenticatedUserId(sysUser.getSid()); + variables.put(ProcessConstants.PROCESS_INITIATOR, userSid); + variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid); + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); + // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题? + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); + if (Objects.nonNull(task)) { + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(), + sysUser.getName() + "发起流程申请"); + taskService.setAssignee(task.getId(), userSid); + taskService.setVariablesLocal(task.getId(), variables); + taskService.complete(task.getId(), variables); + } + + //根据流程实例的id查询最新的待办环节 + ResultBean> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId()); + List data = latestTasksNew.getData(); + LatestTaskVo latestTaskVo = data.get(0); + String id_ = latestTaskVo.getId_(); + String task_def_key_ = latestTaskVo.getTask_def_key_(); + //查询下一环节是否有转办并添加评论 + nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId()); + taskService.setAssignee(id_, nextNodeUserSids); + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) { + bv.setModelId(procDefId); + bv.setInstanceId(task.getProcessInstanceId()); + bv.setTaskId(id_); + bv.setUserSid(nextNodeUserSids); + bv.setBusinessSid(bv.getBusinessSid()); + bv.setTaskDefKey(task_def_key_); + bv.setFormVariables(variables); + bv.setOrgSidPath(bv.getOrgSidPath()); + bv.setComment("系统自动跳过!"); + bv.setFormVariables(variablesSeconds); + bv.setNextNodeUserSids(""); + ResultBean updateFlowFieldVoResultBean = handleProsess(bv, false); + if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) { + UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData(); + updateFlowFieldVo.setProcInsId(vo.getProcInsId()); + updateFlowFieldVo.setNodeState(vo.getNodeState()); + updateFlowFieldVo.setTaskId(vo.getTaskId()); + updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + } + if (bv.getUserSid().equals(nextNodeUserSids)) { + //如果申请人与下一环节审批人相同,则自动审批 + bv.setModelId(procDefId); + bv.setInstanceId(task.getProcessInstanceId()); + bv.setTaskId(id_); + bv.setUserSid(nextNodeUserSids); + bv.setBusinessSid(bv.getBusinessSid()); + bv.setTaskDefKey(task_def_key_); + bv.setFormVariables(variables); + bv.setOrgSidPath(bv.getOrgSidPath()); + bv.setFormVariables(variablesSeconds); + bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!"); + bv.setNextNodeUserSids(""); + ResultBean updateFlowFieldVoResultBean = handleProsess(bv, false); + if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) { + UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData(); + updateFlowFieldVo.setProcInsId(vo.getProcInsId()); + updateFlowFieldVo.setNodeState(vo.getNodeState()); + updateFlowFieldVo.setTaskId(vo.getTaskId()); + updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + } + updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); + updateFlowFieldVo.setNodeState(latestTaskVo.getName_()); + updateFlowFieldVo.setTaskId(id_); + updateFlowFieldVo.setTaskDefKey(task_def_key_); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + + /** + * 查询下一环节用户是否有转办用户,若有转办用户则添加转办评论 + * + * @param nextNodeUserSids 下一环节用户 + * @param instanceId 实例id + * @return + */ + public String change(String nextNodeUserSids, String instanceId) { + //查询下一环节是否有转办 + String firstSid = ""; + String firstName = ""; + //默认无转办 + boolean isChange = false; + if (StringUtils.isNotBlank(nextNodeUserSids)) { + List nextUserList = Arrays.asList(nextNodeUserSids.split(",")); + if (nextUserList.size() == 1) { + firstSid = nextUserList.get(0); + ResultBean userVoResultBean = sysUserFeign.fetchBySid(firstSid); + if (userVoResultBean.getData() != null) { + firstName = userVoResultBean.getData().getName(); + } + SysFlowableConfigQuery sysFlowableConfigQuery = new SysFlowableConfigQuery(); + sysFlowableConfigQuery.setUserSid(firstSid); + sysFlowableConfigQuery.setNowDate(new Date()); + ResultBean sysFlowableConfigVvoResultBean = sysFlowableConfigFeign.selectByUserSid(sysFlowableConfigQuery); + if (sysFlowableConfigVvoResultBean.getData() != null) { + if (StringUtils.isNotBlank(sysFlowableConfigVvoResultBean.getData().getChangeUserSid())) { + nextNodeUserSids = sysFlowableConfigVvoResultBean.getData().getChangeUserSid(); + isChange = true; + } + } + } + } + if (isChange) {//添加评论 + ResultBean userVoResultBean = sysUserFeign.fetchBySid(nextNodeUserSids); + ProcessCommentDto processCommentDto = new ProcessCommentDto(); + processCommentDto.setReviewerSid(firstSid); + if (userVoResultBean.getData() != null) { + String changeName = userVoResultBean.getData().getName(); + processCommentDto.setReviewer(firstName); + processCommentDto.setContent("交" + changeName + "转办"); + } + processCommentDto.setTime(new Date()); + processCommentDto.setProcessId(instanceId); + processCommentService.saveOrUpdateDto(processCommentDto); + } + return nextNodeUserSids; + } + + public ResultBean handleProsess(BusinessVariables bv, boolean b) { + ResultBean rb = ResultBean.fireFail(); + UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); + //获取表单中的参数 + Map formVariables = bv.getFormVariables(); + formVariables = formVariables == null ? new HashMap<>() : formVariables; + formVariables.put("businessSid", bv.getBusinessSid()); + String nextUserSid = bv.getNextNodeUserSids(); + String taskId = bv.getTaskId(); + String userSid = bv.getUserSid(); + String instanceId = bv.getInstanceId(); + String comment = bv.getComment(); + String nodeState = ""; + String taskDefKey = ""; + String orgPath = bv.getOrgSidPath(); + //设置下一环节审批人是否自动审批通过,默认否 + boolean contains = false; + //设置是否是管理员自动审批,默认否 + boolean adminContains = false; + if (StringUtils.isBlank(nextUserSid)) { + ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); + if (!stringResultBean.getSuccess()) { + //下一环节用户为空的情况 + nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + adminContains = true; + } else { + nextUserSid = stringResultBean.getData(); + } + } else { + //若下一环节用户与系统管理员一致,则自动审批 + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { + adminContains = true; + } + } + //查询任务id为taskId的任务是否存在 + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (Objects.isNull(task)) { + return rb.setMsg("任务不存在"); + } + String assignee = task.getAssignee(); + if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { + return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); + } + + if (DelegationState.PENDING.equals(task.getDelegationState())) { + //加签 + taskService.addComment(taskId, instanceId, + FlowComment.DELEGATE.getType(), comment); + taskService.resolveTask(taskId, formVariables); + } else { + //当前环节办理通过,且将下一环节用户放入流程中 + taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment); + log.error("taskid:{},userSid:{}", taskId, userSid); + log.error("formVariables:{}", JSON.toJSONString(formVariables)); + taskService.setAssignee(taskId, userSid); + taskService.complete(taskId, formVariables);//当前用户办理通过 + //根据流程实例的id取最新的待办环节,给环节设置上用户sid + ResultBean> ll = flowTaskService.getLatestTasksNew(instanceId); + if (ll.getData().size() > 0) { + LatestTaskVo latestTaskVo = ll.getData().get(0); + String id_ = latestTaskVo.getId_(); + //查询下一环节用户是否有转办人 + nextUserSid = change(nextUserSid, bv.getInstanceId()); + taskService.setAssignee(id_, nextUserSid);//将下一环节用户放入流程中 + vo.setTaskId(id_); + //在act_ru_variable表中增加环节上的业务参数的变量 + taskService.setVariablesLocal(id_, formVariables); + nodeState = latestTaskVo.getName_(); + taskDefKey = latestTaskVo.getTask_def_key_(); + } else { + nodeState = FlowComment.SETTLE.getRemark(); + taskDefKey = "Event_end"; + vo.setNodeState(FlowComment.SETTLE.getRemark()); + } + } + //设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批 + if (adminContains) { + bv.setUserSid(nextUserSid); + bv.setTaskId(vo.getTaskId()); + bv.setTaskDefKey(taskDefKey); + bv.setComment("系统自动跳过"); + bv.setNextNodeUserSids(""); + return handleProsess(bv, false); + } + //获取该流程所有要走的环节节点 + List flowElements = calApprovePath(bv.getModelId(), + bv.getFormVariables()); + for (int i = 0; i < flowElements.size(); i++) { + FlowElement flowElement = flowElements.get(i); + String id = flowElement.getId(); + if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { + //获取下下一环节 + FlowElement flowElement1 = flowElements.get(i + 1); + List sysUserVoLists2 = new ArrayList<>(); + if (i + 2 < flowElements.size()) { + //获取下下下一环节用户 + FlowElement flowElement2 = flowElements.get(i + 2); + if (flowElement2 instanceof UserTask) { + UserTask userTask = (UserTask) flowElement2; + List candidateGroups = userTask.getCandidateGroups(); + UserssQuery userssQuery = new UserssQuery(); + userssQuery.setCandidateGroups(candidateGroups); + userssQuery.setOrgSidPath(orgPath); + sysUserVoLists2 = sysUserFeign.getUsersByRoles(userssQuery).getData(); + if (sysUserVoLists2 == null) { + sysUserVoLists2 = new ArrayList<>(); + } + } + } + if (flowElement1 instanceof UserTask) { + UserTask userTask = (UserTask) flowElement1; + List candidateGroups = userTask.getCandidateGroups(); + List sysUserVoLists = new ArrayList<>(); + UserssQuery userssQuery = new UserssQuery(); + userssQuery.setCandidateGroups(candidateGroups); + userssQuery.setOrgSidPath(orgPath); + sysUserVoLists = sysUserFeign.getUsersByRoles(userssQuery).getData(); + if (sysUserVoLists == null) { + sysUserVoLists = new ArrayList<>(); + } + //当前环节运营部总经理 刘丽艳 点击同意 下一环节 事业部副总经理 (nextUserSid) 和事业部总经理(sysUserVoLists.get(0).getSid()) + //判断查询回来的用户的集合size是1 并且用户的sid和下一环节的用户的sid相同。 + if (sysUserVoLists.size() == 1 && sysUserVoLists.get(0).getSid().equals(nextUserSid)) { + contains = true; + break; + } + //如果下下一环节无用户,下下下一环节用户与下一环节用户相同且只有一个,则下一环节用户自动审批。 + if (sysUserVoLists.size() == 0 && sysUserVoLists2.size() == 1 && sysUserVoLists2.get(0).getSid().equals(nextUserSid)) { + contains = true; + break; + } + } + } + if (contains) { + break; + } + } + if (contains) { + bv.setUserSid(nextUserSid); + bv.setTaskId(vo.getTaskId()); + bv.setTaskDefKey(taskDefKey); + bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!"); + return handleProsess(bv, false); + } + vo.setProcInsId(instanceId); + vo.setProcDefId(bv.getModelId()); + vo.setNodeState(nodeState); + vo.setTaskDefKey(taskDefKey); + vo.setSid(bv.getBusinessSid()); + return rb.success().setData(vo); + } + + /** + * 获取下一环节用户 + * + * @param bv + * @return + */ + public ResultBean getNextNodeUserSidsOfSubmit(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + String orgPath = bv.getOrgSidPath(); + String taskDefKey = bv.getTaskDefKey(); + //根据业务参数取流程流转的环节 信息 + List> list = (List>) getProcessCirculationNodesByMap(bv).getData(); + Map task_map = new HashMap<>(); + boolean endTask = true; + for (int i = 0; i < list.size(); i++) { + String id = list.get(i).get("id").toString(); + if (id.equals(taskDefKey) && i + 1 < list.size()) { + task_map = list.get(i + 1); + endTask = false; + } + } + if (endTask) { + task_map.put("name", "结束"); + return rb.success(); + } else { + Object o = task_map.get("candidateGroups"); + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o)); + String roleSid = jsonArray.get(0).toString(); + //根据组织架构、角色两个参数取相关符合条件的用户信息 + UserQuery userQuery = new UserQuery(); + userQuery.setRoleSid(roleSid); + userQuery.setOrgSidPath(orgPath); + String nextNodeUserSids_ = ""; + List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + return rb; + } else { + StringBuilder nextNodeUserSids = new StringBuilder(); + for (SysUserVo su : sysUserVos) { + nextNodeUserSids.append(su.getSid()).append(","); + } + //符合条件的用户的sid,拼接的字符串 + nextNodeUserSids_ = nextNodeUserSids.toString(); + nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); + } + return rb.success().setData(nextNodeUserSids_); + } + + + } +} From 7bcd9470028aec1bbed06918843ba9cf04f40b73 Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Fri, 21 Jul 2023 14:12:54 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=BD=AC=E5=8A=9E=E6=B7=BB=E5=8A=A0=E6=8A=84=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anrui/flowable/biz/flow/FlowableRest.java | 7 + .../anrui/flowable/biz/flow2/FlowRest.java | 119 +-------------- .../anrui/flowable/biz/flow2/FlowService.java | 141 +++++++++++++++++- .../processcomment/ProcessCommentMapper.java | 2 + .../processcomment/ProcessCommentMapper.xml | 4 + .../processcomment/ProcessCommentService.java | 4 + 6 files changed, 153 insertions(+), 124 deletions(-) diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java index 5eb18271a3..4286cafc9f 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java @@ -205,6 +205,13 @@ public class FlowableRest implements FlowableFeign { if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); } + //查询是否有设置转办的,抄送给设置转办人员 + List zbUserSids = processCommentService.selectByIdAndComment("转办",bv.getInstanceId()); + zbUserSids.removeAll(Collections.singleton(null)); + if(!zbUserSids.isEmpty()){ + String zbUser = String.join(",",zbUserSids); + userSids.append(zbUser).append(","); + } userSids.deleteCharAt(userSids.length() - 1); mfq.setUserSids(userSids.toString()); mfq.setOrgPath(createrOrgPath); diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java index 0df8db0cf7..255bfa6c0a 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java @@ -44,19 +44,9 @@ public class FlowRest implements FlowFeign { @Autowired private FlowService flowService; - @Autowired - private SysFlowccFeign sysFlowccFeign; - @Autowired - private SysUserFeign sysUserFeign; @Autowired - protected HistoryService historyService; - - @Autowired - private ProcessService processService; - - @Autowired - private MessageFeign messageFeign; + private SysUserFeign sysUserFeign; @Override public ResultBean startProcess(BusinessVariables bv) { @@ -99,7 +89,7 @@ public class FlowRest implements FlowFeign { UpdateFlowFieldVo ufVo = updateFlowFieldVoResultBean.getData(); ufVo.setTaskId(bv.getTaskId()); map.put("uff", ufVo); - cc(map, bv.getTaskDefKey()); + flowService.cc(map, bv.getTaskDefKey()); }); } catch (Exception e) { e.printStackTrace(); @@ -110,110 +100,5 @@ public class FlowRest implements FlowFeign { return updateFlowFieldVoResultBean; } - /** - * 流程抄送的功能 - * - * @param map - * @return - */ - public ResultBean cc(Map map, String taskDefKey) { - ResultBean rb = ResultBean.fireFail(); - log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); - Object bv1 = map.get("bv"); - BusinessVariables bv = new BusinessVariables(); - BeanUtil.copyProperties(bv1, bv); - Object uff1 = map.get("uff"); - UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); - BeanUtil.copyProperties(uff1, uff); - uff.setTaskDefKey(taskDefKey); - //流程定义的id - String modelId = bv.getModelId(); - //将modelId根据冒号:分成三部分,取第一部分作为key - List stringList = Arrays.asList(modelId.split(":")); - modelId = stringList.get(0); - //抄送的角色的sid - ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); - //组织机构sid - String orgSidPath = bv.getOrgSidPath(); - if (roleSidByModelId.getData() == null) { - log.info("抄送失败,没有配置对应的角色!"); - return rb.setMsg("抄送失败,没有配置对应的角色!"); - } - SysFlowccVo data = roleSidByModelId.getData(); - if (StringUtils.isBlank(data.getRoleSid())) { - log.info("抄送失败,没有配置对应的角色!"); - return rb.setMsg("抄送失败,没有配置对应的角色!"); - } - List list = Arrays.asList(data.getRoleSid().split(",")); - UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery(); - userQuery.setRoleSids(list); - userQuery.setOrgSidPath(orgSidPath); - List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); - if (sysUserVos == null || sysUserVos.size() < 1) { - log.info("抄送失败,没有用户!"); - return rb.setMsg("抄送失败,没有用户!"); - } - StringBuilder userName = new StringBuilder(); - StringBuilder userSids = new StringBuilder(); - sysUserVos.forEach(f -> { - userName.append(f.getName()).append(","); - userSids.append(f.getSid()).append(","); - }); - - //抄送的业务逻辑 - MessageFlowableQuery mfq = new MessageFlowableQuery(); - MessageFlowVo messageFlowVo = new MessageFlowVo(); - BeanUtil.copyProperties(uff, messageFlowVo); - mfq.setUfVo(messageFlowVo); - //移动端的参数 - HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() - .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); - if (historicTaskInstance == null) { - log.info("抄送失败:没有获取到业务参数!"); - return rb.setMsg("抄送失败!"); - } - Map processVariables = historicTaskInstance.getProcessVariables(); - String createrOrgPath = (String) processVariables.get("createrOrgPath"); - if (historicTaskInstance == null) { - log.info("抄送失败:没有获取到业务参数!"); - return rb.setMsg("抄送失败!"); - } - Map app = new HashMap<>(); - if (processVariables.get("app") != null) { - app = (Map) processVariables.get("app"); - } - log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); - mfq.setAppMap(app); - mfq.setBusinessSid(bv.getBusinessSid()); - - mfq.setMsgContent("系统抄送的流程审批,请查看"); -// act_re_procdef - Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); - log.info("抄送成功-process:{}", process); - if (process == null) { - log.info("抄送失败,流程定义不存在!"); - return rb.setMsg("抄送失败,流程定义不存在!"); - } - mfq.setModuleName(process.get("NAME_")); - if (processVariables.containsKey("orderNames")) { - mfq.setMsgTitle(processVariables.get("orderNames").toString()); - } else { - mfq.setMsgTitle(process.get("NAME_")); - } - if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 - userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); - } - userSids.deleteCharAt(userSids.length() - 1); - mfq.setUserSids(userSids.toString()); - mfq.setOrgPath(createrOrgPath); - ResultBean resultBean = messageFeign.pushMessageCC(mfq); - log.info("抄送成功:{}", userName.toString()); - log.info("抄送成功-resultBean:{}", resultBean); - if (!resultBean.getSuccess()) { - log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); - return rb.setMsg("抄送失败,同送消息异常!"); - } - return rb.success().setMsg("抄送" + userName.toString() + "成功!"); - } } diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java index 8349c2bee1..2ef8b208b8 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java @@ -1,5 +1,6 @@ package com.yxt.anrui.flowable.biz.flow2; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -12,16 +13,19 @@ import com.yxt.anrui.flowable.api.processcomment.ProcessCommentDto; import com.yxt.anrui.flowable.api.utils.ProcDefEnum; import com.yxt.anrui.flowable.biz.flowtask.FlowTaskService; import com.yxt.anrui.flowable.biz.process.ExpressionCmd; +import com.yxt.anrui.flowable.biz.process.ProcessService; import com.yxt.anrui.flowable.biz.processcomment.ProcessCommentService; import com.yxt.anrui.flowable.common.ProcessConstants; +import com.yxt.anrui.flowable.feign.MessageFeign; +import com.yxt.anrui.flowable.feign.form.MessageFlowVo; +import com.yxt.anrui.flowable.feign.form.MessageFlowableQuery; import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigFeign; import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigQuery; import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigVvo; -import com.yxt.anrui.portal.api.sysuser.SysUserFeign; -import com.yxt.anrui.portal.api.sysuser.SysUserVo; -import com.yxt.anrui.portal.api.sysuser.UserQuery; -import com.yxt.anrui.portal.api.sysuser.UserssQuery; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccFeign; +import com.yxt.anrui.portal.api.sysflowcc.SysFlowccVo; +import com.yxt.anrui.portal.api.sysuser.*; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.result.ResultBean; @@ -33,6 +37,7 @@ import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.DelegationState; import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -70,6 +75,17 @@ public class FlowService extends MybatisBaseService { @Autowired private ProcessCommentService processCommentService; + @Autowired + protected HistoryService historyService; + + @Autowired + private ProcessService processService; + + @Autowired + private MessageFeign messageFeign; + @Autowired + private SysFlowccFeign sysFlowccFeign; + public ResultBean getNextNodeUser(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); //根据业务参数取流程流转的环节 信息 @@ -121,7 +137,6 @@ public class FlowService extends MybatisBaseService { map.put("candidateGroups", candidateGroups); list.add(map); } -// List> list= JSON.parseObject(JSON.toJSONString(flowElements), new TypeReference>>() {}); return rb.setData(list); } @@ -301,7 +316,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); - rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } } if (bv.getUserSid().equals(nextNodeUserSids)) { @@ -326,7 +341,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); - rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } } updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); @@ -586,7 +601,119 @@ public class FlowService extends MybatisBaseService { } return rb.success().setData(nextNodeUserSids_); } + } + /** + * 流程抄送的功能 + * + * @param map + * @return + */ + public ResultBean cc(Map map, String taskDefKey) { + ResultBean rb = ResultBean.fireFail(); + log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); + Object bv1 = map.get("bv"); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(bv1, bv); + Object uff1 = map.get("uff"); + UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); + BeanUtil.copyProperties(uff1, uff); + uff.setTaskDefKey(taskDefKey); + //流程定义的id + String modelId = bv.getModelId(); + //将modelId根据冒号:分成三部分,取第一部分作为key + List stringList = Arrays.asList(modelId.split(":")); + modelId = stringList.get(0); + //抄送的角色的sid + ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); + //组织机构sid + String orgSidPath = bv.getOrgSidPath(); + if (roleSidByModelId.getData() == null) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + SysFlowccVo data = roleSidByModelId.getData(); + if (StringUtils.isBlank(data.getRoleSid())) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + List list = Arrays.asList(data.getRoleSid().split(",")); + UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery(); + userQuery.setRoleSids(list); + userQuery.setOrgSidPath(orgSidPath); + List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + log.info("抄送失败,没有用户!"); + return rb.setMsg("抄送失败,没有用户!"); + } + StringBuilder userName = new StringBuilder(); + StringBuilder userSids = new StringBuilder(); + sysUserVos.forEach(f -> { + userName.append(f.getName()).append(","); + userSids.append(f.getSid()).append(","); + }); + + //抄送的业务逻辑 + MessageFlowableQuery mfq = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(uff, messageFlowVo); + mfq.setUfVo(messageFlowVo); + //移动端的参数 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map processVariables = historicTaskInstance.getProcessVariables(); + String createrOrgPath = (String) processVariables.get("createrOrgPath"); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map app = new HashMap<>(); + if (processVariables.get("app") != null) { + app = (Map) processVariables.get("app"); + } + log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); + mfq.setAppMap(app); + mfq.setBusinessSid(bv.getBusinessSid()); + + mfq.setMsgContent("系统抄送的流程审批,请查看"); +// act_re_procdef + Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); + log.info("抄送成功-process:{}", process); + if (process == null) { + log.info("抄送失败,流程定义不存在!"); + return rb.setMsg("抄送失败,流程定义不存在!"); + } + mfq.setModuleName(process.get("NAME_")); + if (processVariables.containsKey("orderNames")) { + mfq.setMsgTitle(processVariables.get("orderNames").toString()); + } else { + mfq.setMsgTitle(process.get("NAME_")); + } + if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人 + userSids.append(processVariables.get("sendRecommendSid").toString()).append(","); + } + //查询是否有设置转办的,抄送给设置转办人员 + List zbUserSids = processCommentService.selectByIdAndComment("转办",bv.getInstanceId()); + zbUserSids.removeAll(Collections.singleton(null)); + if(!zbUserSids.isEmpty()){ + String zbUser = String.join(",",zbUserSids); + userSids.append(zbUser).append(","); + } + userSids.deleteCharAt(userSids.length() - 1); + mfq.setUserSids(userSids.toString()); + mfq.setOrgPath(createrOrgPath); + ResultBean resultBean = messageFeign.pushMessageCC(mfq); + log.info("抄送成功:{}", userName.toString()); + log.info("抄送成功-resultBean:{}", resultBean); + if (!resultBean.getSuccess()) { + log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); + return rb.setMsg("抄送失败,同送消息异常!"); + } + return rb.success().setMsg("抄送" + userName.toString() + "成功!"); } } diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java index 2974556ee8..dcc3730a67 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java @@ -69,4 +69,6 @@ public interface ProcessCommentMapper extends BaseMapper { ProcessComment fetchBySid(@Param("sid")String sid); void insertByDto(ProcessCommentDto dto); + + List selectByIdAndComment(@Param("comment") String comment, @Param("instanceId") String instanceId); } \ No newline at end of file diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml index 3551c99e56..b44df399cb 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml @@ -17,4 +17,8 @@ insert into `process_comment` ( `sid`, `reviewer`, `reviewerSid`, `time`, `content`, `processId`, `processInstSid`,processFile) values(#{sid},#{reviewer},#{reviewerSid},#{time},#{content},#{processId},#{processInstSid},#{processFile}); + + \ No newline at end of file diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java index 05da790cc9..4095efe52f 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java @@ -135,4 +135,8 @@ public class ProcessCommentService extends MybatisBaseService selectByIdAndComment(String comment, String instanceId) { + return baseMapper.selectByIdAndComment(comment, instanceId); + } } \ No newline at end of file From 8674dc85cd0cb4bc7818bfc6ed111974fccf6241 Mon Sep 17 00:00:00 2001 From: fanzongzhe <285169773@qq.com> Date: Fri, 21 Jul 2023 16:04:37 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=80=E7=A5=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A2=9E=E5=8A=A0=E8=BD=A6=E8=BE=86=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E6=94=B6=E6=AC=BE=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/busdeliveredapply/FinSelectVo.java | 12 +- .../BusDeliveredApplyService.java | 274 ++++++++++-------- .../ReceiveInvoiceVo.java | 2 + .../ReceiveSeleteVo.java | 14 + ...inUncollectedReceivablesDetailedMapper.xml | 29 +- .../anrui/flowable/api/utils/ProcDefEnum.java | 2 +- .../金融方案预估报价单1.docx | Bin 0 -> 11642 bytes .../金融方案预估报价单2.docx | Bin 0 -> 11371 bytes .../金融方案预估报价单3.docx | Bin 0 -> 11581 bytes .../金融方案预估报价单4.docx | Bin 0 -> 12054 bytes 10 files changed, 200 insertions(+), 133 deletions(-) create mode 100644 anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单1.docx create mode 100644 anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单2.docx create mode 100644 anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单3.docx create mode 100644 anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单4.docx diff --git a/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/FinSelectVo.java b/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/FinSelectVo.java index 254ae749ce..34412939b2 100644 --- a/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/FinSelectVo.java +++ b/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/FinSelectVo.java @@ -10,7 +10,7 @@ import lombok.Data; */ @Data public class FinSelectVo { - + private String receivablesSid; @ApiModelProperty("款项名称") private String receivablesName; @@ -23,4 +23,14 @@ public class FinSelectVo { private String notSubscriptionMoney; private String remarks; + @ApiModelProperty("付款时间") + private String subscriptionDate; + @ApiModelProperty("收款开户行") + private String collectionBank; + @ApiModelProperty("收款账户") + private String receivingName; + @ApiModelProperty("付款人") + private String payerName; + @ApiModelProperty("付款时间") + private String collectionDate; } diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java index 55553c48a5..53452e525d 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java @@ -82,9 +82,14 @@ import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo; import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationDto; import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationFeign; import com.yxt.anrui.fin.api.finbillvehicle.FinBillVehicleDto; +import com.yxt.anrui.fin.api.fincollectionconfirmation.FinCollectionConfirmationDetailsVo; +import com.yxt.anrui.fin.api.fincollectionconfirmation.FinCollectionConfirmationFeign; import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingDetailsVo; import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign; +import com.yxt.anrui.fin.api.finselectedreceivablesdetailed.FinSelectedReceivablesDetailed; +import com.yxt.anrui.fin.api.finselectedreceivablesdetailed.FinSelectedReceivablesDetailedFeign; import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeign; +import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedVo; import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.ReceiveInvoiceVo; import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.ReceiveSeleteVo; import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoice; @@ -204,6 +209,11 @@ public class BusDeliveredApplyService extends MybatisBaseService defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery); - if(StringUtils.isNotBlank(defaultIdReltBean.getData())){ + if (StringUtils.isNotBlank(defaultIdReltBean.getData())) { //数据权限ID(1集团、2事业部、3分公司、4部门、5个人) String orgSidPath = query.getOrgPath(); orgSidPath = orgSidPath + "/"; @@ -285,17 +295,17 @@ public class BusDeliveredApplyService extends MybatisBaseService p = new PagerVo<>(); return p; } - }else{ + } else { PagerVo p = new PagerVo<>(); return p; } - }else{ + } else { qw.eq("bd.applySid", query.getApplySid()); } } @@ -303,9 +313,9 @@ public class BusDeliveredApplyService extends MybatisBaseService pagging = baseMapper.selectPageVo(page, qw); List records = pagging.getRecords(); for (BusDeliveredApplyVo record : records) { - if(query.getApplySid().equals(record.getCreateBySid())){ + if (query.getApplySid().equals(record.getCreateBySid())) { record.setAllowModify(true); - }else{ + } else { record.setAllowModify(false); } } @@ -726,7 +736,7 @@ public class BusDeliveredApplyService extends MybatisBaseService variables = new HashMap<>(); + Map variables = new HashMap<>(); //若app移动端有此功能,则传递appMap参数 Map appMap = new HashMap<>(); //需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。 @@ -736,24 +746,24 @@ public class BusDeliveredApplyService extends MybatisBaseService detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); - if(detailsVoResultBean.getData() != null){ - if("01".equals(detailsVoResultBean.getData().getTypeKey())){ + if (detailsVoResultBean.getData() != null) { + if ("01".equals(detailsVoResultBean.getData().getTypeKey())) { //自营非担保 - variables.put("isDanBao",true); - }else{ - variables.put("isDanBao",false); + variables.put("isDanBao", true); + } else { + variables.put("isDanBao", false); } } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",true); + } else { + variables.put("isDanBao", true); } FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery(); flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId()); @@ -815,12 +825,12 @@ public class BusDeliveredApplyService extends MybatisBaseService> rb = new ResultBean<>(); BusinessVariables bv = new BusinessVariables(); BeanUtil.copyProperties(query, bv); - if(StringUtils.isNotBlank(query.getBusinessSid())){ + if (StringUtils.isNotBlank(query.getBusinessSid())) { BusDeliveredApply busDeliveredApply = fetchBySid(query.getBusinessSid()); bv.setModelId(busDeliveredApply.getProcDefId()); - Map variables = new HashMap<>(); + Map variables = new HashMap<>(); //若app移动端有此功能,则传递appMap参数 Map appMap = new HashMap<>(); //需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。 @@ -1208,25 +1218,25 @@ public class BusDeliveredApplyService extends MybatisBaseService detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); - if(detailsVoResultBean.getData() != null){ - if("01".equals(detailsVoResultBean.getData().getTypeKey())){ + if (detailsVoResultBean.getData() != null) { + if ("01".equals(detailsVoResultBean.getData().getTypeKey())) { //自营非担保 - variables.put("isDanBao",true); - }else{ - variables.put("isDanBao",false); + variables.put("isDanBao", true); + } else { + variables.put("isDanBao", false); } } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",true); + } else { + variables.put("isDanBao", true); } FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery(); flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId()); @@ -1234,7 +1244,7 @@ public class BusDeliveredApplyService extends MybatisBaseService> rb = ResultBean.fireFail(); BusinessVariables bv = new BusinessVariables(); BeanUtil.copyProperties(query, bv); - if(StringUtils.isNotBlank(query.getBusinessSid())){ + if (StringUtils.isNotBlank(query.getBusinessSid())) { BusDeliveredApply busDeliveredApply = fetchBySid(query.getBusinessSid()); bv.setModelId(busDeliveredApply.getProcDefId()); - Map variables = new HashMap<>(); + Map variables = new HashMap<>(); //若app移动端有此功能,则传递appMap参数 Map appMap = new HashMap<>(); //需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。 @@ -1266,25 +1276,25 @@ public class BusDeliveredApplyService extends MybatisBaseService detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); - if(detailsVoResultBean.getData() != null){ - if("01".equals(detailsVoResultBean.getData().getTypeKey())){ + if (detailsVoResultBean.getData() != null) { + if ("01".equals(detailsVoResultBean.getData().getTypeKey())) { //自营非担保 - variables.put("isDanBao",true); - }else{ - variables.put("isDanBao",false); + variables.put("isDanBao", true); + } else { + variables.put("isDanBao", false); } } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",true); + } else { + variables.put("isDanBao", true); } FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery(); flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId()); @@ -1292,7 +1302,7 @@ public class BusDeliveredApplyService extends MybatisBaseService>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv); @@ -1327,25 +1337,25 @@ public class BusDeliveredApplyService extends MybatisBaseService detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); - if(detailsVoResultBean.getData() != null){ - if("01".equals(detailsVoResultBean.getData().getTypeKey())){ + if (detailsVoResultBean.getData() != null) { + if ("01".equals(detailsVoResultBean.getData().getTypeKey())) { //自营非担保 - variables.put("isDanBao",true); - }else{ - variables.put("isDanBao",false); + variables.put("isDanBao", true); + } else { + variables.put("isDanBao", false); } } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",true); + } else { + variables.put("isDanBao", true); } FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery(); flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId()); @@ -1428,25 +1438,25 @@ public class BusDeliveredApplyService extends MybatisBaseService detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); - if(detailsVoResultBean.getData() != null){ - if("01".equals(detailsVoResultBean.getData().getTypeKey())){ + if (detailsVoResultBean.getData() != null) { + if ("01".equals(detailsVoResultBean.getData().getTypeKey())) { //自营非担保 - variables.put("isDanBao",true); - }else{ - variables.put("isDanBao",false); + variables.put("isDanBao", true); + } else { + variables.put("isDanBao", false); } } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",true); + } else { + variables.put("isDanBao", true); } FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery(); flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId()); @@ -1495,7 +1505,7 @@ public class BusDeliveredApplyService extends MybatisBaseService resultBean = flowableFeign.breakProcess(flowTaskVo); @@ -1508,7 +1518,7 @@ public class BusDeliveredApplyService extends MybatisBaseService qw = new QueryWrapper<>(); String orgPath = pagerQuery.getParams().getOrgPath(); //========================================数据授权开始 - if(StringUtils.isNotBlank(query.getMenuSid())){ + if (StringUtils.isNotBlank(query.getMenuSid())) { //======================= PrivilegeQuery privilegeQuery = new PrivilegeQuery(); privilegeQuery.setOrgPath(query.getOrgPath()); privilegeQuery.setMenuSid(query.getMenuSid()); privilegeQuery.setUserSid(query.getUserSid()); ResultBean defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery); - if(StringUtils.isNotBlank(defaultIdReltBean.getData())){ + if (StringUtils.isNotBlank(defaultIdReltBean.getData())) { //数据权限ID(1集团、2事业部、3分公司、4部门、5个人) String orgSidPath = query.getOrgPath(); orgSidPath = orgSidPath + "/"; @@ -1568,17 +1578,17 @@ public class BusDeliveredApplyService extends MybatisBaseService p = new PagerVo<>(); return p; } - }else{ + } else { PagerVo p = new PagerVo<>(); return p; } - }else{ + } else { String orgSid = ""; if (StringUtils.isNotBlank(orgPath)) { orgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData(); @@ -1592,16 +1602,16 @@ public class BusDeliveredApplyService extends MybatisBaseService iPage = baseMapper.getRetrievalApplyList(page, qw, pagerQuery.getParams().getName()); List records = iPage.getRecords(); records.removeAll(Collections.singleton(null)); - if(!records.isEmpty()){ - for (AppDeliveredApplyPageVo appDeliveredApplyPageVo : records){ - if(query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowDelete()){ + if (!records.isEmpty()) { + for (AppDeliveredApplyPageVo appDeliveredApplyPageVo : records) { + if (query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowDelete()) { appDeliveredApplyPageVo.setShowDelete(true); - }else{ + } else { appDeliveredApplyPageVo.setShowDelete(false); } - if(query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowUpdata()){ + if (query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowUpdata()) { appDeliveredApplyPageVo.setShowUpdata(true); - }else{ + } else { appDeliveredApplyPageVo.setShowUpdata(false); } } @@ -1739,10 +1749,10 @@ public class BusDeliveredApplyService extends MybatisBaseService busVinSidList = baseMapper.selectByContractNoToVinSid(dto.getContractId(),vinSid); + List busVinSidList = baseMapper.selectByContractNoToVinSid(dto.getContractId(), vinSid); busSidList.removeAll(busVinSidList); busVinSidList.removeAll(Collections.singleton(null)); - if(busVinSidList.isEmpty()){ + if (busVinSidList.isEmpty()) { isTrue = true; } //是否是最后一批出库车辆 - if(isTrue){ + if (isTrue) { //是否存在未赠送的套餐,如果存在则不允许提交 int num = baseMapper.selectNumByContractNo(dto.getContractId()); int orderNum = busSalesOrderDiscountService.selectByContractNo(dto.getContractId()); - if(orderNum>num){ + if (orderNum > num) { return rb.setMsg("本次出库为该订单最后一批出库,还存在未赠送的套餐,不允许提交"); } } @@ -2142,26 +2152,26 @@ public class BusDeliveredApplyService extends MybatisBaseService detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid()); - if(detailsVoResultBean.getData() != null){ - if("01".equals(detailsVoResultBean.getData().getTypeKey())){ + if (detailsVoResultBean.getData() != null) { + if ("01".equals(detailsVoResultBean.getData().getTypeKey())) { //自营非担保 - variables.put("isDanBao",true); - }else{ - variables.put("isDanBao",false); + variables.put("isDanBao", true); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",false); + } else { + variables.put("isDanBao", false); } - }else{ - variables.put("isDanBao",true); + } else { + variables.put("isDanBao", true); } FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery(); @@ -2265,7 +2275,37 @@ public class BusDeliveredApplyService extends MybatisBaseService receiveSeleteVoList = receiveInvoiceVoResultBean.getData().getReceiveSeleteVoList(); List voList = Optional.ofNullable(receiveSeleteVoList).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), FinSelectVo.class)).collect(Collectors.toList()); - deliveredFinVo.setFinSelectVoList(voList); + voList.removeAll(Collections.singleton(null)); + List finSelectVos = new ArrayList<>(); + if (!voList.isEmpty()) { + for (FinSelectVo finSelectVo : voList) { + String receivablesSid = finSelectVo.getReceivablesSid(); + FinSelectedReceivablesDetailed data = finSelectedReceivablesDetailedFeign.fetchByReceivablesSidLimt(receivablesSid).getData(); + if (data != null) { + String collSid = data.getCollSid(); + if (StringUtils.isNotBlank(data.getSubscriptionDate())) { + finSelectVo.setSubscriptionDate(data.getSubscriptionDate()); + } + FinCollectionConfirmationDetailsVo confirmationDetailsVo = finCollectionConfirmationFeign.fetchBySid(collSid).getData(); + if (null != confirmationDetailsVo) { + if (StringUtils.isNotBlank(confirmationDetailsVo.getCollectionBank())) { + finSelectVo.setCollectionBank(confirmationDetailsVo.getCollectionBank()); + } + if (StringUtils.isNotBlank(confirmationDetailsVo.getReceivingName())) { + finSelectVo.setReceivingName(confirmationDetailsVo.getReceivingName()); + } + if (StringUtils.isNotBlank(confirmationDetailsVo.getPayerName())) { + finSelectVo.setPayerName(confirmationDetailsVo.getPayerName()); + } + if (StringUtils.isNotBlank(confirmationDetailsVo.getCollectionDate())) { + finSelectVo.setCollectionDate(confirmationDetailsVo.getCollectionDate()); + } + } + } + finSelectVos.add(finSelectVo); + } + } + deliveredFinVo.setFinSelectVoList(finSelectVos); InvoiceVo invoiceVo = receiveInvoiceVoResultBean.getData().getInvoiceVo(); if (invoiceVo != null) { VinInvoiceVo vinInvoiceVo = new VinInvoiceVo(); diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveInvoiceVo.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveInvoiceVo.java index 9e99dcf37a..3ead3bae25 100644 --- a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveInvoiceVo.java +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveInvoiceVo.java @@ -14,6 +14,8 @@ import java.util.List; @Data public class ReceiveInvoiceVo { + + private List receiveSeleteVoList = new ArrayList<>(); private InvoiceVo invoiceVo; diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveSeleteVo.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveSeleteVo.java index 93b2103a0e..30320d4280 100644 --- a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveSeleteVo.java +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveSeleteVo.java @@ -3,6 +3,8 @@ package com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * @Author dimengzhe * @Date 2023/4/19 14:18 @@ -11,6 +13,7 @@ import lombok.Data; @Data public class ReceiveSeleteVo { + private String receivablesSid; @ApiModelProperty("款项名称") private String receivablesName; @@ -23,4 +26,15 @@ public class ReceiveSeleteVo { private String notSubscriptionMoney; @ApiModelProperty("备注") private String remarks; + + @ApiModelProperty("付款时间") + private String subscriptionDate; + @ApiModelProperty("收款开户行") + private String collectionBank; + @ApiModelProperty("收款账户") + private String receivingName; + @ApiModelProperty("付款人") + private String payerName; + @ApiModelProperty("付款时间") + private String collectionDate; } diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml index e1c3bff4d6..bba85e33fe 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml @@ -45,18 +45,18 @@ SELECT furd.receivablesName, furd.reveivableMoney, + furd.sid as receivablesSid, ( SELECT sum(subscriptionMoney) FROM fin_selected_receivables_detailed 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 c14eed4bbb..2d6987262d 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 @@ -51,7 +51,7 @@ public enum ProcDefEnum { BUSSALESORDERRETURNVEHAPPLY("销售订单退车申请", "process_tzjjs03y:1:1012504"), BASETRAILEROUTAPPLY("挂车出库申请", "process_tkw6vhfw:1:1705004"), FINFUNDSAPPLY("款项结转申请", "process_ypafrrvg:1:2257504"), - BUSHANDOVER("交车确认", "process_e8feloik:5:1747508"), + BUSHANDOVER("交车确认", "process_e8feloik:6:2675004"), LOANFINPOLICYRECORDAPPLY("金融产品政策备案", "process_u45lo7qc:1:2272516"), LOANOTHERPOLICYRECORDAPPLY("其它融产品备案", "process_7pptyzfc:1:2272524"), DEALERFILINGAPPLY("经销商备案", "process_jdu35cog:3:2577504"), diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单1.docx b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单1.docx new file mode 100644 index 0000000000000000000000000000000000000000..58b697e3d5060d18083b8d56002731c68c4f7c22 GIT binary patch literal 11642 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 HeF6Os0ymDo literal 0 HcmV?d00001 diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单2.docx b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单2.docx new file mode 100644 index 0000000000000000000000000000000000000000..7839b07d0285d1537f287ce0bba2176ca59331bb GIT binary patch literal 11371 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 M{Plhcp!^B?KkS(*A^-pY literal 0 HcmV?d00001 diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单3.docx b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单3.docx new file mode 100644 index 0000000000000000000000000000000000000000..83c4125ddec0a8e5456d3547b3a60449e9577c38 GIT binary patch literal 11581 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 literal 0 HcmV?d00001 diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单4.docx b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单4.docx new file mode 100644 index 0000000000000000000000000000000000000000..bebe2bdb4b4a6a8d7360f2bf7e0e99aad0465e54 GIT binary patch literal 12054 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 U Date: Fri, 21 Jul 2023 16:17:38 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java | 2 ++ .../anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/anrui-crm/anrui-crm-api/src/main/java/com/yxt/anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java b/anrui-crm/anrui-crm-api/src/main/java/com/yxt/anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java index 9952c78458..3198e1b1b3 100644 --- a/anrui-crm/anrui-crm-api/src/main/java/com/yxt/anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java +++ b/anrui-crm/anrui-crm-api/src/main/java/com/yxt/anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java @@ -38,4 +38,6 @@ public class AppCrmCustomerTempQuery implements Query { // @ApiModelProperty("组织机构sid") // private String orgPath; + private String type; + } diff --git a/anrui-crm/anrui-crm-biz/src/main/java/com/yxt/anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java b/anrui-crm/anrui-crm-biz/src/main/java/com/yxt/anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java index 2d992babe7..73fc005399 100644 --- a/anrui-crm/anrui-crm-biz/src/main/java/com/yxt/anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java +++ b/anrui-crm/anrui-crm-biz/src/main/java/com/yxt/anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java @@ -473,6 +473,9 @@ public class CrmCustomerTempService extends MybatisBaseService iPage = baseMapper.getCustomerTempListByUserSid(page, qw); From d32ac7aed10b9a7e98f42b8f4b960ada788530cb Mon Sep 17 00:00:00 2001 From: God <10745413@qq.com> Date: Fri, 21 Jul 2023 17:25:18 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=AC=BE=E9=A1=B9=E7=BB=93=E8=BD=AC?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BC=98=E5=8C=96..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/basevehicle/BaseVehicleMapper.xml | 2 +- .../finfundscarriedforwardapply/TzDto.java | 8 +--- .../FinCollectionConfirmationMapper.xml | 2 +- .../FinFundsCarriedForwardApplyService.java | 47 +++++++++++++------ .../FinSelectedReceivablesDetailedMapper.java | 2 +- .../FinSelectedReceivablesDetailedMapper.xml | 2 +- ...ReceivableBillCastToKingDeeBillFields.java | 14 +++--- 7 files changed, 45 insertions(+), 32 deletions(-) diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml index 198978dd32..330fb597e6 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml @@ -1244,7 +1244,7 @@ list_fEntityDetail_=new ArrayList<>(); + List list_fEntity_=new ArrayList<>(); //对模板字段赋值 根据传递进来的map数据的集合进行赋值 for(int i=0;i params=vehicleList.get(i); - Map map_fEntityDetail_=new HashMap<>(); + Map map_fEntity_=new HashMap<>(); for (Map.Entry entry : params.entrySet()) { - map_fEntityDetail_.put(entry.getKey(),entry.getValue()); + map_fEntity_.put(entry.getKey(),entry.getValue()); } - fEntityDetail_ =KingDeeUtils.replaceTemplateParams(fEntityDetail_, map_fEntityDetail_); - list_fEntityDetail_.add(JSONObject.parseObject(fEntityDetail_,Feature.OrderedField)); + fEntity_ =KingDeeUtils.replaceTemplateParams(fEntity_, map_fEntity_); + list_fEntity_.add(JSONObject.parseObject(fEntity_,Feature.OrderedField)); } - jsonFEntityModel_.put("FEntityDetail", JSONArray.parseArray(JSON.toJSONString(list_fEntityDetail_))); + jsonFEntityModel_.put("FEntity", JSONArray.parseArray(JSON.toJSONString(list_fEntity_))); jsonFEntityData_.put("Model",JSONObject.parseObject(JSON.toJSONString(jsonFEntityModel_),Feature.OrderedField)); jsonObj.put("data",jsonFEntityData_.toJSONString());