Browse Source

Merge remote-tracking branch 'origin/master'

master
God 3 years ago
parent
commit
ec40f6004e
  1. 40
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowCommentDto.java
  2. 98
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTask.java
  3. 23
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskQuery.java
  4. 51
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskVo.java
  5. 8
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/Flowable.java
  6. 37
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFallback.java
  7. 76
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFeign.java
  8. 90
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/TaskQuery.java
  9. 12
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableMapper.java
  10. 59
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableMapper.xml
  11. 92
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java
  12. 265
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableService.java
  13. 36
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowdefinition/FlowDefinitionRest.java
  14. 55
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowdefinition/FlowDefinitionService.java
  15. 70
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskController.java
  16. 260
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java
  17. 5
      anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmvehiclereturn/ScmVehicleReturnFeign.java
  18. 10
      anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmvehiclereturn/ScmVehicleReturnVo.java
  19. 5
      anrui-scm/anrui-scm-biz/pom.xml
  20. 2
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/AnruiScmApplication.java
  21. 18
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnMapper.java
  22. 18
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnMapper.xml
  23. 9
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnRest.java
  24. 118
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnService.java

40
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowCommentDto.java

@ -0,0 +1,40 @@
package com.yxt.anrui.flowable.api.flow;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @author XuanXuan
* @date 2021/3/28 15:50
*/
@Data
@Builder
/*@NoArgsConstructor
@AllArgsConstructor*/
public class FlowCommentDto implements Serializable {
public FlowCommentDto() {
}
public FlowCommentDto(String type, String comment) {
this.type = type;
this.comment = comment;
}
/**
*
*/
private static final long serialVersionUID = 1929734226858491967L;
/**
* 意见类别 1正常同意意见 2退回意见 3 驳回意见 4 委派意见 5 转办意见 6 终止流程 7 撤回流程
*/
private String type;
/**
* 意见内容
*/
private String comment;
}

98
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTask.java

@ -0,0 +1,98 @@
package com.yxt.anrui.flowable.api.flow;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>工作流任务<p>
*
* @author XuanXuan
* @date 2021-04-03
*/
@ApiModel("工作流任务相关-返回参数")
@Data
public class FlowTask extends BaseEntity implements Serializable {
@ApiModelProperty("任务编号")
private String taskId;
@ApiModelProperty("任务名称")
private String taskName;
@ApiModelProperty("任务Key")
private String taskDefKey;
@ApiModelProperty("任务执行人Id")
private Long assigneeId;
@ApiModelProperty("部门名称")
private String deptName;
@ApiModelProperty("流程发起人部门名称")
private String startDeptName;
@ApiModelProperty("任务执行人名称")
private String assigneeName;
@ApiModelProperty("任务执行人头像")
private String assigneeHeadImage;
@ApiModelProperty("流程发起人Id")
private String startUserId;
@ApiModelProperty("流程发起人名称")
private String startUserName;
@ApiModelProperty("流程类型")
private String category;
@ApiModelProperty("流程变量信息")
private Object procVars;
@ApiModelProperty("局部变量信息")
private Object taskLocalVars;
@ApiModelProperty("流程部署编号")
private String deployId;
@ApiModelProperty("流程ID")
private String procDefId;
@ApiModelProperty("流程key")
private String procDefKey;
@ApiModelProperty("流程定义名称")
private String procDefName;
@ApiModelProperty("流程定义内置使用版本")
private int procDefVersion;
@ApiModelProperty("流程实例ID")
private String procInsId;
@ApiModelProperty("历史流程实例ID")
private String hisProcInsId;
@ApiModelProperty("任务耗时")
private String duration;
@ApiModelProperty("任务意见")
private FlowCommentDto comment = new FlowCommentDto();
@ApiModelProperty("候选执行人")
private String candidate;
@ApiModelProperty("任务创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty("任务完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
}

23
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskQuery.java

@ -0,0 +1,23 @@
package com.yxt.anrui.flowable.api.flow;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hanweijia
* @date 2021/11/06 13:53
* @description
*/
@Data
public class FlowTaskQuery implements Query {
private static final long serialVersionUID = -7395299971899690002L;
@ApiModelProperty(value = "用户sid", required = true)
private String userSid;
@ApiModelProperty(value = "zd", required = true)
private String zd;
@ApiModelProperty(value = "days", required = true)
private String days;
}

51
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskVo.java

@ -0,0 +1,51 @@
package com.yxt.anrui.flowable.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;
/**
* <p>流程任务<p>
*
* @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<String, Object> values=new HashMap<>();
@ApiModelProperty("审批人")
private String assignee;
@ApiModelProperty("候选人")
private List<String> candidateUsers=new ArrayList<>();
@ApiModelProperty("审批组")
private List<String> candidateGroups=new ArrayList<>();
}

8
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/Flowable.java

@ -0,0 +1,8 @@
package com.yxt.anrui.flowable.api.flow;
import com.yxt.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class Flowable extends BaseEntity {
}

37
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFallback.java

@ -0,0 +1,37 @@
package com.yxt.anrui.flowable.api.flow;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class FlowableFallback implements FlowableFeign {
@Override
public ResultBean businessStart(String procDefId, String userSid, Map<String, Object> variables) {
return null;
}
@Override
public ResultBean processPagerList(Integer pageNum, Integer pageSize) {
return null;
}
@Override
public ResultBean myprocess(String userSid, PagerQuery<FlowTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean stopProcess(FlowTaskVo flowTaskVo) {
return null;
}
@Override
public ResultBean deleteProcess(String procInsId) {
return null;
}
}

76
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFeign.java

@ -0,0 +1,76 @@
package com.yxt.anrui.flowable.api.flow;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Api(tags = "Flowable")
@FeignClient(
contextId = "anrui-flowable-Flowable",
name = "anrui-flowable",
path = "v1/flow",
fallback = FlowableFallback.class)
public interface FlowableFeign {
/**
* 业务系统发起流程申请
*
* @param procDefId 流程定义id
* @param userSid 用户sid
* @param variables form参数
* @return
*/
@PostMapping("/businessStart/{procDefId}/{userSid}")
public ResultBean businessStart(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
@ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid,
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables);
/**
* 流程定义列表 一般业务中不需要查询该列表
*
* @param pageNum 页数
* @param pageSize 容量
* @return
*/
@PostMapping("/processPagerList/{userSid}")
public ResultBean processPagerList(@ApiParam(value = "当前页码", required = true) @RequestParam("pageNum") Integer pageNum,
@ApiParam(value = "每页条数", required = true) @RequestParam("pageSize") Integer pageSize);
/**
* 我的流程 我发起的流程
*
* @param userSid 用户sid
* @param taskQueryPagerQuery 查询参数
* @return
*/
@PostMapping("/myprocess/{userSid}")
public ResultBean myprocess(@ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid,
@ApiParam(value = "变量集合,json对象") @RequestBody PagerQuery<FlowTaskQuery> taskQueryPagerQuery);
/**
* 取消申请
*
* @param flowTaskVo
* @return
*/
@ApiOperation(value = "取消申请")
@PostMapping(value = "/task/stopProcess")
@ResponseBody
ResultBean stopProcess(@ApiParam(value = "工作流任务相关--请求参数") @RequestBody FlowTaskVo flowTaskVo);
/**
* 删除流程实例
*
* @param procInsId 流程实例id
* @return
*/
@ApiOperation(value = "删除流程实例")
@DeleteMapping(value = "/task/deleteProcess/{procInsId}")
@ResponseBody
ResultBean deleteProcess(@ApiParam(value = "流程实例id") @PathVariable(value = "procInsId") String procInsId);
}

90
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/TaskQuery.java

