From 592722af44f5182d326dd31bbbbbf23d59184d12 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 31 Mar 2025 17:24:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-3769)=20-=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=85=B3=E8=81=94=E6=96=87=E6=A1=A3=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=92=E5=BA=8F=E5=8A=A8=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/bpmn/ProcessModelApi.java | 12 +++ .../common/code/BpmnModelRespCode.java | 5 +- .../workflow/common/enums/FileTypeEnum.java | 2 +- .../axzo/workflow/common/enums/OrderEnum.java | 12 +++ .../request/bpmn/model/doc/DocCreateDTO.java | 9 ++- .../request/bpmn/model/doc/DocOrderDTO.java | 35 +++++++++ .../request/bpmn/model/doc/DocUpdateDTO.java | 4 + .../response/bpmn/model/doc/DocBaseVO.java | 55 +++++++++++++ .../core/repository/entity/ExtAxModelDoc.java | 6 ++ .../mapper/ExtAxModelDocMapper.java | 1 + .../core/service/ExtAxDocContentService.java | 8 +- .../core/service/ExtAxModelDocService.java | 9 +++ .../impl/ExtAxDocContentServiceImpl.java | 21 ++--- .../impl/ExtAxModelDocServiceImpl.java | 77 ++++++++++++++++++- .../web/bpmn/BpmnProcessModelController.java | 7 ++ .../starter/api/WorkflowManageService.java | 12 +++ 16 files changed, 258 insertions(+), 17 deletions(-) create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocOrderDTO.java diff --git a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java index e75c9c8e2..8b6e9ee19 100644 --- a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java +++ b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessModelApi.java @@ -7,6 +7,7 @@ import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO; @@ -287,4 +288,15 @@ public interface ProcessModelApi { @DeleteMapping(value = "/api/process/model/doc/delete") @InvokeMode(SYNC) CommonResponse deleteDoc(@RequestParam("id") Long docId); + + /** + * 关联文档配置排序 + * + * @param dto + * @return + */ + @Operation(summary = "关联文档配置排序") + @PostMapping(value = "/api/process/model/doc/order") + @InvokeMode(SYNC) + CommonResponse orderDoc(@Validated @RequestBody DocOrderDTO dto); } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/code/BpmnModelRespCode.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/code/BpmnModelRespCode.java index 7ba846689..af0fc5c4f 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/code/BpmnModelRespCode.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/code/BpmnModelRespCode.java @@ -18,7 +18,10 @@ public enum BpmnModelRespCode implements IModuleRespCode { MODEL_KEY_NOT_EXISTS("003", "流程模型KEY【{}】不存在"), MODEL_NOT_EXISTS("004", "流程模型不存在"), BPMN_BYTES_NOT_EXISTS("005", "模型定义内容字节码不存在"), - MODEL_IS_DISABLE("006", "模型已经被停用") + MODEL_IS_DISABLE("006", "模型已经被停用"), + MODEL_FILE_TAG_DUPLICATE("007", "模型关联的文档业务标签重复"), + MODEL_FILE_TAG_EXISTS("008", "模型关联的文档业务标签已存在"), + MODEL_FILE_NOT_EXISTS("009", "模型关联的文档不存在或已被删除") ; private final String code; diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/FileTypeEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/FileTypeEnum.java index 41b1ae69b..2e981de5e 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/FileTypeEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/FileTypeEnum.java @@ -33,7 +33,7 @@ public enum FileTypeEnum { public static FileTypeEnum valueOfType(String type) { return Arrays.stream(FileTypeEnum.values()) - .filter(i -> Objects.equals(i.getType(), type.toUpperCase())) + .filter(i -> Objects.equals(i.getType().toUpperCase(), type.toUpperCase())) .findAny() .orElse(null); } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java new file mode 100644 index 000000000..805b79ded --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java @@ -0,0 +1,12 @@ +package cn.axzo.workflow.common.enums; + +/** + * 顺序操作枚举 + * + * @author wangli + * @since 2025-03-31 16:35 + */ +public enum OrderEnum { + + UP, DOWN +} diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocCreateDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocCreateDTO.java index 98e7204ce..0e87af407 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocCreateDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocCreateDTO.java @@ -3,11 +3,14 @@ package cn.axzo.workflow.common.model.request.bpmn.model.doc; import cn.axzo.workflow.common.enums.FileTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; +import javax.validation.constraints.NotBlank; import java.io.Serializable; import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID; @@ -21,6 +24,8 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID; @ApiModel("创建模型关联的文档") @Data @Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor @SuperBuilder public class DocCreateDTO implements Serializable { @@ -28,6 +33,7 @@ public class DocCreateDTO implements Serializable { * 关联到的模型 ID */ @ApiModelProperty(value = "文档被关联到的模型 ID") + @NotBlank(message = "模型 ID 不能为空") private String modelId; /** @@ -39,7 +45,7 @@ public class DocCreateDTO implements Serializable { * 文档关联ID *

* word/excel 对应 wps 的 Id, - * hp 对应是空 + * hp 对应是content 表的主键(前端新建时不回传) * pdf 对应 oss 中的 fileKey */ @ApiModelProperty(value = "底层文件关联标识") @@ -77,6 +83,7 @@ public class DocCreateDTO implements Serializable { * 业务标签 */ @ApiModelProperty(value = "业务标签") + @NotBlank(message = "业务标签不能为空") private String tag; /** diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocOrderDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocOrderDTO.java new file mode 100644 index 000000000..0855fdae0 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocOrderDTO.java @@ -0,0 +1,35 @@ +package cn.axzo.workflow.common.model.request.bpmn.model.doc; + +import cn.axzo.workflow.common.enums.OrderEnum; +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import lombok.experimental.SuperBuilder; + +import java.io.Serializable; + +/** + * 模型关联的文档排序 + * + * @author wangli + * @since 2025-03-31 16:32 + */ +@ApiModel("模型关联的文档排序") +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +public class DocOrderDTO implements Serializable { + /** + * 文档主键 ID + */ + private Long id; + + /** + * 操作顺序 + */ + private OrderEnum order; +} diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocUpdateDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocUpdateDTO.java index c79f4c3ed..ef270fa99 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocUpdateDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocUpdateDTO.java @@ -2,7 +2,9 @@ package cn.axzo.workflow.common.model.request.bpmn.model.doc; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; @@ -17,6 +19,8 @@ import java.io.Serializable; @ApiModel("创建模型关联的文档") @Data @Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor @SuperBuilder public class DocUpdateDTO extends DocCreateDTO implements Serializable { diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/model/doc/DocBaseVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/model/doc/DocBaseVO.java index c9ad04ae8..02f00b30d 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/model/doc/DocBaseVO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/model/doc/DocBaseVO.java @@ -2,6 +2,7 @@ package cn.axzo.workflow.common.model.response.bpmn.model.doc; import cn.axzo.workflow.common.enums.FileTypeEnum; import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -16,25 +17,79 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class DocBaseVO { + private Long id; + + /** + * 模型 ID + */ + @ApiModelProperty(value = "模型 ID") private String modelId; + /** + * 模型 KEY + */ + @ApiModelProperty(value = "模型 KEY") private String modelKey; + /** + * 文档对应文件的检索信息 + * word/excel 对应 wps 的 Id, + * hp 对应是 + * pdf 对应 oss 中的 fileKey + */ + @ApiModelProperty(value = "文档对应文件检索信息") private String fileRelationId; + /** + * 文档名称(用于归档) + */ + @ApiModelProperty(value = "文档名称") private String fileName; + /** + * 文档模板名称 + */ + @ApiModelProperty(value = "模板名称") private String templateName; + /** + * 归档位置 + */ private String location; + /** + * 文档类型 + */ + @ApiModelProperty(value = "文档类型") private FileTypeEnum fileType; + /** + * 文档业务类型 + */ + @ApiModelProperty(value = "业务类型") private String tag; + /** + * 文档状态 + */ + @ApiModelProperty(value = "文档状态") private Boolean status; + /** + * 文档是否必选 + */ + @ApiModelProperty(value = "是否必选") private Boolean require; + /** + * 排序号 + */ + @ApiModelProperty(value = "排序号") + private Integer order; + + /** + * 租户 ID + */ + @ApiModelProperty(value = "租户 ID") private String tenantId; } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxModelDoc.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxModelDoc.java index 9f0a884f9..7c3faf335 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxModelDoc.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxModelDoc.java @@ -74,6 +74,12 @@ public class ExtAxModelDoc extends BaseEntity { @TableField(value = "`require`") private Boolean require; + /** + * 排序号 + */ + @TableField(value = "`order`") + private Integer order; + /** * 租户 ID */ diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxModelDocMapper.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxModelDocMapper.java index 9d45f11f1..d0e950cc3 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxModelDocMapper.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxModelDocMapper.java @@ -5,4 +5,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ExtAxModelDocMapper extends BaseMapperX { + void moveUp(); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxDocContentService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxDocContentService.java index 8013d28a0..8fa01f87f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxDocContentService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxDocContentService.java @@ -1,6 +1,7 @@ package cn.axzo.workflow.core.service; import cn.axzo.workflow.common.enums.FileTypeEnum; +import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; /** * 文件内容表 @@ -9,9 +10,10 @@ import cn.axzo.workflow.common.enums.FileTypeEnum; * @since 2025-03-28 18:12 */ public interface ExtAxDocContentService { - Boolean createContent(String content, FileTypeEnum fileType, Long docId); - Boolean updateContent(String content, FileTypeEnum fileType, String docId); + ExtAxDocContent createContent(String content, FileTypeEnum fileType, Long docId); - Boolean deleteContent(String docId); + ExtAxDocContent updateContent(String content, FileTypeEnum fileType, String docId); + + ExtAxDocContent deleteContent(String docId); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxModelDocService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxModelDocService.java index 72d5c31d3..63b599b3f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxModelDocService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxModelDocService.java @@ -1,6 +1,7 @@ package cn.axzo.workflow.core.service; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.response.BpmPageResult; @@ -45,4 +46,12 @@ public interface ExtAxModelDocService { * @return */ Boolean deleteDoc(Long docId); + + /** + * 模型文档排序 + * + * @param dto + * @return + */ + Boolean orderDoc(DocOrderDTO dto); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxDocContentServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxDocContentServiceImpl.java index f51cfa6e6..2d08631ef 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxDocContentServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxDocContentServiceImpl.java @@ -23,27 +23,30 @@ public class ExtAxDocContentServiceImpl implements ExtAxDocContentService { private ExtAxDocContentMapper extAxDocContentMapper; @Override - public Boolean createContent(String content, FileTypeEnum fileType, Long docId) { + public ExtAxDocContent createContent(String content, FileTypeEnum fileType, Long docId) { ExtAxDocContent entity = new ExtAxDocContent(); entity.setContent(content); - entity.setFileType(fileType.getType()); + entity.setFileType(fileType.name()); entity.setFileId(docId); - return extAxDocContentMapper.insert(entity) > 0; + extAxDocContentMapper.insert(entity); + return entity; } @Override - public Boolean updateContent(String content, FileTypeEnum fileType, String docId) { + public ExtAxDocContent updateContent(String content, FileTypeEnum fileType, String docId) { ExtAxDocContent entity = extAxDocContentMapper.selectOne(new LambdaQueryWrapper() - .eq(ExtAxDocContent::getFileId, docId)); + .eq(ExtAxDocContent::getFileId, Long.valueOf(docId))); entity.setContent(content); - entity.setFileType(fileType.getType()); - return extAxDocContentMapper.updateById(entity) > 0; + entity.setFileType(fileType.name()); + extAxDocContentMapper.updateById(entity); + return entity; } @Override - public Boolean deleteContent(String docId) { + public ExtAxDocContent deleteContent(String docId) { ExtAxDocContent entity = extAxDocContentMapper.selectOne(new LambdaQueryWrapper() .eq(ExtAxDocContent::getFileId, docId)); - return extAxDocContentMapper.deleteById(entity) > 0; + extAxDocContentMapper.deleteById(entity); + return entity; } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxModelDocServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxModelDocServiceImpl.java index fa24b43c4..cd1d0407b 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxModelDocServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxModelDocServiceImpl.java @@ -2,11 +2,15 @@ package cn.axzo.workflow.core.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.workflow.common.enums.FileTypeEnum; +import cn.axzo.workflow.common.enums.OrderEnum; +import cn.axzo.workflow.common.exception.WorkflowEngineException; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.response.BpmPageResult; import cn.axzo.workflow.common.model.response.bpmn.model.doc.DocBaseVO; +import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; import cn.axzo.workflow.core.repository.entity.ExtAxModelDoc; import cn.axzo.workflow.core.repository.mapper.ExtAxModelDocMapper; import cn.axzo.workflow.core.service.ExtAxDocContentService; @@ -23,6 +27,10 @@ import javax.annotation.Resource; import java.util.List; import java.util.Objects; +import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_NOT_EXISTS; +import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_TAG_DUPLICATE; +import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_TAG_EXISTS; + /** * 模型关联的文档 * @@ -42,7 +50,9 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { public BpmPageResult docPage(DocSearchDTO dto) { Page page = extAxModelDocMapper.selectPage(new Page<>(dto.getPageNo(), dto.getPageSize()), buildQueryWrapper(BeanMapper.copyBean(dto, ExtAxModelDoc.class))); - List list = BeanMapper.copyList(page.getRecords(), DocBaseVO.class); + List list = BeanMapper.copyList(page.getRecords(), DocBaseVO.class, (s, t) -> { + t.setFileType(FileTypeEnum.valueOfType(s.getFileType())); + }); return new BpmPageResult<>(list, page.getTotal()); } @@ -56,22 +66,49 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { .eq(Objects.nonNull(entity.getStatus()), ExtAxModelDoc::getStatus, entity.getStatus()) .eq(Objects.nonNull(entity.getRequire()), ExtAxModelDoc::getRequire, entity.getRequire()) .eq(Objects.nonNull(entity.getTenantId()), ExtAxModelDoc::getTenantId, entity.getTenantId()) + .orderByAsc(ExtAxModelDoc::getOrder) ; } + public Integer maxOrder(DocCreateDTO dto) { + ExtAxModelDoc orderQuery = new ExtAxModelDoc(); + orderQuery.setModelId(dto.getModelId()); + List docs = extAxModelDocMapper.selectList(buildQueryWrapper(orderQuery)); + return docs.stream().mapToInt(ExtAxModelDoc::getOrder).max().orElse(0) + 1; + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean createDoc(DocCreateDTO dto) { + ExtAxModelDoc old = new ExtAxModelDoc(); + old.setModelId(dto.getModelId()); + old.setTag(dto.getTag()); + Integer count = extAxModelDocMapper.selectCount(buildQueryWrapper(old)); + if (count > 0) { + throw new WorkflowEngineException(MODEL_FILE_TAG_DUPLICATE); + } ExtAxModelDoc entity = BeanMapper.copyBean(dto, ExtAxModelDoc.class); + entity.setFileType(dto.getFileType().name()); + entity.setOrder(maxOrder(dto)); int flat = extAxModelDocMapper.insert(entity); if (Objects.equals(FileTypeEnum.HIPRINT, dto.getFileType())) { - extAxDocContentService.createContent(dto.getContent(), dto.getFileType(), entity.getId()); + ExtAxDocContent content = extAxDocContentService.createContent(dto.getContent(), dto.getFileType(), entity.getId()); + entity.setFileRelationId(String.valueOf(content.getId())); + extAxModelDocMapper.updateById(entity); } return flat > 0; } @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateDoc(DocUpdateDTO dto) { + ExtAxModelDoc query = new ExtAxModelDoc(); + query.setModelId(dto.getModelId()); + query.setTag(dto.getTag()); + ExtAxModelDoc old = extAxModelDocMapper.selectOne(buildQueryWrapper(query)); + if (Objects.nonNull(old) && !Objects.equals(old.getId(), dto.getId())) { + throw new WorkflowEngineException(MODEL_FILE_TAG_EXISTS); + } ExtAxModelDoc entity = extAxModelDocMapper.selectById(dto.getId()); if (Objects.isNull(entity)) { return false; @@ -80,10 +117,12 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { extAxDocContentService.updateContent(dto.getContent(), dto.getFileType(), entity.getFileRelationId()); } BeanUtils.copyProperties(dto, entity); + entity.setFileType(dto.getFileType().name()); return extAxModelDocMapper.updateById(entity) > 0; } @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteDoc(Long docId) { ExtAxModelDoc entity = extAxModelDocMapper.selectById(docId); if (Objects.equals(FileTypeEnum.HIPRINT, FileTypeEnum.valueOfType(entity.getFileType()))) { @@ -91,4 +130,38 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { } return extAxModelDocMapper.deleteById(docId) > 0; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean orderDoc(DocOrderDTO dto) { + ExtAxModelDoc doc = extAxModelDocMapper.selectById(dto.getId()); + if (Objects.isNull(doc)) { + throw new WorkflowEngineException(MODEL_FILE_NOT_EXISTS); + } + + LambdaQueryWrapper orderWrapper = new LambdaQueryWrapper<>(); + orderWrapper.eq(ExtAxModelDoc::getModelId, doc.getModelId()); + Integer currentOrder = doc.getOrder(); + if (Objects.equals(dto.getOrder(), OrderEnum.UP)) { + orderWrapper.eq(ExtAxModelDoc::getOrder, currentOrder - 1); + ExtAxModelDoc upDoc = extAxModelDocMapper.selectOne(orderWrapper); + if (Objects.isNull(upDoc)) { + return false; + } + doc.setOrder(currentOrder - 1); + upDoc.setOrder(currentOrder); + extAxModelDocMapper.updateById(upDoc); + } else { + orderWrapper.eq(ExtAxModelDoc::getOrder, currentOrder + 1); + ExtAxModelDoc downDoc = extAxModelDocMapper.selectOne(orderWrapper); + if (Objects.isNull(downDoc)) { + return false; + } + doc.setOrder(currentOrder + 1); + downDoc.setOrder(currentOrder); + extAxModelDocMapper.updateById(downDoc); + } + extAxModelDocMapper.updateById(doc); + return true; + } } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java index 9a62eb5f9..4d6733d03 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java @@ -6,6 +6,7 @@ import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO; @@ -406,4 +407,10 @@ public class BpmnProcessModelController implements ProcessModelApi { return success(modelDocService.deleteDoc(docId)); } + @Operation(summary = "关联文档配置排序") + @PostMapping(value = "/doc/order") + @Override + public CommonResponse orderDoc(@Validated @RequestBody DocOrderDTO dto) { + return success(modelDocService.orderDoc(dto)); + } } diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java index 007f7ef35..891c9d707 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java @@ -15,6 +15,7 @@ import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO; @@ -723,6 +724,17 @@ public interface WorkflowManageService { @InvokeMode(SYNC) Boolean deleteDoc(@RequestParam("id") Long docId); + /** + * 关联文档配置排序 + * + * @param dto + * @return + */ + @Operation(summary = "关联文档配置排序") + @PostMapping(value = "/api/process/model/doc/order") + @InvokeMode(SYNC) + Boolean orderDoc(@Validated @RequestBody DocOrderDTO dto); + /** * 为指定流程新增变量 */