Browse Source

2026-05-12

RoHs功能优化
master
fengyuan_yang 1 month ago
parent
commit
bf31812356
  1. 31
      src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java
  2. 10
      src/main/java/com/spring/modules/oss/controller/OssController.java
  3. 4
      src/main/java/com/spring/modules/oss/service/SysOssService.java
  4. 93
      src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java

31
src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java

@ -21,7 +21,6 @@ import java.util.Date;
@Service("transNoControlService") @Service("transNoControlService")
public class TransNoControlServiceImpl implements 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_COMMON = "常规";
private static final String METHOD_SERIAL = "流水号"; private static final String METHOD_SERIAL = "流水号";
private static final String METHOD_DATE_SERIAL = "年月日+流水号"; private static final String METHOD_DATE_SERIAL = "年月日+流水号";
@ -35,36 +34,19 @@ public class TransNoControlServiceImpl implements TransNoControlService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String transNo(String site, String no) { 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); TransNoControlRuleData baseRule = transNoControlDao.getBaseRuleForUpdate(site, no);
validateRuleExists(site, no, baseRule); validateRuleExists(site, no, baseRule);
Integer extendReady = transNoControlDao.checkExtendColumnsReady(); Integer extendReady = transNoControlDao.checkExtendColumnsReady();
if (extendReady == null || extendReady != 1) { 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); TransNoControlRuleData rule = transNoControlDao.getRuleForUpdate(site, no);
validateRuleExists(site, no, rule); validateRuleExists(site, no, rule);
String generateMethod = normalizeMethod(rule.getGenerateMethod()); String generateMethod = normalizeMethod(rule.getGenerateMethod());
if (StringUtils.isBlank(generateMethod) || METHOD_COMMON.equals(generateMethod)) { 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); String transNo = generateByRule(rule, generateMethod);
@ -134,4 +116,13 @@ public class TransNoControlServiceImpl implements TransNoControlService {
throw new RuntimeException("未找到单号配置,请维护 TransNoControl!site=" + site + ", transType=" + no); 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;
}
} }

10
src/main/java/com/spring/modules/oss/controller/OssController.java

