..
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package com.budwk.app.flow.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.flow.entity.ProcessCategory;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/flow/category")
|
||||
@Ok("json:full")
|
||||
@Api("流程分类")
|
||||
public class FlowCategoryController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result list() {
|
||||
List<ProcessCategory> list = dao.query(ProcessCategory.class, Cnd.NEW());
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,16 +4,20 @@ import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.vo.LabelValueVO;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.engine.event.ProcessEvent;
|
||||
import com.budwk.app.flow.engine.event.ProcessPublisher;
|
||||
import com.budwk.app.flow.engine.model.ProcessModel;
|
||||
import com.budwk.app.flow.engine.model.TaskModel;
|
||||
import com.budwk.app.flow.entity.Candidate;
|
||||
import com.budwk.app.flow.entity.ProcessDefine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.vo.ProcessInstanceVO;
|
||||
@@ -66,17 +70,9 @@ public class FlowCommonController {
|
||||
todoTaskVos.add(taskVO);
|
||||
}
|
||||
|
||||
// List<ProcessTaskVO> doneTaskVos = new ArrayList<>();
|
||||
// List<ProcessTask> doneTaskList = flowEngine.processTaskService().getDoneTaskList(instanceId, null);
|
||||
// for (ProcessTask doneTask : doneTaskList) {
|
||||
// ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId());
|
||||
// doneTaskVos.add(taskVO);
|
||||
// }
|
||||
|
||||
HashMap<String, Object> result = new HashMap<>();
|
||||
result.put("processInstance", instanceVO);
|
||||
result.put("todoTasks", todoTaskVos);
|
||||
// result.put("doneTasks", doneTaskVos);
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
@@ -105,12 +101,20 @@ public class FlowCommonController {
|
||||
@At("/defineInfo")
|
||||
@SaCheckLogin
|
||||
@ApiOperation("流程定义详情")
|
||||
public Result defineInfo(String defineKey) {
|
||||
// 通过defineKey获取最新的流程定义
|
||||
ProcessDefine define = flowEngine.processDefineService().getLastByName(defineKey);
|
||||
if (define == null) {
|
||||
return Result.error("未找到指定的流程定义");
|
||||
public Result defineInfo(String defineKey, Long instanceId) {
|
||||
ProcessDefine define = null;
|
||||
if (StrUtil.isNotBlank(defineKey)) {
|
||||
define = flowEngine.processDefineService().getLastByName(defineKey);
|
||||
}
|
||||
if (instanceId != null) {
|
||||
ProcessInstance instance = dao.fetch(ProcessInstance.class, instanceId);
|
||||
define = flowEngine.processDefineService().getById(instanceId);
|
||||
}
|
||||
|
||||
if (define == null) {
|
||||
return Result.error("没有流程定义");
|
||||
}
|
||||
|
||||
return Result.success(define);
|
||||
}
|
||||
|
||||
@@ -170,9 +174,34 @@ public class FlowCommonController {
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("撤回流程实例")
|
||||
public Result withdrawInstance(@Param("instanceId") Long instanceId) {
|
||||
flowEngine.processInstanceService().withdraw(instanceId, SecurityUtil.getUserId());
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("重新发起流程实例")
|
||||
public Result reissueInstance(@Param("instanceId") Long instanceId, @Param("bizData") String bizData) {
|
||||
// // 把已撤销流程修改为进行中
|
||||
// dao.update(ProcessInstance.class, Chain.make("state", ProcessInstanceStateEnum.DOING.getCode()), Cnd.where(ProcessInstance::getId, "=", instanceId));
|
||||
// Dict args = Dict.create();
|
||||
// args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
// args.set(FlowConst.FORM_DATA, bizData);
|
||||
//
|
||||
// // 查找第一个提交任务节点
|
||||
// ProcessInstance instance = dao.fetch(ProcessInstance.class, instanceId);
|
||||
// ProcessModel processModel = flowEngine.processDefineService().getProcessModel(instance.getProcessDefineId());
|
||||
//
|
||||
// args.set(FlowConst.PROCESS_INSTANCE_ID_KEY, instanceId);
|
||||
// args.set(FlowConst.INITIATOR,instance.getCreatedBy());
|
||||
//
|
||||
// // 构建执行参数对象
|
||||
// Execution execution = new Execution();
|
||||
// execution.setProcessModel(processModel);
|
||||
// execution.setProcessInstance(instance);
|
||||
// execution.setProcessInstanceId(instance.getId());
|
||||
// execution.setEngine(flowEngine);
|
||||
// execution.setArgs(args);
|
||||
// execution.setOperator(SecurityUtil.getUserId());
|
||||
// // 拿到开始节点模型,调用其execute方法
|
||||
// processModel.getStart().execute(execution);
|
||||
//
|
||||
// return Result.success();
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@@ -215,6 +244,10 @@ public class FlowCommonController {
|
||||
// 会签不同意,追加不同意标识
|
||||
args.put(FlowConst.COUNTERSIGN_DISAGREE_FLAG, 1);
|
||||
flowEngine.executeProcessTask(processTaskId, operator, args);
|
||||
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.RE_APPLY.getCode())) {
|
||||
// 重新提交
|
||||
// args.put(FlowConst.FORM_DATA, args.getStr(FlowConst.FORM_DATA));
|
||||
flowEngine.executeProcessTask(processTaskId, operator, args);
|
||||
} else {
|
||||
// 默认执行
|
||||
flowEngine.executeProcessTask(processTaskId, operator, args);
|
||||
@@ -222,6 +255,32 @@ public class FlowCommonController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("撤销任务")
|
||||
public Result revokeTask(@Param("taskId") Long taskId) {
|
||||
// 1.撤销任务
|
||||
List<ProcessTask> taskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getTaskParentId, "=", taskId));
|
||||
for (ProcessTask processTask : taskList) {
|
||||
processTask.setTaskState(ProcessTaskStateEnum.WITHDRAW.getCode());
|
||||
dao.update(processTask);
|
||||
}
|
||||
|
||||
// 2.再次激活自己任务
|
||||
ProcessTask processTask = dao.fetch(ProcessTask.class, taskId);
|
||||
processTask.setTaskState(ProcessTaskStateEnum.DOING.getCode());
|
||||
dao.update(processTask);
|
||||
|
||||
|
||||
// 3.发送任务撤回事件 确保上面执行成功
|
||||
for (ProcessTask task : taskList) {
|
||||
ProcessPublisher.notify(ProcessEvent.builder().eventType(ProcessEventTypeEnum.PROCESS_TASK_REVOKE).sourceId(task.getId()).build());
|
||||
}
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At("/candidate")
|
||||
@SaCheckLogin
|
||||
@ApiOperation("获取候选用户")
|
||||
@@ -252,5 +311,13 @@ public class FlowCommonController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At("/addCandidate")
|
||||
@SaCheckLogin
|
||||
@ApiOperation("代理")
|
||||
public Result addCandidate(@Param("taskId") Long taskId, @Param("actorIds") String[] actorIds) {
|
||||
flowEngine.processTaskService().addCandidateActor(taskId, Arrays.asList(actorIds));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -122,8 +122,9 @@ public class FlowDesignController {
|
||||
jsonObject.set("category", processDesign.getCategory());
|
||||
jsonObject.set("instanceUrl", processDesign.getInstanceUrl());
|
||||
jsonObject.set("h5InstanceUrl", processDesign.getH5InstanceUrl());
|
||||
jsonObject.set("instanceViewUrl",processDesign.getInstanceViewUrl());
|
||||
jsonObject.set("h5InstanceViewUrl",processDesign.getH5InstanceViewUrl());
|
||||
jsonObject.set("instanceViewUrl", processDesign.getInstanceViewUrl());
|
||||
jsonObject.set("h5InstanceViewUrl", processDesign.getH5InstanceViewUrl());
|
||||
jsonObject.set("icon", processDesign.getIcon());
|
||||
processDesign.setContent(jsonObject);
|
||||
dao.insert(processDesign);
|
||||
return Result.success();
|
||||
@@ -139,8 +140,9 @@ public class FlowDesignController {
|
||||
jsonObject.set("category", processDesign.getCategory());
|
||||
jsonObject.set("instanceUrl", processDesign.getInstanceUrl());
|
||||
jsonObject.set("h5InstanceUrl", processDesign.getH5InstanceUrl());
|
||||
jsonObject.set("instanceViewUrl",processDesign.getInstanceViewUrl());
|
||||
jsonObject.set("h5InstanceViewUrl",processDesign.getH5InstanceViewUrl());
|
||||
jsonObject.set("instanceViewUrl", processDesign.getInstanceViewUrl());
|
||||
jsonObject.set("h5InstanceViewUrl", processDesign.getH5InstanceViewUrl());
|
||||
jsonObject.set("icon", processDesign.getIcon());
|
||||
processDesign.setContent(jsonObject);
|
||||
processDesignService.update(processDesign);
|
||||
return Result.success();
|
||||
@@ -156,8 +158,9 @@ public class FlowDesignController {
|
||||
jsonObject.set("category", processDesign.getCategory());
|
||||
jsonObject.set("instanceUrl", processDesign.getInstanceUrl());
|
||||
jsonObject.set("h5InstanceUrl", processDesign.getH5InstanceUrl());
|
||||
jsonObject.set("instanceViewUrl",processDesign.getInstanceViewUrl());
|
||||
jsonObject.set("h5InstanceViewUrl",processDesign.getH5InstanceViewUrl());
|
||||
jsonObject.set("instanceViewUrl", processDesign.getInstanceViewUrl());
|
||||
jsonObject.set("h5InstanceViewUrl", processDesign.getH5InstanceViewUrl());
|
||||
jsonObject.set("icon", processDesign.getIcon());
|
||||
processDesign.setContent(jsonObject);
|
||||
processDesignService.update(processDesign);
|
||||
return Result.success();
|
||||
|
||||
@@ -43,14 +43,16 @@ public class FlowTodoCenter {
|
||||
public Result todo(Integer pageNumber, Integer pageSize, String keyword, String categoty) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.id,
|
||||
t.id AS taskId,
|
||||
t.displayName AS taskName,
|
||||
t.taskState,
|
||||
t.formKey,
|
||||
t.createdAt,
|
||||
t.finishTime,
|
||||
t.variable,
|
||||
ins.state AS instanceState
|
||||
ins.state AS instanceState,
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||
@@ -76,12 +78,16 @@ public class FlowTodoCenter {
|
||||
public Result done(Integer pageNumber, Integer pageSize, String keyword, String categoty) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t.id,
|
||||
t.id AS taskId,
|
||||
t.displayName AS taskName,
|
||||
t.taskState,
|
||||
t.formKey,
|
||||
t.createdAt,
|
||||
t.finishTime,
|
||||
ins.state AS instanceState
|
||||
t.variable,
|
||||
ins.state AS instanceState,
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||
@@ -107,14 +113,14 @@ public class FlowTodoCenter {
|
||||
public Result started(Integer pageNumber, Integer pageSize, String keyword, String categoty) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
ins.id,
|
||||
ins.id AS instanceId,
|
||||
ins.processDefineId,
|
||||
ins.state,
|
||||
ins.businessNo,
|
||||
ins.operator,
|
||||
ins.variable,
|
||||
ins.createdAt,
|
||||
GROUP_CONCAT(t.displayName) as taskName
|
||||
GROUP_CONCAT(DISTINCT t.displayName) as taskName
|
||||
FROM
|
||||
wf_process_instance ins
|
||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id and t.taskState = 10
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.budwk.app.flow.service.ProcessDefineService;
|
||||
import com.budwk.app.flow.service.ProcessInstanceService;
|
||||
import com.budwk.app.flow.service.ProcessTaskService;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.stream.Collectors;
|
||||
@Data
|
||||
public class ProcessModel extends BaseModel {
|
||||
private String type; // 流程定义分类
|
||||
private String icon; // 流程定义图标
|
||||
private String category; // 流程定义分类
|
||||
private String instanceUrl; // 启动实例要填写的表单key
|
||||
private String h5InstanceUrl; // 启动实例要填写的手机端表单key
|
||||
|
||||
@@ -4,15 +4,17 @@ import com.budwk.app.flow.engine.model.BaseModel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* logicFlow模型
|
||||
*
|
||||
* @author mldong
|
||||
* @date 2023/4/26
|
||||
*/
|
||||
@Data
|
||||
public class LfModel extends BaseModel {
|
||||
private String type; // 流程定义分类
|
||||
private String category;
|
||||
private String expireTime;// 过期时间(常量或变量)
|
||||
private String instanceUrl; // 启动实例的url,前后端分离后,定义为路由名或或路由地址
|
||||
private String h5InstanceUrl;
|
||||
|
||||
@@ -78,6 +78,7 @@ public class ModelParser {
|
||||
processModel.setName(lfModel.getName());
|
||||
processModel.setDisplayName(lfModel.getDisplayName());
|
||||
processModel.setType(lfModel.getType());
|
||||
processModel.setCategory(lfModel.getCategory());
|
||||
processModel.setInstanceUrl(lfModel.getInstanceUrl());
|
||||
processModel.setH5InstanceUrl(lfModel.getH5InstanceUrl());
|
||||
processModel.setInstanceViewUrl(lfModel.getInstanceViewUrl());
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.budwk.app.flow.entity;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Table("wf_process_category")
|
||||
@Comment("流程分类")
|
||||
public class ProcessCategory extends BaseModel {
|
||||
|
||||
@Id
|
||||
@Comment("ID")
|
||||
private Long id;
|
||||
|
||||
@Comment("名称")
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String name;
|
||||
|
||||
@Comment("图标")
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String icon;
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.budwk.app.flow.entity;
|
||||
|
||||
import cn.hutool.extra.pinyin.PinyinUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Getter;
|
||||
@@ -72,4 +73,9 @@ public class ProcessDefine extends BaseModel {
|
||||
@Column
|
||||
private Integer version;
|
||||
|
||||
@Comment
|
||||
@Column
|
||||
@ColDefine(type = ColType.CHAR)
|
||||
private Character pinyinName;
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,9 @@ public enum ProcessEventTypeEnum{
|
||||
PROCESS_INSTANCE_END(2, "流程实例结束事件"),
|
||||
PROCESS_TASK_START(3, "流程任务开始事件"),
|
||||
PROCESS_TASK_END(4, "流程任务结束事件"),
|
||||
|
||||
PROCESS_TASK_REVOKE(5, "流程任务撤销事件"),
|
||||
|
||||
;
|
||||
private final Integer code;
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.budwk.app.flow.listenter;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.event.ProcessEvent;
|
||||
import com.budwk.app.flow.engine.event.ProcessEventListener;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
/**
|
||||
* 流程任务撤销事件监听器
|
||||
*/
|
||||
@IocBean
|
||||
public class ProcessTaskRevokeEventListener implements ProcessEventListener {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@Override
|
||||
public void onEvent(ProcessEvent event) {
|
||||
if(event.getEventType()== ProcessEventTypeEnum.PROCESS_TASK_REVOKE){
|
||||
Long taskId = event.getSourceId();
|
||||
ProcessTask task = dao.fetch(ProcessTask.class, taskId);
|
||||
|
||||
String taskDisplayName = task.getDisplayName();
|
||||
|
||||
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||
|
||||
JSONObject variable = JSONUtil.parseObj(instance.getVariable());
|
||||
String initiatorName = variable.getStr(FlowConst.INITIATOR_NAME);
|
||||
String instanceName = variable.getStr(FlowConst.PROCESS_INSTANCE_NAME);
|
||||
|
||||
|
||||
// 消息API提醒
|
||||
String msgTemplate = "{},您的{}已被撤销,无需审核。";
|
||||
String msg = StrUtil.format(msgTemplate, instanceName, taskDisplayName);
|
||||
|
||||
// 发送 go go go
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -233,4 +233,17 @@ public interface ProcessInstanceService extends BaseService<ProcessInstance> {
|
||||
* @return
|
||||
*/
|
||||
List<LabelValueVO> getAssigneeTextData(Long processInstanceId);
|
||||
|
||||
/**
|
||||
* 删除流程实例
|
||||
* @param processInstanceId
|
||||
*/
|
||||
void deleteProcessInstanceById(Long processInstanceId);
|
||||
|
||||
/**
|
||||
* 删除流程实例
|
||||
* @param businessKey
|
||||
*/
|
||||
void deleteProcessInstanceByBusinessKey(String businessKey);
|
||||
|
||||
}
|
||||
|
||||
@@ -3,17 +3,14 @@ package com.budwk.app.flow.service.impl;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.pinyin.PinyinUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.enums.UpAndDownParam;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.flow.engine.model.ProcessModel;
|
||||
import com.budwk.app.flow.engine.parser.ModelParser;
|
||||
import com.budwk.app.flow.entity.ProcessDefine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.service.ProcessDefineService;
|
||||
import com.budwk.app.flow.vo.ProcessDefineVO;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
@@ -23,9 +20,7 @@ import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class ProcessDefineServiceImpl extends BaseServiceImpl<ProcessDefine> implements ProcessDefineService {
|
||||
@@ -100,8 +95,6 @@ public class ProcessDefineServiceImpl extends BaseServiceImpl<ProcessDefine> imp
|
||||
// 1. json定义文件转成流程模型
|
||||
ProcessModel processModel = ModelParser.parse(defineJsonStr);
|
||||
// 2. 根据名称查询,取最新版本的流程定义记录
|
||||
List<ProcessDefine> processDefineList = query(Cnd.where(ProcessDefine::getName, "=", processModel.getName()).desc(ProcessDefine::getId));
|
||||
|
||||
ProcessDefine latestDefine = dao().fetch(ProcessDefine.class, Cnd.where(ProcessDefine::getName, "=", processModel.getName()).desc(ProcessDefine::getId));
|
||||
|
||||
ProcessDefine define = null;
|
||||
@@ -122,9 +115,8 @@ public class ProcessDefineServiceImpl extends BaseServiceImpl<ProcessDefine> imp
|
||||
define.setH5InstanceUrl(processModel.getH5InstanceUrl());
|
||||
define.setInstanceViewUrl(processModel.getInstanceViewUrl());
|
||||
define.setH5InstanceViewUrl(processModel.getH5InstanceViewUrl());
|
||||
|
||||
// define.setInstanceViewUrl(latestDefine.getInstanceViewUrl());
|
||||
// define.setH5InstanceViewUrl(latestDefine.getH5InstanceViewUrl());
|
||||
define.setIcon(processModel.getIcon());
|
||||
define.setPinyinName(PinyinUtil.getFirstLetter(define.getDisplayName().charAt(0)));
|
||||
|
||||
define.setState(1);
|
||||
define.setContent(JSONUtil.parseObj(defineJsonStr));
|
||||
|
||||
@@ -9,11 +9,9 @@ import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.expression.ExpressionUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.enums.YesNoEnum;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.vo.LabelValueVO;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.Context;
|
||||
import com.budwk.app.flow.engine.DecisionHandler;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.engine.core.Execution;
|
||||
@@ -93,7 +91,13 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl<ProcessInstance>
|
||||
|
||||
ProcessInstanceVO instanceVO = new ProcessInstanceVO();
|
||||
BeanUtil.fillBeanWithMapIgnoreCase(nutMap, instanceVO, true);
|
||||
instanceVO.setJsonObject(processDefineService.getDefineJsonObject(instanceVO.getProcessDefineId()));
|
||||
|
||||
ProcessDefine define = processDefineService.fetch(instanceVO.getProcessDefineId());
|
||||
|
||||
// instanceVO.setJsonObject(processDefineService.getDefineJsonObject(instanceVO.getProcessDefineId()));
|
||||
|
||||
instanceVO.setJsonObject(JSONUtil.parseObj(define));
|
||||
|
||||
return instanceVO;
|
||||
}
|
||||
|
||||
@@ -319,24 +323,38 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl<ProcessInstance>
|
||||
|
||||
@Override
|
||||
public void withdraw(Long processInstanceId, String operator) {
|
||||
Date now = new Date();
|
||||
// Date now = new Date();
|
||||
// 1. 将该流程实例状态修改为撤回
|
||||
ProcessInstance processInstance = new ProcessInstance();
|
||||
processInstance.setId(processInstanceId);
|
||||
processInstance.setState(ProcessInstanceStateEnum.WITHDRAW.getCode());
|
||||
processInstance.setUpdatedAt(System.currentTimeMillis());
|
||||
processInstance.setUpdatedBy(operator);
|
||||
int update = dao().update(ProcessInstance.class, Chain.from(processInstance), Cnd.where(ProcessInstance::getId, "=", processInstanceId)
|
||||
.and(ProcessInstance::getState, "=", ProcessInstanceStateEnum.DOING.getCode()));
|
||||
int updated = dao().updateIgnoreNull(processInstance);
|
||||
|
||||
if (update >= 1) {
|
||||
// 2. 将该流程实例产生的任务状态修改为撤回
|
||||
ProcessTask processTask = new ProcessTask();
|
||||
processTask.setTaskState(ProcessTaskStateEnum.WITHDRAW.getCode());
|
||||
processTask.setUpdatedAt(System.currentTimeMillis());
|
||||
processTask.setUpdatedBy(operator);
|
||||
dao().update(ProcessTask.class, Chain.from(processTask), Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId)
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.DOING.getCode()));
|
||||
// 2. 将该流程实例产生的任务状态修改为撤回
|
||||
if (updated > 0) {
|
||||
List<ProcessTask> taskList = dao().query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId).and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.DOING.getCode()));
|
||||
for (ProcessTask processTask : taskList) {
|
||||
processTask.setTaskState(ProcessTaskStateEnum.WITHDRAW.getCode());
|
||||
processTask.setUpdatedAt(System.currentTimeMillis());
|
||||
processTask.setUpdatedBy(operator);
|
||||
}
|
||||
dao().update(taskList, "taskState|updateAt|updateBy");
|
||||
}
|
||||
|
||||
// int update = dao().update(ProcessInstance.class, Chain.from(processInstance), Cnd.where(ProcessInstance::getId, "=", processInstanceId)
|
||||
// .and(ProcessInstance::getState, "=", ProcessInstanceStateEnum.DOING.getCode()));
|
||||
//
|
||||
// if (update >= 1) {
|
||||
// // 2. 将该流程实例产生的任务状态修改为撤回
|
||||
// ProcessTask processTask = new ProcessTask();
|
||||
// processTask.setTaskState(ProcessTaskStateEnum.WITHDRAW.getCode());
|
||||
// processTask.setUpdatedAt(System.currentTimeMillis());
|
||||
// processTask.setUpdatedBy(operator);
|
||||
// dao().update(ProcessTask.class, Chain.from(processTask), Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId)
|
||||
// .and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.DOING.getCode()));
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -531,4 +549,22 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl<ProcessInstance>
|
||||
.collect(Collectors.toList());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void deleteProcessInstanceById(Long processInstanceId) {
|
||||
List<ProcessTask> taskList = dao().query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId));
|
||||
List<Long> taskIds = taskList.stream().map(ProcessTask::getId).toList();
|
||||
dao().clear(ProcessTask.class, Cnd.where(ProcessTask::getId, "in", taskIds));
|
||||
dao().clear(ProcessInstance.class, Cnd.where(ProcessInstance::getId, "=", processInstanceId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProcessInstanceByBusinessKey(String businessKey) {
|
||||
ProcessInstance processInstance = fetch(Cnd.where(ProcessInstance::getBusinessNo, "=", businessKey));
|
||||
if (processInstance != null) {
|
||||
deleteProcessInstanceById(processInstance.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
||||
|
||||
@Override
|
||||
public List<ProcessTask> getDoneTaskList(Long processInstanceId, String[] taskNames) {
|
||||
Cnd cnd = Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId).and(ProcessTask::getTaskState, "!=", ProcessTaskStateEnum.DOING.getCode());
|
||||
Cnd cnd = Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId).and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode());
|
||||
cnd.andEX(ProcessTask::getTaskName, "", taskNames);
|
||||
List<ProcessTask> processTaskList = query(cnd);
|
||||
return processTaskList;
|
||||
|
||||
Reference in New Issue
Block a user