package com.qqflow.engine.domain.flow.controller; import com.qqflow.engine.common.PageResult; import com.qqflow.engine.common.Result; import com.qqflow.engine.common.util.SecurityUtils; import com.qqflow.engine.domain.flow.assembler.ProcessDefinitionAssembler; import com.qqflow.engine.domain.flow.dto.ProcessDefinitionDTO; import com.qqflow.engine.domain.flow.po.ProcessDefinition; import com.qqflow.engine.domain.flow.service.ProcessDefinitionService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/flow/definition") @RequiredArgsConstructor @Tag(name = "流程定义管理") @PreAuthorize("hasAnyRole('super_admin','flow_manager')") public class ProcessDefinitionController { private final ProcessDefinitionService processDefinitionService; private final ProcessDefinitionAssembler processDefinitionAssembler; @PostMapping @Operation(summary = "保存流程定义") public Result save(@RequestBody @Valid ProcessDefinitionDTO dto) { ProcessDefinition po = this.processDefinitionAssembler.buildFromSaveDto(dto, SecurityUtils.getUserId()); return Result.ok(this.processDefinitionService.saveDefinition(po)); } @PutMapping @Operation(summary = "更新流程定义") public Result update(@RequestBody @Valid ProcessDefinitionDTO dto) { ProcessDefinition po = this.processDefinitionAssembler.buildFromUpdateDto(dto); Long newId = this.processDefinitionService.updateDefinition(po); return Result.ok(newId); } @DeleteMapping("/{id}") @Operation(summary = "删除流程定义") public Result delete(@PathVariable Long id) { this.processDefinitionService.deleteDefinition(id); return Result.ok(); } @GetMapping("/{id}") @Operation(summary = "流程定义详情") @PreAuthorize("isAuthenticated()") public Result getById(@PathVariable Long id) { return Result.ok(this.processDefinitionService.getById(id)); } @GetMapping("/page") @Operation(summary = "流程定义分页列表") public Result> page( @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) String processCode, @RequestParam(required = false) String processName, @RequestParam(required = false) Integer status) { return Result.ok(this.processDefinitionService.page(pageNum, pageSize, processCode, processName, status)); } @PostMapping("/{id}/publish") @Operation(summary = "发布流程定义") public Result publish(@PathVariable Long id) { this.processDefinitionService.publish(id); return Result.ok(); } @PostMapping("/{id}/stop") @Operation(summary = "停用流程定义") public Result stop(@PathVariable Long id) { this.processDefinitionService.stop(id); return Result.ok(); } @PostMapping("/{id}/enable") @Operation(summary = "启用流程定义") public Result enable(@PathVariable Long id) { this.processDefinitionService.enable(id); return Result.ok(); } @GetMapping("/list-enabled") @Operation(summary = "启用中的流程定义列表") @PreAuthorize("isAuthenticated()") public Result> listEnabled() { return Result.ok(this.processDefinitionService.listEnabled()); } }