diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java index 07c9bd25c..a1e00b106 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApi.java @@ -2,12 +2,9 @@ package cn.iocoder.yudao.module.bpm.api.task; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceRespDTO; -import cn.iocoder.yudao.module.bpm.api.task.dto.BpmTaskRespDTO; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceGetRespDTO; import jakarta.validation.Valid; -import java.util.List; - /** * 流程实例 Api 接口 * @@ -24,20 +21,8 @@ public interface BpmProcessInstanceApi { */ String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO); - /** - * 查询流程 - * - * @param id 流程id - * @return + * 获得流程实例 */ - BpmProcessInstanceRespDTO getProcessInstance(String id); - - - /** - * 查询指定流程的任务 - * @param id 流程id - * @return - */ - List getTask(String id); + BpmProcessInstanceGetRespDTO getProcessInstance(String processInstanceId); } diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessDefinitionRespDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessDefinitionRespDTO.java deleted file mode 100644 index 2ebbe3ac9..000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessDefinitionRespDTO.java +++ /dev/null @@ -1,115 +0,0 @@ -package cn.iocoder.yudao.module.bpm.api.task.dto; - -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * 流程定义 - */ -@Data -public class BpmProcessDefinitionRespDTO { - /** - * 编号 - */ - private String id; - - /** - * 版本 - */ - private Integer version; - - /** - * 流程名称 - */ - private String name; - - /** - * 流程标识 - */ - private String key; - - /** - * 流程图标 - */ - private String icon; - - /** - * 流程描述 - */ - private String description; - - /** - * 流程分类 - */ - private String category; - /** - * 流程分类名字 - */ - private String categoryName; - - /** - * 表单类型 - */ - private Integer formType; - - /** - * 表单编号 - */ - private Long formId; - - /** - * 表单名字 - */ - private String formName; - /** - * 表单的配置 - */ - private String formConf; - - /** - * 表单项的数组 - */ - private List formFields; - - /** - * 自定义表单的提交路径 - */ - private String formCustomCreatePath; - - /** - * 自定义表单的查看路径 - */ - private String formCustomViewPath; - - /** - * 中断状态-参见 SuspensionState 枚举 - */ - private Integer suspensionState; // 参见 SuspensionState 枚举 - - /** - * 部署时间 - */ - private LocalDateTime deploymentTime; // 需要从对应的 Deployment 读取,非必须返回 - - /** - * BPMN XML - */ - private String bpmnXml; // 需要从对应的 BpmnModel 读取,非必须返回 - - /** - * 发起用户需要选择审批人的任务数组 - */ - private List startUserSelectTasks; // 需要从对应的 BpmnModel 读取,非必须返回 - - @Data - public static class UserTask { - - private String id; - - private String name; - - } - -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceGetRespDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceGetRespDTO.java new file mode 100644 index 000000000..668ebb2b9 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceGetRespDTO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.bpm.api.task.dto; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * 流程实例的创建 Request DTO + * + * @author 芋道源码 + */ +@Data +public class BpmProcessInstanceGetRespDTO { + + /** + * 流程实例状态 + */ + private Integer status; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceRespDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceRespDTO.java deleted file mode 100644 index 93d7272d0..000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmProcessInstanceRespDTO.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.yudao.module.bpm.api.task.dto; - -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * 流程实例的获得 Resp DTO - */ -@Data -public class BpmProcessInstanceRespDTO { - - /** - * 流程实例编号 - */ - private String id; - - /** - * 流程实例名称 - */ - private String name; - - /** - * 流程分类 - */ - private String category; - - /** - * 流程分类名称 - */ - private String categoryName; - - /** - * 流程实例状态 - */ - private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举 - - /** - * 发起时间 - */ - private LocalDateTime startTime; - - /** - * 结束时间 - */ - private LocalDateTime endTime; - - /** - * 持续时间 - */ - private Long durationInMillis; - - /** - * 发起流程的用户 - */ - private User startUser; - - /** - * 流程定义编号 - */ - - private String processDefinitionId; - /** - * 流程定义 - */ - private BpmProcessDefinitionRespDTO processDefinition; - - - /** - * 当前审批中的任务 - */ - private List tasks; // 仅在流程实例分页才返回 - - /** - * 用户信息 - */ - @Data - public static class User { - /** - * 用户编号 - */ - private Long id; - /** - * 用户名称 - */ - private String nickname; - /** - * 部门编号 - */ - private Long deptId; - /** - * 部门名称 - */ - private String deptName; - - } - - /** - * 流程任务 - */ - @Data - public static class Task { - - /** - * 流程任务编号 - */ - private String id; - - /** - * 任务名称 - */ - private String name; - - - } - -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmTaskRespDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmTaskRespDTO.java deleted file mode 100644 index c0d9da9a2..000000000 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/task/dto/BpmTaskRespDTO.java +++ /dev/null @@ -1,144 +0,0 @@ -package cn.iocoder.yudao.module.bpm.api.task.dto; - -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; - - -/** - * 指定流程实例的任务 - */ -@Data -public class BpmTaskRespDTO { - - /** - * 任务编号 - */ - private String id; - - /** - * 任务名字 - */ - private String name; - - /** - * 创建时间 - */ - - private LocalDateTime createTime; - - /** - * 结束时间 - */ - private LocalDateTime endTime; - - - /** - * 持续时间 - */ - private Long durationInMillis; - - /** - * 任务状态 - */ - private Integer status; // 参见 BpmTaskStatusEnum 枚举 - - /** - * 审批理由 - */ - private String reason; - - /** - * 负责人的用户信息 - */ - private BpmProcessInstanceRespDTO.User ownerUser; - /** - * 审核的用户信息 - */ - private BpmProcessInstanceRespDTO.User assigneeUser; - - /** - * 任务定义的标识 - */ - private String taskDefinitionKey; - - /** - * 所属流程实例编号 - */ - private String processInstanceId; - /** - * 所属流程实例 - */ - private ProcessInstance processInstance; - - /** - * 父任务编号 - */ - private String parentTaskId; - - /** - * 子任务列表(由加签生成) - */ - private List children; - - /** - * 表单编号 - */ - private Long formId; - - /** - * 表单名字 - */ - private String formName; - - /** - * 表单的配置-JSON 字符串 - */ - private String formConf; - - /** - * 表单项的数组 - */ - private List formFields; - - /** - * 提交的表单值 - */ - private Map formVariables; - - - /** - * 流程实例 - */ - @Data - public static class ProcessInstance { - - /** - * 流程实例编号 - */ - private String id; - - /** - * 流程实例名称 - */ - private String name; - - /** - * 提交时间 - */ - private LocalDateTime createTime; - - /** - * 流程定义的编号 - */ - private String processDefinitionId; - - /** - * 发起人的用户信息 - */ - private BpmProcessInstanceRespDTO.User startUser; - - } -} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java index ec167719c..6de577cab 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java @@ -36,6 +36,7 @@ public interface ErrorCodeConstants { ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF = new ErrorCode(1_009_004_002, "流程取消失败,该流程不是你发起的"); ErrorCode PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_CONFIG = new ErrorCode(1_009_004_003, "审批任务({})的审批人未配置"); ErrorCode PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_EXISTS = new ErrorCode(1_009_004_004, "审批任务({})的审批人({})不存在"); + ErrorCode PROCESS_INSTANCE_NOT_END = new ErrorCode(1_009_004_005, "流程实例创建失败,该流程还未结束"); // ========== 流程任务 1-009-005-000 ========== ErrorCode TASK_OPERATE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "操作失败,原因:该任务的审批人不是你"); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java index 346116d47..ada164827 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/task/BpmProcessInstanceApiImpl.java @@ -1,41 +1,28 @@ package cn.iocoder.yudao.module.bpm.api.task; -import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceRespDTO; -import cn.iocoder.yudao.module.bpm.api.task.dto.BpmTaskRespDTO; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceGetRespDTO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; -import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; -import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; -import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; -import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.ProcessDefinition; -import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; import jakarta.validation.Valid; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** * Flowable 流程实例 Api 实现类 @@ -50,29 +37,22 @@ public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi { @Resource private BpmProcessInstanceService processInstanceService; + @Resource + private BpmProcessDefinitionService processDefinitionService; + @Resource private AdminUserApi adminUserApi; @Resource private DeptApi deptApi; - @Resource - private BpmProcessDefinitionService processDefinitionService; - - @Resource - private BpmTaskService taskService; - - @Resource - private BpmFormService formService; - @Override public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO) { return processInstanceService.createProcessInstance(userId, reqDTO); } @Override - public BpmProcessInstanceRespDTO getProcessInstance(String id) { - + public BpmProcessInstanceGetRespDTO getProcessInstance(String id) { HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(id); if (processInstance == null) { return null; @@ -83,46 +63,17 @@ public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi { processInstance.getProcessDefinitionId()); BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo( processInstance.getProcessDefinitionId()); - String bpmnXml = BpmnModelUtils.getBpmnXml( processDefinitionService.getProcessDefinitionBpmnModel(processInstance.getProcessDefinitionId())); - AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())); DeptRespDTO dept = null; if (startUser != null) { dept = deptApi.getDept(startUser.getDeptId()); } + BpmProcessInstanceRespVO bpmProcessInstanceRespVO = BpmProcessInstanceConvert.INSTANCE.buildProcessInstance(processInstance, processDefinition, processDefinitionInfo, bpmnXml, startUser, dept); - - return BeanUtils.toBean(bpmProcessInstanceRespVO, BpmProcessInstanceRespDTO.class); - - } - - //List - @Override - public List getTask(String id) { - List taskList = taskService.getTaskListByProcessInstanceId(id); - if (CollUtil.isEmpty(taskList)) { - return null; - } - - // 拼接数据 - HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(id); - // 获得 User 和 Dept Map - Set userIds = convertSetByFlatMap(taskList, task -> - Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner()))); - userIds.add(NumberUtils.parseLong(processInstance.getStartUserId())); - Map userMap = adminUserApi.getUserMap(userIds); - Map deptMap = deptApi.getDeptMap( - convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); - // 获得 Form Map - Map formMap = formService.getFormMap( - convertSet(taskList, task -> NumberUtils.parseLong(task.getFormKey()))); - List bpmTaskRespVOS = BpmTaskConvert.INSTANCE.buildTaskListByProcessInstanceId(taskList, processInstance, - formMap, userMap, deptMap); - return BeanUtils.toBean(bpmTaskRespVOS, BpmTaskRespDTO.class); - + return BeanUtils.toBean(bpmProcessInstanceRespVO, BpmProcessInstanceGetRespDTO.class); } diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java index 656da8b34..4286b66dc 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java @@ -16,6 +16,7 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.*; import jakarta.servlet.http.*; + import java.util.*; import java.io.IOException; @@ -23,11 +24,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; + import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -45,14 +48,14 @@ public class ExtContractController { @Operation(summary = "创建外部合同") @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:create')") public CommonResult createExtContract(@Valid @RequestBody ExtContractSaveReqVO createReqVO) { - return success(extContractService.createExtContract(getLoginUserId(),createReqVO)); + return success(extContractService.createExtContract(getLoginUserId(), createReqVO)); } @PutMapping("/update") @Operation(summary = "更新外部合同") @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:update')") public CommonResult updateExtContract(@Valid @RequestBody ExtContractSaveReqVO updateReqVO) { - extContractService.updateExtContract(getLoginUserId(),updateReqVO); + extContractService.updateExtContract(getLoginUserId(), updateReqVO); return success(true); } @@ -92,12 +95,20 @@ public class ExtContractController { @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:export')") @ApiAccessLog(operateType = EXPORT) public void exportExtContractExcel(@Valid ExtContractPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = extContractService.getExtContractPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "外部合同.xls", "数据", ExtContractRespVO.class, - BeanUtils.toBean(list, ExtContractRespVO.class)); + BeanUtils.toBean(list, ExtContractRespVO.class)); + } + + @PostMapping("/create_process") + @Operation(summary = "创建流程") + @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:create')") + public CommonResult createExtContractProcess(@RequestParam("id") Long id) { + String processId = extContractService.createProcess(getLoginUserId(), id); + return success(processId); } } \ No newline at end of file diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java index d70247c83..3083407c7 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java @@ -24,17 +24,14 @@ public class ExtContractHistoryPageReqVO extends PageParam { @DictFormat(DictTypeConstants.CONTRACT_TYPE) private String type; - @Schema(description = "状态", example = "1") + @Schema(description = "合同状态", example = "1") @DictFormat(DictTypeConstants.CONTRACT_STATUS) private String status; - @Schema(description = "流程状态", example = "2") + @Schema(description = "流程状态") @DictFormat(DictTypeConstants.PROCESS_STATUS) private Integer processStatus; - @Schema(description = "合同id", example = "26795") - private Long contractId; - @Schema(description = "外部合同id", example = "12093") private Long extContractId; diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java index cf8e60011..55ce04f2e 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java @@ -133,7 +133,7 @@ public class ExtContractHistorySaveReqVO { @ExcelProperty("流程实体id") private String processInstanceId; - @Schema(description = "流程状态", example = "2") + @Schema(description = "流程状态") @ExcelProperty(value = "流程状态", converter = DictConvert.class) @DictFormat(DictTypeConstants.PROCESS_STATUS) private Integer processStatus; diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java index 30ec8fafa..99bb3270d 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java @@ -8,9 +8,6 @@ import cn.iocoder.yudao.module.cms.dal.dataobject.extcontract.ExtContractDetailD import jakarta.validation.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import java.time.LocalDateTime; -import java.util.List; - /** * 外部合同 Service 接口 * @@ -56,5 +53,13 @@ public interface ExtContractService { */ PageResult getExtContractPage(ExtContractPageReqVO pageReqVO); + /** + * + * @param loginUserId 当前登录的用户id + * @param id 外部合同id + * @return 流程id + */ + String createProcess(Long loginUserId,Long id); + } \ No newline at end of file diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java index 1810c2ce1..c4d11bd8d 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java @@ -1,4 +1,5 @@ package cn.iocoder.yudao.module.cms.service.extContract; + import cn.hutool.core.bean.BeanUtil; import cn.iocoder.yudao.framework.common.util.file.FileUtils; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; @@ -26,6 +27,7 @@ import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_NOT_END; import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*; /** @@ -61,6 +63,8 @@ public class ExtContractServiceImpl implements ExtContractService { @Resource private ExtContractHistoryMapper extContractHistoryMapper; + @Resource + private BpmProcessInstanceApi bpmProcessInstanceApi; @Override @@ -74,7 +78,7 @@ public class ExtContractServiceImpl implements ExtContractService { projectTrackingApi.validateProjectExists(projectId); List extContractList = extContractMapper.selectList("project_id", projectId); for (ExtContractDO extContractDO : extContractList) { - if (extContractDO.getName().equals(trimName)){ + if (extContractDO.getName().equals(trimName)) { throw exception(EXT_CONTRACT_EXISTS); } } @@ -90,15 +94,13 @@ public class ExtContractServiceImpl implements ExtContractService { //版本 if (extContractHistoryMapper.selectCount("project_id", createReqVO.getProjectId()) < 1) { extContractHistoryDO.setVersion("1"); - }else{ + } else { extContractHistoryDO.setVersion(String.valueOf(extContractHistoryMapper.selectCount("project_id", createReqVO.getProjectId()) + 1)); } //状态 extContractHistoryDO.setProcessStatus(1); - extContractHistoryMapper.insert(extContractHistoryDO); - // 启动流程 if (createReqVO.getId() == null) { String processInstanceId = processInstanceApi.createProcessInstance(loginUserId, @@ -145,8 +147,8 @@ public class ExtContractServiceImpl implements ExtContractService { ProjectScheduleDetailDTO projectScheduleDetail = projectScheduleApi.getProjectScheduleDetail(projectId); ProjectTrackingDetailDTO projectTracking = projectTrackingApi.getProjectTracking(projectId); BeanUtil.copyProperties(extContractDO, extContractDetailDO); - BeanUtil.copyProperties(projectTracking,extContractDetailDO); - BeanUtil.copyProperties(projectScheduleDetail,extContractDetailDO); + BeanUtil.copyProperties(projectTracking, extContractDetailDO); + BeanUtil.copyProperties(projectScheduleDetail, extContractDetailDO); return extContractDetailDO; } @@ -168,6 +170,27 @@ public class ExtContractServiceImpl implements ExtContractService { return pageResult; } + @Override + public String createProcess(Long loginUserId, Long id) { + //拿出该合同的当前流程 + ExtContractHistoryDO extContractHistoryDO = extContractHistoryMapper.selectOne("ext_contract_id", id); + String processInstanceId0 = extContractHistoryDO.getProcessInstanceId(); + //流程引擎里的最新状态 + Integer status = bpmProcessInstanceApi.getProcessInstance(processInstanceId0).getStatus(); + if (status == 1) { + throw exception(PROCESS_INSTANCE_NOT_END); + } + + //创建新的流程 + String processInstanceId = processInstanceApi.createProcessInstance(loginUserId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setBusinessKey(String.valueOf(id))); + // 写入工作流编号 + extContractHistoryMapper.updateById(extContractHistoryDO.setProcessInstanceId(processInstanceId).setProcessStatus(status)); + + return processInstanceId; + } + private void validateExtContractExists(Long id) { if (extContractMapper.selectById(id) == null) { throw exception(EXT_CONTRACT_NOT_EXISTS);