feat(REQ-3769) - 添加关联文档的操作的实现逻辑

This commit is contained in:
wangli 2025-03-28 18:55:44 +08:00
parent 87350347e0
commit f9d090dec6
14 changed files with 378 additions and 22 deletions

View File

@ -6,6 +6,8 @@ import cn.axzo.workflow.common.annotation.Manageable;
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.DocUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.RestPrintTemplateConfigDTO;
@ -248,22 +250,25 @@ public interface ProcessModelApi {
*
* @return
*/
@Operation(summary = "")
CommonResponse<Boolean> addDoc();
@Operation(summary = "添加关联文档")
@PutMapping(value = "/api/process/model/doc/create")
CommonResponse<Boolean> createDoc(@Validated @RequestBody DocCreateDTO dto);
/**
* 修改关联文档
*
* @return
*/
@Operation(summary = "")
CommonResponse<Boolean> updateDoc();
@Operation(summary = "修改关联文档")
@PostMapping(value = "/api/process/model/doc/update")
CommonResponse<Boolean> updateDoc(@Validated @RequestBody DocUpdateDTO dto);
/**
* 删除关联文档
*
* @return
*/
@Operation(summary = "")
CommonResponse<Boolean> deleteDoc();
@Operation(summary = "删除指定文档")
@DeleteMapping(value = "/api/process/model/doc/delete")
CommonResponse<Boolean> deleteDoc(@RequestParam("id") String docId);
}

View File