@ -27,11 +27,17 @@ public class OssController {
@PostMapping("/upgrade") @PostMapping("/upgrade")
public R upgrade(@RequestParam("file") MultipartFile file, public R upgrade(@RequestParam("file") MultipartFile file,
@RequestParam("sourceId") Long sourceId, @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("操作成功"); return R.ok("操作成功");
} }
@GetMapping("/nextFileNo")
public R nextFileNo(@RequestParam("site") String site){
return R.ok().put("fileNo", sysOssService.getNextFileNo(site));
}
@PostMapping("/remove") @PostMapping("/remove")
public R removeOssFile(@RequestBody List<Integer> ids){ public R removeOssFile(@RequestBody List<Integer> ids){
sysOssService.removeOssFile(ids); sysOssService.removeOssFile(ids);

4
src/main/java/com/spring/modules/oss/service/SysOssService.java

@ -50,5 +50,7 @@ public interface SysOssService extends IService<SysOssEntity> {
void previewOssFileById(Integer id,HttpServletResponse response); 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);
} }

93
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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.spring.common.utils.PageUtils; 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.dao.SysOssDao;
import com.spring.modules.oss.entity.SysOssEntity; import com.spring.modules.oss.entity.SysOssEntity;
import com.spring.modules.oss.service.SysOssService; 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 com.spring.modules.sys.entity.SysUserEntity;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -29,6 +31,12 @@ import java.util.*;
@Service("sysOssService") @Service("sysOssService")
public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> implements SysOssService { public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> 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 @Override
public PageUtils queryPage(Map<String, Object> params) { public PageUtils queryPage(Map<String, Object> params) {
long page = Long.valueOf(params.get("page").toString()); long page = Long.valueOf(params.get("page").toString());
@ -62,24 +70,9 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl
@Override @Override
@Transactional @Transactional
public void upload(List<MultipartFile> files, SysOssEntity oss) { public void upload(List<MultipartFile> 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(); Date date = new Date();
for (MultipartFile file : files) { 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(); SysOssEntity saveEntity = new SysOssEntity();
saveEntity.setOrderRef1(oss.getOrderRef1()); saveEntity.setOrderRef1(oss.getOrderRef1());
saveEntity.setOrderRef2(oss.getOrderRef2()); saveEntity.setOrderRef2(oss.getOrderRef2());
@ -89,6 +82,26 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl
saveEntity.setFileNo(oss.getFileNo()); saveEntity.setFileNo(oss.getFileNo());
saveEntity.setRev(oss.getRev()); saveEntity.setRev(oss.getRev());
saveEntity.setInvalidationTime(oss.getInvalidationTime()); 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); saveUploadedFile(file, saveEntity, date);
} }
} }
@ -120,7 +133,7 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl
@Override @Override
@Transactional @Transactional
public void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark) {
public void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark, Integer newRev) {
Assert.notNull(sourceId, "请先选择需要升版的文件"); Assert.notNull(sourceId, "请先选择需要升版的文件");
if (file == null || file.isEmpty()) { if (file == null || file.isEmpty()) {
throw new IllegalArgumentException("请选择需要上传的新版本文件"); throw new IllegalArgumentException("请选择需要上传的新版本文件");
@ -134,17 +147,27 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl
} }
if (StringUtils.isBlank(source.getFileNo())) { 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(); int currentRev = source.getRev() == null ? 1 : source.getRev();
source.setRev(currentRev); source.setRev(currentRev);
int nextRev = currentRev + 1;
int targetRev = newRev == null ? (currentRev + 1) : newRev;
if (targetRev <= currentRev) {
throw new IllegalArgumentException("新版本号必须大于当前版本号");
}
long sameVersionCount = lambdaQuery() long sameVersionCount = lambdaQuery()
.eq(SysOssEntity::getOrderRef1, source.getOrderRef1()) .eq(SysOssEntity::getOrderRef1, source.getOrderRef1())
.eq(SysOssEntity::getOrderRef2, source.getOrderRef2()) .eq(SysOssEntity::getOrderRef2, source.getOrderRef2())
.eq(SysOssEntity::getOrderRef3, source.getOrderRef3()) .eq(SysOssEntity::getOrderRef3, source.getOrderRef3())
.eq(SysOssEntity::getFileNo, source.getFileNo()) .eq(SysOssEntity::getFileNo, source.getFileNo())
.eq(SysOssEntity::getRev, nextRev)
.eq(SysOssEntity::getRev, targetRev)
.count(); .count();
if (sameVersionCount > 0) { if (sameVersionCount > 0) {
throw new IllegalArgumentException("新版本号已存在,请刷新后重试"); throw new IllegalArgumentException("新版本号已存在,请刷新后重试");
@ -160,11 +183,23 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl
newVersion.setOrderRef3(source.getOrderRef3()); newVersion.setOrderRef3(source.getOrderRef3());
newVersion.setFileTypeCode(source.getFileTypeCode()); newVersion.setFileTypeCode(source.getFileTypeCode());
newVersion.setFileNo(source.getFileNo()); newVersion.setFileNo(source.getFileNo());
newVersion.setRev(nextRev);
newVersion.setRev(targetRev);
newVersion.setFileRemark(StringUtils.isNotBlank(fileRemark) ? fileRemark : source.getFileRemark()); newVersion.setFileRemark(StringUtils.isNotBlank(fileRemark) ? fileRemark : source.getFileRemark());
saveUploadedFile(file, newVersion, now); 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 @Override
public void previewOssFileById(Integer id, HttpServletResponse response) { public void previewOssFileById(Integer id, HttpServletResponse response) {
SysOssEntity oss = this.getById(id); SysOssEntity oss = this.getById(id);
@ -220,6 +255,22 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> 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) { private void saveUploadedFile(MultipartFile file, SysOssEntity oss, Date createDate) {
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
if (StringUtils.isEmpty(fileName)) { if (StringUtils.isEmpty(fileName)) {

Loading…
Cancel
Save