From 07c4ad96c75dc93b39e002feb19845219fede415 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 29 十一月 2024 16:49:09 +0800
Subject: [PATCH] 全部事项和待办事项查询功能完善
---
business/src/main/java/com/ycl/domain/entity/ProjectProcess.java | 8
flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 4
business/src/main/java/com/ycl/controller/ProjectProcessController.java | 14 +
business/src/main/java/com/ycl/constant/TaskTypeConstant.java | 19 +
business/src/main/java/com/ycl/domain/query/TaskQuery.java | 33 +++
business/src/main/java/com/ycl/domain/form/ProjectProcessForm.java | 4
business/src/main/resources/mapper/ProjectProcessMapper.xml | 6
business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java | 111 ++++++++++
common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java | 29 ++
system/src/main/java/com/ycl/system/domain/base/AbsQuery.java | 4
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 367 ++++++++++++++++++++++++--------
business/src/main/java/com/ycl/service/ProjectProcessService.java | 14 +
business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java | 8
13 files changed, 506 insertions(+), 115 deletions(-)
diff --git a/business/src/main/java/com/ycl/constant/TaskTypeConstant.java b/business/src/main/java/com/ycl/constant/TaskTypeConstant.java
new file mode 100644
index 0000000..a3f6896
--- /dev/null
+++ b/business/src/main/java/com/ycl/constant/TaskTypeConstant.java
@@ -0,0 +1,19 @@
+package com.ycl.constant;
+
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/11/29 8:30
+ */
+public class TaskTypeConstant {
+
+ public final static String ALL = "all"; // 鍏ㄩ儴浠诲姟
+ public final static String TODO = "todo"; // 寰呭姙浠诲姟
+ public final static String CURRENT = "current"; // 褰撳墠鐜妭
+ public final static String REMAINING = "remaining"; // 鍓╀綑浠诲姟
+ public final static String TIMELY = "timely"; // 鍙婃椂瀹屾垚鐨勪换鍔�
+ public final static String WILL_OVER_TIME = "willOvertime"; // 鍗冲皢瓒呮椂浠诲姟
+ public final static String urge = "urge"; // 鐫e姙
+
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectProcessController.java b/business/src/main/java/com/ycl/controller/ProjectProcessController.java
index 9024cbf..31de96f 100644
--- a/business/src/main/java/com/ycl/controller/ProjectProcessController.java
+++ b/business/src/main/java/com/ycl/controller/ProjectProcessController.java
@@ -2,6 +2,7 @@
import com.ycl.common.group.Update;
import com.ycl.common.group.Add;
+import com.ycl.domain.query.TaskQuery;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import lombok.RequiredArgsConstructor;
@@ -55,10 +56,17 @@
return projectProcessService.detail(projectId, processId);
}
- @PostMapping("/start/{projectId}/{processId}")
+ @PostMapping("/start/{projectId}/{processDefId}")
@ApiOperation(value = "鍚姩娴佺▼", notes = "鍚姩娴佺▼")
// @PreAuthorize("@ss.hasPermi('projectProcess:start')")
- public Result startProcess(@PathVariable("projectId") String projectId, @PathVariable("processId") String processId) {
- return projectProcessService.startProcess(projectId, processId);
+ public Result startProcess(@PathVariable("projectId") String projectId, @PathVariable("processDefId") String processDefId) {
+ return projectProcessService.startProcess(projectId, processDefId);
+ }
+
+ @GetMapping("/detail/task/list")
+ @ApiOperation(value = "鑾峰彇浠诲姟鍒楄〃", notes = "鑾峰彇浠诲姟鍒楄〃")
+// @PreAuthorize("@ss.hasPermi('projectProcess:detail')")
+ public Result taskList(TaskQuery query) {
+ return projectProcessService.taskList(query);
}
}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectProcess.java b/business/src/main/java/com/ycl/domain/entity/ProjectProcess.java
index e5609bf..7c161f1 100644
--- a/business/src/main/java/com/ycl/domain/entity/ProjectProcess.java
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectProcess.java
@@ -23,12 +23,12 @@
/** 椤圭洰ID */
private Long projectId;
- @TableField("flowable_process_id")
+ @TableField("process_def_id")
/** 娴佺▼瀹氫箟ID */
- private String flowableProcessId;
+ private String processDefId;
- @TableField("process_instance_id")
+ @TableField("process_ins_id")
/** 娴佺▼瀹炰緥id */
- private String processInstanceId;
+ private String processInsId;
}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectProcessForm.java b/business/src/main/java/com/ycl/domain/form/ProjectProcessForm.java
index ea3ad13..d2db186 100644
--- a/business/src/main/java/com/ycl/domain/form/ProjectProcessForm.java
+++ b/business/src/main/java/com/ycl/domain/form/ProjectProcessForm.java
@@ -28,8 +28,8 @@
private Long projectId;
@NotBlank(message = "娴佺▼ID涓嶈兘涓虹┖", groups = {Add.class, Update.class})
- @ApiModelProperty("娴佺▼ID")
- private String flowableProcessId;
+ @ApiModelProperty("娴佺▼瀹氫箟ID")
+ private String processDefId;
public static ProjectProcess getEntityByForm(@NonNull ProjectProcessForm form, ProjectProcess entity) {
if(entity == null) {
diff --git a/business/src/main/java/com/ycl/domain/query/TaskQuery.java b/business/src/main/java/com/ycl/domain/query/TaskQuery.java
new file mode 100644
index 0000000..d6cdfb3
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/TaskQuery.java
@@ -0,0 +1,33 @@
+package com.ycl.domain.query;
+
+import com.ycl.system.domain.base.AbsQuery;
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/11/29 8:12
+ */
+@Data
+public class TaskQuery extends AbsQuery {
+
+ /**
+ * 椤圭洰id
+ */
+ private Long projectId;
+
+ /**
+ * 娴佺▼瀹氫箟id
+ */
+ private String processDefId;
+
+ /**
+ * 浠诲姟鍚嶇О
+ */
+ private String taskName;
+
+ /**
+ * 浠诲姟绫诲瀷
+ */
+ private String taskType;
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java b/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java
new file mode 100644
index 0000000..86eebff
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java
@@ -0,0 +1,111 @@
+package com.ycl.domain.vo;
+
+import com.ycl.common.enums.business.TaskStatusEnum;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 浠诲姟鍥炴樉鍐呭
+ *
+ * @author锛歺p
+ * @date锛�2024/11/29 10:59
+ */
+@Data
+public class CustomerTaskVO {
+
+ /**
+ * flowable涓殑浠诲姟id
+ */
+ private String taskId;
+
+ /**
+ * flowable娴佺▼瀹炰緥id
+ */
+ private String processInsId;
+
+ /**
+ * flowable娴佺▼瀹氫箟id
+ */
+ private String processDefId;
+
+ /**
+ * 閮ㄧ讲id
+ */
+ private String deployId;
+
+ /**
+ * 鎵цid
+ */
+ private String executionId;
+
+ /**
+ * 浠诲姟鍚嶇О
+ */
+ private String taskName;
+
+ /**
+ * 娴佺▼鍚嶇О
+ */
+ private String processName;
+
+ /**
+ * 鍙戣捣浜篿d
+ */
+ private Long promoterId;
+
+ /**
+ * 鍙戣捣浜哄鍚�
+ */
+ private String promoterName;
+
+ /**
+ * 鍙戣捣浜哄崟浣�
+ */
+ private Long promoterUnitId;
+
+ /**
+ * 鍙戣捣浜哄崟浣嶅悕绉�
+ */
+ private String promoterUnitName;
+
+ /**
+ * 澶勭悊浜�
+ */
+ private String handlerName;
+
+ /**
+ * 鍙戣捣浜篿d
+ */
+ private Long handlerId;
+
+ /**
+ * 澶勭悊浜哄崟浣峣d
+ */
+ private Long handlerUnitId;
+
+ /**
+ * 澶勭悊浜哄崟浣嶅悕绉�
+ */
+ private String handlerUnitName;
+
+ /**
+ * 鍔炵悊鏈熼檺
+ */
+ private String timeLimit;
+
+ /**
+ * 鍓╀綑鏃堕棿
+ */
+ private String remainingTime;
+
+ /**
+ * 浠诲姟鐘舵��
+ */
+ private TaskStatusEnum taskStatus;
+
+ /**
+ * 浠诲姟鍒涘缓鏃堕棿
+ */
+ private Date createTime;
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java
index 1c0c7b1..66df29d 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java
@@ -21,13 +21,13 @@
@ApiModel(value = "椤圭洰绠$悊鍩虹淇℃伅琛ㄥ搷搴旀暟鎹�", description = "椤圭洰绠$悊鍩虹淇℃伅琛ㄥ搷搴旀暟鎹�")
public class ProjectProcessVO extends ProjectInfoVO {
- /** 娴佺▼id */
- @ApiModelProperty("娴佺▼id")
- private String flowableProcessId;
+ /** 娴佺▼瀹氫箟id */
+ @ApiModelProperty("娴佺▼瀹氫箟id")
+ private String processDefId;
@ApiModelProperty("娴佺▼鍚嶇О")
private String flowableProcessName;
@ApiModelProperty("娴佺▼瀹炰緥id")
- private String processInstanceId;
+ private String processInsId;
}
diff --git a/business/src/main/java/com/ycl/service/ProjectProcessService.java b/business/src/main/java/com/ycl/service/ProjectProcessService.java
index 2a67244..7ef2719 100644
--- a/business/src/main/java/com/ycl/service/ProjectProcessService.java
+++ b/business/src/main/java/com/ycl/service/ProjectProcessService.java
@@ -5,6 +5,8 @@
import com.ycl.common.base.Result;
import com.ycl.domain.form.ProjectProcessForm;
import com.ycl.domain.query.ProjectProcessQuery;
+import com.ycl.domain.query.TaskQuery;
+
import java.util.List;
/**
@@ -41,9 +43,17 @@
/**
* 鍚姩娴佺▼
*
- * @param processId 娴佺▼瀹氫箟id
+ * @param processDefId 娴佺▼瀹氫箟id
* @param projectId 椤圭洰id锛屼綔涓轰笟鍔d瀛樺叆activity琛�
* @return
*/
- Result startProcess(String projectId, String processId);
+ Result startProcess(String projectId, String processDefId);
+
+ /**
+ * 鏌ヨ浠诲姟鍒楄〃
+ *
+ * @param query
+ * @return
+ */
+ Result taskList(TaskQuery query);
}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
index 4856ea1..ab53566 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -10,10 +10,13 @@
import com.ycl.common.core.domain.entity.SysRole;
import com.ycl.common.core.domain.entity.SysUser;
import com.ycl.common.enums.FlowComment;
+import com.ycl.common.enums.business.TaskStatusEnum;
import com.ycl.common.utils.SecurityUtils;
+import com.ycl.constant.TaskTypeConstant;
import com.ycl.domain.dto.FlowTaskDto;
import com.ycl.domain.entity.ProjectInfo;
import com.ycl.domain.entity.ProjectProcess;
+import com.ycl.domain.vo.CustomerTaskVO;
import com.ycl.domain.vo.ProjectProcessDetailVO;
import com.ycl.mapper.ProjectInfoMapper;
import com.ycl.mapper.ProjectProcessMapper;
@@ -26,15 +29,15 @@
import com.ycl.system.service.ISysRoleService;
import com.ycl.system.service.ISysUserService;
import org.apache.commons.lang3.StringUtils;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.FlowElement;
+import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
-import org.flowable.bpmn.model.StartEvent;
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.identitylink.api.IdentityLink;
+import org.flowable.identitylink.api.IdentityLinkInfo;
+import org.flowable.identitylink.api.history.HistoricIdentityLink;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
@@ -81,13 +84,62 @@
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
+ @Override
+ public Result projectSetProcess(ProjectProcessForm form) {
+ // 鏌ヨ璇ラ」鐩槸鍚﹀凡缁忕粦瀹氳繃娴佺▼浜嗭紝妫�鏌ョ粦瀹氱殑娴佺▼鏄惁鍦ㄨ繍琛岋紝鍦ㄨ繍琛屽氨鍒犱簡
+ ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, form.getProjectId())
+ .one();
+ if (Objects.nonNull(pp)) {
+ // TODO 澶勭悊涔嬪墠缁戝畾杩囩殑娴佺▼鏁版嵁
+ new LambdaUpdateChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, form.getProjectId())
+ .set(ProjectProcess::getProcessDefId, form.getProcessDefId())
+ .update();
+ } else {
+ ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null);
+ baseMapper.insert(entity);
+ }
+ return Result.ok("娴佺▼鍙樻洿鎴愬姛");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result startProcess(String projectId, String processDefId) {
+ ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId)
+ .latestVersion().singleResult();
+ if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
+ return Result.error("璇ユ祦绋嬪凡琚寕璧�,璇峰厛婵�娲绘祦绋�");
+ }
+ Map<String, Object> variables = new HashMap<>(2);
+ // 璁剧疆娴佺▼鍙戣捣浜篒d鍒版祦绋嬩腑
+ SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+ identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
+ variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
+ ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId, variables);
+// // 娴佺▼鍙戣捣鏃� 璺宠繃鍙戣捣浜鸿妭鐐�
+// // 缁欑涓�姝ョ敵璇蜂汉鑺傜偣璁剧疆浠诲姟鎵ц浜哄拰鎰忚
+// Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
+// if (Objects.nonNull(task)) {
+// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "鍙戣捣娴佺▼鐢宠");
+// taskService.complete(task.getId(), variables);
+// }
+ // 椤圭洰娴佺▼鍏宠仈娴佺▼瀹炰緥id
+ new LambdaUpdateChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, projectId)
+ .eq(ProjectProcess::getProcessDefId, processDefId)
+ .set(ProjectProcess::getProcessInsId, processInstance.getProcessInstanceId())
+ .update();
+ return Result.ok("娴佺▼鍚姩鎴愬姛");
+ }
+
/**
* 鑾峰彇娴佺▼璇︽儏
* @param projectId
* @return
*/
@Override
- public Result detail(Long projectId, String processId) {
+ public Result detail(Long projectId, String processDefId) {
// 椤圭洰淇℃伅
ProjectInfo projectInfo = new LambdaQueryChainWrapper<>(projectInfoMapper)
.select(ProjectInfo::getId, ProjectInfo::getProjectName, ProjectInfo::getProjectCode)
@@ -100,7 +152,7 @@
ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper)
.eq(ProjectProcess::getProjectId, projectId)
- .eq(ProjectProcess::getFlowableProcessId, processId)
+ .eq(ProjectProcess::getProcessDefId, processDefId)
.one();
if (Objects.isNull(projectProcess)) {
return Result.error("璇ラ」鐩湭璁剧疆娴佺▼");
@@ -113,110 +165,86 @@
ProjectProcessDetailVO.TaskStatistics taskStatistics = new ProjectProcessDetailVO.TaskStatistics();
// 鐘舵�佺粺璁�
- taskStatistics.setTotalTaskNum(this.getTotalTaskNum(processId));
- taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInstanceId()));
+ taskStatistics.setTotalTaskNum(this.getTotalTaskNum(processDefId));
+ taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId()));
// taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId()));
- taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInstanceId()));
+ taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId()));
detail.setStatistics(taskStatistics);
Result result = Result.ok();
// 浠e姙浠诲姟
- this.getTodoTaskList(projectProcess.getProcessInstanceId(),"", 1, 5, result);
+ this.getTodoTaskList(projectProcess.getProcessInsId(),"", 5, 1, result);
return result.data(detail);
}
-
@Override
- public Result projectSetProcess(ProjectProcessForm form) {
- // 鏌ヨ璇ラ」鐩槸鍚﹀凡缁忕粦瀹氳繃娴佺▼浜嗭紝妫�鏌ョ粦瀹氱殑娴佺▼鏄惁鍦ㄨ繍琛岋紝鍦ㄨ繍琛屽氨鍒犱簡
- ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper)
- .eq(ProjectProcess::getProjectId, form.getProjectId())
+ public Result taskList(com.ycl.domain.query.TaskQuery query) {
+ // 鑾峰彇椤圭洰瀵瑰簲鐨勬祦绋嬪疄渚媔d
+ ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, query.getProjectId())
+ .eq(ProjectProcess::getProcessDefId, query.getProcessDefId())
.one();
- if (Objects.nonNull(pp)) {
- // TODO 澶勭悊涔嬪墠缁戝畾杩囩殑娴佺▼鏁版嵁
- new LambdaUpdateChainWrapper<>(baseMapper)
- .eq(ProjectProcess::getProjectId, form.getProjectId())
- .set(ProjectProcess::getFlowableProcessId, form.getFlowableProcessId())
- .update();
- } else {
- ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null);
- baseMapper.insert(entity);
+ if (Objects.isNull(projectProcess)) {
+ throw new RuntimeException("璇ラ」鐩湭閰嶇疆娴佺▼");
}
- return Result.ok("娴佺▼鍙樻洿鎴愬姛");
+ Result ok = Result.ok();
+ switch (query.getTaskType()) {
+ case TaskTypeConstant.ALL:
+ this.getAllUserTask(query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName (), (int)query.getCurrentPage(), (int)query.getPageSize(), ok);
+ case TaskTypeConstant.TODO:
+ this.getTodoTaskList(projectProcess.getProcessInsId(), query.getTaskName(), (int)query.getPageSize(), (int)query.getCurrentPage(), ok);
+ case TaskTypeConstant.CURRENT:
+
+ case TaskTypeConstant.REMAINING:
+
+ default:
+
+
+ }
+ return ok;
}
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Result startProcess(String projectId, String processId) {
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processId)
- .latestVersion().singleResult();
- if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
- return Result.error("璇ユ祦绋嬪凡琚寕璧�,璇峰厛婵�娲绘祦绋�");
- }
- Map<String, Object> variables = new HashMap<>(2);
- // 璁剧疆娴佺▼鍙戣捣浜篒d鍒版祦绋嬩腑
- SysUser sysUser = SecurityUtils.getLoginUser().getUser();
- identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
- variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
- ProcessInstance processInstance = runtimeService.startProcessInstanceById(processId, projectId, variables);
-// // 娴佺▼鍙戣捣鏃� 璺宠繃鍙戣捣浜鸿妭鐐�
-// // 缁欑涓�姝ョ敵璇蜂汉鑺傜偣璁剧疆浠诲姟鎵ц浜哄拰鎰忚
-// Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
-// if (Objects.nonNull(task)) {
-// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "鍙戣捣娴佺▼鐢宠");
-// taskService.complete(task.getId(), variables);
-// }
- // 椤圭洰娴佺▼鍏宠仈娴佺▼瀹炰緥id
- new LambdaUpdateChainWrapper<>(baseMapper)
- .eq(ProjectProcess::getProjectId, projectId)
- .eq(ProjectProcess::getFlowableProcessId, processId)
- .set(ProjectProcess::getProcessInstanceId, processInstance.getProcessInstanceId())
- .update();
- return Result.ok("娴佺▼鍚姩鎴愬姛");
- }
-
-
- private void getTodoTaskList(String processInstanceId, String name, Integer pageNum, Integer pageSize, Result result) {
+ private void getTodoTaskList(String processInsId, String taskName, int pageSize, int pageNum, Result result) {
TaskQuery taskQuery = taskService.createTaskQuery()
.active()
- .processInstanceId(processInstanceId)
+ .processInstanceId(processInsId)
.includeProcessVariables()
.orderByTaskCreateTime().desc();
// TODO 浼犲叆鍚嶇О鏌ヨ涓嶅埌鏁版嵁?
- if (StringUtils.isNotBlank(name)) {
- taskQuery.processDefinitionNameLike(name);
+ if (StringUtils.isNotBlank(taskName)) {
+ taskQuery.processDefinitionNameLike(taskName);
}
result.total(taskQuery.count());
List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize);
- List<FlowTaskDto> flowList = new ArrayList<>();
+ List<CustomerTaskVO> vos = new ArrayList<>();
for (Task task : taskList) {
- FlowTaskDto flowTask = new FlowTaskDto();
+ CustomerTaskVO taskVO = new CustomerTaskVO();
// 褰撳墠娴佺▼淇℃伅
- flowTask.setTaskId(task.getId());
- flowTask.setTaskDefKey(task.getTaskDefinitionKey());
- flowTask.setCreateTime(task.getCreateTime());
- flowTask.setProcDefId(task.getProcessDefinitionId());
- flowTask.setExecutionId(task.getExecutionId());
- flowTask.setTaskName(task.getName());
+ taskVO.setTaskId(task.getId());
+ taskVO.setCreateTime(task.getCreateTime());
+ taskVO.setProcessDefId(task.getProcessDefinitionId());
+ taskVO.setExecutionId(task.getExecutionId());
+ taskVO.setTaskName(task.getName());
+ taskVO.setTaskStatus(TaskStatusEnum.TODO);
// 娴佺▼瀹氫箟淇℃伅
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId())
.singleResult();
- flowTask.setDeployId(pd.getDeploymentId());
- flowTask.setProcDefName(pd.getName());
- flowTask.setProcDefVersion(pd.getVersion());
- flowTask.setProcInsId(task.getProcessInstanceId());
+ taskVO.setDeployId(pd.getDeploymentId());
+ taskVO.setProcessName(pd.getName());
+ taskVO.setProcessInsId(task.getProcessInstanceId());
// 娴佺▼鍙戣捣浜轰俊鎭�
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId())
.singleResult();
SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
- flowTask.setStartUserId(startUser.getUserId().toString());
- flowTask.setStartUserName(startUser.getNickName());
- flowTask.setStartDeptName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : "");
+ taskVO.setPromoterId(startUser.getUserId());
+ taskVO.setPromoterName(startUser.getNickName());
+ taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : "");
+ taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null);
// 娴佺▼澶勭悊浜轰俊鎭�
List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
for (IdentityLink identityLink : identityLinksForTask) {
@@ -224,34 +252,179 @@
if (StringUtils.isNotBlank(identityLink.getUserId())) {
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
if (Objects.nonNull(sysUser)) {
- flowTask.setAssigneeId(sysUser.getUserId());
+ taskVO.setHandlerId(sysUser.getUserId());
if (Objects.nonNull(sysUser.getDept())) {
- flowTask.setAssigneeDeptName(sysUser.getDept().getDeptName());
+ taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
+ taskVO.setHandlerUnitName(sysUser.getDept().getDeptName());
}
- flowTask.setAssigneeName(sysUser.getNickName());
+ taskVO.setHandlerName(sysUser.getNickName());
}
- // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
+ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
} else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
if (Objects.nonNull(role)) {
- flowTask.setAssigneeId(Long.parseLong(identityLink.getGroupId()));
- flowTask.setAssigneeDeptName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
- flowTask.setAssigneeName("鏆傛湭澶勭悊");
+ taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
+ taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
+ taskVO.setHandlerName("鏆傛湭澶勭悊");
+ taskVO.setHandlerId(null);
}
}
}
- flowList.add(flowTask);
+ vos.add(taskVO);
}
- result.put("taskList", flowList);
+ result.put("taskList", vos);
}
/**
- * 鑾峰彇娴佺▼鑺傜偣鏁帮紙鎬讳换鍔℃暟锛屼笉鍖呭惈寮�濮嬨�佺粨鏉熺瓑鐗规畩鐨勶紝鍙粺璁serTask绫诲瀷鐨勶級
+ * 鑾峰彇鎵�鏈変换鍔�
*
- * @param processDefinitionId 娴佺▼瀹氫箟id
+ * @param processDefinitionId 娴佺▼杩愯id
+ * @param processInsId 娴佺▼瀹炰緥id
+ * @param pageNum
+ * @param pageSize
+ * @param result
* @return
*/
- private Long getTotalTaskNum(String processDefinitionId) {
+ private List<CustomerTaskVO> getAllUserTask(String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) {
+ int startNum = pageSize * (pageNum - 1);
+ int endNum = startNum + pageSize;
+ List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId);
+ result.total(allUserTaskElement.size());
+ if (startNum >= allUserTaskElement.size()) {
+ // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃
+ return new ArrayList<>();
+ }
+ if (StringUtils.isNotBlank(taskName)) {
+ // 妯℃嫙妯$硦鏌ヨ
+ allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList());
+ }
+ int end = Math.min(endNum, allUserTaskElement.size());
+ List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
+ // 鏌ュ嚭娴佺▼
+ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+ // 鍒ゆ柇浠诲姟鐘舵��
+ List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
+ CustomerTaskVO vo = new CustomerTaskVO();
+ vo.setProcessInsId(process.getId());
+ vo.setProcessDefId(processDefinitionId);
+ vo.setDeployId(process.getDeploymentId());
+ vo.setTaskName(userTask.getName());
+ vo.setProcessName(process.getProcessDefinitionName());
+ Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
+ if (Objects.isNull(task)) {
+ // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛岄渶瑕佷粠鍘嗗彶浠诲姟涓啀鎵句竴涓�
+ HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceId(process.getProcessInstanceId())
+ .taskDefinitionKey(userTask.getId())
+ .includeIdentityLinks()
+ .singleResult();
+ if (Objects.isNull(historicTask)) {
+ vo.setTaskStatus(TaskStatusEnum.NOT_START);
+ } else {
+ vo.setTaskStatus(TaskStatusEnum.FINISHED);
+ // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊�
+ vo.setTaskId(historicTask.getId());
+ vo.setExecutionId(historicTask.getExecutionId());
+ vo.setCreateTime(historicTask.getStartTime());
+ // 鏌ヨ瀹為檯澶勭悊浜�
+ long handlerUserId = Long.parseLong(historicTask.getAssignee());
+ SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
+ if (Objects.nonNull(handlerUser)) {
+ vo.setHandlerId(handlerUserId);
+ vo.setHandlerName(handlerUser.getNickName());
+ }
+ this.setPromoterAndHandler(vo, historicTask.getIdentityLinks());
+ }
+ } else {
+ vo.setTaskStatus(TaskStatusEnum.TODO);
+ vo.setTaskId(task.getId());
+ vo.setExecutionId(task.getExecutionId());
+ vo.setCreateTime(task.getCreateTime());
+ this.setPromoterAndHandler(vo, null);
+ }
+ return vo;
+ }).collect(Collectors.toList());
+ result.data(vos);
+ return vos;
+ }
+
+ /**
+ * 璁剧疆浠诲姟鐨勫彂璧蜂汉&澶勭悊浜�
+ *
+ * @param taskVO
+ * @param identityLinkInfos 濡傛灉鏄凡瀹屾垚鐨勪换鍔★紝鐢ㄨ繖涓幓鍙栧叧鑱旂殑鐢ㄦ埛/鐢ㄦ埛缁�
+ */
+ private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) {
+ // 娴佺▼鍙戣捣浜轰俊鎭�
+ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
+ .processInstanceId(taskVO.getProcessInsId())
+ .singleResult();
+ SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
+ taskVO.setPromoterId(startUser.getUserId());
+ taskVO.setPromoterName(startUser.getNickName());
+ taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null);
+ taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : "");
+ // 娴佺▼澶勭悊浜轰俊鎭�
+ if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) {
+ List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskVO.getTaskId());
+ for (IdentityLink identityLink : identityLinksForTask) {
+ // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+ if (StringUtils.isNotBlank(identityLink.getUserId())) {
+ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
+ if (Objects.nonNull(sysUser)) {
+ taskVO.setHandlerId(sysUser.getUserId());
+ if (Objects.nonNull(sysUser.getDept())) {
+ taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
+ taskVO.setHandlerUnitName(sysUser.getDept().getDeptName());
+ }
+ taskVO.setHandlerName(sysUser.getNickName());
+ }
+ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
+ } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+ SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
+ if (Objects.nonNull(role)) {
+ taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
+ taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
+ taskVO.setHandlerName("鏆傛湭澶勭悊");
+ taskVO.setHandlerId(null);
+ }
+ }
+ }
+ } else if (TaskStatusEnum.FINISHED.equals(taskVO.getTaskStatus())){
+ for (IdentityLinkInfo identityLink : identityLinkInfos) {
+ // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+ if (StringUtils.isNotBlank(identityLink.getUserId())) {
+ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
+ if (Objects.nonNull(sysUser)) {
+// taskVO.setHandlerId(sysUser.getUserId());
+ if (Objects.nonNull(sysUser.getDept())) {
+ taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
+ taskVO.setHandlerUnitName(sysUser.getDept().getDeptName());
+ }
+// taskVO.setHandlerName(sysUser.getNickName());
+ }
+ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
+ } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+ SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
+ if (Objects.nonNull(role)) {
+ taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
+ taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
+// taskVO.setHandlerName(role.getRoleName());
+// taskVO.setHandlerId(null);
+ }
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 鑾峰彇鏌愪釜娴佺▼鐨勬墍鏈変换鍔¤妭鐐�
+ *
+ * @param processDefinitionId
+ * @return
+ */
+ private List<UserTask> getAllUserTaskElement(String processDefinitionId) {
// 鑾峰彇娴佺▼瀹氫箟
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
@@ -273,15 +446,21 @@
throw new IllegalStateException("鏃犳硶鑾峰彇娴佺▼瀵硅薄: " + processDefinition.getKey());
}
- // 璁$畻浠诲姟鑺傜偣鏁伴噺
- Long taskNodeCount = 0L;
List<FlowElement> flowElements = process.getFlowElements().stream().toList();
- for (FlowElement flowElement : flowElements) {
- if (flowElement instanceof org.flowable.bpmn.model.UserTask) {
- taskNodeCount++;
- }
- }
- return taskNodeCount;
+ List<UserTask> userTaskElements = flowElements.stream().filter(flowElement -> flowElement instanceof UserTask).map(flowElement -> {
+ return (UserTask) flowElement;
+ }).collect(Collectors.toList());
+ return userTaskElements;
+ }
+
+ /**
+ * 鑾峰彇娴佺▼鑺傜偣鏁帮紙鎬讳换鍔℃暟锛屼笉鍖呭惈寮�濮嬨�佺粨鏉熺瓑鐗规畩鐨勶紝鍙粺璁serTask绫诲瀷鐨勶級
+ *
+ * @param processDefinitionId 娴佺▼瀹氫箟id
+ * @return
+ */
+ private Long getTotalTaskNum(String processDefinitionId) {
+ return Long.valueOf(this.getAllUserTaskElement(processDefinitionId).size());
}
/**
diff --git a/business/src/main/resources/mapper/ProjectProcessMapper.xml b/business/src/main/resources/mapper/ProjectProcessMapper.xml
index 5ce1bb6..ae53deb 100644
--- a/business/src/main/resources/mapper/ProjectProcessMapper.xml
+++ b/business/src/main/resources/mapper/ProjectProcessMapper.xml
@@ -37,7 +37,7 @@
<result column="gmt_update_time" property="gmtUpdateTime" />
<result column="update_by" property="updateBy" />
<result column="create_by" property="createBy" />
- <result column="flowable_process_id" property="flowableProcessId" />
+ <result column="process_def_id" property="processDefId" />
<!-- <association property="id" column=""-->
</resultMap>
@@ -47,7 +47,7 @@
<select id="getById" resultMap="BaseResultMap">
SELECT
TPP.project_id,
- TPP.flowable_process_id,
+ TPP.process_def_id,
TPP.id
FROM
t_project_process TPP
@@ -59,7 +59,7 @@
<select id="getPage" resultMap="BaseResultMap">
SELECT
PI.*,
- TPP.flowable_process_id
+ TPP.process_def_id
FROM
t_project_info PI
LEFT JOIN t_project_process TPP ON TPP.project_id = PI.id AND TPP.deleted = 0 AND PI.deleted = 0
diff --git a/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java b/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java
new file mode 100644
index 0000000..a942187
--- /dev/null
+++ b/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java
@@ -0,0 +1,29 @@
+package com.ycl.common.enums.business;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * 宸ヤ綔娴佷换鍔$姸鎬�
+ *
+ * @author锛歺p
+ * @date锛�2024/11/29 11:13
+ */
+@Getter
+public enum TaskStatusEnum {
+
+ NOT_START("not_start", "鏈紑濮�"),
+ TODO("todo", "寰呭姙"),
+ FINISHED("finished", "宸插畬鎴�")
+ ;
+
+ private final String value;
+
+ @JsonValue
+ private final String desc;
+
+ TaskStatusEnum(String value, String desc) {
+ this.value = value;
+ this.desc = desc;
+ }
+}
diff --git a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index e8d0fdb..d2d5a45 100644
--- a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -113,12 +113,14 @@
* @return
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public AjaxResult completeSubmitForm(String taskId, Map<String, Object> variables) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (Objects.isNull(task)) {
return AjaxResult.error("浠诲姟涓嶅瓨鍦�");
}
-// variables.put(taskId + "formJson", variables.get("formJson"));
+ // 鍏堣褰撳墠鐢ㄦ埛璁ら杩欎釜浠诲姟
+ taskService.claim(taskId, SecurityUtils.getUserId() + "");
taskService.addComment(taskId, task.getProcessInstanceId(), FlowComment.SUBMIT.getType(), "瀹屾垚鎻愪氦");
taskService.complete(taskId, variables);
return AjaxResult.success("鎻愪氦鎴愬姛");
diff --git a/system/src/main/java/com/ycl/system/domain/base/AbsQuery.java b/system/src/main/java/com/ycl/system/domain/base/AbsQuery.java
index 3a669db..940053d 100644
--- a/system/src/main/java/com/ycl/system/domain/base/AbsQuery.java
+++ b/system/src/main/java/com/ycl/system/domain/base/AbsQuery.java
@@ -13,9 +13,9 @@
public class AbsQuery {
@ApiModelProperty(value = "褰撳墠椤�", required = true)
- private Long currentPage = 1L;
+ private long currentPage = 1L;
@ApiModelProperty(value = "姣忛〉鏉℃暟", required = true)
- private Long pageSize = 10L;
+ private long pageSize = 10L;
}
--
Gitblit v1.8.0