package org.dromara.workflow.controller; import jakarta.servlet.http.HttpServletResponse; 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.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.orm.entity.FlowDefinition; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.service.IFlwDefinitionService; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; /** * 流程定义管理 控制层 * * @author may */ @ConditionalOnEnable @Validated @RequiredArgsConstructor @RestController @RequestMapping("/workflow/definition") public class FlwDefinitionController extends BaseController { private final DefService defService; private final IFlwDefinitionService flwDefinitionService; /** * 查询流程定义列表 * * @param flowDefinition 参数 * @param pageQuery 分页 */ @GetMapping("/list") public TableDataInfo list(FlowDefinition flowDefinition, PageQuery pageQuery) { return flwDefinitionService.queryList(flowDefinition, pageQuery); } /** * 查询未发布的流程定义列表 * * @param flowDefinition 参数 * @param pageQuery 分页 */ @GetMapping("/unPublishList") public TableDataInfo unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery) { return flwDefinitionService.unPublishList(flowDefinition, pageQuery); } /** * 获取流程定义详细信息 * * @param id 流程定义id */ @GetMapping(value = "/{id}") public R getInfo(@PathVariable Long id) { return R.ok(defService.getById(id)); } /** * 新增流程定义 * * @param flowDefinition 参数 */ @Log(title = "流程定义", businessType = BusinessType.INSERT) @PostMapping @RepeatSubmit() @Transactional(rollbackFor = Exception.class) public R add(@RequestBody FlowDefinition flowDefinition) { return R.ok(defService.checkAndSave(flowDefinition)); } /** * 修改流程定义 * * @param flowDefinition 参数 */ @Log(title = "流程定义", businessType = BusinessType.UPDATE) @PutMapping @RepeatSubmit() @Transactional(rollbackFor = Exception.class) public R edit(@RequestBody FlowDefinition flowDefinition) { return R.ok(defService.updateById(flowDefinition)); } /** * 发布流程定义 * * @param id 流程定义id */ @Log(title = "流程定义", businessType = BusinessType.INSERT) @PutMapping("/publish/{id}") @RepeatSubmit() public R publish(@PathVariable Long id) { return R.ok(flwDefinitionService.publish(id)); } /** * 取消发布流程定义 * * @param id 流程定义id */ @Log(title = "流程定义", businessType = BusinessType.INSERT) @PutMapping("/unPublish/{id}") @RepeatSubmit() @Transactional(rollbackFor = Exception.class) public R unPublish(@PathVariable Long id) { return R.ok(defService.unPublish(id)); } /** * 删除流程定义 */ @Log(title = "流程定义", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@PathVariable List ids) { return toAjax(flwDefinitionService.removeDef(ids)); } /** * 复制流程定义 * * @param id 流程定义id */ @Log(title = "流程定义", businessType = BusinessType.INSERT) @PostMapping("/copy/{id}") @RepeatSubmit() @Transactional(rollbackFor = Exception.class) public R copy(@PathVariable Long id) { return R.ok(defService.copyDef(id)); } /** * 导入流程定义 * * @param file 文件 * @param category 分类 */ @Log(title = "流程定义", businessType = BusinessType.IMPORT) @PostMapping("/importDef") public R importDef(MultipartFile file, String category) { return R.ok(flwDefinitionService.importJson(file, category)); } /** * 导出流程定义 * * @param id 流程定义id * @param response 响应 * @throws IOException 异常 */ @Log(title = "流程定义", businessType = BusinessType.EXPORT) @PostMapping("/exportDef/{id}") public void exportDef(@PathVariable Long id, HttpServletResponse response) throws IOException { flwDefinitionService.exportDef(id, response); } /** * 获取流程定义JSON字符串 * * @param id 流程定义id */ @GetMapping("/xmlString/{id}") public R xmlString(@PathVariable Long id) { return R.ok("操作成功", defService.exportJson(id)); } /** * 激活/挂起流程定义 * * @param id 流程定义id * @param active 激活/挂起 */ @RepeatSubmit() @PutMapping("/active/{id}") @Transactional(rollbackFor = Exception.class) public R active(@PathVariable Long id, @RequestParam boolean active) { return R.ok(active ? defService.active(id) : defService.unActive(id)); } }