@ -0,0 +1,90 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.flowable.api.flow;
import com.yxt.common.core.query.Query;
/**
* Project: anrui-parent <br/>
* File: TaskQuery.java <br/>
* Class: com.yxt.anrui.portal.biz.flow.TaskQuery <br/>
* Description: <描述类的功能>. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2021/10/27 下午3:36 <br/>
*
* @author popo
* @version 1.0
* @since 1.0
*/
public class TaskQuery implements Query {
private String userSid;
private String days;
private String zd1;
private String processDefinitionId;
private String startTime;
public String getZd1() {
return zd1;
}
public void setZd1(String zd1) {
this.zd1 = zd1;
}
public String getProcessDefinitionId() {
return processDefinitionId;
}
public void setProcessDefinitionId(String processDefinitionId) {
this.processDefinitionId = processDefinitionId;
}
public String getUserSid() {
return userSid;
}
public void setUserSid(String userSid) {
this.userSid = userSid;
}
public String getDays() {
return days;
}
public void setDays(String days) {
this.days = days;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
}

12
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableMapper.java

@ -0,0 +1,12 @@
package com.yxt.anrui.flowable.biz.flow;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yxt.anrui.flowable.api.flow.Flowable;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
@Mapper
public interface FlowableMapper extends BaseMapper<Flowable> {
void insetFlowableTask(Map<String,Object> params);
}

59
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableMapper.xml

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.anrui.flowable.biz.flow.FlowableMapper">
<insert id="insetFlowableTask" parameterType="com.yxt.anrui.flowable.api.flow.Flowable">
insert into `act_ru_task` ( `days`, `zd`,initiator,outcome)
VALUES
(
#{days,jdbcType=VARCHAR},
#{zd,jdbcType=VARCHAR}
#{initiator,jdbcType=VARCHAR}
#{outcome,jdbcType=VARCHAR}
)
</insert>
<!--
<insert id="insetFlowableTask">
insert into `act_ru_task` (`REV`, `EXECUTION_ID`, `PROC_INST_ID`, `PROC_DEF_ID`,
`TASK_DEF_ID`, `SCOPE_ID`, `SUB_SCOPE_ID`, `SCOPE_TYPE`, `SCOPE_DEFINITION_ID`,
`PROPAGATED_STAGE_INST_ID`, `NAME`, `PARENT_TASK_ID`, `DESCRIPTION`,
`TASK_DEF_KEY`, `OWNER`, `ASSIGNEE`, `DELEGATION`, `PRIORITY`,
`CREATE_TIME`, `DUE_DATE`, `CATEGORY`, `SUSPENSION_STATE`, `TENANT_ID`,
`FORM_KEY`, `CLAIM_TIME`, `IS_COUNT_ENABLED`, `VAR_COUNT`, `ID_LINK_COUNT`,
`SUB_TASK_COUNT`, `days`, `reason`)
VALUES
(
#{item.modelSid,jdbcType=VARCHAR},&lt;!&ndash;sid&ndash;&gt;
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR},
#{item.modelSid,jdbcType=VARCHAR}
)
</insert>
-->
</mapper>

92
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java

@ -0,0 +1,92 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.flowable.biz.flow;
import com.yxt.anrui.flowable.api.flow.FlowTaskQuery;
import com.yxt.anrui.flowable.api.flow.FlowTaskVo;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* Project: anrui-parent <br/>
* File: FlowableRest.java <br/>
* Class: com.yxt.anrui.portal.biz.flow.FlowableRest <br/>
* Description: <描述类的功能>. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2021/10/23 上午11:13 <br/>
*
* @author popo
* @version 1.0
* @since 1.0
*/
@RestController
@RequestMapping("v1/flow")
@Api(tags = "业务系统中业务和工作流相关操作")
public class FlowableRest implements FlowableFeign {
@Autowired
private FlowableService flowableService;
@Override
public ResultBean businessStart(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
@ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid,
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables) {
return flowableService.businessStart(procDefId, userSid, variables);
}
@Override
public ResultBean processPagerList(@ApiParam(value = "当前页码", required = true) @RequestParam("pageNum") Integer pageNum,
@ApiParam(value = "每页条数", required = true) @RequestParam("pageSize") Integer pageSize) {
return flowableService.processPagerList(pageNum, pageSize);
}
@Override
public ResultBean myprocess(@ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid,
@ApiParam(value = "变量集合,json对象") @RequestBody PagerQuery<FlowTaskQuery> taskQueryPagerQuery) {
return flowableService.myprocess(userSid, taskQueryPagerQuery);
}
@Override
public ResultBean stopProcess(FlowTaskVo flowTaskVo) {
flowableService.stopProcess(flowTaskVo);
return ResultBean.fireSuccess();
}
@Override
public ResultBean deleteProcess(String procInsId) {
flowableService.deleteProcess(procInsId);
return ResultBean.fireSuccess();
}
}

265
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableService.java

@ -0,0 +1,265 @@
package com.yxt.anrui.flowable.biz.flow;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.flowable.api.flow.FlowTaskQuery;
import com.yxt.anrui.flowable.api.flow.FlowTaskVo;
import com.yxt.anrui.flowable.api.flow.Flowable;
import com.yxt.anrui.flowable.api.flow.TaskQuery;
import com.yxt.anrui.flowable.api.flowtask.FlowTask;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
import com.yxt.anrui.flowable.api.utils.ProcessStateEnum;
import com.yxt.anrui.flowable.biz.flowdefinition.FlowDefinitionService;
import com.yxt.anrui.flowable.biz.flowtask.FlowTaskService;
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.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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class FlowableService extends MybatisBaseService<FlowableMapper, Flowable> {
@Autowired
private FlowDefinitionService flowDefinitionService;
@Autowired
private FlowTaskService flowTaskService;
public ResultBean businessStart(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
@ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid,
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables) {
variables.put("procDefId", procDefId);
variables.put("userSid", userSid);
BusinessVariables bv = BusinessVariables.builder().build();
bv.setDetailUrl("");
bv.setHandleUrl("");
bv.setFormVariables(variables);
ResultBean<FlowTask> rb = flowDefinitionService.businessStart(bv);
if (!rb.getSuccess()) {
return rb;
}
String procId = rb.getData().getProcInsId();
List<LatestTaskVo> list = flowTaskService.getLatestTasks(procId);
String nodeState = list.get(0).getName_();
String task_def_key_ = list.get(0).getTask_def_key_();
Map<String, String> 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);
}
public ResultBean myprocess(String userSid, PagerQuery<FlowTaskQuery> taskQueryPagerQuery) {
PagerQuery<BusinessTaskQuery> pq = new PagerQuery<>();
String days = taskQueryPagerQuery.getParams().getDays();
String zd = taskQueryPagerQuery.getParams().getZd();
pq.setCurrent(taskQueryPagerQuery.getCurrent());
pq.setSize(taskQueryPagerQuery.getSize());
BusinessTaskQuery businessTaskQuery = BusinessTaskQuery.create();
if (StringUtils.isNotBlank(zd)) {
BusinessTaskParam businessTaskParam = new BusinessTaskParam();
businessTaskParam.setField("zd");
businessTaskParam.setSqlOperationSymbol(SQLOperationSymbol.LIKE);
businessTaskParam.setValue(zd);
businessTaskQuery.add(businessTaskParam);
}
if (StringUtils.isNotBlank(days)) {
BusinessTaskParam businessTaskParam = new BusinessTaskParam();
businessTaskParam.setField("days");
businessTaskParam.setSqlOperationSymbol(SQLOperationSymbol.EQUAL);
businessTaskParam.setValue(days);
businessTaskQuery.add(businessTaskParam);
}
pq.setParams(businessTaskQuery);
return flowTaskService.businessMyprocessNew(userSid, pq);
}
public ResultBean processPagerList(Integer pageNum, Integer pageSize) {
return flowDefinitionService.pagerListNew(pageNum, pageSize);
}
public ResultBean todoTaskList(String userSid, PagerQuery<TaskQuery> pQuery) {
TaskQuery params = pQuery.getParams();
if (StringUtils.isBlank(userSid)) {
return ResultBean.fireFail().setMsg("用户SID为空");
}
PagerQuery<BusinessTaskQuery> taskQueryPagerQuery = new PagerQuery<>();
taskQueryPagerQuery.setCurrent(pQuery.getCurrent()).setSize(pQuery.getSize());
String days = params.getDays();
String processDefinitionId = params.getProcessDefinitionId();
String startTime = params.getStartTime();
BusinessTaskQuery taskQuery = new BusinessTaskQuery();
List<BusinessTaskParam> taskParamList = new ArrayList<>();
if (StringUtils.isNotBlank(days)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("zd1");
taskParam.setValue(days);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.EQUAL);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(startTime)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("startTime");
taskParam.setValue(startTime);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.EQUAL);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(processDefinitionId)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("processDefinitionId");
taskParam.setSqlOperationSymbol(SQLOperationSymbol.NONE);
taskParam.setValue(processDefinitionId);
taskParamList.add(taskParam);
}
taskQuery.setFields(taskParamList);
taskQueryPagerQuery.setParams(taskQuery);
return flowTaskService.businessTodoListNew(userSid, taskQueryPagerQuery);
}
public ResultBean doneTaskList(String userSid, PagerQuery<TaskQuery> pQuery) {
TaskQuery params = pQuery.getParams();
if (StringUtils.isBlank(userSid)) {
return ResultBean.fireFail().setMsg("用户SID为空");
}
PagerQuery<BusinessTaskQuery> taskQueryPagerQuery = new PagerQuery<>();
taskQueryPagerQuery.setCurrent(pQuery.getCurrent()).setSize(pQuery.getSize());
String zd1 = params.getZd1();
String processDefinitionId = params.getProcessDefinitionId();
String startTime = params.getStartTime();
BusinessTaskQuery taskQuery = new BusinessTaskQuery();
List<BusinessTaskParam> taskParamList = new ArrayList<>();
if (StringUtils.isNotBlank(zd1)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("zd1");
taskParam.setValue(zd1);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.EQUAL);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(startTime)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("startTime");
taskParam.setValue(startTime);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.EQUAL);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(processDefinitionId)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("processDefinitionId");
taskParam.setSqlOperationSymbol(SQLOperationSymbol.NONE);
taskParam.setValue(processDefinitionId);
taskParamList.add(taskParam);
}
taskQuery.setFields(taskParamList);
taskQueryPagerQuery.setParams(taskQuery);
return flowTaskService.businessDoneListNew(userSid, taskQueryPagerQuery);
}
/**
* 取消
*
* @param variables
* @return
*/
public ResultBean complete(Map<String, Object> variables) {
BusinessVariables bv = BusinessVariables.builder().build();
bv.setDetailUrl("");
bv.setHandleUrl("");
bv.setFormVariables(variables);
ResultBean<FlowTask> resultBean = flowTaskService.businessComplete(bv);
if (!resultBean.getSuccess()) {
return resultBean;
}
String nodeState = "";
if (resultBean.getData() != null) {
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskService.getLatestTasksNew(resultBean.getData().getProcInsId());
if (listResultBean.getSuccess() && listResultBean.getData() != null && listResultBean.getData().size() != 0) {
nodeState = listResultBean.getData().get(0).getName_();
} else {
nodeState = ProcessStateEnum.FINISHED.getStateName();
}
}
Map<String, String> map = new HashMap<>();
map.put("nodeState", nodeState);
return new ResultBean().success().setData(map);
}
/**
* 撤回
*
* @param userSid
* @param flowTaskVo
* @return
*/
public ResultBean revokeProcess(String userSid, 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<List<LatestTaskVo>> resultBean = flowTaskService.revokeProcess(fl);
if (!resultBean.getSuccess()) {
return resultBean;
}
String nodeState = resultBean.getData().get(0).getName_();
Map<String, String> map = new HashMap<>();
map.put("nodeState", nodeState);
return new ResultBean().success().setData(map);
}
public ResultBean flowRecord(String procInsId, String deployId) {
return flowTaskService.businessFlowRecord(procInsId, deployId);
}
public ResultBean taskReject(FlowTaskVo flowTaskVo) {
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl = new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo();
BeanUtil.copyProperties(flowTaskVo, fl);
ResultBean<List<LatestTaskVo>> resultBean = flowTaskService.taskReject(fl);
if (!resultBean.getSuccess()) {
return resultBean;
}
String nodeState = resultBean.getData().get(0).getName_();
Map<String, String> map = new HashMap<>();
map.put("nodeState", nodeState);
return new ResultBean().success().setData(map);
}
/**
* 终止流程
*
* @param flowTaskVo
* @return
*/
public ResultBean breakProcess(FlowTaskVo flowTaskVo) {
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl = new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo();
BeanUtil.copyProperties(flowTaskVo, fl);
ResultBean resultBean = flowTaskService.breakProcess(fl);
if (!resultBean.getSuccess()) {
return resultBean;
}
Map<String, String> map = new HashMap<>();
map.put("nodeState", String.valueOf(resultBean.getData()));
return resultBean.success().setData(map);
}
public void stopProcess(FlowTaskVo flowTaskVo) {
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl = new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo();
BeanUtil.copyProperties(flowTaskVo, fl);
flowTaskService.stopProcess(flowTaskVo.getUserSid(), fl);
}
public void deleteProcess(String procInsId) {
flowTaskService.deleteProcessNew(procInsId);
}
}

