zxl
2025-12-11 ad7cbfd8fd19fcce4345a4907c1f059a34c2869b
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -8,7 +8,6 @@
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.ycl.common.constant.ProcessConstants;
import com.ycl.common.constant.ProcessOverTimeConstants;
import com.ycl.common.core.domain.AjaxResult;
import com.ycl.common.core.domain.entity.SysDept;
import com.ycl.common.core.domain.entity.SysDictData;
import com.ycl.common.core.domain.entity.SysRole;
@@ -96,7 +95,7 @@
    private final ProcessLogService processLogService;
    private final ISysDictTypeService dictTypeService;
    private final ProcessConfigInfoService processConfigInfoService;
    private final AuditHistoryService auditHistoryService;
    /**
     * 分页查询
     *
@@ -199,6 +198,7 @@
    public Result startProcess(ProjectProcessForm form) {
        Long unitId = null;
        if (ProjectProcessTypeEnum.PROJECT.equals(form.getProjectType())) {
            //获得项目信息
            ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper)
                    .eq(ProjectInfo::getId, form.getProjectId())
                    .one();
@@ -207,6 +207,7 @@
            }
            unitId = project.getProjectOwnerUnit();
        } else if (ProjectProcessTypeEnum.ENGINEERING.equals(form.getProjectType())) {
            //获得工程信息
            ProjectEngineering projectEngineering = new LambdaQueryChainWrapper<>(projectEngineeringMapper)
                    .eq(ProjectEngineering::getId, form.getProjectId())
                    .one();
@@ -219,7 +220,9 @@
        if (Objects.isNull(dept)) {
            throw new RuntimeException("业主单位不存在");
        }
        //启动流程
        String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId(), dept.getDeptId());
        //插入项目流程信息表
        ProjectProcess entity = new ProjectProcess();
        entity.setProjectId(form.getProjectId());
        entity.setProcessDefId(form.getProcessDefId());
@@ -242,7 +245,7 @@
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId)
                .latestVersion().singleResult();
                .latestVersion().singleResult();// 查询最新版本的流程定义 流程定义对象
        if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
            throw new RuntimeException("该流程已被挂起,请先激活流程");
        }
@@ -254,6 +257,7 @@
        // 将该项目的申请人(业主方)作为流程中某些环节的处理人
        variables.put(ProcessConstants.DATA_LAUNCH, "dept:" + createBy);
        variables.put("a", 1);
        //将参数放入flowable流程引擎并启动流程
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId + "", variables);
        return processInstance.getId();
    }
@@ -736,6 +740,7 @@
        if (Objects.isNull(task)) {
            throw new RuntimeException("未在运行任务中找到该任务,无法执行转办操作");
        }
        //通过IdentityLink(身份链接)获取任务的原处理人 / 组,分两种情况清理:
        List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
        // 转办之前的处理人
        List<String> beforeHandlerIds = new ArrayList<>(2);
@@ -810,9 +815,44 @@
        // 发布转办事件
        publisher.publishEvent(new TaskLogEvent(this, null, SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), task.getTaskDefinitionKey(), task.getName(), ProcessLogEventTypeEnum.DELEGATE, jsonData));
        AuditHistoryForm auditHistoryForm =
                buildForm(task.getId(),
                        task.getTaskDefinitionKey(),
                        null,
                        SecurityUtils.getDeptId() + "",
                        AuditTypeEnum.Submit.name(),
                        form.getProjectId(),
                        "t_project_info",
                        task.getName()
                );
        auditHistoryService.add(auditHistoryForm);
        return Result.ok("转办成功");
    }
    public AuditHistoryForm buildForm(
            String taskId,
            String taskDefinitionKey,
            String viewer,
            String commitDept,
            String auditType,
            String businessKey,
            String businessTable,
            String content) {
        AuditHistoryForm auditHistoryForm = new AuditHistoryForm();
        auditHistoryForm.setTaskId(taskId);
        auditHistoryForm.setTaskDefinitionKey(taskDefinitionKey);
        auditHistoryForm.setViewer(viewer);
        auditHistoryForm.setCommitDept(commitDept);
        auditHistoryForm.setAuditType(auditType);
        auditHistoryForm.setBusinessKey(businessKey);
        auditHistoryForm.setBusinessTable(businessTable);
        auditHistoryForm.setContent(content);
        // 5. 特殊字段默认值:isRead 默认为 (未读)
        auditHistoryForm.setIsRead(AuditHistoryEnum.UN_READ.name());
        return auditHistoryForm;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result taskJump(TaskJumpForm form) {
@@ -1057,7 +1097,7 @@
     * @param result
     */
    public void getTodoTaskList(String projectId, String processInsId, String taskName, int pageSize, int pageNum, Result result) {
        //TODO 看看如何获得人员信息的
        TaskQuery taskQuery = taskService.createTaskQuery()
                .active()
                .processInstanceId(processInsId)
@@ -1720,7 +1760,8 @@
     * @param hisTaskList
     * @return
     */
    private List<HistoricTaskInstance> distinctHisTask(List<HistoricTaskInstance> hisTaskList) {
    @Override
    public List<HistoricTaskInstance> distinctHisTask(List<HistoricTaskInstance> hisTaskList) {
        Map<String, HistoricTaskInstance> uniqueTasks = new HashMap<>();
        for (HistoricTaskInstance task : hisTaskList) {
            String taskDefinitionKey = task.getTaskDefinitionKey();