diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java index 27296b4091..1e818e719c 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java @@ -683,7 +683,11 @@ public class CommonContractService extends MybatisBaseService runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); List runTaskKeyList = new ArrayList<>(); diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/listener/BaseVehicleExecutionListener.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/listener/BaseVehicleExecutionListener.java new file mode 100644 index 0000000000..9d7494a2d4 --- /dev/null +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/listener/BaseVehicleExecutionListener.java @@ -0,0 +1,23 @@ +package com.yxt.anrui.flowable.listener; + +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; +import org.springframework.stereotype.Component; + +/** + * @author liuguohui + * @version 1.0 + * @description 建立车辆库存台账 + * @date 2022/04/11 + */ +@Component +public class BaseVehicleExecutionListener implements ExecutionListener { + + @Override + public void notify(DelegateExecution execution) { + // 入账申请审批通过后,自动生成车辆库存台账 + // TODO + System.out.println("入账申请审批通过后,自动生成车辆库存台账"); + + } +} diff --git a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/flow/FlowTaskVo.java b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/flow/FlowTaskVo.java new file mode 100644 index 0000000000..ad0de3ab5c --- /dev/null +++ b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/flow/FlowTaskVo.java @@ -0,0 +1,51 @@ +package com.yxt.anrui.scm.api.flow; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + *

流程任务

+ * + * @author XuanXuan + * @date 2021-04-03 + */ +@ApiModel("工作流任务相关--请求参数") +@Data +public class FlowTaskVo { + + @ApiModelProperty("任务Id") + private String taskId; + + @ApiModelProperty("用户Id") + private String userId; + @ApiModelProperty("用户Sid") + private String userSid; + + @ApiModelProperty("任务意见") + private String comment; + + @ApiModelProperty("流程实例Id") + private String instanceId; + + @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-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/flow/Flowable.java b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/flow/Flowable.java new file mode 100644 index 0000000000..3dbad13ba3 --- /dev/null +++ b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/flow/Flowable.java @@ -0,0 +1,8 @@ +package com.yxt.anrui.scm.api.flow; + +import com.yxt.common.core.domain.BaseEntity; +import lombok.Data; + +@Data +public class Flowable extends BaseEntity { +} diff --git a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundDto.java b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundDto.java index cd321ffdda..41a8903d25 100644 --- a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundDto.java +++ b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundDto.java @@ -32,6 +32,10 @@ public class ScmApplyInboundDto implements Dto { @ApiModelProperty("车辆入账单sid") private String sid; + + @ApiModelProperty("用户sid") + @NotBlank(message = "用户sid不能为空") + private String userSid; @ApiModelProperty("申请编号") @NotBlank(message = "申请编号不能为空") diff --git a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeign.java b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeign.java index dbbee9ce5d..7e1d32552c 100644 --- a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeign.java +++ b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeign.java @@ -1,15 +1,18 @@ package com.yxt.anrui.scm.api.scmapplyinbound; +import com.yxt.anrui.scm.api.flow.FlowTaskVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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.ApiParam; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; +import java.util.Map; /** * Project: anrui-scm(进销存)
@@ -47,4 +50,39 @@ public interface ScmApplyInboundFeign { @ApiOperation("根据sid查询车辆入账单详情") @GetMapping("/fetchSid/{sid}") public ResultBean fetchSid(@PathVariable("sid") String sid); + + /*************************************************审批流程***************************************************/ + @ApiOperation("提交入账申请") + @PostMapping("/submitRecordApplication") + public ResultBean submitRecordApplication(@RequestBody @Valid SubmitScmApplyInboundDto dto); + + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@ApiParam(value = "变量集合,json对象") @RequestBody Map variables); + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess/{userSid}/{businessSid}") + public ResultBean revokeProcess( + @ApiParam(value = "用户sid") @PathVariable(value = "userSid")String userSid, + @ApiParam(value = "业务sid") @PathVariable(value = "businessSid")String businessSid, + @ApiParam(value = "工作流任务相关--请求参数") @RequestBody FlowTaskVo flowTaskVo) ; + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject/{businessSid}") + public ResultBean taskReject(@ApiParam(value = "业务sid") @PathVariable(value = "businessSid")String businessSid, + @ApiParam(value = "工作流任务相关--请求参数")@RequestBody FlowTaskVo flowTaskVo); + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess/{businessSid}") + public ResultBean breakProcess(@ApiParam(value = "业务sid") @PathVariable(value = "businessSid")String businessSid, + @RequestBody FlowTaskVo flowTaskVo); + + @ApiOperation(value = "流程历史流转记录" ) + @GetMapping(value = "/task/flowRecord/{procInsId}/{deployId}") + public ResultBean flowRecord( @ApiParam(value = "流程实例id")@PathVariable(value = "procInsId")String procInsId, + @ApiParam(value = "目前没用")@PathVariable(value = "deployId")String deployId); + + + /*************************************************审批流程***************************************************/ + } \ No newline at end of file diff --git a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeignFallback.java b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeignFallback.java index c4199dd09b..b1af2192b2 100644 --- a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeignFallback.java +++ b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/ScmApplyInboundFeignFallback.java @@ -1,11 +1,13 @@ package com.yxt.anrui.scm.api.scmapplyinbound; +import com.yxt.anrui.scm.api.flow.FlowTaskVo; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Map; /** * Project: anrui-scm(进销存)
@@ -45,4 +47,40 @@ public class ScmApplyInboundFeignFallback implements ScmApplyInboundFeign { ResultBean rb = ResultBean.fireFail(); return rb.setMsg("接口anrui-scm/scmapplyinbound/fetchSid无法访问"); } + + @Override + public ResultBean submitRecordApplication(SubmitScmApplyInboundDto dto) { + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-scm/scmapplyinbound/submitRecordApplication无法访问"); + } + + @Override + public ResultBean complete(Map variables) { + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-scm/scmapplyinbound/complete无法访问"); + } + + @Override + public ResultBean revokeProcess(String userSid, String businessSid, FlowTaskVo flowTaskVo) { + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-scm/scmapplyinbound/revokeProcess无法访问"); + } + + @Override + public ResultBean taskReject(String businessSid, FlowTaskVo flowTaskVo) { + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-scm/scmapplyinbound/taskReject无法访问"); + } + + @Override + public ResultBean breakProcess(String businessSid, FlowTaskVo flowTaskVo) { + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-scm/scmapplyinbound/breakProcess无法访问"); + } + + @Override + public ResultBean flowRecord(String procInsId, String deployId) { + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-scm/scmapplyinbound/flowRecord无法访问"); + } } \ No newline at end of file diff --git a/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/SubmitScmApplyInboundDto.java b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/SubmitScmApplyInboundDto.java new file mode 100644 index 0000000000..e3de17007f --- /dev/null +++ b/anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmapplyinbound/SubmitScmApplyInboundDto.java @@ -0,0 +1,28 @@ +package com.yxt.anrui.scm.api.scmapplyinbound; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liuguohui + * @version 1.0 + * @description + * @date 2022/04/13 + */ +@ApiModel("提交") +@Data +public class SubmitScmApplyInboundDto extends ScmApplyInboundDto{ + + @ApiModelProperty("业务sid") + private String businessSid; + + @ApiModelProperty("意见") + private String comment; + + @ApiModelProperty("流程实例id") + private String instanceId; + + @ApiModelProperty("任务id") + private String taskId; +} diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableMapper.java b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableMapper.java new file mode 100644 index 0000000000..de95f23617 --- /dev/null +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableMapper.java @@ -0,0 +1,12 @@ +package com.yxt.anrui.scm.biz.flow; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.anrui.buscenter.api.flow.Flowable; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Map; + +@Mapper +public interface FlowableMapper extends BaseMapper { + +} diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableMapper.xml b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableMapper.xml new file mode 100644 index 0000000000..0dc22fb778 --- /dev/null +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableService.java b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableService.java new file mode 100644 index 0000000000..1c09c2acb7 --- /dev/null +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/flow/FlowableService.java @@ -0,0 +1,99 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.anrui.scm.biz.flow; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.yxt.anrui.buscenter.api.flow.*; +import com.yxt.anrui.flowable.api.flowdefinition.FlowDefinitionFeign; +import com.yxt.anrui.flowable.api.flowtask.FlowTask; +import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign; +import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; +import com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFlowStateEnum; +import com.yxt.anrui.flowable.api.utils.ProcessStateEnum; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessTaskParam; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessTaskQuery; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.flowable.sqloperationsymbol.SQLOperationSymbol; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.DateUtils; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.*; + +/** + * Project: anrui-parent
+ * File: FlowableService.java
+ * Class: com.yxt.anrui.scm.biz.flow.FlowableService
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021/10/23 上午11:14
+ * + * @author popo + * @version 1.0 + * @since 1.0 + */ +@Service +public class FlowableService extends MybatisBaseService { + @Autowired + private FlowDefinitionFeign flowDefinitionFeign; + @Autowired + private FlowTaskFeign flowTaskFeign; + + public ResultBean businessStart(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, + @ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid, + @ApiParam(value = "变量集合,json对象") @RequestBody Map variables) { + + variables.put("procDefId",procDefId); + variables.put("userSid",userSid); + BusinessVariables bv= BusinessVariables.builder().build(); + bv.setDetailUrl(""); + bv.setHandleUrl(""); + bv.setFormVariables(variables); + ResultBean rb = flowDefinitionFeign.businessStart(bv); + if (!rb.getSuccess()) { + return rb; + } + String procId = rb.getData().getProcInsId(); + List list = flowTaskFeign.getLatestTasks(procId).getData(); + String nodeState = list.get(0).getName_(); + String task_def_key_ = list.get(0).getTask_def_key_(); + Map map = new HashMap<>(); + map.put("sid", variables.get("businessSid").toString()); + map.put("nodeState", nodeState); + map.put("procInsId", rb.getData().getProcInsId()); + map.put("taskDefKey", task_def_key_); + return new ResultBean().success().setData(map); + } +} diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.java b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.java index 3cb96fcd0c..310d009f52 100644 --- a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.java +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.java @@ -12,6 +12,7 @@ import com.yxt.anrui.scm.api.scmapplyinbound.ScmApplyInbound; import com.yxt.anrui.scm.api.scmapplyinbound.ScmApplyInboundVo; import java.util.List; +import java.util.Map; /** * Project: anrui-scm(进销存)
@@ -38,4 +39,6 @@ public interface ScmApplyInboundMapper extends BaseMapper { @Select("select * from scm_apply_inbound") List selectListVo(); + + int updateFlowFiled(Map map); } \ No newline at end of file diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.xml b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.xml index fdb4f1dc7d..7e323a12f2 100644 --- a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.xml +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundMapper.xml @@ -4,7 +4,7 @@ SELECT * FROM scm_apply_inbound ${ew.sqlSegment} + + + UPDATE scm_apply_inbound + SET nodeState=#{nodeState}, taskDefKey=#{taskDefKey} + + , procDefId=#{procDefId} + + + , procInsId=#{procInsId} + + WHERE sid=#{sid} + \ No newline at end of file diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundRest.java b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundRest.java index c50a763c48..8949ad82a2 100644 --- a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundRest.java +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundRest.java @@ -1,6 +1,7 @@ package com.yxt.anrui.scm.biz.scmapplyinbound; import cn.hutool.core.bean.BeanUtil; +import com.yxt.anrui.scm.api.flow.FlowTaskVo; import com.yxt.anrui.scm.api.scmapplyinbound.*; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; @@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** * Project: anrui-scm(进销存)
@@ -55,4 +57,34 @@ public class ScmApplyInboundRest implements ScmApplyInboundFeign { public ResultBean fetchSid(String sid) { return new ResultBean().success().setData(scmApplyInboundService.selectBySid(sid)); } + + @Override + public ResultBean submitRecordApplication(SubmitScmApplyInboundDto dto) { + return new ResultBean().success().setData(scmApplyInboundService.submitRecordApplication(dto)); + } + + @Override + public ResultBean complete(Map variables) { + return scmApplyInboundService.complete(variables); + } + + @Override + public ResultBean revokeProcess(String userSid, String businessSid, FlowTaskVo flowTaskVo) { + return scmApplyInboundService.revokeProcess(userSid, businessSid, flowTaskVo); + } + + @Override + public ResultBean taskReject(String businessSid, FlowTaskVo flowTaskVo) { + return scmApplyInboundService.taskReject(businessSid, flowTaskVo); + } + + @Override + public ResultBean breakProcess(String businessSid, FlowTaskVo flowTaskVo) { + return scmApplyInboundService.breakProcess(businessSid, flowTaskVo); + } + + @Override + public ResultBean flowRecord(String procInsId, String deployId) { + return scmApplyInboundService.flowRecord(procInsId, deployId); + } } diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundService.java b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundService.java index d2414df03e..00d8e3022a 100644 --- a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundService.java +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundService.java @@ -3,10 +3,19 @@ package com.yxt.anrui.scm.biz.scmapplyinbound; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign; +import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; +import com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFlowStateEnum; +import com.yxt.anrui.flowable.api.utils.ProcDefEnum; +import com.yxt.anrui.flowable.api.utils.ProcessStateEnum; +import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.scm.api.flow.FlowTaskVo; import com.yxt.anrui.scm.api.scmapplyinbound.*; -import com.yxt.anrui.scm.api.scmapplyinboundvehicle.ScmApplyInboundVehicle; import com.yxt.anrui.scm.api.scmapplyinboundvehicle.ScmApplyInboundVehicleDto; import com.yxt.anrui.scm.api.scmapplyinboundvehicle.ScmApplyInboundVehicleVo; +import com.yxt.anrui.scm.biz.flow.FlowableService; import com.yxt.anrui.scm.biz.scmapplyinboundvehicle.ScmApplyInboundVehicleService; import org.apache.commons.lang3.StringUtils; import com.yxt.common.base.service.MybatisBaseService; @@ -19,7 +28,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @@ -41,6 +52,14 @@ public class ScmApplyInboundService extends MybatisBaseService listPage(PagerQuery pq) { ScmApplyInboundQuery query = pq.getParams(); @@ -119,7 +138,7 @@ public class ScmApplyInboundService extends MybatisBaseService resultBean = sysStaffOrgFeign.getSysStaffOrgSidListByStaffSid(staffSid); + if (resultBean.getSuccess()) { + orgSid = resultBean.getData(); + } + return orgSid; + } + + /** + * 更新流程相关的状态 + * @param map + * @return + */ + private int updateFlowFiled(Map map) { + return baseMapper.updateFlowFiled(map); + } + + /** + * 提交入账申请 + * @param dto + * @return + */ + public ResultBean submitRecordApplication(SubmitScmApplyInboundDto dto) { + String orgSid = checkUserOrg(dto.getUserSid()); + ResultBean resultBean = saveOrUpdateApplyInBound(dto); + String businessSid = resultBean.getData().toString(); + Map variables = new HashMap<>(); + variables.put("businessSid", businessSid); + variables.put("orgSid", orgSid); //部门sid + if (StringUtils.isBlank(dto.getTaskId())) { // 新提交 + ResultBean resultBean1 = flowableService.businessStart(ProcDefEnum.RECORDAPPLICATION.getProDefId(), dto.getUserSid(), variables); + if (resultBean1.getSuccess() && resultBean1.getData() != null) { + Map map = (Map) resultBean1.getData(); + //更新业务表中的流程状态 + Map paramMap = new HashMap<>(); + paramMap.put("sid", businessSid); + paramMap.put("procDefId", ProcDefEnum.RECORDAPPLICATION.getProDefId()); + paramMap.put("nodeState", map.get("nodeState")); + paramMap.put("procInsId", map.get("procInsId")); + paramMap.put("taskDefKey", map.get("taskDefKey")); + updateFlowFiled(paramMap); + } + return resultBean1; + } else { // 驳回到发起人后再次提交 + variables.put("comment", StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交"); + variables.put("instanceId", dto.getInstanceId()); + variables.put("taskId", dto.getTaskId()); + variables.put("userSid", dto.getUserSid()); + return complete(variables); + } + } + + /** + * 办理 + * @param variables + * @return + */ + public ResultBean complete(Map variables) { + BusinessVariables bv= BusinessVariables.builder().build(); + bv.setDetailUrl(""); + bv.setHandleUrl(""); + bv.setFormVariables(variables); + ResultBean resultBean = flowTaskFeign.businessComplete(bv); + if (!resultBean.getSuccess()) { + return resultBean; + } + String nodeState = ""; + String taskDefKey = ""; + Map paramMap = new HashMap<>(); + paramMap.put("sid", variables.get("businessSid").toString()); + if (resultBean.getData() != null) { + ResultBean> listResultBean = flowTaskFeign.getLatestTasks(resultBean.getData().getProcInsId()); + if (listResultBean.getSuccess() && listResultBean.getData() != null && listResultBean.getData().size() != 0) { + nodeState = listResultBean.getData().get(0).getName_(); + taskDefKey = listResultBean.getData().get(0).getTask_def_key_(); + } else { + nodeState = ProcessStateEnum.FINISHED.getStateName(); + taskDefKey = "Event_end"; + paramMap.put("flowState", SysFormLinkFlowStateEnum.FINISH.getCode()); + } + } + paramMap.put("nodeState", nodeState); + paramMap.put("taskDefKey", taskDefKey); + updateFlowFiled(paramMap); + return resultBean; + } + + /** + * 撤回 + * @param userSid + * @param businessSid + * @param flowTaskVo + * @return + */ + public ResultBean revokeProcess(String userSid, String businessSid, FlowTaskVo flowTaskVo) { + com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl=new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); + BeanUtil.copyProperties(flowTaskVo,fl); + fl.setUserSid(userSid); + ResultBean> resultBean = flowTaskFeign.revokeProcess(fl); + if (!resultBean.getSuccess()) { + return resultBean; + } + String nodeState = resultBean.getData().get(0).getName_(); + String taskDefKey = resultBean.getData().get(0).getTask_def_key_(); + String incomingSourceRef = resultBean.getData().get(0).getIncomingSourceRef(); + Map paramMap = new HashMap<>(); + paramMap.put("sid", businessSid); + if (incomingSourceRef.contains("start")) { + paramMap.put("nodeState", SysFormLinkFlowStateEnum.UNCOMMITTED.getState()); + paramMap.put("taskDefKey", taskDefKey); + paramMap.put("flowState", SysFormLinkFlowStateEnum.UNCOMMITTED.getCode()); + } else { + paramMap.put("nodeState",nodeState ); + paramMap.put("taskDefKey",taskDefKey ); + } + updateFlowFiled(paramMap); + return resultBean; + } + + /** + * 驳回 + * @param businessSid + * @param flowTaskVo + * @return + */ + public ResultBean taskReject(String businessSid, FlowTaskVo flowTaskVo) { + com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl=new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); + BeanUtil.copyProperties(flowTaskVo,fl); + ResultBean> resultBean = flowTaskFeign.taskReject(fl); + if (!resultBean.getSuccess()) { + return resultBean; + } + String nodeState = resultBean.getData().get(0).getName_(); + String taskDefKey = resultBean.getData().get(0).getTask_def_key_(); + String incomingSourceRef = resultBean.getData().get(0).getIncomingSourceRef(); + Map paramMap = new HashMap<>(); + paramMap.put("sid", businessSid); + paramMap.put("nodeState", nodeState); + paramMap.put("taskDefKey", taskDefKey); + if (incomingSourceRef.contains("start")) { + paramMap.put("flowState", SysFormLinkFlowStateEnum.REJECT.getCode()); + } + updateFlowFiled(paramMap); + return resultBean; + } + + /** + * 终止流程 + * @param businessSid + * @param flowTaskVo + * @return + */ + public ResultBean breakProcess(String businessSid, FlowTaskVo flowTaskVo) { + com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl=new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); + BeanUtil.copyProperties(flowTaskVo,fl); + ResultBean resultBean = flowTaskFeign.breakProcess(fl); + if (!resultBean.getSuccess()) { + return resultBean; + } + Map paramMap = new HashMap<>(); + paramMap.put("sid", businessSid); + paramMap.put("nodeState", String.valueOf(resultBean.getData())); + paramMap.put("taskDefKey", "Event_end"); + paramMap.put("flowState", SysFormLinkFlowStateEnum.BREAK.getCode()); + updateFlowFiled(paramMap); + return resultBean; + } + + /** + * 流程历史流转记录 + * @param procInsId + * @param deployId + * @return + */ + public ResultBean flowRecord(String procInsId, String deployId) { + return flowTaskFeign.businessFlowRecord(procInsId,deployId); + } } \ No newline at end of file