36
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowdefinition/FlowDefinitionRest.java

@ -1,8 +1,6 @@
package com.yxt.anrui.flowable.biz.flowdefinition;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxt.anrui.flowable.api.flowdefinition.FlowDefinitionFeign;
import com.yxt.anrui.flowable.api.flowdefinition.FlowDefinitionVo;
import com.yxt.anrui.flowable.api.flowdefinition.FlowSaveXmlQuery;
import com.yxt.anrui.flowable.api.flowdefinition.SysUser;
import com.yxt.anrui.flowable.api.flowtask.FlowTask;
@ -11,7 +9,6 @@ import com.yxt.anrui.portal.api.sysrole.SysRoleFeign;
import com.yxt.anrui.portal.api.sysrole.SysRoleVo;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.result.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
@ -76,8 +73,7 @@ public class FlowDefinitionRest implements FlowDefinitionFeign {
@Override
public ResultBean pagerList(Integer pageNum, Integer pageSize) {
Page<FlowDefinitionVo> pageList = flowDefinitionService.list(pageNum, pageSize);
return ResultBean.fireSuccess().setData(pageList);
return flowDefinitionService.pagerListNew(pageNum, pageSize);
}
@Override
@ -144,34 +140,6 @@ public class FlowDefinitionRest implements FlowDefinitionFeign {
@Override
public ResultBean<FlowTask> businessStart(@ApiParam(value = "变量集合") @RequestBody BusinessVariables dto) {
ResultBean<FlowTask> resultBean= new ResultBean<>();
Map<String, Object> variables = dto.getFormVariables();
variables.put("handleUrl",dto.getHandleUrl());
variables.put("detailUrl",dto.getDetailUrl());
Object procDefId_obj = variables.get("procDefId");
Object userSid_obj = variables.get("userSid");
String procDefId=null;
String userSid=null;
if(procDefId_obj==null){
return resultBean.fail().setData(new FlowTask()).setMsg("procDefId 不能为空");
}else{
procDefId = (String) procDefId_obj;
if(StringUtils.isBlank(procDefId)){
resultBean.fail().setData(new FlowTask()).setMsg("procDefId 不能为空");
return resultBean;
}
}
if(userSid_obj==null){
resultBean.fail().setData(new FlowTask()).setMsg("userSid 不能为空");
return resultBean;
}else{
userSid = (String)userSid_obj;
if(StringUtils.isBlank(userSid)){
resultBean.fail().setData(new FlowTask()).setMsg("userSid 不能为空");
return resultBean;
}
}
resultBean = flowDefinitionService.businessStartProcessInstanceById(procDefId, userSid, variables);
return resultBean;
return flowDefinitionService.businessStart(dto);
}
}

55
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowdefinition/FlowDefinitionService.java

@ -15,10 +15,12 @@ import com.yxt.anrui.flowable.biz.sysdeployform.SysDeployFormService;
import com.yxt.anrui.flowable.common.FlowComment;
import com.yxt.anrui.flowable.common.ProcessConstants;
import com.yxt.anrui.flowable.factory.FlowServiceFactory;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.portal.api.sysuser.SysUser;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.common.base.utils.JPushServer;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.result.ResultBean;
import org.apache.commons.io.IOUtils;
import org.flowable.engine.repository.Deployment;
@ -34,7 +36,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class FlowDefinitionService extends FlowServiceFactory {
@ -44,6 +45,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
private SysDeployFormService sysDeployFormService;
@Autowired
private SysUserFeign sysUserFeign;
/**
* 导入流程文件
*
@ -63,7 +65,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery()
.orderByProcessDefinitionKey().asc();
page.setTotal(processDefinitionQuery.count());
List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage((pageNum - 1)*pageSize, pageSize);
List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage((pageNum - 1) * pageSize, pageSize);
List<FlowDefinitionVo> dataList = new ArrayList<>();
for (ProcessDefinition processDefinition : processDefinitionList) {
@ -118,6 +120,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name());
return ResultBean.fireSuccess().setData(result);
}
/**
* 根据流程定义ID启动流程实例
*
@ -145,7 +148,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
if (Objects.nonNull(task)) {
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getUserName() + "发起流程申请");
// taskService.setAssignee(task.getId(), sysUser.getUserId().toString());
taskService.complete(task.getId(), variables,true);
taskService.complete(task.getId(), variables, true);
}
return ResultBean.fireSuccess().setMsg("流程启动成功");
} catch (Exception e) {
@ -165,7 +168,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
* @param variables 流程变量
* @return
*/
public ResultBean<FlowTask> businessStartProcessInstanceById(String procDefId,String userSid, Map<String, Object> variables) {
public ResultBean<FlowTask> businessStartProcessInstanceById(String procDefId, String userSid, Map<String, Object> variables) {
try {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId)
.latestVersion().singleResult();
@ -190,7 +193,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
}
ResultBean<FlowTask> rb = new ResultBean<>();
FlowTask flowTask=new FlowTask();
FlowTask flowTask = new FlowTask();
flowTask.setTaskId(task.getId());
flowTask.setTaskName(task.getName());
flowTask.setProcInsId(task.getProcessInstanceId());
@ -204,6 +207,7 @@ public class FlowDefinitionService extends FlowServiceFactory {
/**
* 向下一环节待办人发出推送
*
* @param taskId
*/
private void sendPush(String taskId) {
@ -211,10 +215,47 @@ public class FlowDefinitionService extends FlowServiceFactory {
System.out.println(nextTasks.getData());
String assignee = ((HashMap) ((ArrayList) nextTasks.getData()).get(0)).get("assignee").toString();
String name = ((HashMap) ((ArrayList) nextTasks.getData()).get(0)).get("name").toString();
System.out.println("assignee:"+assignee);
System.out.println("assignee:" + assignee);
Integer id = sysUserFeign.fetchBySid(assignee).getData().getId();
System.out.println("id:"+id);
System.out.println("id:" + id);
JPushServer.sendPushAlias(name, name, "msg_type", "系统消息", id.toString());
}
public ResultBean<FlowTask> businessStart(BusinessVariables dto) {
ResultBean<FlowTask> resultBean = new ResultBean<>();
Map<String, Object> variables = dto.getFormVariables();
variables.put("handleUrl", dto.getHandleUrl());
variables.put("detailUrl", dto.getDetailUrl());
Object procDefId_obj = variables.get("procDefId");
Object userSid_obj = variables.get("userSid");
String procDefId = null;
String userSid = null;
if (procDefId_obj == null) {
return resultBean.fail().setData(new FlowTask()).setMsg("procDefId 不能为空");
} else {
procDefId = (String) procDefId_obj;
if (StringUtils.isBlank(procDefId)) {
resultBean.fail().setData(new FlowTask()).setMsg("procDefId 不能为空");
return resultBean;
}
}
if (userSid_obj == null) {
resultBean.fail().setData(new FlowTask()).setMsg("userSid 不能为空");
return resultBean;
} else {
userSid = (String) userSid_obj;
if (StringUtils.isBlank(userSid)) {
resultBean.fail().setData(new FlowTask()).setMsg("userSid 不能为空");
return resultBean;
}
}
resultBean = businessStartProcessInstanceById(procDefId, userSid, variables);
return resultBean;
}
public ResultBean pagerListNew(Integer pageNum, Integer pageSize) {
Page<FlowDefinitionVo> pageList = list(pageNum, pageSize);
return ResultBean.fireSuccess().setData(pageList);
}
}

70
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskController.java

@ -66,7 +66,7 @@ public class FlowTaskController implements FlowTaskFeign {
@Override
public ResultBean<FlowTask> businessComplete(@RequestBody BusinessVariables dto) {
return flowTaskService. businessComplete(dto);
return flowTaskService.businessComplete(dto);
}
@Override
@ -105,10 +105,7 @@ public class FlowTaskController implements FlowTaskFeign {
@Override
public ResultBean businessDoneList(String userSid, PagerQuery<BusinessTaskQuery> taskQueryPagerQuery) {
int size = Integer.valueOf(taskQueryPagerQuery.getSize() + "");
int current = Integer.valueOf(taskQueryPagerQuery.getCurrent() + "");
List<BusinessTaskParam> fields = taskQueryPagerQuery.getParams().getFields();
return flowTaskService.businessFinishedList(userSid, fields, current, size);
return flowTaskService.businessDoneListNew(userSid, taskQueryPagerQuery);
}
@Override
@ -117,12 +114,10 @@ public class FlowTaskController implements FlowTaskFeign {
String procInsId = recordQuery.getProcInsId();
return flowTaskService.flowRecord(procInsId, deployId);
}
@Override
public ResultBean stopProcess(String userSid,FlowTaskVo flowTaskVo) {
flowTaskService.stopProcess(userSid,flowTaskVo);
return ResultBean.fireSuccess();
@Override
public ResultBean stopProcess(String userSid, FlowTaskVo flowTaskVo) {
return flowTaskService.stopProcessNew(userSid, flowTaskVo);
}
@Override
@ -138,7 +133,7 @@ public class FlowTaskController implements FlowTaskFeign {
.startedBy(userSid)
.orderByProcessInstanceStartTime()
.desc();
List<HistoricProcessInstance> historicProcessInstances =query
List<HistoricProcessInstance> historicProcessInstances = query
.listPage(currentPage, 10);
page.setTotal(query.count());
List<FlowTaskDto> flowList = new ArrayList<>();
@ -182,10 +177,7 @@ public class FlowTaskController implements FlowTaskFeign {
@Override
public ResultBean businessMyprocess(String userSid, PagerQuery<BusinessTaskQuery> businessTaskQuery) {
int size = Integer.valueOf(businessTaskQuery.getSize() + "");
int current = Integer.valueOf(businessTaskQuery.getCurrent() + "");
List<BusinessTaskParam> fields = businessTaskQuery.getParams().getFields();
return flowTaskService.businessMyprocess(userSid, fields, current, size);
return flowTaskService.businessMyprocessNew(userSid, businessTaskQuery);
}
@Override
@ -218,6 +210,7 @@ public class FlowTaskController implements FlowTaskFeign {
public ResultBean<List<LatestTaskVo>> taskReject(FlowTaskVo flowTaskVo) {
return flowTaskService.taskReject(flowTaskVo);
}
@Override
public ResultBean<List<LatestTaskVo>> revokeProcess(@RequestBody FlowTaskVo flowTaskVo) {
return flowTaskService.revokeProcess(flowTaskVo);
@ -230,17 +223,19 @@ public class FlowTaskController implements FlowTaskFeign {
@Override
public ResultBean flowRecord(String procInsId, String deployId) {
return flowTaskService.flowRecord(procInsId,deployId);
return flowTaskService.flowRecord(procInsId, deployId);
}
@Override
public ResultBean businessFlowRecord(String procInsId, String deployId) {
return flowTaskService.businessFlowRecord(procInsId,deployId);
return flowTaskService.businessFlowRecord(procInsId, deployId);
}
@Override
public ResultBean deleteProcess(String procInsId) {
flowTaskService.deleteProcess(procInsId,"删除");
return ResultBean.fireSuccess();
return flowTaskService.deleteProcessNew(procInsId);
}
@Override
public ResultBean getNextTasks(String taskId) {
return flowTaskService.getNextTasks(taskId);
@ -248,43 +243,42 @@ public class FlowTaskController implements FlowTaskFeign {
@Override
public ResultBean<List<LatestTaskVo>> getLatestTasks(String procId) {
List<LatestTaskVo> latestTasks = flowTaskService.getLatestTasks(procId);
return new ResultBean<List<LatestTaskVo>>().success().setData(latestTasks);
return flowTaskService.getLatestTasksNew(procId);
}
@Override
public ResultBean<List<FlowElement>> getProcessCirculationNodes(String procId,
String modelId,
String k,
String v,String outcome) {
Map<String,Object> map=new HashMap<>();
map.put(k,v);
map.put("outcome",outcome);
String v, String outcome) {
Map<String, Object> map = new HashMap<>();
map.put(k, v);
map.put("outcome", outcome);
List<FlowElement> flowElements = processService.calApprovePath(procId, modelId, map);
List<Map<String,String>> list=new ArrayList<>();
List<Map<String, String>> list = new ArrayList<>();
List<FlowElement> collect = flowElements.stream().filter(item -> item.getId().length() > 0).collect(Collectors.toList());
for (int i=0;i<collect.size();i++){
if (collect.get(i).getId().equals(modelId)){
for (int i = 0; i < collect.size(); i++) {
if (collect.get(i).getId().equals(modelId)) {
FlowElement item = collect.get(i + 1);
log.info("flowElement:{}",item);
log.info("nodeName:{}",item.getName());
log.info("nodeId:{}",item.getId());
log.info("flowElement:{}", item);
log.info("nodeName:{}", item.getName());
log.info("nodeId:{}", item.getId());
String s = JSON.toJSONString(item);
JSONObject jsonObject = JSONObject.parseObject(s);
log.info("item:{}",jsonObject );
log.info("item:{}", jsonObject);
Object candidateGroups = jsonObject.get("candidateGroups");
JSONArray candidateGroups_arr=new JSONArray();
if (candidateGroups!=null){
JSONArray candidateGroups_arr = new JSONArray();
if (candidateGroups != null) {
candidateGroups_arr = JSONArray.parseArray(candidateGroups.toString());
}
if(candidateGroups_arr.size()>0){
log.info("candidateGroups_sid:{}",candidateGroups_arr.get(0));
if (candidateGroups_arr.size() > 0) {
log.info("candidateGroups_sid:{}", candidateGroups_arr.get(0));
}
log.info("candidateGroups:{}",candidateGroups_arr);
log.info("candidateGroups:{}", candidateGroups_arr);
}
}
ResultBean<List<FlowElement>> rb=new ResultBean<List<FlowElement>>();
ResultBean<List<FlowElement>> rb = new ResultBean<List<FlowElement>>();
return rb.setData(flowElements);
}
}

260
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java

@ -14,6 +14,7 @@ import com.yxt.anrui.flowable.biz.sysprourl.SysProUrlService;
import com.yxt.anrui.flowable.common.FlowComment;
import com.yxt.anrui.flowable.exception.CustomException;
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.anrui.flowable.utils.FlowableUtils;
@ -27,6 +28,7 @@ import com.yxt.common.base.config.component.FileUploadComponent;
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -92,6 +94,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
private SysProUrlService sysProUrlService;
@Resource
private AppSubsetVersionFeign appSubsetVersionFeign;
/**
* 流程历史流转记录
*
@ -164,6 +167,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
}
return ResultBean.fireSuccess().setData(map);
}
/**
* 流程历史流转记录
*
@ -191,7 +195,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
SysUserVo data = sysUserVoResultBean.getData();
// flowTask.setAssigneeId(data.getSid());
flowTask.setAssigneeName(data.getName());
flowTask.setAssigneeHeadImage(fileUploadComponent.getUrlPrefix()+data.getHeadImage());
flowTask.setAssigneeHeadImage(fileUploadComponent.getUrlPrefix() + data.getHeadImage());
//flowTask.setDeptName(sysUser.getDept().getDeptName());
}
// 展示审批人员
@ -230,6 +234,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
}
return ResultBean.fireSuccess().setData(map);
}
/**
* 获取流程执行过程
*
@ -302,9 +307,10 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
flowList.add(flowTask);
}
page.setRecords(flowList);
ResultBean<Page<FlowTaskDto>> rb=new ResultBean<Page<FlowTaskDto>>().fireFail();
ResultBean<Page<FlowTaskDto>> rb = new ResultBean<Page<FlowTaskDto>>().fireFail();
return rb.setData(page);
}
/**
* 代办任务列表
*
@ -323,7 +329,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
// 流程参数
Map<String, Object> paramMap = new HashMap<>();
// 挂载表单参数
for(BusinessTaskParam btq:params){
for (BusinessTaskParam btq : params) {
paramMap.put(btq.getField(), btq.getValue());
// if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.EQUAL)){
// taskQuery.processVariableValueEquals(btq.getField(),btq.getValue());
@ -336,15 +342,15 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
// taskQuery.processDefinitionId(btq.getValue());
// }
// }
if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.NONE)){
if("orgSid".equals(btq.getField())){
if (btq.getSqlOperationSymbol().equals(SQLOperationSymbol.NONE)) {
if ("orgSid".equals(btq.getField())) {
String value = btq.getValue();
String[] split = value.split(",");
for(int i=0;i<split.length;i++){
if(i!=0){
taskQuery.or().processVariableValueLike("orgSid",split[i]+"%");
}else{
taskQuery.processVariableValueLike("orgSid",split[0]+"%");
for (int i = 0; i < split.length; i++) {
if (i != 0) {
taskQuery.or().processVariableValueLike("orgSid", split[i] + "%");
} else {
taskQuery.processVariableValueLike("orgSid", split[0] + "%");
}
}
}
@ -373,7 +379,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
taskQuery.processDefinitionNameLike("%" + paramMap.get("proDefName") + "%");
}
page.setTotal(taskQuery.count());
int p=(pageNum-1)*pageSize;
int p = (pageNum - 1) * pageSize;
List<Task> taskList = taskQuery.listPage(p, pageSize);
List<FlowTaskDto> flowList = new ArrayList<>();
for (Task task : taskList) {
@ -421,12 +427,13 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
flowList.add(flowTask);
}
page.setRecords(flowList);
ResultBean<Page<FlowTaskDto>> rb=new ResultBean<Page<FlowTaskDto>>();
return rb .success().setData(page);
ResultBean<Page<FlowTaskDto>> rb = new ResultBean<Page<FlowTaskDto>>();
return rb.success().setData(page);
}
/**
* 业务系统查询待办任务列表数量
*
* @param userSid
* @return
*/
@ -437,6 +444,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
/**
* 查询app或pc需要的参数 --( 废弃)
*
* @param task
* @return
*/
@ -588,9 +596,10 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
// Map<String, Object> result = new HashMap<>();
// result.put("result",page);
// result.put("finished",true);
ResultBean<Page<FlowTaskDto>> rb=new ResultBean<Page<FlowTaskDto>>().fireFail();
ResultBean<Page<FlowTaskDto>> rb = new ResultBean<Page<FlowTaskDto>>().fireFail();
return rb.setData(page);
}
/**
* 已办任务列表
*
@ -598,24 +607,24 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
* @param pageSize 每页条数
* @return
*/
public ResultBean<Page<FlowTaskDto>> businessFinishedList(String userSid, List<BusinessTaskParam> params,Integer pageNum, Integer pageSize) {
public ResultBean<Page<FlowTaskDto>> businessFinishedList(String userSid, List<BusinessTaskParam> params, Integer pageNum, Integer pageSize) {
Page<FlowTaskDto> page = new Page<>();
Map<String, Object> paraMap = new HashMap<>();
List< Map<String,Object>> ll=new ArrayList<>();
for(BusinessTaskParam btq:params){
List<Map<String, Object>> ll = new ArrayList<>();
for (BusinessTaskParam btq : params) {
paraMap.put(btq.getField(), btq.getValue());
Map<String,Object> mapss=new HashMap<>();
if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.EQUAL)){
mapss.put("symbol","=");
mapss.put("value",btq.getValue());
mapss.put("filed",btq.getField());
Map<String, Object> mapss = new HashMap<>();
if (btq.getSqlOperationSymbol().equals(SQLOperationSymbol.EQUAL)) {
mapss.put("symbol", "=");
mapss.put("value", btq.getValue());
mapss.put("filed", btq.getField());
}
if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.LIKE)){
mapss.put("symbol","like");
mapss.put("value","%"+btq.getValue()+"%");
mapss.put("filed",btq.getField());
if (btq.getSqlOperationSymbol().equals(SQLOperationSymbol.LIKE)) {
mapss.put("symbol", "like");
mapss.put("value", "%" + btq.getValue() + "%");
mapss.put("filed", btq.getField());
}
/* if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.NONE)){
if("processDefinitionId".equals(btq.getField())){
@ -627,13 +636,13 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
paraMap.put("userSid", userSid);
paraMap.put("list", ll);
paraMap.put("page", (pageNum-1)*pageSize);
paraMap.put("page", (pageNum - 1) * pageSize);
paraMap.put("size", pageSize);
// List<Map<String, Object>> maps = baseMapper.finishedList(userSid, ll ,(pageNum-1)*pageSize,pageSize);
List<Map<String, Object>> maps = baseMapper.finishedList1(paraMap);
int count = baseMapper.finishedListCount(paraMap);
List<FlowTaskDto> hisTaskList=new ArrayList();
List<FlowTaskDto> hisTaskList = new ArrayList();
for (Map<String, Object> histTask : maps) {
FlowTaskDto flowTask = new FlowTaskDto();
// 当前流程信息
@ -675,14 +684,14 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().includeProcessVariables().taskId(flowTask.getTaskId()).singleResult();
flowTask.setProcessVariables(historicTaskInstance.getProcessVariables());
Object end_act_id = histTask.get("end_act_id_");
if(end_act_id!=null){
flowTask.setEndActId((String)end_act_id);
if (end_act_id != null) {
flowTask.setEndActId((String) end_act_id);
}
Object end_time = histTask.get("end_time");
if(end_time!=null){
if (end_time != null) {
Timestamp end_time_t = (Timestamp) end_time;
long end_time_t_l = end_time_t.getTime();
flowTask.setEndTime( new Date(end_time_t_l));
flowTask.setEndTime(new Date(end_time_t_l));
}
flowTask.setProcessVariables(historicTaskInstance.getProcessVariables());
@ -695,9 +704,10 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
}
page.setTotal(count);
page.setRecords(hisTaskList);
ResultBean<Page<FlowTaskDto>> rb=new ResultBean<Page<FlowTaskDto>>();
ResultBean<Page<FlowTaskDto>> rb = new ResultBean<Page<FlowTaskDto>>();
return rb.success().setData(page);
}
/**
* 完成任务
*
@ -706,7 +716,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
@Transactional(rollbackFor = Exception.class)
public ResultBean complete(FlowTaskVo taskVo) {
Task task = taskService.createTaskQuery().taskId(taskVo.getTaskId()).singleResult();
if (Objects.isNull(task)){
if (Objects.isNull(task)) {
return ResultBean.fireFail().setMsg("任务不存在");
}
if (DelegationState.PENDING.equals(task.getDelegationState())) {
@ -720,6 +730,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
}
return ResultBean.fireSuccess();
}
/**
* 完成任务
*
@ -729,60 +740,60 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
public ResultBean<FlowTask> businessComplete(BusinessVariables dto) {
ResultBean<FlowTask> rb = new ResultBean<>();
Map<String, Object> formVariables = dto.getFormVariables();
formVariables.put("handleUrl",dto.getHandleUrl());
formVariables.put("detailUrl",dto.getDetailUrl());
formVariables.put("handleUrl", dto.getHandleUrl());
formVariables.put("detailUrl", dto.getDetailUrl());
Object taskId_obj = formVariables.get("taskId");
String taskId=null;
if(taskId_obj==null){
String taskId = null;
if (taskId_obj == null) {
return rb.fail().setMsg("taskId 不能为空!").setData(new FlowTask());
}else{
taskId=(String) taskId_obj;
if(StringUtils.isBlank(taskId)){
} else {
taskId = (String) taskId_obj;
if (StringUtils.isBlank(taskId)) {
return rb.fail().setMsg("taskId 不能为空!").setData(new FlowTask());
}
}
Object comment_obj = formVariables.get("comment");
String comment=null;
if(comment_obj==null){
String comment = null;
if (comment_obj == null) {
return rb.fail().setMsg("comment 不能为空!").setData(new FlowTask());
}else{
comment=(String) comment_obj;
if(StringUtils.isBlank(comment)){
} else {
comment = (String) comment_obj;
if (StringUtils.isBlank(comment)) {
return rb.fail().setMsg("comment 不能为空!").setData(new FlowTask());
}
}
Object instanceId_obj = formVariables.get("instanceId");
String instanceId=null;
if(instanceId_obj==null){
String instanceId = null;
if (instanceId_obj == null) {
return rb.fail().setMsg("instanceId 不能为空!").setData(new FlowTask());
}else{
instanceId=(String) instanceId_obj;
if(StringUtils.isBlank(instanceId)){
} else {
instanceId = (String) instanceId_obj;
if (StringUtils.isBlank(instanceId)) {
return rb.fail().setMsg("instanceId 不能为空!").setData(new FlowTask());
}
}
Object userSid_obj = formVariables.get("userSid");
String userSid=null;
if(userSid_obj==null){
String userSid = null;
if (userSid_obj == null) {
return rb.fail().setMsg("userSid 不能为空!").setData(new FlowTask());
}else{
userSid=(String) userSid_obj;
if(StringUtils.isBlank(userSid)){
} else {
userSid = (String) userSid_obj;
if (StringUtils.isBlank(userSid)) {
return rb.fail().setMsg("userSid 不能为空!").setData(new FlowTask());
}
}
Object businessSid_obj = formVariables.get("businessSid");
String businessSid=null;
if(businessSid_obj==null){
String businessSid = null;
if (businessSid_obj == null) {
return rb.fail().setMsg("业务sid 不能为空!").setData(new FlowTask());
}else{
businessSid=(String) businessSid_obj;
if(StringUtils.isBlank(businessSid)){
} else {
businessSid = (String) businessSid_obj;
if (StringUtils.isBlank(businessSid)) {
return rb.fail().setMsg("业务sid 不能为空!").setData(new FlowTask());
}
}
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (Objects.isNull(task)){
if (Objects.isNull(task)) {
return rb.fail().setMsg("任务不存在").setData(new FlowTask());
}
if (DelegationState.PENDING.equals(task.getDelegationState())) {
@ -796,7 +807,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
taskService.setAssignee(taskId, userSid);
taskService.complete(taskId, formVariables);
}
FlowTask flowTask=new FlowTask();
FlowTask flowTask = new FlowTask();
flowTask.setTaskId(task.getId());
flowTask.setTaskName(task.getName());
flowTask.setProcInsId(task.getProcessInstanceId());
@ -804,6 +815,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
rb.success().setData(flowTask);
return rb;
}
public ResultBean findReturnTaskList(FlowTaskVo flowTaskVo) {
// 当前任务 task
Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult();
@ -838,6 +850,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
}
return ResultBean.fireSuccess().setData(userTaskList);
}
/**
* 退回任务
*
@ -1053,21 +1066,28 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
return new ResultBean<List<LatestTaskVo>>().success().setData(latestTaskList);
}
public ResultBean businessMyprocessNew(String userSid, PagerQuery<BusinessTaskQuery> businessTaskQuery) {
int size = Integer.valueOf(businessTaskQuery.getSize() + "");
int current = Integer.valueOf(businessTaskQuery.getCurrent() + "");
List<BusinessTaskParam> fields = businessTaskQuery.getParams().getFields();
return businessMyprocess(userSid, fields, current, size);
}
public ResultBean businessMyprocess(String userSid, List<BusinessTaskParam> params, int current, int size) {
Page<FlowTaskDto> page = new Page<>();
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
for(BusinessTaskParam btq:params){
if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.EQUAL)){
historicProcessInstanceQuery.variableValueEquals(btq.getField(),btq.getValue());
for (BusinessTaskParam btq : params) {
if (btq.getSqlOperationSymbol().equals(SQLOperationSymbol.EQUAL)) {
historicProcessInstanceQuery.variableValueEquals(btq.getField(), btq.getValue());
}
if(btq.getSqlOperationSymbol().equals(SQLOperationSymbol.LIKE)){
historicProcessInstanceQuery.variableValueLike(btq.getField(),"%"+btq.getValue()+"%");
if (btq.getSqlOperationSymbol().equals(SQLOperationSymbol.LIKE)) {
historicProcessInstanceQuery.variableValueLike(btq.getField(), "%" + btq.getValue() + "%");
}
}
historicProcessInstanceQuery.startedBy(userSid).notDeleted()
.orderByProcessInstanceStartTime()
.desc();
List<HistoricProcessInstance> historicProcessInstances =historicProcessInstanceQuery .listPage((current - 1) * size, size);
List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.listPage((current - 1) * size, size);
long count = historicProcessInstanceQuery.count();
page.setTotal(count);
List<FlowTaskDto> flowList = new ArrayList<>();
@ -1108,9 +1128,10 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
page.setRecords(flowList);
return ResultBean.fireSuccess().setData(page);
}
private String getTaskId(String currentActivityId,String processInstanceId,String processDefinitionId){
private String getTaskId(String currentActivityId, String processInstanceId, String processDefinitionId) {
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
FlowNode flowNode = (FlowNode)bpmnModel.getFlowElement(currentActivityId);
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(currentActivityId);
SequenceFlow sequenceFlow = flowNode.getIncomingFlows().get(0);
// 获取上一个节点的activityId
String sourceRef = sequenceFlow.getSourceRef();
@ -1118,8 +1139,8 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
.processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().desc().list().get(0);//singleResult();
String activityType = historicActivityInstance.getActivityType();
String historicActivityInstanceActivityId = historicActivityInstance.getActivityId();
if(!"userTask".equals(activityType)){
return getTaskId(historicActivityInstanceActivityId,processInstanceId,processDefinitionId);
if (!"userTask".equals(activityType)) {
return getTaskId(historicActivityInstanceActivityId, processInstanceId, processDefinitionId);
}
return historicActivityInstance.getTaskId();
}
@ -1128,17 +1149,17 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
public ResultBean<List<LatestTaskVo>> revokeProcess(FlowTaskVo flowTaskVo) {
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().taskId(flowTaskVo.getTaskId()).singleResult();
Execution execution = runtimeService.createExecutionQuery().executionId(historicTaskInstance.getExecutionId()).singleResult();
DelegateExecution delegateExecution=(DelegateExecution)execution;
DelegateExecution delegateExecution = (DelegateExecution) execution;
// 获取当前节点的activityId,即xml中每个标签的ID
String currentActivityId = delegateExecution.getCurrentActivityId();
// List<Task> list1 = taskService.createTaskQuery().processInstanceId(historicTaskInstance.getProcessInstanceId()).list();
// taskService.addComment(currentTask.getId(), execution.getProcessInstanceId(), body.get("msg").toString());
// FlowNode flowNode2 = (FlowNode)bpmnModel.getFlowElement(sourceRef);
String taskId = getTaskId(currentActivityId, historicTaskInstance.getProcessInstanceId(),historicTaskInstance.getProcessDefinitionId());
String taskId = getTaskId(currentActivityId, historicTaskInstance.getProcessInstanceId(), historicTaskInstance.getProcessDefinitionId());
HistoricTaskInstance historicTaskInstance1 = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
String assignee = historicTaskInstance1.getAssignee();
String userSid = flowTaskVo.getUserSid();
if(!assignee.equals(userSid)){
if (!assignee.equals(userSid)) {
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("您不是上一环节处理人,不能进行撤回操作!").setData(new ArrayList<>());
}
// 流程回退到上一个节点,审批人继续审批
@ -1158,12 +1179,12 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
FlowableUtils.getAllElements(process.getFlowElements(), null);
// 获取当前任务节点元素
FlowElement source = null;
if(allElements!=null){
for(FlowElement flowElement:allElements){
if (allElements != null) {
for (FlowElement flowElement : allElements) {
//类型为用户节点
if(flowElement.getId().equals(task.getTaskDefinitionKey())){
if (flowElement.getId().equals(task.getTaskDefinitionKey())) {
//获取节点信息
source=flowElement;
source = flowElement;
}
}
}
@ -1171,13 +1192,13 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
// 获取当前节点的所有父级用户任务节点
// 深度优先算法思想:延边迭代深入
List<UserTask> parentUserTaskList = FlowableUtils.iteratorFindParentUserTasks(source, null, null);
if(parentUserTaskList==null || parentUserTaskList.size()==0){
if (parentUserTaskList == null || parentUserTaskList.size() == 0) {
// throw new CustomException("当前节点为");
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("当前节点为").setData(new ArrayList<>());
}
// 如果流程已经结束,则得到结束节点
if(historyService.createHistoricProcessInstanceQuery().finished()
.processInstanceId(task.getProcessInstanceId()).count() > 0){
if (historyService.createHistoricProcessInstanceQuery().finished()
.processInstanceId(task.getProcessInstanceId()).count() > 0) {
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("当前已经结束不能撤回").setData(new ArrayList<>());
}
// 获取活动 ID 即节点 Key
@ -1284,6 +1305,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
/**
* 终止流程
*
* @param flowTaskVo
* @return
*/
@ -1308,7 +1330,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
comment = "终止";
}
taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getUserSid());
taskService.addComment(flowTaskVo.getTaskId(), processInstanceId,FlowComment.STOP.getType(), comment);
taskService.addComment(flowTaskVo.getTaskId(), processInstanceId, FlowComment.STOP.getType(), comment);
runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).changeState();
return new ResultBean().success().setMsg("终止成功").setData(SysFormLinkFlowStateEnum.BREAK.getState());
} else {
@ -1325,7 +1347,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
return list.stream().filter(f -> f instanceof EndEvent).collect(Collectors.toList());
}
public void stopProcess(String userSid,FlowTaskVo flowTaskVo) {
public void stopProcess(String userSid, FlowTaskVo flowTaskVo) {
List<Task> task = taskService.createTaskQuery().processInstanceId(flowTaskVo.getInstanceId()).list();
if (CollectionUtils.isEmpty(task)) {
throw new CustomException("流程未启动或已执行完成,取消申请失败");
@ -1353,6 +1375,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
}
}
/**
* instId 流程实例ID
* delReason 删除原因
@ -1363,35 +1386,38 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
public ResultBean getNextTasks(String taskId) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String node="next";
String processDefinitionId=task.getProcessDefinitionId();
return getNextUserTasks(processDefinitionId,task.getExecutionId(),node);
String node = "next";
String processDefinitionId = task.getProcessDefinitionId();
return getNextUserTasks(processDefinitionId, task.getExecutionId(), node);
}
private ResultBean getNextUserTasks(String processDefinitionId,String executionId,String node){
private ResultBean getNextUserTasks(String processDefinitionId, String executionId, String node) {
ExecutionEntity ee = (ExecutionEntity) runtimeService.createExecutionQuery()
.executionId(executionId).singleResult();
// 当前审批节点
String crruentActivityId = ee.getActivityId();
BpmnModel bpmnModel =repositoryService.getBpmnModel(processDefinitionId);
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(crruentActivityId);
// 输出连线
List<SequenceFlow> outFlows = flowNode.getOutgoingFlows();
Map<String,String> nodeMap=new HashMap<>();
List< Map<String,String>> lists=new ArrayList<>();
getNodes(outFlows, node,lists);
Map<String, String> nodeMap = new HashMap<>();
List<Map<String, String>> lists = new ArrayList<>();
getNodes(outFlows, node, lists);
System.out.println(JSON.toJSONString(lists));
return ResultBean.fireSuccess().setData(lists);
}
/**
* 根据流程实例的id查询最新的待办环节
*
* @param procId
* @return
*/
public List<LatestTaskVo> getLatestTasks(String procId){
public List<LatestTaskVo> getLatestTasks(String procId) {
return baseMapper.getLatestTasks(procId);
}
public void getNodes( List<SequenceFlow> outFlows,String node, List<Map<String,String>> lists){
public void getNodes(List<SequenceFlow> outFlows, String node, List<Map<String, String>> lists) {
for (SequenceFlow sequenceFlow : outFlows) {
//当前审批节点
if ("now".equals(node)) {
@ -1402,26 +1428,56 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
FlowElement targetFlow = sequenceFlow.getTargetFlowElement();
if (targetFlow instanceof UserTask) {
System.out.println("下一节点: id=" + targetFlow.getId() + ",name=" + targetFlow.getName());
Map<String,String> map=new HashMap<>();
map.put("id",targetFlow.getId());
map.put("name",targetFlow.getName());
Map<String, String> map = new HashMap<>();
map.put("id", targetFlow.getId());
map.put("name", targetFlow.getName());
map.put("assignee", ((UserTask) targetFlow).getAssignee());
lists.add(map);
}
if (targetFlow instanceof EndEvent) {// 如果下个审批节点为结束节点
System.out.println("下一节点为结束节点:id=" + targetFlow.getId() + ",name=" + targetFlow.getName());
Map<String,String> map=new HashMap<>();
map.put("id",targetFlow.getId());
map.put("name",targetFlow.getName());
Map<String, String> map = new HashMap<>();
map.put("id", targetFlow.getId());
map.put("name", targetFlow.getName());
map.put("assignee", ((UserTask) targetFlow).getAssignee());
lists.add(map);
}
if (targetFlow instanceof Gateway) {// 如果下个审批节点为结束节点
List<SequenceFlow> outgoingFlows = ((Gateway) targetFlow).getOutgoingFlows();
getNodes(outgoingFlows,node,lists);
getNodes(outgoingFlows, node, lists);
System.out.println("下一节点为结束节点:id=" + targetFlow.getId() + ",name=" + targetFlow.getName());
}
}
}
}
public ResultBean<List<LatestTaskVo>> getLatestTasksNew(String procId) {
List<LatestTaskVo> latestTasks = getLatestTasks(procId);
return new ResultBean<List<LatestTaskVo>>().success().setData(latestTasks);
}
public ResultBean businessTodoListNew(String userSid, PagerQuery<BusinessTaskQuery> businessTaskQuery) {
int size = Integer.valueOf(businessTaskQuery.getSize() + "");
int current = Integer.valueOf(businessTaskQuery.getCurrent() + "");
List<BusinessTaskParam> fields = businessTaskQuery.getParams().getFields();
ResultBean<Page<FlowTaskDto>> resultBean = businessTodoList(userSid, fields, current, size);
return resultBean;
}
public ResultBean businessDoneListNew(String userSid, PagerQuery<BusinessTaskQuery> taskQueryPagerQuery) {
int size = Integer.valueOf(taskQueryPagerQuery.getSize() + "");
int current = Integer.valueOf(taskQueryPagerQuery.getCurrent() + "");
List<BusinessTaskParam> fields = taskQueryPagerQuery.getParams().getFields();
return businessFinishedList(userSid, fields, current, size);
}
public ResultBean stopProcessNew(String userSid, FlowTaskVo flowTaskVo) {
stopProcess(userSid, flowTaskVo);
return ResultBean.fireSuccess();
}
public ResultBean deleteProcessNew(String procInsId) {
deleteProcess(procInsId, "删除");
return ResultBean.fireSuccess();
}
}

5
anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmvehiclereturn/ScmVehicleReturnFeign.java

@ -30,4 +30,9 @@ public interface ScmVehicleReturnFeign {
@PostMapping("/saveOrUpdate")
@ResponseBody
ResultBean saveOrUpdate(@RequestBody ScmVehicleReturnDto scmVehicleReturnDto);
@ApiOperation("提交")
@PostMapping("/submitVehicleReturn")
@ResponseBody
ResultBean submitVehicleReturn(@RequestBody ScmVehicleReturnDto scmVehicleReturnDto);
}

10
anrui-scm/anrui-scm-api/src/main/java/com/yxt/anrui/scm/api/scmvehiclereturn/ScmVehicleReturnVo.java

@ -14,8 +14,8 @@ public class ScmVehicleReturnVo implements Vo {
private static final long serialVersionUID = 115347131385810982L;
@ApiModelProperty(value = "sid")
private String sid;
@ApiModelProperty(value = "状态")
private String state;
@ApiModelProperty(value = "节点状态")
private String nodeState;
@ApiModelProperty(value = "申请编号")
private String applicationCode;
@ApiModelProperty(value = "申请人")
@ -25,4 +25,10 @@ public class ScmVehicleReturnVo implements Vo {
@ApiModelProperty(value = "退库原因")
private String reason;
@ApiModelProperty(value = "台数")
private Integer num;
@ApiModelProperty(value = "流程状态")
private Integer flowState;
}

5
anrui-scm/anrui-scm-biz/pom.xml

@ -60,6 +60,11 @@
<version>0.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<artifactId>anrui-flowable-api</artifactId>
<groupId>com.yxt.anrui</groupId>
<version>0.0.1</version>
</dependency>
</dependencies>
<build>

2
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/AnruiScmApplication.java

@ -48,7 +48,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
"com.yxt.common.base.config",
"com.yxt.anrui.scm"
})
@EnableFeignClients(basePackages = {"com.yxt.anrui.buscenter", "com.yxt.anrui.portal"})
@EnableFeignClients(basePackages = {"com.yxt.anrui.buscenter", "com.yxt.anrui.portal","com.yxt.anrui.flowable"})
public class AnruiScmApplication {
public static void main(String[] args) {

18
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnMapper.java

@ -1,8 +1,13 @@
package com.yxt.anrui.scm.biz.scmvehiclereturn;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturn;
import com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturnVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* @Author dimengzhe
@ -11,4 +16,17 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface ScmVehicleReturnMapper extends BaseMapper<ScmVehicleReturn> {
/**
* 分页列表
*
* @param page 分页
* @param qw 查询条件
* @return
*/
IPage<ScmVehicleReturnVo> pagerList(IPage<ScmVehicleReturnVo> page, @Param(Constants.WRAPPER) QueryWrapper<ScmVehicleReturnVo> qw);
void modifyFlowState(@Param("businessSid") String businessSid, @Param("procDefId") String procDefId, @Param("nodeState") String nodeState,
@Param("procInstSid") String procInstSid, @Param("nodeSid") String nodeSid);
}

18
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnMapper.xml

@ -1,4 +1,22 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yxt.anrui.scm.biz.scmvehiclereturn.ScmVehicleReturnMapper">
<select id="pagerList" resultType="com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturnVo">
select sr.sid,
sr.applicationCode,
sr.applicationName,
sr.modifyTime,
sr.reason,
(select count(*) from scm_vehicle_return_details sd where sd.vehicleOutSid = sr.sid) as num
from scm_vehicle_return sr
</select>
<update id="modifyFlowState">
update scm_vehicle_return
set procDefId=#{procDefId},
nodeState=#{nodeState},
procInstSid=#{procInstSid},
nodeSid=#{nodeSid}
where sid = #{businessSid}
</update>
</mapper>

9
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnRest.java

@ -21,11 +21,18 @@ public class ScmVehicleReturnRest implements ScmVehicleReturnFeign {
@Override
public ResultBean<PagerVo<ScmVehicleReturnVo>> listPage(PagerQuery<ScmVehicleReturnQuery> pagerQuery) {
return null;
ResultBean<PagerVo<ScmVehicleReturnVo>> rb = ResultBean.fireFail();
PagerVo<ScmVehicleReturnVo> pv = scmVehicleReturnService.listPage(pagerQuery);
return rb.success().setData(pv);
}
@Override
public ResultBean saveOrUpdate(ScmVehicleReturnDto scmVehicleReturnDto) {
return scmVehicleReturnService.saveOrUpdateVehicleReturn(scmVehicleReturnDto);
}
@Override
public ResultBean submitVehicleReturn(ScmVehicleReturnDto scmVehicleReturnDto) {
return scmVehicleReturnService.submitVehicleReturn(scmVehicleReturnDto);
}
}

118
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehiclereturn/ScmVehicleReturnService.java

@ -1,18 +1,33 @@
package com.yxt.anrui.scm.biz.scmvehiclereturn;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFeign;
import com.yxt.anrui.flowable.api.sysformlink.SysFormStateVo;
import com.yxt.anrui.flowable.api.utils.procDefEnum;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturn;
import com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturnDto;
import com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturnQuery;
import com.yxt.anrui.scm.api.scmvehiclereturn.ScmVehicleReturnVo;
import com.yxt.anrui.scm.api.scmvehiclereturndetails.ScmVehicleReturnDetails;
import com.yxt.anrui.scm.biz.scmvehiclereturndetails.ScmVehicleReturnDetailsService;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.beans.BeanUtils;
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;
/**
* @Author dimengzhe
@ -24,6 +39,14 @@ public class ScmVehicleReturnService extends MybatisBaseService<ScmVehicleReturn
@Autowired
private ScmVehicleReturnDetailsService scmVehicleReturnDetailsService;
@Autowired
private SysFormLinkFeign sysFormLinkFeign;
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private FlowableFeign flowableFeign;
/**
* 采购退库新增编辑
@ -78,4 +101,99 @@ public class ScmVehicleReturnService extends MybatisBaseService<ScmVehicleReturn
}
return false;
}
/**
* 分页列表
*
* @param pagerQuery 查询条件
* @return
*/
public PagerVo<ScmVehicleReturnVo> listPage(PagerQuery<ScmVehicleReturnQuery> pagerQuery) {
IPage<ScmVehicleReturnVo> page = pagerList(pagerQuery);
PagerVo<ScmVehicleReturnVo> pv = new PagerVo<>();
PagerVo<ScmVehicleReturnVo> pv1 = PagerUtil.pageToVo(page, pv);
List<ScmVehicleReturnVo> voList = pv1.getRecords();
if (voList.size() > 0) {
for (int i = 0; i < voList.size(); i++) {
ResultBean<SysFormStateVo> resultBean = sysFormLinkFeign.selectStateByBusinessSid(voList.get(i).getSid());
if (resultBean.getSuccess() && resultBean.getData() != null) {
SysFormStateVo formState = resultBean.getData();
voList.get(i).setNodeState(formState.getNodeState());
voList.get(i).setFlowState(formState.getFlowState());
} else {
voList.get(i).setFlowState(0);
}
}
}
return pv1;
}
private IPage<ScmVehicleReturnVo> pagerList(PagerQuery<ScmVehicleReturnQuery> pagerQuery) {
IPage<ScmVehicleReturnVo> page = PagerUtil.queryToPage(pagerQuery);
QueryWrapper<ScmVehicleReturnVo> qw = buildQueryWrapper(pagerQuery.getParams());
return baseMapper.pagerList(page, qw);
}
private QueryWrapper<ScmVehicleReturnVo> buildQueryWrapper(ScmVehicleReturnQuery params) {
QueryWrapper<ScmVehicleReturnVo> qw = new QueryWrapper<>();
if (params != null) {
//申请日期
//状态
}
return qw;
}
public ResultBean submitVehicleReturn(ScmVehicleReturnDto scmVehicleReturnDto) {
ResultBean rb = ResultBean.fireFail();
String orgSid = checkUserOrg(scmVehicleReturnDto.getUserSid());
ResultBean resultBean = saveOrUpdateVehicleReturn(scmVehicleReturnDto);
if (resultBean.getSuccess()) {
String businessSid = resultBean.getData().toString();
Map<String, Object> variables = new HashMap<>();
variables.put("businessSid", businessSid);
variables.put("isLoan", true);
variables.put("orgSid", orgSid);//部门sid
ResultBean businessResultBean = flowableFeign.businessStart(procDefEnum.ORDERDEPOSITAPPROVE.getProDefId(), scmVehicleReturnDto.getUserSid(), variables);
if (resultBean.getSuccess() && resultBean.getData() != null) {
Map<String, String> map = (Map<String, String>) resultBean.getData();
//更新退库业务表中的流程状态
modifyFlowState(businessSid,
procDefEnum.ORDERDEPOSITAPPROVE.getProDefId(),//procDefId
map.get("nodeState"),//state
map.get("procInsId"),//procInstSid
map.get("taskDefKey")//nodeSid
);
}
} else {
return rb.setMsg("失败");
}
return resultBean;
}
/**
* 查询用户是否设置了部门
*
* @param userSid 用户sid
* @return
*/
private String checkUserOrg(String userSid) {
String orgSid = "";
String staffSid = sysUserFeign.selectBySid(userSid).getData().getStaffSid();
ResultBean<String> resultBean = sysStaffOrgFeign.getSysStaffOrgSidListByStaffSid(staffSid);
if (resultBean.getSuccess()) {
orgSid = resultBean.getData();
}
return orgSid;
}
private void modifyFlowState(String businessSid, String proDefId, String nodeState,
String procInsId,
String taskDefKey) {
baseMapper.modifyFlowState(businessSid,
proDefId,//procDefId
nodeState,//state
procInsId,//procInstSid
taskDefKey);
}
}

Loading…
Cancel
Save