From 66b258f3e333b2413e3c7c28a8a6794545fc6eb8 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 27 二月 2025 09:50:52 +0800
Subject: [PATCH] 流程推进展示工程
---
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 112 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 83 insertions(+), 29 deletions(-)
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 57d89f5..ee84bc4 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -89,6 +89,7 @@
private final ISysDeptService deptService;
private final ProcessLogService processLogService;
private final ISysDictTypeService dictTypeService;
+ private final ProcessConfigInfoService processConfigInfoService;
/**
* 鍒嗛〉鏌ヨ
@@ -101,6 +102,7 @@
IPage<ProjectProcessVO> page = PageUtil.getPage(query, ProjectProcessVO.class);
baseMapper.getPage(query, page);
for (ProjectProcessVO vo : page.getRecords()) {
+ vo.setStatus(vo.getProjectStatus());
if (Objects.nonNull(vo.getProcessDefId())) {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(vo.getProcessDefId()).singleResult();
if (Objects.nonNull(processDefinition)) {
@@ -139,22 +141,22 @@
}
}
ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper)
- .select(ProjectInfo::getCreateBy)
+ .select(ProjectInfo::getProjectOwnerUnit)
.eq(ProjectInfo::getId, form.getProjectId())
.one();
if (Objects.isNull(project)) {
throw new RuntimeException("椤圭洰涓嶅瓨鍦�");
}
- SysUser user = sysUserService.selectUserById(project.getCreateBy());
- if (Objects.isNull(user)) {
+ SysDept dept = deptService.selectDeptById(project.getProjectOwnerUnit());
+ if (Objects.isNull(dept)) {
throw new RuntimeException("椤圭洰涓氫富鍗曚綅涓嶅瓨鍦�");
}
- String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId(), user.getDeptId());
+ String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId(), dept.getDeptId());
new LambdaUpdateChainWrapper<>(baseMapper)
.eq(ProjectProcess::getProjectId, form.getProjectId())
.set(ProjectProcess::getProcessDefId, form.getProcessDefId())
.set(ProjectProcess::getProcessInsId, processInsId)
- .set(ProjectProcess::getDataLaunch, project.getCreateBy())
+ .set(ProjectProcess::getDataLaunch, project.getProjectOwnerUnit())
.update();
return Result.ok("娴佺▼鍙樻洿鎴愬姛");
@@ -167,16 +169,16 @@
if (Objects.isNull(project)) {
throw new RuntimeException("椤圭洰涓嶅瓨鍦�");
}
- SysUser user = sysUserService.selectUserById(project.getCreateBy());
- if (Objects.isNull(user)) {
+ SysDept dept = deptService.selectDeptById(project.getProjectOwnerUnit());
+ if (Objects.isNull(dept)) {
throw new RuntimeException("椤圭洰涓氫富鍗曚綅涓嶅瓨鍦�");
}
- String processInsId = this.startPro(projectId, processDefId, user.getDeptId());
+ String processInsId = this.startPro(projectId, processDefId, dept.getDeptId());
ProjectProcess entity = new ProjectProcess();
entity.setProjectId(projectId);
entity.setProcessDefId(processDefId);
entity.setProcessInsId(processInsId);
- entity.setDataLaunch(project.getCreateBy());
+ entity.setDataLaunch(project.getProjectOwnerUnit());
baseMapper.insert(entity);
return Result.ok("娴佺▼鍚姩鎴愬姛");
@@ -202,8 +204,6 @@
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
- //娴嬭瘯瀹圭己
- variables.put("miss", true);
// 灏嗚椤圭洰鐨勭敵璇蜂汉锛堜笟涓绘柟锛変綔涓烘祦绋嬩腑鏌愪簺鐜妭鐨勫鐞嗕汉
variables.put(ProcessConstants.DATA_LAUNCH, "dept:" + createBy);
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId + "", variables);
@@ -305,9 +305,15 @@
.active()
.includeProcessVariables()
.orderByTaskCreateTime().desc();
-
+ List<String> insIds = baseMapper.getNormalInsIds();
+ if (CollectionUtils.isEmpty(insIds)) {
+ result.data(new ArrayList<>()).total(0L);
+ return;
+ } else {
+ taskQuery.processInstanceIdIn(insIds);
+ }
if (StringUtils.isNotBlank(taskName)) {
- taskQuery.processDefinitionNameLike(taskName);
+ taskQuery.taskNameLike(taskName);
}
if (!SecurityUtils.getLoginUser().getUser().isAdmin()) {
taskQuery
@@ -406,13 +412,48 @@
if (processLogService.taskIsHangup(task.getId(), task.getProcessInstanceId())) {
taskVO.setTaskStatus(TaskStatusEnum.HANGUP);
}
+
+ // 璁$畻鍔炵悊鏃堕棿
+ ProcessCoding processCoding = processCodingService.getByTaskId(task.getId());
+ if (processCoding != null) {
+ if (StringUtils.isNotBlank(processCoding.getOvertime())) {
+ Long overtime = getTime(processCoding.getOvertime());
+ long durationTime = 0l;
+ if (Objects.nonNull(processCoding.getStartTaskTime())) {
+ durationTime = ((new Date()).getTime() - processCoding.getStartTaskTime().getTime()) / 1000;
+ } else {
+ taskVO.setRemainingTime("鏈缃姙鐞嗘椂闂�");
+ }
+ if (overtime > durationTime) {
+ taskVO.setRemainingTime((overtime - durationTime) / 3600 + "灏忔椂");
+ } else {
+ taskVO.setRemainingTime("宸茶秴鏃�");
+ }
+ } else {
+ taskVO.setRemainingTime("-");
+ }
+ }
this.distinctVo(taskVO);
vos.add(taskVO);
}
- if (vos.size() < pageSize) {
- result.total(vos.size());
- }
result.put("taskList", vos);
+ }
+
+ private Long getTime(String timeStr) {
+ Long time = null;
+ if (StringUtils.isNotBlank(timeStr)) {
+ String[] timeArr = timeStr.split("-");
+ // 瑙f瀽澶╂暟鍜屽皬鏃舵暟
+ int days = Integer.parseInt(timeArr[0]);
+ int hours = 0;
+ if (timeArr.length > 1) {
+ hours = Integer.parseInt(timeArr[1]);
+ }
+ time = (days * 24L + hours) * 3600L;
+// //鍒�-绉�
+// time= (days * 60L) + hours;
+ }
+ return time;
}
@Override
@@ -606,7 +647,7 @@
jsonData.setAfterHandlerIds(afterHandlerIds);
jsonData.setAfterHandlerType(form.getPeopleType());
// 鍙戝竷杞姙浜嬩欢
- publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), task.getName(),ProcessLogEventTypeEnum.DELEGATE, jsonData));
+ publisher.publishEvent(new TaskLogEvent(this, null, SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), task.getName(), ProcessLogEventTypeEnum.DELEGATE, jsonData));
return Result.ok("杞姙鎴愬姛");
}
@@ -617,7 +658,7 @@
Task task = taskService.createTaskQuery().taskId(form.getTaskId()).processInstanceId(form.getProcessInsId()).singleResult();
if (Objects.nonNull(task)) {
// 娣诲姞璺宠繃鏃ュ織
- publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), task.getName(),ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc())));
+ publisher.publishEvent(new TaskLogEvent(this, null, SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), task.getName(), ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc())));
// 鏌ュ嚭璇ヤ换鍔$粦瀹氱殑琛ㄥ崟
Map<String, Object> data = new HashMap<>(1);
@@ -661,7 +702,7 @@
}
dataList.add(jsonData);
//娣诲姞鐫e姙鏃ュ織
- publisher.publishEvent(new TaskLogEvent(this, processLog.getId(), processLog.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), task.getName(),ProcessLogEventTypeEnum.SUPERVISE, dataList));
+ publisher.publishEvent(new TaskLogEvent(this, processLog.getId(), processLog.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), task.getName(), ProcessLogEventTypeEnum.SUPERVISE, dataList));
return Result.ok("鎿嶄綔鎴愬姛");
}
@@ -691,7 +732,7 @@
task.getName(),
ProcessLogEventTypeEnum.HANGUP,
new HangupData(form.getReason())
- ));
+ ));
return Result.ok("鎿嶄綔鎴愬姛");
}
@@ -747,11 +788,11 @@
newV.put(task.getTaskDefinitionKey() + "&" + key, form.getVariables().get(key));
//瀛楀吀閲屾湁灏辨斁鍏ユ祦绋嬪彉閲忎腑
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(dictList) && dictList.contains(key)) {
- processVariables.put(key,form.getVariables().get(key));
+ processVariables.put(key, form.getVariables().get(key));
}
}
}
- if( !processVariables.isEmpty() ) {
+ if (!processVariables.isEmpty()) {
taskService.setVariables(form.getTaskId(), processVariables);
}
@@ -788,7 +829,7 @@
.desc();
if (StringUtils.isNotBlank(taskName)) {
- taskQuery.processDefinitionNameLike(taskName);
+ taskQuery.taskNameLike(taskName);
}
result.total(taskQuery.count());
List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize);
@@ -880,7 +921,7 @@
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee()));
if (Objects.nonNull(sysUser)) {
handlerIds.add(sysUser.getUserId());
- handlerNames.add(sysUser.getNickName());
+ handlerNames.add(this.getUserShowName(sysUser));
if (Objects.nonNull(sysUser.getDept())) {
handlerUnitIds.add(sysUser.getDept().getDeptId());
handlerUnitNames.add(sysUser.getDept().getDeptName());
@@ -928,7 +969,7 @@
SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
if (Objects.nonNull(handlerUser)) {
handlerIds.add(handlerUserId);
- handlerNames.add(handlerUser.getNickName());
+ handlerNames.add(this.getUserShowName(handlerUser));
vo.setActualHandlerUserId(historicTasks.get(0).getAssignee());
vo.setActualHandlerUserName(handlerUser.getNickName());
}
@@ -962,6 +1003,9 @@
*/
private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) {
HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+ if (Objects.isNull(hisProcess)) {
+ return new ArrayList<>();
+ }
List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
CustomerTaskVO vo = new CustomerTaskVO();
vo.setProcessInsId(hisProcess.getId());
@@ -1058,7 +1102,7 @@
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
if (Objects.nonNull(sysUser)) {
taskVO.getHandlerId().add(sysUser.getUserId());
- taskVO.getHandlerName().add(sysUser.getNickName());
+ taskVO.getHandlerName().add(this.getUserShowName(sysUser));
if (Objects.nonNull(sysUser.getDept())) {
taskVO.getHandlerUnitId().add(sysUser.getDept().getDeptId());
taskVO.getHandlerUnitName().add(sysUser.getDept().getDeptName());
@@ -1246,9 +1290,9 @@
SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
if (Objects.nonNull(handlerUser)) {
vo.getHandlerId().add(handlerUserId);
- vo.getHandlerName().add(handlerUser.getNickName());
+ vo.getHandlerName().add(this.getUserShowName(handlerUser));
vo.setActualHandlerUserId(hisTask.getAssignee());
- vo.setActualHandlerUserName(handlerUser.getNickName());
+ vo.setActualHandlerUserName(this.getUserShowName(handlerUser));
}
vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey());
this.setPromoterAndHandler(vo, hisTask.getIdentityLinks());
@@ -1259,6 +1303,16 @@
}).collect(Collectors.toList());
result.data(vos);
return vos;
+ }
+
+ /**
+ * 鐢ㄦ埛鍚嶇О鍚庨潰璺熺數璇濆彿鐮�
+ *
+ * @param user
+ * @return
+ */
+ private String getUserShowName(SysUser user) {
+ return user.getNickName() + (StringUtils.isNotBlank(user.getPhonenumber()) ? "(" + user.getPhonenumber() + ")" : "");
}
/**
@@ -1835,7 +1889,7 @@
return user.getUserId() + "";
}).collect(Collectors.joining("銆�")));
taskVO.setPromoterName(userList.stream().map(user -> {
- return user.getNickName();
+ return this.getUserShowName(user);
}).collect(Collectors.joining("銆�")));
taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> {
return user.getDept().getDeptId() + "";
--
Gitblit v1.8.0