Merge branch 'dev' into 'test'

模版编制相关实现

See merge request jygk/dsc-base!3
This commit is contained in:
付鹏飞
2025-09-26 08:45:10 +00:00
9 changed files with 187 additions and 123 deletions

View File

@@ -7,7 +7,7 @@ public enum DeleteStatusEnum {
STATUS_DRF(TmplStsEnum.DRAFT.getCode(), new HashSet<>() {{add(TmplStsEnum.DRAFT.getCode());}}),
STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()),
STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>());
STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>(){{add(TmplStsEnum.STOPPED.getCode());}});
private final String code;

View File

@@ -55,15 +55,16 @@ public class TemplateInstanceController extends AbstractFileUploadController {
setFileUploadInfo(annotation);
}
}
@Resource
private TemplateInstanceService templateInstanceService;
//上传文件
@PostMapping("/save-file")
@Operation(summary = "上传文件", description = "上传文件,传入文件对象和模版实例id")
public CommonResult<Map<String, Object>> uploadFile(@NotEmpty(message = "文件不能为空") @RequestParam("file") MultipartFile file,@RequestParam("id") String id) {
return success(templateInstanceService.saveFile(file,id));
}
// @PostMapping("/save-file")
// @Operation(summary = "上传文件", description = "上传文件,传入文件对象和模版实例id")
// public CommonResult<Map<String, Object>> uploadFile(@NotEmpty(message = "文件不能为空") @RequestParam("file") MultipartFile file,@RequestParam("id") String id) {
// return success(templateInstanceService.saveFile(file,id));
// }
@PostMapping("/create")
@Operation(summary = "创建模板实例")
@@ -105,6 +106,9 @@ public class TemplateInstanceController extends AbstractFileUploadController {
public CommonResult<TemplateInstanceRespVO> getTemplateInstance(@RequestParam("id") Long id) {
TemplateInstanceDO templateInstance = templateInstanceService.getTemplateInstance(id);
TemplateInstanceRespVO templateInstanceRespVO = BeanUtils.toBean(templateInstance, TemplateInstanceRespVO.class);
if (templateInstance == null) {
return success(templateInstanceRespVO);
}
templateInstanceService.getDetailedInfo(templateInstanceRespVO);
return success(templateInstanceRespVO);
}
@@ -116,7 +120,9 @@ public class TemplateInstanceController extends AbstractFileUploadController {
PageResult<TemplateInstanceDO> pageResult = templateInstanceService.getTemplateInstancePage(pageReqVO);
PageResult<TemplateInstanceRespVO> templateInstanceRespVOPageResult = BeanUtils.toBean(pageResult, TemplateInstanceRespVO.class);
templateInstanceRespVOPageResult.getList().forEach(templateInstanceRespVO -> {
templateInstanceService.getDetailedInfo(templateInstanceRespVO);
if (templateInstanceRespVO != null) {
templateInstanceService.getDetailedInfo(templateInstanceRespVO);
}
});
return success(templateInstanceRespVOPageResult);
}
@@ -150,23 +156,28 @@ public class TemplateInstanceController extends AbstractFileUploadController {
public CommonResult<PageResult<TemplateInstanceRespVO>> listExcludingDisabled(@Valid TemplateInstancePageReqVO pageReqVO) {
PageResult<TemplateInstanceRespVO> templateInstanceRespVOPageResult = BeanUtils.toBean(templateInstanceService.listExcludingDisabled(pageReqVO), TemplateInstanceRespVO.class);
templateInstanceRespVOPageResult.getList().forEach(
templateInstanceRespVO ->
templateInstanceService.getDetailedInfo(templateInstanceRespVO));
templateInstanceRespVO -> {
if (templateInstanceRespVO != null) {
templateInstanceService.getDetailedInfo(templateInstanceRespVO);
}
}
);
return success(templateInstanceRespVOPageResult);
}
//停用和启用接口
@PostMapping("/disable-enable")
@Operation(summary = "实例停用和启用接口",description = "实例停用和启用接口")
@Operation(summary = "实例停用和启用接口", description = "实例停用和启用接口")
@PreAuthorize("@ss.hasPermission('bse:template-instance:disable-enable')")
public CommonResult<Boolean> setDisableOrEnable(@Valid @RequestBody DisableEnableReqVO reqVO) {
templateInstanceService.setDisableOrEnable(reqVO);
return success(true);
}
//根据id获取实例版本号
@GetMapping("/get-version")
@Operation(summary = "根据id获取实例版本号")
public CommonResult<Map<String,Object>> getVersion(@Valid @NotEmpty(message = "模版实例id不能为空") @RequestParam("id") String id) {
public CommonResult<Map<String, Object>> getVersion(@Valid @NotEmpty(message = "模版实例id不能为空") @RequestParam("id") String id) {
return success(templateInstanceService.getVersion(id));
}
@@ -175,13 +186,13 @@ public class TemplateInstanceController extends AbstractFileUploadController {
@Operation(summary = "创建版本")
@PreAuthorize("@ss.hasPermission('bse:template-instance:create-version')")
public CommonResult<TemplateInstanceRespVO> createVersion(@Valid @NotEmpty(message = "模版实例id不能为空") String id) {
return success(templateInstanceService.createVersion(id));
return success(templateInstanceService.createVersion(id));
}
//通过模版编码查看历史版本
@GetMapping("/list-by-template-cdg")
@Operation(summary = "通过模版编码(cdg)查看历史版本",description = "通过模版编码查看历史版本,已按照发布时间和创建时间降序排序")
public CommonResult<List<TemplateInstanceRespVO>> listByTemplateCode(@RequestParam("cdg") @Valid @NotEmpty(message = "模版编号不能为空") String templateCode) {
@Operation(summary = "通过模版编码(cdg)查看历史版本", description = "通过模版编码查看历史版本,已按照发布时间和创建时间降序排序")
public CommonResult<List<TemplateInstanceRespVO>> listByTemplateCode(@RequestParam("cdg") @Valid @NotEmpty(message = "模版编号不能为空") String templateCode) {
return success(templateInstanceService.listByCdg(templateCode));
}
}

View File

@@ -1,11 +1,15 @@
package com.zt.plat.module.base.controller.admin.templtp.onlyoffice.service;
import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.base.controller.admin.templtp.onlyoffice.pojo.Action;
import com.zt.plat.module.base.controller.admin.templtp.onlyoffice.pojo.History;
import com.zt.plat.module.base.controller.admin.templtp.onlyoffice.pojo.OnlyOfficeCallback;
import com.zt.plat.module.base.service.tmpltp.TemplateInstanceService;
import com.zt.plat.module.infra.api.file.FileApi;
import com.zt.plat.module.infra.api.file.dto.FileCreateReqDTO;
import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
import com.zt.plat.module.system.api.dept.DeptApi;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -13,6 +17,8 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import static com.zt.plat.module.base.controller.admin.templtp.onlyoffice.util.UrlFileDownloader.downloadFileAsMultipart;
@@ -21,55 +27,56 @@ import static com.zt.plat.module.base.controller.admin.templtp.onlyoffice.util.U
@RequiredArgsConstructor
@Slf4j
public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService {
private final FileApi fileApi;
private final TemplateInstanceService templateInstanceService;
@Override
public void processCallback(OnlyOfficeCallback callback,String id) {
log.info("Received OnlyOffice callback for document: {}", callback.getKey());
log.info("Callback status: {}", callback.getStatus());
public void processCallback(OnlyOfficeCallback callback, String id) {
log.info("收到OnlyOffice文档回调: {}", callback.getKey());
log.info("回调状态: {}", callback.getStatus());
// 根据不同的状态处理回调
switch (callback.getStatus()) {
case 1:
handleEditingStatus(callback,id);
handleEditingStatus(callback, id);
break;
case 2:
handleDocumentSaved(callback,id);
handleDocumentSaved(callback, id);
break;
case 3:
handleSaveError(callback,id);
handleSaveError(callback, id);
break;
case 4:
handleDocumentClosedWithoutChanges(callback,id);
handleDocumentClosedWithoutChanges(callback, id);
break;
case 6:
handleForcedSave(callback,id);
handleForcedSave(callback, id);
break;
case 7:
handleForcedSaveError(callback,id);
handleForcedSaveError(callback, id);
break;
default:
log.warn("Received unknown callback status: {}", callback.getStatus());
log.warn("收到未知的回调状态: {}", callback.getStatus());
}
}
/**
* 处理文档正在编辑的状态
*/
private void handleEditingStatus(OnlyOfficeCallback callback,String id) {
log.info("Document {} is being edited by users: {}",
private void handleEditingStatus(OnlyOfficeCallback callback, String id) {
log.info("文档 {} 正在被以下用户编辑: {}",
callback.getKey(), callback.getUsers());
// 处理用户操作(连接或断开连接)
if (callback.getActions() != null) {
for (Action action : callback.getActions()) {
String actionType = switch (action.getType()) {
case 0 -> "disconnected from";
case 1 -> "connected to";
case 2 -> "clicked force save in";
default -> "performed unknown action in";
case 0 -> "断开了与";
case 1 -> "连接到";
case 2 -> "在中点击了强制保存";
default -> "在中执行了未知操作";
};
log.info("User {} {}", action.getUserId(), actionType);
log.info("用户 {} {}", action.getUserId(), actionType);
}
}
}
@@ -77,59 +84,59 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService
/**
* 处理文档已保存的状态
*/
private void handleDocumentSaved(OnlyOfficeCallback callback,String id) {
log.info("Document {} is ready to be saved", callback.getKey());
saveDocument(callback,id);
private void handleDocumentSaved(OnlyOfficeCallback callback, String id) {
log.info("文档 {} 已准备好保存", callback.getKey());
saveDocument(callback, id);
// 处理历史记录
// handleHistoryChanges(callback,id);
// handleHistoryChanges(callback,id);
}
/**
* 处理保存错误的状态
*/
private void handleSaveError(OnlyOfficeCallback callback,String id) {
log.error("Error saving document {}", callback.getKey());
private void handleSaveError(OnlyOfficeCallback callback, String id) {
log.error("保存文档 {} 时出错", callback.getKey());
// 可以在这里添加错误处理逻辑,如发送通知等
}
/**
* 处理文档关闭且无更改的状态
*/
private void handleDocumentClosedWithoutChanges(OnlyOfficeCallback callback,String id) {
log.info("Document {} closed without changes", callback.getKey());
private void handleDocumentClosedWithoutChanges(OnlyOfficeCallback callback, String id) {
log.info("文档 {} 已关闭,未做任何更改", callback.getKey());
// 可以在这里添加清理资源等逻辑
}
/**
* 处理强制保存的状态
*/
private void handleForcedSave(OnlyOfficeCallback callback,String id) {
log.info("Document {} forced save. Type: {}",
private void handleForcedSave(OnlyOfficeCallback callback, String id) {
log.info("文档 {} 执行强制保存。类型: {}",
callback.getKey(), callback.getForceSaveType());
saveDocument(callback,id);
saveDocument(callback, id);
// 处理历史记录
handleHistoryChanges(callback,id);
handleHistoryChanges(callback, id);
// 如果是表单提交,处理表单数据
if (callback.getForceSaveType() == 3 && callback.getFormsDataUrl() != null) {
handleFormSubmission(callback,id);
handleFormSubmission(callback, id);
}
}
/**
* 处理强制保存错误的状态
*/
private void handleForcedSaveError(OnlyOfficeCallback callback,String id) {
log.error("Error during forced save of document {}", callback.getKey());
private void handleForcedSaveError(OnlyOfficeCallback callback, String id) {
log.error("文档 {} 强制保存时出错", callback.getKey());
// 可以在这里添加错误处理逻辑
}
/**
* 保存文档到存储
*/
private void saveDocument(OnlyOfficeCallback callback,String id) {
private void saveDocument(OnlyOfficeCallback callback, String id) {
if (callback.getUrl() == null) {
log.error("文件路径为空");
return;
@@ -151,7 +158,21 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService
fileCreateReqDTO.setDirectory(directory); // 设置文件存储目录
// 7. 调用文件服务创建文件
CommonResult<String> result = fileApi.createFile(fileCreateReqDTO);
CommonResult<FileRespDTO> result = fileApi.createFileWithReturn(fileCreateReqDTO);
if (result.isSuccess()) {
// 创建文件成功,处理结果
log.info("文件创建成功文件ID{}", result.getData());
// 创建文件成功,处理结果
FileRespDTO fileRespDTO = result.getData();
Map<String, Object> fileInfo = new HashMap<>();
fileInfo.put("id", fileRespDTO.getId());
fileInfo.put("name", fileRespDTO.getName());
fileInfo.put("directory", fileRespDTO.getDirectory());
templateInstanceService.updateTemplateInstanceFileUrlByInstanceId(id, JSONObject.toJSONString(fileInfo));
} else {
// 创建文件失败,处理错误
log.error("文件创建失败,错误信息:{}", result.getMsg());
}
log.info("文件创建结果:{}", result);
} catch (IOException e) {
throw new RuntimeException(e);
@@ -162,17 +183,17 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService
/**
* 处理文档历史记录变更
*/
private void handleHistoryChanges(OnlyOfficeCallback callback,String id) {
private void handleHistoryChanges(OnlyOfficeCallback callback, String id) {
History history = callback.getHistory();
if (history != null) {
log.info("Processing document history changes for {}", callback.getKey());
log.info("正在处理文档 {} 的历史记录变更", callback.getKey());
// 这里可以实现处理历史记录的逻辑
// 例如调用refreshHistory方法更新历史记录
}
// 处理变更历史URL
if (callback.getChangesUrl() != null) {
log.info("Changes URL for document {}: {}", callback.getKey(), callback.getChangesUrl());
log.info("文档 {} 的变更历史URL: {}", callback.getKey(), callback.getChangesUrl());
// 这里可以实现保存变更历史的逻辑
// 例如下载变更历史并使用setHistoryData方法存储
}
@@ -181,8 +202,8 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService
/**
* 处理表单提交数据
*/
private void handleFormSubmission(OnlyOfficeCallback callback,String id) {
log.info("Processing form submission for document {}", callback.getKey());
private void handleFormSubmission(OnlyOfficeCallback callback, String id) {
log.info("正在处理文档 {} 的表单提交", callback.getKey());
// 这里可以实现处理表单数据的逻辑
// 例如从formsDataUrl下载并解析表单数据
}

View File

@@ -79,7 +79,7 @@ public class UrlFileDownloader {
}
/**
* 从URL和响应头中提取文件名
* 从URL和响应头中提取文件名
*/
private static String getFileNameFromUrl(String fileUrl, URLConnection connection) {
// 优先从响应头的Content-Disposition获取attachment;filename="test.pdf"

View File

@@ -9,7 +9,7 @@ import java.util.List;
@Schema(description = "管理后台 - 实例启用与禁用 Request VO")
@Data
public class DisableEnableReqVO {
@Schema(description = "实例主键(id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@Schema(description = "实例主键(id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "['1','2']")
@NotEmpty(message = "实例主键不能为空")
private List<String> ids;
@Schema(description = "操作类型;操作类型type,type的值启用为enable禁用为disable", requiredMode = Schema.RequiredMode.REQUIRED, example = "enable")

View File

@@ -1,5 +1,7 @@
package com.zt.plat.module.base.controller.admin.templtp.vo;
import com.zt.plat.module.system.api.dept.dto.DeptDetailRespDTO;
import com.zt.plat.module.system.api.dept.dto.DeptRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@@ -59,12 +61,18 @@ public class TemplateInstanceRespVO {
@Schema(description = "发布时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("发布时间")
private LocalDateTime publishTime;
@Schema(description = "使用部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
private List<String> deptIds;
@Schema(description = "实例字段;这个是实例字段绑定的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
private List<TemplateInstanceDataRespVO> templateInstanceDataRespVOS;
@Schema(description = "实例条款;这个是实例条款绑定的条款;", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
private List<TemplateInstanceItemRespVO> instanceItemRespVOS;
@Schema(description = "使用部门编", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
private List<DeptRespDTO> DeptRespVOS;
@Schema(description = "模版分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试分类名称")
@ExcelProperty("模版分类名称")
private String tpName;
}

View File

@@ -6,6 +6,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
@Configuration(value = "baseRpcConfiguration", proxyBeanMethods = false)
@EnableFeignClients(clients = {DeptApi.class, FileApi.class})
@EnableFeignClients(clients = {DeptApi.class, FileApi.class,DeptApi.class})
public class RpcConfiguration {
}

View File

@@ -7,9 +7,7 @@ import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceDO;
import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.PageParam;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.web.multipart.MultipartFile;
/**
* 模板实例 Service 接口
@@ -83,6 +81,8 @@ public interface TemplateInstanceService {
Map<String, Object> getVersion(String id);
List<TemplateInstanceRespVO> listByCdg(String cdg);
//
// Map<String, Object> saveFile(MultipartFile file, String id);
Map<String, Object> saveFile(MultipartFile file, String id);
void updateTemplateInstanceFileUrlByInstanceId(@Valid @NotEmpty(message = "模版实例id不能为空") String id, @Valid @NotEmpty(message = "文件参数不能为空") String params);
}

View File

@@ -13,7 +13,8 @@ import com.zt.plat.framework.tenant.core.context.CompanyContextHolder;
import com.zt.plat.module.base.controller.admin.templtp.vo.*;
import com.zt.plat.module.base.dal.dataobject.tmpltp.*;
import com.zt.plat.module.base.dal.mysql.tmpltp.*;
import com.zt.plat.module.infra.api.file.FileApi;
import com.zt.plat.module.system.api.dept.DeptApi;
import com.zt.plat.module.system.api.dept.dto.DeptRespDTO;
import com.zt.plat.module.tmpltp.enums.DeleteStatusEnum;
import com.zt.plat.module.tmpltp.enums.PublishStatusEnum;
import com.zt.plat.module.tmpltp.enums.TmplStsEnum;
@@ -23,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.*;
@@ -45,7 +45,7 @@ import static com.zt.plat.module.tmpltp.enums.ErrorCodeConstants.*;
@Validated
public class TemplateInstanceServiceImpl implements TemplateInstanceService {
@Resource
private FileApi fileApi;
private DeptApi deptApi;
@Resource
private TemplateInstanceMapper templateInstanceMapper;
@Resource
@@ -55,6 +55,9 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
@Resource
private TemplateInstanceItemMapper templateInstanceItemMapper;
@Resource
private TmplTpService tmplTpService;
private static final Pattern VERSION_PATTERN = Pattern.compile("^(.*?)([0-9]+(?:\\.[0-9]+)*)(.*)$");
@Override
@@ -94,7 +97,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
// 更新
TemplateInstanceDO templateInstanceDO = templateInstanceMapper.selectById(updateReqVO.getId());
TemplateInstanceDO updateObj = BeanUtils.toBean(updateReqVO, TemplateInstanceDO.class);
// updateObj.setVer(incrementVersion(templateInstanceDO.getVer()));
// updateObj.setVer(incrementVersion(templateInstanceDO.getVer()));
templateInstanceMapper.updateById(updateObj);
}
@@ -148,7 +151,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
}
// private String incrementVersion(String currentVersion) {
// private String incrementVersion(String currentVersion) {
// // 处理空值或空字符串
// if (currentVersion == null || currentVersion.trim().isEmpty()) {
// return "v1.0";
@@ -205,40 +208,40 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
// String newNumberPart = String.join(".", segments);
// return prefix + newNumberPart + suffix;
// }
private String incrementVersion(String currentVersion) {
// 处理空值或空字符串
if (currentVersion == null || currentVersion.trim().isEmpty()) {
return "v1";
private String incrementVersion(String currentVersion) {
// 处理空值或空字符串
if (currentVersion == null || currentVersion.trim().isEmpty()) {
return "v1";
}
String version = currentVersion.trim();
// 正则模式:前缀(可选) + 数字部分 + 后缀(可选)
// 数字部分匹配一个或多个数字
Pattern VERSION_PATTERN = Pattern.compile("^([^0-9]*?)(\\d+)(.*)$");
Matcher matcher = VERSION_PATTERN.matcher(version);
if (!matcher.matches()) {
// 没有找到数字部分,返回默认版本
return version + "1";
}
String prefix = matcher.group(1); // 前缀部分(如 "v", "version-" 等)
String numberPart = matcher.group(2); // 数字部分(如 "1", "123"
String suffix = matcher.group(3); // 后缀部分
try {
// 将数字部分解析为整数并加1
int number = Integer.parseInt(numberPart);
number++;
// 重新组合版本号
return prefix + number + suffix;
} catch (NumberFormatException e) {
// 解析数字格式异常时的 fallback
return prefix + "1" + suffix;
}
}
String version = currentVersion.trim();
// 正则模式:前缀(可选) + 数字部分 + 后缀(可选)
// 数字部分匹配一个或多个数字
Pattern VERSION_PATTERN = Pattern.compile("^([^0-9]*?)(\\d+)(.*)$");
Matcher matcher = VERSION_PATTERN.matcher(version);
if (!matcher.matches()) {
// 没有找到数字部分,返回默认版本
return version + "1";
}
String prefix = matcher.group(1); // 前缀部分(如 "v", "version-" 等)
String numberPart = matcher.group(2); // 数字部分(如 "1", "123"
String suffix = matcher.group(3); // 后缀部分
try {
// 将数字部分解析为整数并加1
int number = Integer.parseInt(numberPart);
number++;
// 重新组合版本号
return prefix + number + suffix;
} catch (NumberFormatException e) {
// 解析数字格式异常时的 fallback
return prefix + "1" + suffix;
}
}
@Override
public List<String> getDeptByInstanId(Long instanId) {
@@ -270,7 +273,7 @@ private String incrementVersion(String currentVersion) {
throw exception(STATUS_OPERATION_FAIL);
}
});
log.info("发布模版实例【{}】", publishReqVOS.stream().map(PublishTemplateInstanceReqVO::getId));
templateInstanceMapper.update(new LambdaUpdateWrapper<TemplateInstanceDO>()
.in(TemplateInstanceDO::getId, publishReqVOS.stream()
.map(PublishTemplateInstanceReqVO::getId)
@@ -286,14 +289,18 @@ private String incrementVersion(String currentVersion) {
@Override
public void setDisableOrEnable(DisableEnableReqVO reqVO) {
validateTemplateInstanceExists(reqVO.getIds().stream().map(Long::valueOf).toList());
String code;
String code = "";
if (reqVO.getType().equals("disable")) {
// 禁用
code = TmplStsEnum.STOPPED.getCode();
} else {
} else if (reqVO.getType().equals("enable")) {
// 启用
code = TmplStsEnum.PUBLISHED.getCode();
}
if (code.isEmpty()) {
throw exception(ILLEGAL_OPERATION_TYPE);
}
log.info("=============================当前操作记录为【{}】操作动作为:【{}】================================", reqVO.getIds(), reqVO.getType());
templateInstanceMapper.update(new LambdaUpdateWrapper<TemplateInstanceDO>()
.set(TemplateInstanceDO::getSts, code)
.in(TemplateInstanceDO::getId, reqVO.getIds()));
@@ -308,19 +315,20 @@ private String incrementVersion(String currentVersion) {
newTpInstanceDO.setId(null);
newTpInstanceDO.setVer(incrementVersion(templateInstanceDO.getVer()));
newTpInstanceDO.setPublishTime(LocalDateTime.now());
newTpInstanceDO.setOrigCntt(templateInstanceDO.getCntt());
newTpInstanceDO.setCreateTime(null);
newTpInstanceDO.setUpdateTime(null);
templateInstanceMapper.insert(newTpInstanceDO);
templateInstanceMapper.update(new LambdaUpdateWrapper<TemplateInstanceDO>()
.set(TemplateInstanceDO::getSts,TmplStsEnum.STOPPED.getCode())
.set(TemplateInstanceDO::getSts, TmplStsEnum.STOPPED.getCode())
.eq(TemplateInstanceDO::getId, id));
List<TemplateInstanceDataDO> templateInstanceDataDOS = new ArrayList<>();
List<TemplateInstanceItemDO> templateInstanceItemDOS =new ArrayList<>();
List<TemplateInstanceItemDO> templateInstanceItemDOS = new ArrayList<>();
List<DepartmentInstanceRelativityDO> newDepartmentInstanceRelativityDOS = new ArrayList<>();
//设置部门
List<DepartmentInstanceRelativityDO> departmentInstanceRelativityDOS = departmentInstanceRelativityMapper
.selectList(new LambdaQueryWrapper<DepartmentInstanceRelativityDO>()
.eq(DepartmentInstanceRelativityDO::getTemplateInstanceId, id));
.eq(DepartmentInstanceRelativityDO::getTemplateInstanceId, id));
departmentInstanceRelativityDOS.forEach(departmentInstanceRelativityDO -> {
DepartmentInstanceRelativityDO newDepartmentInstanceRelativityDO = new DepartmentInstanceRelativityDO();
newDepartmentInstanceRelativityDO.setTemplateInstanceId(String.valueOf(newTpInstanceDO.getId()));
@@ -330,20 +338,20 @@ private String incrementVersion(String currentVersion) {
//设置条款
templateInstanceItemMapper.selectList(new LambdaQueryWrapper<TemplateInstanceItemDO>()
.eq(TemplateInstanceItemDO::getInscId, id)).forEach(templateInstanceItemDO -> {
TemplateInstanceItemDO newTemplateInstanceItemDO = new TemplateInstanceItemDO();
newTemplateInstanceItemDO.setInscId(String.valueOf(newTpInstanceDO.getId()));
newTemplateInstanceItemDO.setItmId(templateInstanceItemDO.getItmId());
newTemplateInstanceItemDO.setVal(templateInstanceItemDO.getVal());
templateInstanceItemDOS.add(newTemplateInstanceItemDO);
TemplateInstanceItemDO newTemplateInstanceItemDO = new TemplateInstanceItemDO();
newTemplateInstanceItemDO.setInscId(String.valueOf(newTpInstanceDO.getId()));
newTemplateInstanceItemDO.setItmId(templateInstanceItemDO.getItmId());
newTemplateInstanceItemDO.setVal(templateInstanceItemDO.getVal());
templateInstanceItemDOS.add(newTemplateInstanceItemDO);
});
//设置实例字段
templateInstanceDataMapper.selectList(new LambdaQueryWrapper<TemplateInstanceDataDO>()
.eq(TemplateInstanceDataDO::getInscId, id)).forEach(templateInstanceDataDO -> {
TemplateInstanceDataDO newTemplateInstanceDataDO = new TemplateInstanceDataDO();
newTemplateInstanceDataDO.setInscId(String.valueOf(newTpInstanceDO.getId()));
newTemplateInstanceDataDO.setFldKy(templateInstanceDataDO.getFldKy());
newTemplateInstanceDataDO.setFldVal(templateInstanceDataDO.getFldVal());
templateInstanceDataDOS.add(newTemplateInstanceDataDO);
TemplateInstanceDataDO newTemplateInstanceDataDO = new TemplateInstanceDataDO();
newTemplateInstanceDataDO.setInscId(String.valueOf(newTpInstanceDO.getId()));
newTemplateInstanceDataDO.setFldKy(templateInstanceDataDO.getFldKy());
newTemplateInstanceDataDO.setFldVal(templateInstanceDataDO.getFldVal());
templateInstanceDataDOS.add(newTemplateInstanceDataDO);
});
templateInstanceDataMapper.insertBatch(templateInstanceDataDOS);
log.info("==================实例字段插入成功,共插入【{}】条记录==================", templateInstanceDataDOS.size());
@@ -352,6 +360,7 @@ private String incrementVersion(String currentVersion) {
departmentInstanceRelativityMapper.insertBatch(newDepartmentInstanceRelativityDOS);
log.info("==================部门实例关系插入成功,共插入【{}】条记录==================", newDepartmentInstanceRelativityDOS.size());
TemplateInstanceRespVO templateInstanceRespVO = BeanUtils.toBean(newTpInstanceDO, TemplateInstanceRespVO.class);
log.info("==================模板实例插入成功==================");
getDetailedInfo(templateInstanceRespVO);
return templateInstanceRespVO;
}
@@ -361,7 +370,7 @@ private String incrementVersion(String currentVersion) {
validateTemplateInstanceExists(Long.valueOf(id));
String ver = templateInstanceMapper.selectById(id).getVer();
String newVer = incrementVersion(ver);
return Map.of("version",ver,"newVersion",newVer);
return Map.of("version", ver, "newVersion", newVer);
}
@Override
@@ -378,11 +387,7 @@ private String incrementVersion(String currentVersion) {
return templateInstanceRespVOS;
}
@Override
public Map<String, Object> saveFile(MultipartFile file, String id) {
return Map.of();
}
@Override
@@ -390,8 +395,23 @@ private String incrementVersion(String currentVersion) {
templateInstanceRespVO.setDeptIds(getDeptByInstanId(templateInstanceRespVO.getId())); // 部门
templateInstanceRespVO.setInstanceItemRespVOS(setInstanceItemRespVOS(templateInstanceRespVO.getId())); // 条款
templateInstanceRespVO.setTemplateInstanceDataRespVOS(setTemplateInstanceDataRespVOS(templateInstanceRespVO.getId())); // 实例字段
if (!templateInstanceRespVO.getDeptIds().isEmpty()){
templateInstanceRespVO.setDeptRespVOS(deptApi.getDeptList(templateInstanceRespVO.getDeptIds().stream().map(Long::valueOf).toList()).getData()); // 部门详情
}
TmplTpDO tmplTp = tmplTpService.getTmplTp(templateInstanceRespVO.getTpId());
if (tmplTp != null){
templateInstanceRespVO.setTpName(!tmplTp.getName().isEmpty()?tmplTp.getName():"分类未命名");
}
}
@Override
public void updateTemplateInstanceFileUrlByInstanceId(String id, String params) {
validateTemplateInstanceExists(Long.valueOf(id));
LambdaUpdateWrapper<TemplateInstanceDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TemplateInstanceDO::getId, id).set(TemplateInstanceDO::getCntt, params);
templateInstanceMapper.update(updateWrapper);
}
// 实例条款值
private List<TemplateInstanceItemRespVO> setInstanceItemRespVOS(Long id) {
List<TemplateInstanceItemDO> templateInstanceItemDOS = templateInstanceItemMapper.selectList(new LambdaQueryWrapper<TemplateInstanceItemDO>()
@@ -400,7 +420,7 @@ private String incrementVersion(String currentVersion) {
List<TemplateInstanceItemRespVO> templateInstanceItemRespVOS = BeanUtils.toBean(templateInstanceItemDOS, TemplateInstanceItemRespVO.class);
TmplItmMapper tmplItmMapper = SpringUtil.getBean(TmplItmMapper.class);
List<String> ids = templateInstanceItemRespVOS.stream().map(TemplateInstanceItemRespVO::getItmId).toList();
if (ids.isEmpty()){
if (ids.isEmpty()) {
return templateInstanceItemRespVOS;
}
List<TmplItmDO> tmplItmDOS = tmplItmMapper.selectByIds(ids);
@@ -411,7 +431,7 @@ private String incrementVersion(String currentVersion) {
}
});
});
return templateInstanceItemRespVOS ;
return templateInstanceItemRespVOS;
}
// 实例数据
@@ -428,6 +448,9 @@ private String incrementVersion(String currentVersion) {
boolean transitionAllowed = false;
if (deleteStatusEnum != null) {
transitionAllowed = deleteStatusEnum.isTransitionAllowed(TmplStsEnum.DRAFT.getCode());
if (!transitionAllowed) {
transitionAllowed = deleteStatusEnum.isTransitionAllowed(TmplStsEnum.STOPPED.getCode());
}
}
if (!transitionAllowed) {
throw exception(STATUS_OPERATION_FAIL);
@@ -458,7 +481,8 @@ private String incrementVersion(String currentVersion) {
throw exception(STATUS_OPERATION_FAIL);
}
}
private String getCdg(){
private String getCdg() {
return "TP" + DateUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomUtil.randomNumbers(4);
}
}