business/src/main/java/com/ycl/controller/ProjectProcessController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
business/src/main/java/com/ycl/domain/form/TaskSuperviseForm.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
business/src/main/java/com/ycl/domain/json/SuperviseData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
business/src/main/java/com/ycl/event/event/TaskLogEvent.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
business/src/main/java/com/ycl/event/listener/ProcessLogEventListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
business/src/main/java/com/ycl/service/ProjectProcessService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
common/src/main/java/com/ycl/common/enums/business/ProcessLogEventTypeEnum.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
common/src/main/java/com/ycl/common/enums/business/SuperviseTypeEnum.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
business/src/main/java/com/ycl/controller/ProjectProcessController.java
@@ -2,9 +2,7 @@ import com.ycl.common.group.Update; import com.ycl.common.group.Add; import com.ycl.domain.form.RejectTaskForm; import com.ycl.domain.form.TaskDelegationForm; import com.ycl.domain.form.TaskJumpForm; import com.ycl.domain.form.*; import com.ycl.domain.query.TaskQuery; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; @@ -20,7 +18,6 @@ import io.swagger.annotations.ApiOperation; import com.ycl.service.ProjectProcessService; import com.ycl.common.base.Result; import com.ycl.domain.form.ProjectProcessForm; import com.ycl.domain.query.ProjectProcessQuery; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -116,4 +113,10 @@ } @PostMapping("/detail/task/supervise") @ApiOperation(value = "督办", notes = "督办") // @PreAuthorize("@ss.hasPermi('projectProcess:detail')") public Result taskSupervise(@Validated @RequestBody TaskSuperviseForm form) { return projectProcessService.taskSupervise(form); } } business/src/main/java/com/ycl/domain/form/TaskSuperviseForm.java
New file @@ -0,0 +1,47 @@ package com.ycl.domain.form; import com.ycl.common.enums.business.HandlerTypeEnum; import com.ycl.common.enums.business.SuperviseTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import java.util.List; /** * 督办表单 * * @author:xp * @date:2024/12/13 13:51 */ @Data @ApiModel("督办表单") public class TaskSuperviseForm { /** * 当前任务id * */ @NotBlank(message = "任务id不能为空") private String taskId; @ApiModelProperty("项目id,用于保存日志") private Long projectId; @ApiModelProperty("流程实例id,用于保存日志") private String processInsId; @ApiModelProperty("接收人") private List<String> receiverIds; @ApiModelProperty("接收人类型") private HandlerTypeEnum receiverType; @ApiModelProperty("消息类型") private SuperviseTypeEnum superviseType; @ApiModelProperty("内容") @NotBlank(message = "督办内容不能为空") private String content; } business/src/main/java/com/ycl/domain/json/SuperviseData.java
New file @@ -0,0 +1,52 @@ package com.ycl.domain.json; import com.ycl.common.enums.business.HandlerTypeEnum; import com.ycl.common.enums.business.SuperviseTypeEnum; import lombok.Data; import java.util.Date; import java.util.List; /** * 任务督办的json日志数据 * * @author:xp * @date:2025/1/2 14:39 */ @Data public class SuperviseData { /** * 发送人 */ private String senderId; /** * 发送人类型 */ private HandlerTypeEnum senderType; /** * 接收人 */ private List<String> receiverIds; /** * 接收人类型 */ private HandlerTypeEnum receiverType; /** * 消息类型是 督办 or 回复 */ private SuperviseTypeEnum superviseType; /** * 消息内容 */ private String content; /** * 创建时间 */ private Date createTime; } business/src/main/java/com/ycl/event/event/TaskLogEvent.java
@@ -15,7 +15,14 @@ @Getter @Setter public class TaskLogEvent extends ApplicationEvent { /** * id */ private Long id; /** * 用户id */ private Long userId; /** * 项目id */ @@ -51,8 +58,10 @@ * @param taskId 任务id * @param otherData 其它数据 */ public TaskLogEvent(Object source, Long projectId, String processInsId, String taskId, ProcessLogEventTypeEnum eventType, Object otherData) { public TaskLogEvent(Object source,Long id,Long userId, Long projectId, String processInsId, String taskId, ProcessLogEventTypeEnum eventType, Object otherData) { super(source); this.id = id; this.userId = userId; this.projectId = projectId; this.processInsId = processInsId; this.eventType = eventType; business/src/main/java/com/ycl/event/listener/ProcessLogEventListener.java
@@ -30,6 +30,7 @@ @EventListener(classes = {TaskLogEvent.class}) public void delegate(TaskLogEvent event) { ProcessLog log = new ProcessLog(); if(event.getId()!=null) log.setId(event.getId()); log.setEventType(event.getEventType()); log.setProcessInsId(event.getProcessInsId()); log.setProjectId(event.getProjectId()); @@ -38,7 +39,7 @@ if (Objects.nonNull(event.getOtherData())) { log.setEventDataJson(JSON.toJSONString(event.getOtherData())); } processLogService.save(log); processLogService.saveOrUpdate(log); } business/src/main/java/com/ycl/service/ProjectProcessService.java
@@ -3,10 +3,7 @@ import com.ycl.domain.entity.ProjectProcess; import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.common.base.Result; import com.ycl.domain.form.ProjectProcessForm; import com.ycl.domain.form.RejectTaskForm; import com.ycl.domain.form.TaskDelegationForm; import com.ycl.domain.form.TaskJumpForm; import com.ycl.domain.form.*; import com.ycl.domain.query.ProjectProcessQuery; import com.ycl.domain.query.TaskQuery; import com.ycl.domain.vo.CustomerTaskVO; @@ -107,4 +104,6 @@ * @return */ Result taskJump(TaskJumpForm form); Result taskSupervise(TaskSuperviseForm form); } business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -1,7 +1,10 @@ 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; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; @@ -12,27 +15,24 @@ 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.utils.SecurityUtils; import com.ycl.constant.TaskTypeConstant; import com.ycl.domain.entity.ProcessCoding; import com.ycl.domain.entity.ProjectInfo; import com.ycl.domain.entity.ProjectProcess; import com.ycl.domain.entity.SysForm; import com.ycl.domain.entity.*; import com.ycl.domain.form.TaskDelegationForm; import com.ycl.domain.form.TaskJumpForm; import com.ycl.domain.form.TaskSuperviseForm; import com.ycl.domain.json.DelegateData; import com.ycl.domain.json.JumpData; import com.ycl.domain.json.SuperviseData; import com.ycl.domain.vo.CustomerTaskVO; import com.ycl.domain.vo.IndexCustomerTaskVO; import com.ycl.domain.vo.ProjectProcessDetailVO; import com.ycl.event.event.TaskLogEvent; import com.ycl.mapper.ProjectInfoMapper; import com.ycl.mapper.ProjectProcessMapper; import com.ycl.service.IFlowTaskService; import com.ycl.service.ISysFormService; import com.ycl.service.ProcessCodingService; import com.ycl.service.ProjectProcessService; import com.ycl.service.*; import com.ycl.common.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.domain.form.ProjectProcessForm; @@ -93,6 +93,7 @@ private final ProcessCodingService processCodingService; private final ApplicationEventPublisher publisher; private final ISysDeptService deptService; private final ProcessLogService processLogService; /** * 分页查询 @@ -610,7 +611,7 @@ jsonData.setAfterHandlerIds(afterHandlerIds); jsonData.setAfterHandlerType(form.getPeopleType()); // 发布转办事件 publisher.publishEvent(new TaskLogEvent(this, form.getProjectId(), form.getProcessInsId(), task.getId(), ProcessLogEventTypeEnum.DELEGATE, jsonData)); publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), ProcessLogEventTypeEnum.DELEGATE, jsonData)); return Result.ok("转办成功"); } @@ -621,7 +622,7 @@ Task task = taskService.createTaskQuery().taskId(form.getTaskId()).processInstanceId(form.getProcessInsId()).singleResult(); if (Objects.nonNull(task)) { // 添加跳过日志 publisher.publishEvent(new TaskLogEvent(this, form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc()))); publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc()))); // 查出该任务绑定的表单 Map<String, Object> data = new HashMap<>(1); @@ -634,6 +635,37 @@ // 完成任务 flowTaskService.completeSubmitForm(form.getTaskId(), data); } return Result.ok("操作成功"); } @Override public Result taskSupervise(TaskSuperviseForm form) { SuperviseData jsonData = new SuperviseData(); jsonData.setCreateTime(new Date()); jsonData.setContent(form.getContent()); jsonData.setSenderId(SecurityUtils.getUserId() + ""); jsonData.setSenderType(HandlerTypeEnum.USER); jsonData.setReceiverIds(form.getReceiverIds()); jsonData.setReceiverType(form.getReceiverType()); jsonData.setSuperviseType(form.getSuperviseType()); QueryWrapper<ProcessLog> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("task_id", form.getTaskId()); queryWrapper.eq("event_type", ProcessLogEventTypeEnum.SUPERVISE); queryWrapper.eq("process_ins_id", form.getProcessInsId()); //查询督办日志 ProcessLog processLog = processLogService.getOne(queryWrapper); List<SuperviseData> dataList; if (processLog != null) { String eventDataJson = processLog.getEventDataJson(); dataList = JSONArray.parseArray(eventDataJson, SuperviseData.class); } else { processLog = new ProcessLog(); processLog.setUserId(SecurityUtils.getUserId()); dataList = new ArrayList<>(); } dataList.add(jsonData); //添加督办日志 publisher.publishEvent(new TaskLogEvent(this, processLog.getId(), processLog.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.SUPERVISE, dataList)); return Result.ok("操作成功"); } @@ -758,8 +790,7 @@ if (groupId.contains(ProcessConstants.DATA_LAUNCH)) { vo.setHandlerType(HandlerTypeEnum.DEPT); this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT); } else if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 } else if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 vo.setHandlerType(HandlerTypeEnum.DEPT); String[] split = groupId.split(":"); if (split.length > 1) { @@ -1424,7 +1455,6 @@ List<UserTask> userTasks = allUserTaskElement.subList(startNum, end); // 判断任务状态,构建vo List<CustomerTaskVO> vos = new ArrayList<>(48); for (UserTask userTask : userTasks) { @@ -1464,8 +1494,7 @@ if (groupId.contains(ProcessConstants.DATA_LAUNCH)) { vo.setHandlerType(HandlerTypeEnum.DEPT); this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT); } else if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 } else if (groupId.startsWith("dept")) { // 部门的id是加了前缀的如:dept:1 vo.setHandlerType(HandlerTypeEnum.DEPT); String[] split = groupId.split(":"); if (split.length > 1) { @@ -1698,10 +1727,18 @@ taskVO.setPromoterName("暂无"); taskVO.setPromoterUnitName("暂无"); } else { taskVO.setPromoterId(userList.stream().map(user -> { return user.getUserId() + ""; }).collect(Collectors.joining("、"))); taskVO.setPromoterName(userList.stream().map(user -> { return user.getNickName(); }).collect(Collectors.joining("、"))); taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { return user.getDept().getDeptId() + "";}).collect(Collectors.joining("、"))); taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { return user.getDept().getDeptName() + "";}).collect(Collectors.joining("、"))); taskVO.setPromoterId(userList.stream().map(user -> { return user.getUserId() + ""; }).collect(Collectors.joining("、"))); taskVO.setPromoterName(userList.stream().map(user -> { return user.getNickName(); }).collect(Collectors.joining("、"))); taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { return user.getDept().getDeptId() + ""; }).collect(Collectors.joining("、"))); taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { return user.getDept().getDeptName() + ""; }).collect(Collectors.joining("、"))); } } common/src/main/java/com/ycl/common/enums/business/ProcessLogEventTypeEnum.java
@@ -17,6 +17,7 @@ FINISHED("FINISHED", "完成"), TEAM_WORK("TEAM_WORK", "协同办理"), JUMP("JUMP", "跳过"), SUPERVISE("SUPERVISE", "督办"), ; common/src/main/java/com/ycl/common/enums/business/SuperviseTypeEnum.java
New file @@ -0,0 +1,31 @@ package com.ycl.common.enums.business; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.Getter; /** * 督办类型 督办 or 回复 * * @author:xp * @date:2024/11/29 11:13 */ @Getter public enum SuperviseTypeEnum { SUPERVISE("SUPERVISE", "督办"), REPLY("REPLY", "回复"), ; @EnumValue @JsonValue private final String value; private final String desc; SuperviseTypeEnum(String value, String desc) { this.value = value; this.desc = desc; } }