package org.ruoyi.flowable.workflow.controller; import cn.hutool.core.bean.BeanUtil; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.utils.MapstructUtils; import org.ruoyi.common.core.validate.AddGroup; import org.ruoyi.common.core.validate.EditGroup; import org.ruoyi.common.excel.utils.ExcelUtil; import org.ruoyi.common.web.core.BaseController; import org.ruoyi.flowable.core.domain.model.PageQuery; import org.ruoyi.flowable.core.page.TableDataInfo; import org.ruoyi.flowable.workflow.domain.WfCategory; import org.ruoyi.flowable.workflow.domain.bo.WfModelBo; import org.ruoyi.flowable.workflow.domain.vo.WfCategoryVo; import org.ruoyi.flowable.workflow.domain.vo.WfModelExportVo; import org.ruoyi.flowable.workflow.domain.vo.WfModelVo; import org.ruoyi.flowable.workflow.service.IWfCategoryService; import org.ruoyi.flowable.workflow.service.IWfModelService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 工作流流程模型管理 * * @author KonBAI * @createTime 2022/6/21 9:09 */ @Slf4j @RequiredArgsConstructor @RestController @RequestMapping("/model") public class WfModelController extends BaseController { private final IWfModelService modelService; private final IWfCategoryService categoryService; /** * 查询流程模型列表 * * @param modelBo 流程模型对象 * @param pageQuery 分页参数 */ @GetMapping("/list") public TableDataInfo list(WfModelBo modelBo, PageQuery pageQuery) { return modelService.list(modelBo, pageQuery); } /** * 查询流程模型列表 * * @param modelBo 流程模型对象 * @param pageQuery 分页参数 */ @GetMapping("/historyList") public TableDataInfo historyList(WfModelBo modelBo, PageQuery pageQuery) { return modelService.historyList(modelBo, pageQuery); } /** * 获取流程模型详细信息 * * @param modelId 模型主键 */ @GetMapping(value = "/{modelId}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("modelId") String modelId) { return R.ok(modelService.getModel(modelId)); } /** * 获取流程表单详细信息 * * @param modelId 模型主键 */ @GetMapping(value = "/bpmnXml/{modelId}") public R getBpmnXml(@NotNull(message = "主键不能为空") @PathVariable("modelId") String modelId) { return R.ok(modelService.queryBpmnXmlById(modelId),"操作成功"); } /** * 新增流程模型 */ @PostMapping public R add(@Validated(AddGroup.class) @RequestBody WfModelBo modelBo) { modelService.insertModel(modelBo); return R.ok("操作成功"); } /** * 修改流程模型 */ @PutMapping public R edit(@Validated(EditGroup.class) @RequestBody WfModelBo modelBo) { modelService.updateModel(modelBo); return R.ok("操作成功"); } /** * 保存流程模型 */ @PostMapping("/save") public R save(@RequestBody WfModelBo modelBo) { modelService.saveModel(modelBo); return R.ok(null,"操作成功"); } /** * 设为最新流程模型 * @param modelId * @return */ @PostMapping("/latest") public R latest(@RequestParam String modelId) { modelService.latestModel(modelId); return R.ok(null,"操作成功"); } /** * 删除流程模型 * * @param modelIds 流程模型主键串 */ @DeleteMapping("/{modelIds}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable String[] modelIds) { modelService.deleteByIds(Arrays.asList(modelIds)); return R.ok(null,"操作成功"); } /** * 部署流程模型 * * @param modelId 流程模型主键 */ @PostMapping("/deploy") public R deployModel(@RequestParam String modelId) { return toAjax(modelService.deployModel(modelId)); } /** * 导出流程模型数据 */ @PostMapping("/export") public void export(WfModelBo modelBo, HttpServletResponse response) { List list = modelService.list(modelBo); List listVo = BeanUtil.copyToList(list, WfModelExportVo.class); List categoryVos = categoryService.queryList(new WfCategory()); Map categoryMap = categoryVos.stream() .collect(Collectors.toMap(WfCategoryVo::getCode, WfCategoryVo::getCategoryName)); for (WfModelExportVo exportVo : listVo) { exportVo.setCategoryName(categoryMap.get(exportVo.getCategory())); } List convert = MapstructUtils.convert(listVo, WfModelExportVo.class); ExcelUtil.exportExcel(convert, "流程模型数据", WfModelExportVo.class, response); } }