From ad6a05f2535c1f29a764f352d8ca666cae1b97d1 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期六, 22 二月 2025 17:06:28 +0800 Subject: [PATCH] Merge branch 'master' of http://42.193.1.25:9521/r/project_management-java --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 122 ++++++++++++++++++++++++++++++++-------- 1 files changed, 96 insertions(+), 26 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 6ac5ced..6ce896f 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -1,7 +1,6 @@ package com.ycl.service.impl; -import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -11,20 +10,15 @@ import com.ycl.common.constant.ProcessConstants; import com.ycl.common.constant.ProcessOverTimeConstants; import com.ycl.common.core.domain.entity.SysDept; +import com.ycl.common.core.domain.entity.SysDictData; import com.ycl.common.core.domain.entity.SysRole; import com.ycl.common.core.domain.entity.SysUser; -import com.ycl.common.enums.business.HandlerTypeEnum; -import com.ycl.common.enums.business.ProcessLogEventTypeEnum; -import com.ycl.common.enums.business.SuperviseTypeEnum; -import com.ycl.common.enums.business.TaskStatusEnum; +import com.ycl.common.enums.business.*; import com.ycl.common.utils.SecurityUtils; import com.ycl.constant.TaskTypeConstant; import com.ycl.domain.entity.*; import com.ycl.domain.form.*; -import com.ycl.domain.json.DelegateData; -import com.ycl.domain.json.HangupData; -import com.ycl.domain.json.JumpData; -import com.ycl.domain.json.SuperviseData; +import com.ycl.domain.json.*; import com.ycl.domain.vo.CustomerTaskVO; import com.ycl.domain.vo.IndexCustomerTaskVO; import com.ycl.domain.vo.ProjectProcessDetailVO; @@ -38,6 +32,7 @@ import com.ycl.domain.query.ProjectProcessQuery; import com.ycl.service.common.TaskCommonService; import com.ycl.system.service.ISysDeptService; +import com.ycl.system.service.ISysDictTypeService; import com.ycl.system.service.ISysRoleService; import com.ycl.system.service.ISysUserService; import lombok.Synchronized; @@ -93,6 +88,8 @@ private final ApplicationEventPublisher publisher; private final ISysDeptService deptService; private final ProcessLogService processLogService; + private final ISysDictTypeService dictTypeService; + private final ProcessConfigInfoService processConfigInfoService; /** * 鍒嗛〉鏌ヨ @@ -143,22 +140,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,23 +164,20 @@ @Override @Transactional(rollbackFor = Exception.class) public Result startProcess(Long projectId, String processDefId) { - ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper) - .select(ProjectInfo::getCreateBy) - .eq(ProjectInfo::getId, projectId) - .one(); + ProjectInfo project = projectInfoMapper.selectById(projectId); 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("娴佺▼鍚姩鎴愬姛"); @@ -413,6 +407,20 @@ 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 = ((new Date()).getTime() - processCoding.getStartTaskTime().getTime()) / 1000; + + taskVO.setRemainingTime((overtime - durationTime) / 3600 + "灏忔椂"); + } else { + taskVO.setRemainingTime("-"); + } + } this.distinctVo(taskVO); vos.add(taskVO); } @@ -420,6 +428,23 @@ 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 @@ -613,7 +638,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("杞姙鎴愬姛"); } @@ -624,7 +649,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); @@ -668,7 +693,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("鎿嶄綔鎴愬姛"); } @@ -698,7 +723,7 @@ task.getName(), ProcessLogEventTypeEnum.HANGUP, new HangupData(form.getReason()) - )); + )); return Result.ok("鎿嶄綔鎴愬姛"); } @@ -731,6 +756,51 @@ return Result.ok("鎿嶄綔鎴愬姛"); } + @Override + public Result taskTeamwork(TaskTeamWorkForm form) { + Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + return Result.error("浠诲姟涓嶅瓨鍦�"); + } + ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper) + .eq(ProjectProcess::getProcessInsId, task.getProcessInstanceId()) + .eq(ProjectProcess::getProcessDefId, task.getProcessDefinitionId()) + .one(); + if (Objects.isNull(projectProcess)) { + return Result.error("椤圭洰娴佺▼鏈粦瀹�"); + } + // 1. 淇濆瓨鍙戣捣浜哄~鍐欑殑琛ㄥ崟鏁版嵁锛屼絾涓嶇洿鎺ュ畬鎴愯浠诲姟銆傛彁浜ゅ悗浠诲姟澶勭悊浜哄繀椤荤瓑鍒板崗鍚屼汉澶勭悊瀹屼箣鍚庢墠鑳藉畬鎴愪换鍔� + Map<String, Object> processVariables = new HashMap<>(); + //鏌ュ嚭瀛楀吀涓渶瑕佹敞鍏ョ殑瀛楁淇℃伅 + List<String> dictList = dictTypeService.selectDictDataByType("flow_variables").stream().map(SysDictData::getDictValue).collect(Collectors.toList()); + Map<String, Object> newV = new HashMap<>(2); + if (!org.springframework.util.CollectionUtils.isEmpty(form.getVariables())) { + for (String key : form.getVariables().keySet()) { + 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)); + } + } + } + if (!processVariables.isEmpty()) { + taskService.setVariables(form.getTaskId(), processVariables); + } + + // 2. 淇濆瓨鏃ュ織 + publisher.publishEvent(new TaskLogEvent(this, + null, + SecurityUtils.getUserId(), + form.getProjectId(), + form.getProcessInsId(), + form.getTaskId(), + task.getName(), + ProcessLogEventTypeEnum.TEAM_WORK, + new TeamWorkData(form.getHandlerType(), form.getHandlerIds(), TeamWorkStatusEnum.NOT_FINISHED) + )); + return Result.ok("鎿嶄綔鎴愬姛"); + } + /** * 鏌ヨ寰呭姙浠诲姟 * -- Gitblit v1.8.0