REQ-3769 审批模版文档复制-step1

This commit is contained in:
yangqicheng 2025-04-01 16:22:40 +08:00
parent 1f54de4686
commit a9cddf121c
14 changed files with 143 additions and 7 deletions

View File

@ -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<Boolean> orderDoc(@Validated @RequestBody DocOrderDTO dto);
/**
* 重置关联文档
*
* @param dto
* @return
*/
@Operation(summary = "重置关联文档配置")
@PostMapping(value = "/api/process/model/doc/reset")
@InvokeMode(SYNC)
CommonResponse<Boolean> resetDoc(@Validated @RequestBody DocResetDTO dto);
}

View File

@ -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")

View File

@ -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;

View File

@ -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;

View File

@ -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 {
/**

View File

@ -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;
}

View File

@ -16,6 +16,8 @@ import lombok.EqualsAndHashCode;
@Data
public class DocSearchDTO extends BpmPageParam {
private static final long serialVersionUID = -308388315001754954L
;
/**
* 流程模型 ID
*/

View File

@ -18,6 +18,8 @@ import lombok.ToString;
@ToString(callSuper = true)
public class ExtAxDocContent extends BaseEntity<ExtAxDocContent> {
private static final long serialVersionUID = 5844913474486640969L;
/**
* 文档ID
*/

View File

@ -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<ExtAxDocContent> batchDeleteContent(List<String> docIds);
String getContent(Long docId);
}

View File

@ -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<Long> docIds);
/**
* 模型文档排序
*
@ -75,4 +83,11 @@ public interface ExtAxModelDocService {
* @return
*/
Boolean orderDoc(DocOrderDTO dto);
/**
* 模型文档重置
* @param dto 请求参数
* @return 是否成功
*/
Boolean resetDoc(DocResetDTO dto);
}

View File

@ -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())) {

View File

@ -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<ExtAxDocContent> batchDeleteContent(List<String> docIds) {
List<ExtAxDocContent> entities = extAxDocContentMapper.selectList(new LambdaQueryWrapper<ExtAxDocContent>()
.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);

View File

@ -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<DocBaseVO> docPage(DocSearchDTO dto) {
Page<ExtAxModelDoc> page = extAxModelDocMapper.selectPage(new Page<>(dto.getPageNo(), dto.getPageSize()),
buildQueryWrapper(BeanMapper.copyBean(dto, ExtAxModelDoc.class)));
List<DocBaseVO> list = BeanMapper.copyList(page.getRecords(), DocBaseVO.class, (s, t) -> {
t.setFileType(FileTypeEnum.valueOfType(s.getFileType()));
});
List<DocBaseVO> 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<ExtAxModelDoc> 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<Long> docIds) {
if (CollectionUtils.isEmpty(docIds)) {
return true;
}
List<ExtAxModelDoc> entities = extAxModelDocMapper.selectBatchIds(docIds);
if (CollectionUtils.isEmpty(entities)) {
return true;
}
List<ExtAxModelDoc> 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<DocBaseVO> docBaseVOBpmPageResult = this.docPage(docSearchDTO);
List<DocBaseVO> docBaseVOS = ListUtils.emptyIfNull(docBaseVOBpmPageResult.getList());
//先删除
if (!CollectionUtils.isEmpty(docBaseVOS)) {
this.batchDeleteDoc(docBaseVOS.stream().map(DocBaseVO::getId).collect(Collectors.toList()));
}
//通用模板的文档
List<DocBaseVO> commonDocBaseVos = this.docList(DocQueryDTO.builder().processDefinitionKey(dto.getCategory()).build());
if (!CollectionUtils.isEmpty(commonDocBaseVos)) {
//todo 需要克隆
}
return true;
}
}

View File

@ -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<Boolean> orderDoc(@Validated @RequestBody DocOrderDTO dto) {
return success(modelDocService.orderDoc(dto));
}
@Override
@Operation(summary = "重置模版关联文档")
@PostMapping(value = "/doc/reset")
public CommonResponse<Boolean> resetDoc(@Validated @RequestBody DocResetDTO dto) {
return success(modelDocService.resetDoc(dto));
}
}