From bf31812356b3f45cd5356175c17b13653c4fb924 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Tue, 12 May 2026 10:28:49 +0800 Subject: [PATCH] =?UTF-8?q?2026-05-12=20RoHs=E5=8A=9F=E8=83=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Impl/TransNoControlServiceImpl.java | 31 +++---- .../modules/oss/controller/OssController.java | 10 +- .../modules/oss/service/SysOssService.java | 4 +- .../oss/service/impl/SysOssServiceImpl.java | 93 ++++++++++++++----- 4 files changed, 94 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java b/src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java index f968203c..bd64aeda 100644 --- a/src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java +++ b/src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java @@ -21,7 +21,6 @@ import java.util.Date; @Service("transNoControlService") public class TransNoControlServiceImpl implements TransNoControlService { - private static final String ROHS_REFERENCE_NO = "reference_no"; private static final String METHOD_COMMON = "常规"; private static final String METHOD_SERIAL = "流水号"; private static final String METHOD_DATE_SERIAL = "年月日+流水号"; @@ -35,36 +34,19 @@ public class TransNoControlServiceImpl implements TransNoControlService { @Override @Transactional(rollbackFor = Exception.class) public String transNo(String site, String no) { - // 当前仅对 RoHs 单据号(reference_no)启用扩展规则,其他业务保持原有逻辑 - if (!ROHS_REFERENCE_NO.equalsIgnoreCase(StringUtils.trimToEmpty(no))) { - TransNoControlRuleData baseRule = transNoControlDao.getBaseRuleForUpdate(site, no); - validateRuleExists(site, no, baseRule); - String transNo = transNoControlDao.transNo(site, no); - if (StringUtils.isBlank(transNo)) { - throw new RuntimeException("单号配置异常,请检查 TransNoControl 或 Get_TransNo 规则!site=" + site + ", transType=" + no); - } - transNoControlDao.update(site, no); - return transNo; - } - TransNoControlRuleData baseRule = transNoControlDao.getBaseRuleForUpdate(site, no); validateRuleExists(site, no, baseRule); Integer extendReady = transNoControlDao.checkExtendColumnsReady(); if (extendReady == null || extendReady != 1) { - throw new RuntimeException("RoHs单号扩展字段缺失,请先执行TransNoControl升级SQL(generate_method、date_format、date_part)"); + return legacyTransNo(site, no); } TransNoControlRuleData rule = transNoControlDao.getRuleForUpdate(site, no); validateRuleExists(site, no, rule); String generateMethod = normalizeMethod(rule.getGenerateMethod()); if (StringUtils.isBlank(generateMethod) || METHOD_COMMON.equals(generateMethod)) { - String transNo = transNoControlDao.transNo(site, no); - if (StringUtils.isBlank(transNo)) { - throw new RuntimeException("RoHs单号配置异常,请检查 TransNoControl 或 Get_TransNo 规则!site=" + site + ", transType=" + no); - } - transNoControlDao.update(site, no); - return transNo; + return legacyTransNo(site, no); } String transNo = generateByRule(rule, generateMethod); @@ -134,4 +116,13 @@ public class TransNoControlServiceImpl implements TransNoControlService { throw new RuntimeException("未找到单号配置,请维护 TransNoControl!site=" + site + ", transType=" + no); } } + + private String legacyTransNo(String site, String no) { + String transNo = transNoControlDao.transNo(site, no); + if (StringUtils.isBlank(transNo)) { + throw new RuntimeException("单号配置异常,请检查 TransNoControl 或 Get_TransNo 规则!site=" + site + ", transType=" + no); + } + transNoControlDao.update(site, no); + return transNo; + } } diff --git a/src/main/java/com/spring/modules/oss/controller/OssController.java b/src/main/java/com/spring/modules/oss/controller/OssController.java index 302e5946..55fbceb4 100644 --- a/src/main/java/com/spring/modules/oss/controller/OssController.java +++ b/src/main/java/com/spring/modules/oss/controller/OssController.java @@ -27,11 +27,17 @@ public class OssController { @PostMapping("/upgrade") public R upgrade(@RequestParam("file") MultipartFile file, @RequestParam("sourceId") Long sourceId, - @RequestParam(value = "fileRemark", required = false) String fileRemark){ - sysOssService.upgradeOssFile(file, sourceId, fileRemark); + @RequestParam(value = "fileRemark", required = false) String fileRemark, + @RequestParam(value = "newRev", required = false) Integer newRev){ + sysOssService.upgradeOssFile(file, sourceId, fileRemark, newRev); return R.ok("操作成功"); } + @GetMapping("/nextFileNo") + public R nextFileNo(@RequestParam("site") String site){ + return R.ok().put("fileNo", sysOssService.getNextFileNo(site)); + } + @PostMapping("/remove") public R removeOssFile(@RequestBody List ids){ sysOssService.removeOssFile(ids); diff --git a/src/main/java/com/spring/modules/oss/service/SysOssService.java b/src/main/java/com/spring/modules/oss/service/SysOssService.java index 870f1447..905c6ac8 100644 --- a/src/main/java/com/spring/modules/oss/service/SysOssService.java +++ b/src/main/java/com/spring/modules/oss/service/SysOssService.java @@ -50,5 +50,7 @@ public interface SysOssService extends IService { void previewOssFileById(Integer id,HttpServletResponse response); - void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark); + void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark, Integer newRev); + + String getNextFileNo(String site); } diff --git a/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java b/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java index 40f56aad..b02d14ce 100644 --- a/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java +++ b/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.spring.common.utils.PageUtils; +import com.spring.modules.base.service.TransNoControlService; import com.spring.modules.oss.dao.SysOssDao; import com.spring.modules.oss.entity.SysOssEntity; import com.spring.modules.oss.service.SysOssService; @@ -12,6 +13,7 @@ import com.spring.modules.oss.vo.SysOssEntityData; import com.spring.modules.sys.entity.SysUserEntity; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,6 +31,12 @@ import java.util.*; @Service("sysOssService") public class SysOssServiceImpl extends ServiceImpl implements SysOssService { + private static final String TDS_PROPERTY_GROUP = "tdsProperty"; + private static final String FILE_NO_TRANS_TYPE = "file_no"; + + @Autowired + private TransNoControlService transNoControlService; + @Override public PageUtils queryPage(Map params) { long page = Long.valueOf(params.get("page").toString()); @@ -62,24 +70,9 @@ public class SysOssServiceImpl extends ServiceImpl impl @Override @Transactional public void upload(List files, SysOssEntity oss) { - boolean hasVersionMeta = StringUtils.isNotBlank(oss.getFileNo()) || oss.getRev() != null; - if (hasVersionMeta) { - validateFileVersionParam(oss); - } + boolean tdsProperty = TDS_PROPERTY_GROUP.equals(oss.getOrderRef3()); Date date = new Date(); for (MultipartFile file : files) { - if (hasVersionMeta) { - long sameVersionCount = lambdaQuery() - .eq(SysOssEntity::getOrderRef1, oss.getOrderRef1()) - .eq(SysOssEntity::getOrderRef2, oss.getOrderRef2()) - .eq(StringUtils.isNotEmpty(oss.getOrderRef3()), SysOssEntity::getOrderRef3, oss.getOrderRef3()) - .eq(SysOssEntity::getFileNo, oss.getFileNo()) - .eq(SysOssEntity::getRev, oss.getRev()) - .count(); - if (sameVersionCount > 0) { - throw new IllegalArgumentException("当前文件编码和版本号已存在,请修改后重试"); - } - } SysOssEntity saveEntity = new SysOssEntity(); saveEntity.setOrderRef1(oss.getOrderRef1()); saveEntity.setOrderRef2(oss.getOrderRef2()); @@ -89,6 +82,26 @@ public class SysOssServiceImpl extends ServiceImpl impl saveEntity.setFileNo(oss.getFileNo()); saveEntity.setRev(oss.getRev()); saveEntity.setInvalidationTime(oss.getInvalidationTime()); + + if (tdsProperty) { + fillTdsUploadVersionInfo(saveEntity); + } + boolean hasVersionMeta = StringUtils.isNotBlank(saveEntity.getFileNo()) || saveEntity.getRev() != null; + if (hasVersionMeta) { + validateFileVersionParam(saveEntity); + } + if (hasVersionMeta) { + long sameVersionCount = lambdaQuery() + .eq(SysOssEntity::getOrderRef1, saveEntity.getOrderRef1()) + .eq(SysOssEntity::getOrderRef2, saveEntity.getOrderRef2()) + .eq(StringUtils.isNotEmpty(saveEntity.getOrderRef3()), SysOssEntity::getOrderRef3, saveEntity.getOrderRef3()) + .eq(SysOssEntity::getFileNo, saveEntity.getFileNo()) + .eq(SysOssEntity::getRev, saveEntity.getRev()) + .count(); + if (sameVersionCount > 0) { + throw new IllegalArgumentException("当前文件编码和版本号已存在,请修改后重试"); + } + } saveUploadedFile(file, saveEntity, date); } } @@ -120,7 +133,7 @@ public class SysOssServiceImpl extends ServiceImpl impl @Override @Transactional - public void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark) { + public void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark, Integer newRev) { Assert.notNull(sourceId, "请先选择需要升版的文件"); if (file == null || file.isEmpty()) { throw new IllegalArgumentException("请选择需要上传的新版本文件"); @@ -134,17 +147,27 @@ public class SysOssServiceImpl extends ServiceImpl impl } if (StringUtils.isBlank(source.getFileNo())) { - source.setFileNo("TDS-" + source.getId()); + if (StringUtils.isBlank(source.getOrderRef1())) { + throw new IllegalArgumentException("源文件缺少工厂信息(order_ref1),无法自动生成文件编码"); + } + String autoFileNo = transNoControlService.transNo(source.getOrderRef1(), FILE_NO_TRANS_TYPE); + if (StringUtils.isBlank(autoFileNo)) { + throw new IllegalArgumentException("文件编码规则缺失,请维护TransNoControl:transType=file_no"); + } + source.setFileNo(autoFileNo); } int currentRev = source.getRev() == null ? 1 : source.getRev(); source.setRev(currentRev); - int nextRev = currentRev + 1; + int targetRev = newRev == null ? (currentRev + 1) : newRev; + if (targetRev <= currentRev) { + throw new IllegalArgumentException("新版本号必须大于当前版本号"); + } long sameVersionCount = lambdaQuery() .eq(SysOssEntity::getOrderRef1, source.getOrderRef1()) .eq(SysOssEntity::getOrderRef2, source.getOrderRef2()) .eq(SysOssEntity::getOrderRef3, source.getOrderRef3()) .eq(SysOssEntity::getFileNo, source.getFileNo()) - .eq(SysOssEntity::getRev, nextRev) + .eq(SysOssEntity::getRev, targetRev) .count(); if (sameVersionCount > 0) { throw new IllegalArgumentException("新版本号已存在,请刷新后重试"); @@ -160,11 +183,23 @@ public class SysOssServiceImpl extends ServiceImpl impl newVersion.setOrderRef3(source.getOrderRef3()); newVersion.setFileTypeCode(source.getFileTypeCode()); newVersion.setFileNo(source.getFileNo()); - newVersion.setRev(nextRev); + newVersion.setRev(targetRev); newVersion.setFileRemark(StringUtils.isNotBlank(fileRemark) ? fileRemark : source.getFileRemark()); saveUploadedFile(file, newVersion, now); } + @Override + public String getNextFileNo(String site) { + if (StringUtils.isBlank(site)) { + throw new IllegalArgumentException("工厂信息不能为空"); + } + String fileNo = transNoControlService.transNo(site, FILE_NO_TRANS_TYPE); + if (StringUtils.isBlank(fileNo)) { + throw new IllegalArgumentException("文件编码规则缺失,请维护TransNoControl:transType=file_no"); + } + return fileNo; + } + @Override public void previewOssFileById(Integer id, HttpServletResponse response) { SysOssEntity oss = this.getById(id); @@ -220,6 +255,22 @@ public class SysOssServiceImpl extends ServiceImpl impl } } + private void fillTdsUploadVersionInfo(SysOssEntity entity) { + if (StringUtils.isBlank(entity.getOrderRef1())) { + throw new IllegalArgumentException("TDS属性上传缺少工厂信息(order_ref1)"); + } + if (StringUtils.isBlank(entity.getFileNo())) { + String autoFileNo = transNoControlService.transNo(entity.getOrderRef1(), FILE_NO_TRANS_TYPE); + if (StringUtils.isBlank(autoFileNo)) { + throw new IllegalArgumentException("文件编码规则缺失,请维护TransNoControl:transType=file_no"); + } + entity.setFileNo(autoFileNo); + } + if (entity.getRev() == null || entity.getRev() <= 0) { + entity.setRev(1); + } + } + private void saveUploadedFile(MultipartFile file, SysOssEntity oss, Date createDate) { String fileName = file.getOriginalFilename(); if (StringUtils.isEmpty(fileName)) {