feat(REQ-3769) - 添加关联文档的操作的实现逻辑
This commit is contained in:
parent
87350347e0
commit
f9d090dec6
@ -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);
|
||||
}
|
||||
|
||||
@ -13,6 +13,7 @@ public enum FileTypeEnum {
|
||||
WORD("word", "文本"),
|
||||
EXCEL("excel", "表格"),
|
||||
HIPRINT("hiprint", "智能文档"),
|
||||
PDF("pdf", "PDF"),
|
||||
;
|
||||
private final String type;
|
||||
private final String desc;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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> {
|
||||
}
|
||||
@ -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> {
|
||||
}
|
||||
@ -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> {
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user