From a9cddf121c428ca91f61e47da0b46e6bd0044a52 Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Tue, 1 Apr 2025 16:22:40 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3769=20=E5=AE=A1=E6=89=B9=E6=A8=A1=E7=89=88?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=A4=8D=E5=88=B6-step1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/bpmn/ProcessModelApi.java | 12 +++++ .../common/model/request/BpmPageParam.java | 1 + .../bpmn/model/BpmnModelCreateDTO.java | 2 + .../bpmn/model/BpmnModelUpdateDTO.java | 2 + .../request/bpmn/model/doc/DocQueryDTO.java | 6 +++ .../request/bpmn/model/doc/DocResetDTO.java | 29 ++++++++++ .../request/bpmn/model/doc/DocSearchDTO.java | 2 + .../repository/entity/ExtAxDocContent.java | 2 + .../core/service/ExtAxDocContentService.java | 4 ++ .../core/service/ExtAxModelDocService.java | 15 ++++++ .../impl/BpmnProcessModelServiceImpl.java | 2 +- .../impl/ExtAxDocContentServiceImpl.java | 11 ++++ .../impl/ExtAxModelDocServiceImpl.java | 54 ++++++++++++++++--- .../web/bpmn/BpmnProcessModelController.java | 8 +++ 14 files changed, 143 insertions(+), 7 deletions(-) create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocResetDTO.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 6298d3c84..4c1181864 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 @@ -9,6 +9,7 @@ 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.DocQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO; 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; @@ -322,4 +323,15 @@ public interface ProcessModelApi { @PostMapping(value = "/api/process/model/doc/order") @InvokeMode(SYNC) CommonResponse orderDoc(@Validated @RequestBody DocOrderDTO dto); + + /** + * 重置关联文档 + * + * @param dto + * @return + */ + @Operation(summary = "重置关联文档配置") + @PostMapping(value = "/api/process/model/doc/reset") + @InvokeMode(SYNC) + CommonResponse resetDoc(@Validated @RequestBody DocResetDTO dto); } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/BpmPageParam.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/BpmPageParam.java index 91a566e5c..640809192 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/BpmPageParam.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/BpmPageParam.java @@ -10,6 +10,7 @@ import java.io.Serializable; @ApiModel("分页参数") public class BpmPageParam implements Serializable { + private static final long serialVersionUID = -7002013785995706695L; private static final Integer PAGE_NO = 1; private static final Integer PAGE_SIZE = 10; @ApiModelProperty(value = "页码,从 1 开始", required = true, example = "1") diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelCreateDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelCreateDTO.java index 91c8e401f..e2833ef2f 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelCreateDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelCreateDTO.java @@ -20,6 +20,8 @@ import java.io.Serializable; @Accessors(chain = true) public class BpmnModelCreateDTO implements Serializable { + private static final long serialVersionUID = 1383240088010310865L; + @ApiModelProperty(value = "流程模型标识", example = "process_key", hidden = true) @Length(max = 255, message = "流程标识最长只支持255个字符") private String key; diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelUpdateDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelUpdateDTO.java index f7826dd46..7e5e7d735 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelUpdateDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/BpmnModelUpdateDTO.java @@ -16,6 +16,8 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class BpmnModelUpdateDTO extends BpmnModelCreateDTO { + private static final long serialVersionUID = 3661214238064751897L; + @ApiModelProperty(value = "流程模型 ID", required = true) private String processModelId; diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocQueryDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocQueryDTO.java index a6bdd8cb7..e415b9907 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocQueryDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocQueryDTO.java @@ -2,7 +2,10 @@ 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.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * 流程关联文档搜索入参模型 @@ -12,6 +15,9 @@ import lombok.Data; */ @ApiModel("流程关联文档搜索入参模型") @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class DocQueryDTO { /** diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocResetDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocResetDTO.java new file mode 100644 index 000000000..08b571111 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocResetDTO.java @@ -0,0 +1,29 @@ +package cn.axzo.workflow.common.model.request.bpmn.model.doc; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@ApiModel("流程关联文档重置入参模型") +@Data +public class DocResetDTO { + + /** + * 业务 ID + */ + @NotBlank(message = "业务 ID 不能为空") + private String category; + + /** + * 代运营模型 ID + */ + @NotBlank(message = "模型 ID 不能为空") + private String modelId; + + /** + * 代运营的单位或租户ID + */ + @NotBlank(message = "工作台 ID 不能为空") + private String workspaceId; +} diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocSearchDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocSearchDTO.java index 17db376fb..8494d92de 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocSearchDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocSearchDTO.java @@ -16,6 +16,8 @@ import lombok.EqualsAndHashCode; @Data public class DocSearchDTO extends BpmPageParam { + private static final long serialVersionUID = -308388315001754954L + ; /** * 流程模型 ID */ diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxDocContent.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxDocContent.java index 5f1b1e174..026d5fd8f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxDocContent.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxDocContent.java @@ -18,6 +18,8 @@ import lombok.ToString; @ToString(callSuper = true) public class ExtAxDocContent extends BaseEntity { + private static final long serialVersionUID = 5844913474486640969L; + /** * 文档ID */ 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 8c022ee8d..e27ea4238 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 @@ -3,6 +3,8 @@ package cn.axzo.workflow.core.service; import cn.axzo.workflow.common.enums.FileTypeEnum; import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; +import java.util.List; + /** * 文件内容表 * @@ -17,5 +19,7 @@ public interface ExtAxDocContentService { ExtAxDocContent deleteContent(String docId); + List batchDeleteContent(List docIds); + String getContent(Long 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 d6640b251..36bee4ba9 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 @@ -3,6 +3,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.DocQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO; 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; @@ -68,6 +69,13 @@ public interface ExtAxModelDocService { */ Boolean deleteDoc(Long docId); + /** + * 批量删除 + * @param docIds 文档列表 + * @return 是否成功 + */ + Boolean batchDeleteDoc(List docIds); + /** * 模型文档排序 * @@ -75,4 +83,11 @@ public interface ExtAxModelDocService { * @return */ Boolean orderDoc(DocOrderDTO dto); + + /** + * 模型文档重置 + * @param dto 请求参数 + * @return 是否成功 + */ + Boolean resetDoc(DocResetDTO dto); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java index 430f12d9b..384664a5d 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java @@ -138,7 +138,7 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService { baseQuerySql.append(")"); } if (Objects.nonNull(dto.getAgent())) { - if (dto.getAgent()) { + if (Boolean.TRUE.equals(dto.getAgent())) { baseQuerySql.append(sqlConnectors(baseQuerySql)) .append(" TENANT_ID_ != '' "); if (!CollectionUtils.isEmpty(dto.getTenantIds())) { 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 1b6949f39..b64622901 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 @@ -1,5 +1,6 @@ package cn.axzo.workflow.core.service.impl; +import cn.axzo.framework.data.mybatisplus.model.BaseEntity; import cn.axzo.workflow.common.enums.FileTypeEnum; import cn.axzo.workflow.common.exception.WorkflowEngineException; import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; @@ -10,7 +11,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_CONTENT_DATA_ERROR; @@ -54,6 +57,14 @@ public class ExtAxDocContentServiceImpl implements ExtAxDocContentService { return entity; } + @Override + public List batchDeleteContent(List docIds) { + List entities = extAxDocContentMapper.selectList(new LambdaQueryWrapper() + .in(ExtAxDocContent::getFileId, docIds)); + extAxDocContentMapper.deleteBatchIds(entities.stream().map(BaseEntity::getId).collect(Collectors.toList())); + return entities; + } + @Override public String getContent(Long docId) { ExtAxDocContent content = extAxDocContentMapper.selectOne(ExtAxDocContent::getFileId, docId); 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 db70241a4..414748cfa 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 @@ -7,6 +7,7 @@ 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.DocQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO; 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; @@ -14,11 +15,13 @@ 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.BpmnProcessModelService; import cn.axzo.workflow.core.service.ExtAxDocContentService; import cn.axzo.workflow.core.service.ExtAxModelDocService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.repository.ProcessDefinition; @@ -26,6 +29,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.annotation.Resource; @@ -33,6 +37,7 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS; import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_NOT_EXISTS; @@ -63,9 +68,7 @@ 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, (s, t) -> { - t.setFileType(FileTypeEnum.valueOfType(s.getFileType())); - }); + List list = BeanMapper.copyList(page.getRecords(), DocBaseVO.class, (s, t) -> t.setFileType(FileTypeEnum.valueOfType(s.getFileType()))); return new BpmPageResult<>(list, page.getTotal()); } @@ -93,9 +96,7 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { query.setStatus(true); query.setTenantId(processDefinition.getTenantId()); List docs = extAxModelDocMapper.selectList(buildQueryWrapper(query)); - return BeanMapper.copyList(docs, DocBaseVO.class, (s, t) -> { - t.setFileType(FileTypeEnum.valueOfType(s.getFileType())); - }); + return BeanMapper.copyList(docs, DocBaseVO.class, (s, t) -> t.setFileType(FileTypeEnum.valueOfType(s.getFileType()))); } @Override @@ -211,6 +212,26 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { return extAxModelDocMapper.deleteById(docId) > 0; } + @Override + public Boolean batchDeleteDoc(List docIds) { + if (CollectionUtils.isEmpty(docIds)) { + return true; + } + List entities = extAxModelDocMapper.selectBatchIds(docIds); + if (CollectionUtils.isEmpty(entities)) { + return true; + } + List hiprintList = entities.stream() + .filter(entity -> Objects.equals(FileTypeEnum.HIPRINT, FileTypeEnum.valueOfType(entity.getFileType()))) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(hiprintList)) { + extAxDocContentService.batchDeleteContent(hiprintList.stream() + .map(ExtAxModelDoc::getFileRelationId) + .collect(Collectors.toList())); + } + return extAxModelDocMapper.deleteBatchIds(docIds) > 0; + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean orderDoc(DocOrderDTO dto) { @@ -244,4 +265,25 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService { extAxModelDocMapper.updateById(doc); return true; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean resetDoc(DocResetDTO dto) { + DocSearchDTO docSearchDTO = new DocSearchDTO(); + docSearchDTO.setModelId(dto.getModelId()); + docSearchDTO.setPageNo(1); + docSearchDTO.setPageSize(999); + BpmPageResult docBaseVOBpmPageResult = this.docPage(docSearchDTO); + List docBaseVOS = ListUtils.emptyIfNull(docBaseVOBpmPageResult.getList()); + //先删除 + if (!CollectionUtils.isEmpty(docBaseVOS)) { + this.batchDeleteDoc(docBaseVOS.stream().map(DocBaseVO::getId).collect(Collectors.toList())); + } + //通用模板的文档 + List commonDocBaseVos = this.docList(DocQueryDTO.builder().processDefinitionKey(dto.getCategory()).build()); + if (!CollectionUtils.isEmpty(commonDocBaseVos)) { + //todo 需要克隆 + } + 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 43336b4e7..87e93b88a 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 @@ -15,6 +15,7 @@ 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.DocQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO; 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; @@ -477,4 +478,11 @@ public class BpmnProcessModelController implements ProcessModelApi { public CommonResponse orderDoc(@Validated @RequestBody DocOrderDTO dto) { return success(modelDocService.orderDoc(dto)); } + + @Override + @Operation(summary = "重置模版关联文档") + @PostMapping(value = "/doc/reset") + public CommonResponse resetDoc(@Validated @RequestBody DocResetDTO dto) { + return success(modelDocService.resetDoc(dto)); + } }