package org.dromara.workflow.controller; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.workflow.domain.bo.ProcessDefinitionBo; import org.dromara.workflow.domain.vo.ProcessDefinitionVo; import org.dromara.workflow.service.IActProcessDefinitionService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 流程定义管理 控制层 * * @author may */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/workflow/processDefinition") public class ActProcessDefinitionController extends BaseController { private final IActProcessDefinitionService actProcessDefinitionService; /** * 分页查询 * * @param bo 参数 */ @GetMapping("/list") public TableDataInfo page(ProcessDefinitionBo bo, PageQuery pageQuery) { return actProcessDefinitionService.page(bo, pageQuery); } /** * 查询历史流程定义列表 * * @param key 流程定义key */ @GetMapping("/getListByKey/{key}") public R> getListByKey(@NotEmpty(message = "流程定义key不能为空") @PathVariable String key) { return R.ok("操作成功", actProcessDefinitionService.getListByKey(key)); } /** * 查看流程定义图片 * * @param processDefinitionId 流程定义id */ @GetMapping("/definitionImage/{processDefinitionId}") public R definitionImage(@PathVariable String processDefinitionId) { return R.ok("操作成功", actProcessDefinitionService.definitionImage(processDefinitionId)); } /** * 查看流程定义xml文件 * * @param processDefinitionId 流程定义id */ @GetMapping("/definitionXml/{processDefinitionId}") public R> definitionXml(@NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { Map map = new HashMap<>(); String xmlStr = actProcessDefinitionService.definitionXml(processDefinitionId); map.put("xml", Arrays.asList(xmlStr.split("\n"))); map.put("xmlStr", xmlStr); return R.ok(map); } /** * 删除流程定义 * * @param deploymentIds 部署id * @param processDefinitionIds 流程定义id */ @Log(title = "流程定义管理", businessType = BusinessType.DELETE) @DeleteMapping("/{deploymentIds}/{processDefinitionIds}") public R deleteDeployment(@NotNull(message = "流程部署id不能为空") @PathVariable List deploymentIds, @NotNull(message = "流程定义id不能为空") @PathVariable List processDefinitionIds) { return toAjax(actProcessDefinitionService.deleteDeployment(deploymentIds, processDefinitionIds)); } /** * 激活或者挂起流程定义 * * @param processDefinitionId 流程定义id */ @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/updateDefinitionState/{processDefinitionId}") public R updateDefinitionState(@NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { return toAjax(actProcessDefinitionService.updateDefinitionState(processDefinitionId)); } /** * 迁移流程定义 * * @param currentProcessDefinitionId 当前流程定义id * @param fromProcessDefinitionId 需要迁移到的流程定义id */ @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/migrationDefinition/{currentProcessDefinitionId}/{fromProcessDefinitionId}") public R migrationDefinition(@NotBlank(message = "当前流程定义id") @PathVariable String currentProcessDefinitionId, @NotBlank(message = "需要迁移到的流程定义id") @PathVariable String fromProcessDefinitionId) { return toAjax(actProcessDefinitionService.migrationDefinition(currentProcessDefinitionId, fromProcessDefinitionId)); } /** * 流程定义转换为模型 * * @param processDefinitionId 流程定义id */ @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping("/convertToModel/{processDefinitionId}") public R convertToModel(@NotEmpty(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { return toAjax(actProcessDefinitionService.convertToModel(processDefinitionId)); } /** * 通过zip或xml部署流程定义 * * @param file 文件 * @param categoryCode 分类 */ @Log(title = "流程定义管理", businessType = BusinessType.INSERT) @PostMapping("/deployByFile") public void deployByFile(@RequestParam("file") MultipartFile file, @RequestParam("categoryCode") String categoryCode) { actProcessDefinitionService.deployByFile(file, categoryCode); } }