@ -13,6 +13,7 @@ public enum FileTypeEnum {
WORD("word", "文本"),
EXCEL("excel", "表格"),
HIPRINT("hiprint", "智能文档"),
PDF("pdf", "PDF"),
;
private final String type;
private final String desc;

View File

@ -2,11 +2,16 @@ 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.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 创建模型关联的文档
*
@ -16,26 +21,87 @@ import java.io.Serializable;
@ApiModel("创建模型关联的文档")
@Data
@Accessors(chain = true)
@SuperBuilder
public class DocCreateDTO implements Serializable {
/**
* wps 文档的标识
* 关联到的模型 ID
*/
private String fileId;
@ApiModelProperty(value = "文档被关联到的模型 ID")
private String modelId;
/**
* 模型对应业务 KEY
*/
@ApiModelProperty(value = "模型对应的业务 ID")
private String modelKey;
/**
* 文档关联ID
* <p>
* 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;
/**
* 文档类型
* <p>
* WORD("word", "文本"),
* EXCEL("excel", "表格"),
* HIPRINT("hiprint", "智能文档"),
* PDF("pdf", "PDF"),
*/
@ApiModelProperty(value = "文件类型")
private FileTypeEnum fileType;
/**
* 业务标签
*/
@ApiModelProperty(value = "业务标签")
private String tag;
private Boolean status;
/**
* 启用状态
*/
@Builder.Default
@ApiModelProperty(value = "启用状态")
private Boolean status = true;
private Boolean require;
/**
* 是否必选
*/
@Builder.Default
@ApiModelProperty(value = "是否必选")
private Boolean require = false;
/**
* HiPrint文件类型需要回传
*/
@ApiModelProperty(value = "HiPrint文件类型需要回传,其他类型无视该字段")
private String content;
/**
* 租户 ID
*/
@ApiModelProperty(value = "租户 ID")
private String tenantId = NO_TENANT_ID;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
/**
* 创建模型关联的文档
*
* @author wangli
* @since 2025-03-27 14:50
*/
@ApiModel("创建模型关联的文档")
@Data
@Accessors(chain = true)
@SuperBuilder
public class DocUpdateDTO extends DocCreateDTO implements Serializable {
@ApiModelProperty(value = "主键ID")
private Long id;
}

View File

@ -0,0 +1,35 @@
package cn.axzo.workflow.core.repository.entity;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* 文件内容
*
* @author wangli
* @since 2025-03-27 14:09
*/
@EqualsAndHashCode(callSuper = true)
@TableName(value = "ext_ax_doc_content", autoResultMap = true)
@Data
@ToString(callSuper = true)
public class ExtAxDocContent extends BaseEntity<ExtAxDocContent> {
/**
* 文档ID
*/
private Long fileId;
/**
* 文档类型
*/
private String fileType;
/**
* 文档内容
*/
private String content;
}

View File

@ -14,15 +14,29 @@ import lombok.ToString;
* @since 2025-03-27 14:09
*/
@EqualsAndHashCode(callSuper = true)
@TableName(value = "ext_ax_model_docs", autoResultMap = true)
@TableName(value = "ext_ax_model_doc", autoResultMap = true)
@Data
@ToString(callSuper = true)
public class ExtAxModelDocs extends BaseEntity<ExtAxModelDocs> {
public class ExtAxModelDoc extends BaseEntity<ExtAxModelDoc> {
/**
* 文档 ID
* 文档被关联的模型 Id
*/
private String fileId;
private String modelId;
/**
* 文档被关联的模板对应的业务标识
*/
private String modelKey;
/**
* 文档关联 ID
* <p>
* word/excel 对应 wps Id
* hp 对应 docContent ID
* pdf 对应 oss 中的 fileKey
*/
private String fileRelationId;
/**
* 文档名称
@ -59,4 +73,9 @@ public class ExtAxModelDocs extends BaseEntity<ExtAxModelDocs> {
*/
@TableField(value = "`require`")
private Boolean require;
/**
* 租户 ID
*/
private String tenantId;
}

View File

@ -0,0 +1,8 @@
package cn.axzo.workflow.core.repository.mapper;
import cn.axzo.workflow.core.repository.entity.ExtAxDocContent;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ExtAxDocContentMapper extends BaseMapperX<ExtAxDocContent> {
}

View File

@ -0,0 +1,8 @@
package cn.axzo.workflow.core.repository.mapper;
import cn.axzo.workflow.core.repository.entity.ExtAxModelDoc;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ExtAxModelDocMapper extends BaseMapperX<ExtAxModelDoc> {
}

View File

@ -1,8 +0,0 @@
package cn.axzo.workflow.core.repository.mapper;
import cn.axzo.workflow.core.repository.entity.ExtAxModelDocs;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ExtAxModelDocsMapper extends BaseMapperX<ExtAxModelDocs> {
}

View File

@ -0,0 +1,17 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.common.enums.FileTypeEnum;
/**
* 文件内容表
*
* @author wangli
* @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);
Boolean deleteContent(String docId);
}

View File

@ -0,0 +1,37 @@
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.DocUpdateDTO;
/**
* 模型关联文档
*
* @author wangli
* @since 2025-03-28 18:12
*/
public interface ExtAxModelDocService {
/**
* 模型文档创建
*
* @param dto
* @return
*/
Boolean createDoc(DocCreateDTO dto);
/**
* 模型文档更新
*
* @param dto
* @return
*/
Boolean updateDoc(DocUpdateDTO dto);
/**
* 模型文档删除
*
* @param docId
* @return
*/
Boolean deleteDoc(String docId);
}

View File

@ -0,0 +1,49 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.common.enums.FileTypeEnum;
import cn.axzo.workflow.core.repository.entity.ExtAxDocContent;
import cn.axzo.workflow.core.repository.mapper.ExtAxDocContentMapper;
import cn.axzo.workflow.core.service.ExtAxDocContentService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 文档模板内容
*
* @author wangli
* @since 2025-03-28 18:47
*/
@Service
@Slf4j
public class ExtAxDocContentServiceImpl implements ExtAxDocContentService {
@Resource
private ExtAxDocContentMapper extAxDocContentMapper;
@Override
public Boolean createContent(String content, FileTypeEnum fileType, Long docId) {
ExtAxDocContent entity = new ExtAxDocContent();
entity.setContent(content);
entity.setFileType(fileType.getType());
entity.setFileId(docId);
return extAxDocContentMapper.insert(entity) > 0;
}
@Override
public Boolean updateContent(String content, FileTypeEnum fileType, String docId) {
ExtAxDocContent entity = extAxDocContentMapper.selectOne(new LambdaQueryWrapper<ExtAxDocContent>()
.eq(ExtAxDocContent::getFileId, docId));
entity.setContent(content);
entity.setFileType(fileType.getType());
return extAxDocContentMapper.updateById(entity) > 0;
}
@Override
public Boolean deleteContent(String docId) {
ExtAxDocContent entity = extAxDocContentMapper.selectOne(new LambdaQueryWrapper<ExtAxDocContent>()
.eq(ExtAxDocContent::getFileId, docId));
return extAxDocContentMapper.deleteById(entity) > 0;
}
}

View File

@ -0,0 +1,66 @@
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.model.request.bpmn.model.doc.DocCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO;
import cn.axzo.workflow.core.repository.entity.ExtAxModelDoc;
import cn.axzo.workflow.core.repository.mapper.ExtAxModelDocMapper;
import cn.axzo.workflow.core.service.ExtAxDocContentService;
import cn.axzo.workflow.core.service.ExtAxModelDocService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Objects;
/**
* 模型关联的文档
*
* @author wangli
* @since 2025-03-28 18:22
*/
@Service
@Slf4j
public class ExtAxModelDocServiceImpl implements ExtAxModelDocService {
@Resource
private ExtAxModelDocMapper extAxModelDocMapper;
@Resource
private ExtAxDocContentService extAxDocContentService;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean createDoc(DocCreateDTO dto) {
ExtAxModelDoc entity = BeanMapper.copyBean(dto, ExtAxModelDoc.class);
int flat = extAxModelDocMapper.insert(entity);
if (Objects.equals(FileTypeEnum.HIPRINT, dto.getFileType())) {
extAxDocContentService.createContent(dto.getContent(), dto.getFileType(), entity.getId());
}
return flat > 0;
}
@Override
public Boolean updateDoc(DocUpdateDTO dto) {
ExtAxModelDoc entity = extAxModelDocMapper.selectById(dto.getId());
if (Objects.isNull(entity)) {
return false;
}
if (Objects.equals(FileTypeEnum.HIPRINT, dto.getFileType())) {
extAxDocContentService.updateContent(dto.getContent(), dto.getFileType(), entity.getFileRelationId());
}
BeanUtils.copyProperties(dto, entity);
return extAxModelDocMapper.updateById(entity) > 0;
}
@Override
public Boolean deleteDoc(String docId) {
ExtAxModelDoc entity = extAxModelDocMapper.selectById(docId);
if (Objects.equals(FileTypeEnum.HIPRINT, FileTypeEnum.valueOfType(entity.getFileType()))) {
extAxDocContentService.deleteContent(entity.getFileRelationId());
}
return extAxModelDocMapper.deleteById(docId) > 0;
}
}

View File

@ -5,6 +5,8 @@ import cn.axzo.workflow.common.exception.WorkflowEngineException;
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.DocUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.RestPrintTemplateConfigDTO;
@ -17,6 +19,7 @@ import cn.axzo.workflow.core.service.AggregateModelService;
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
import cn.axzo.workflow.core.service.BpmnProcessModelService;
import cn.axzo.workflow.core.service.ExtAxModelDocService;
import cn.axzo.workflow.core.service.ExtAxReModelService;
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
@ -67,6 +70,8 @@ public class BpmnProcessModelController implements ProcessModelApi {
private ExtAxReModelService reModelService;
@Resource
private BpmnProcessInstanceService bpmnProcessInstanceService;
@Resource
private ExtAxModelDocService modelDocService;
/**
* 获取流程模型的查询结果
@ -370,4 +375,26 @@ public class BpmnProcessModelController implements ProcessModelApi {
.build());
return success(true);
}
@Override
@Operation(summary = "添加关联文档")
@PutMapping(value = "/doc/create")
public CommonResponse<Boolean> createDoc(@Validated @RequestBody DocCreateDTO dto) {
return success(modelDocService.createDoc(dto));
}
@Override
@Operation(summary = "修改关联文档")
@PostMapping(value = "/doc/update")
public CommonResponse<Boolean> updateDoc(@Validated @RequestBody DocUpdateDTO dto) {
return success(modelDocService.updateDoc(dto));
}
@Override
@Operation(summary = "删除指定文档")
@DeleteMapping(value = "/doc/delete")
public CommonResponse<Boolean> deleteDoc(@RequestParam("id") String docId) {
return success(modelDocService.deleteDoc(docId));
}
}