diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java index 9ad986a..9616b91 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java @@ -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; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java index b7bc88c..f21f064 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/TemplateInstanceController.java @@ -59,11 +59,11 @@ public class TemplateInstanceController extends AbstractFileUploadController { private TemplateInstanceService templateInstanceService; //上传文件 - @PostMapping("/save-file") - @Operation(summary = "上传文件", description = "上传文件,传入文件对象和模版实例id") - public CommonResult> 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> uploadFile(@NotEmpty(message = "文件不能为空") @RequestParam("file") MultipartFile file,@RequestParam("id") String id) { +// return success(templateInstanceService.saveFile(file,id)); +// } @PostMapping("/create") @Operation(summary = "创建模板实例") diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java index 1e9b04b..108553e 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/onlyoffice/service/OnlyOfficeCallbackServiceImpl.java @@ -1,11 +1,14 @@ 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -13,6 +16,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; @@ -23,6 +28,7 @@ import static com.zt.plat.module.base.controller.admin.templtp.onlyoffice.util.U 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()); @@ -151,7 +157,21 @@ public class OnlyOfficeCallbackServiceImpl implements OnlyOfficeCallbackService fileCreateReqDTO.setDirectory(directory); // 设置文件存储目录 // 7. 调用文件服务创建文件 - CommonResult result = fileApi.createFile(fileCreateReqDTO); + CommonResult result = fileApi.createFileWithReturn(fileCreateReqDTO); + if (result.isSuccess()) { + // 创建文件成功,处理结果 + log.info("文件创建成功,文件ID:{}", result.getData()); + // 创建文件成功,处理结果 + FileRespDTO fileRespDTO = result.getData(); + Map 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); diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/DisableEnableReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/DisableEnableReqVO.java index d8de1d5..270cf19 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/DisableEnableReqVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/DisableEnableReqVO.java @@ -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 ids; @Schema(description = "操作类型;操作类型type,type的值启用为enable,禁用为disable", requiredMode = Schema.RequiredMode.REQUIRED, example = "enable") diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java index 2cd658c..505c287 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceService.java @@ -83,6 +83,8 @@ public interface TemplateInstanceService { Map getVersion(String id); List listByCdg(String cdg); +// +// Map saveFile(MultipartFile file, String id); - Map saveFile(MultipartFile file, String id); + boolean updateTemplateInstanceFileUrlByInstanceId(@Valid @NotEmpty(message = "模版实例id不能为空") String id, @Valid @NotEmpty(message = "文件参数不能为空") String params); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java index 8721c16..307d600 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java @@ -94,7 +94,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 +148,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 +205,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 getDeptByInstanId(Long instanId) { @@ -270,7 +270,7 @@ private String incrementVersion(String currentVersion) { throw exception(STATUS_OPERATION_FAIL); } }); - + log.info("发布模版实例【{}】", publishReqVOS.stream().map(PublishTemplateInstanceReqVO::getId)); templateInstanceMapper.update(new LambdaUpdateWrapper() .in(TemplateInstanceDO::getId, publishReqVOS.stream() .map(PublishTemplateInstanceReqVO::getId) @@ -286,14 +286,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() .set(TemplateInstanceDO::getSts, code) .in(TemplateInstanceDO::getId, reqVO.getIds())); @@ -312,15 +316,15 @@ private String incrementVersion(String currentVersion) { newTpInstanceDO.setUpdateTime(null); templateInstanceMapper.insert(newTpInstanceDO); templateInstanceMapper.update(new LambdaUpdateWrapper() - .set(TemplateInstanceDO::getSts,TmplStsEnum.STOPPED.getCode()) + .set(TemplateInstanceDO::getSts, TmplStsEnum.STOPPED.getCode()) .eq(TemplateInstanceDO::getId, id)); List templateInstanceDataDOS = new ArrayList<>(); - List templateInstanceItemDOS =new ArrayList<>(); + List templateInstanceItemDOS = new ArrayList<>(); List newDepartmentInstanceRelativityDOS = new ArrayList<>(); //设置部门 List departmentInstanceRelativityDOS = departmentInstanceRelativityMapper .selectList(new LambdaQueryWrapper() - .eq(DepartmentInstanceRelativityDO::getTemplateInstanceId, id)); + .eq(DepartmentInstanceRelativityDO::getTemplateInstanceId, id)); departmentInstanceRelativityDOS.forEach(departmentInstanceRelativityDO -> { DepartmentInstanceRelativityDO newDepartmentInstanceRelativityDO = new DepartmentInstanceRelativityDO(); newDepartmentInstanceRelativityDO.setTemplateInstanceId(String.valueOf(newTpInstanceDO.getId())); @@ -330,20 +334,20 @@ private String incrementVersion(String currentVersion) { //设置条款 templateInstanceItemMapper.selectList(new LambdaQueryWrapper() .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() .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 +356,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 +366,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 +383,7 @@ private String incrementVersion(String currentVersion) { return templateInstanceRespVOS; } - @Override - public Map saveFile(MultipartFile file, String id) { - return Map.of(); - } @Override @@ -392,6 +393,13 @@ private String incrementVersion(String currentVersion) { templateInstanceRespVO.setTemplateInstanceDataRespVOS(setTemplateInstanceDataRespVOS(templateInstanceRespVO.getId())); // 实例字段 } + @Override + public boolean updateTemplateInstanceFileUrlByInstanceId(String id, String params) { + validateTemplateInstanceExists(Long.valueOf(id)); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(TemplateInstanceDO::getId, id).set(TemplateInstanceDO::getCntt, params); + return templateInstanceMapper.update(updateWrapper)>0; + } // 实例条款值 private List setInstanceItemRespVOS(Long id) { List templateInstanceItemDOS = templateInstanceItemMapper.selectList(new LambdaQueryWrapper() @@ -400,7 +408,7 @@ private String incrementVersion(String currentVersion) { List templateInstanceItemRespVOS = BeanUtils.toBean(templateInstanceItemDOS, TemplateInstanceItemRespVO.class); TmplItmMapper tmplItmMapper = SpringUtil.getBean(TmplItmMapper.class); List ids = templateInstanceItemRespVOS.stream().map(TemplateInstanceItemRespVO::getItmId).toList(); - if (ids.isEmpty()){ + if (ids.isEmpty()) { return templateInstanceItemRespVOS; } List tmplItmDOS = tmplItmMapper.selectByIds(ids); @@ -411,7 +419,7 @@ private String incrementVersion(String currentVersion) { } }); }); - return templateInstanceItemRespVOS ; + return templateInstanceItemRespVOS; } // 实例数据 @@ -428,6 +436,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 +469,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); } }