diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGlassCakeOutController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGlassCakeOutController.java index 12727e22a..37ca5c166 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGlassCakeOutController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGlassCakeOutController.java @@ -140,7 +140,7 @@ public class StGlassCakeOutController extends BladeController { @Operation(summary = "生成玻璃饼出库单号", description = "获取新单据号并返回空账单对象") public R generateCode() { // 1. 生成单号 - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // 2. 封装合表 VO StStockInoutRecordVO vo = new StStockInoutRecordVO(); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java index e2287665c..88b383db0 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java @@ -140,7 +140,7 @@ public class StGraphiteMoldOutController extends BladeController { @Operation(summary = "生成石墨模出库单号", description = "获取新单据号并返回空账单对象") public R generateCode() { // 1. 生成单号 - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // 2. 封装合表 VO StStockInoutRecordVO vo = new StStockInoutRecordVO(); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java index b4d0cf0ac..b4d0bc9bb 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java @@ -219,7 +219,7 @@ public class StOtherOutRecordController extends BladeController { @Operation(summary = "生成其他出库单号", description = "获取新单据号并返回空账单对象") public R generateCode() { // 1. 生成单号 - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // 2. 封装合表 VO StStockInoutRecordVO vo = new StStockInoutRecordVO(); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java index b9d2c8421..097663b92 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java @@ -48,6 +48,10 @@ public interface StStockInoutRecordMapper extends BaseMapper String getTeamSetByUserId(Long picker); - int getMaxSerialNoByDate(String dateTime); + void insertTodaySeq(String today); + + Integer getCurrentSeqForUpdate(String today); + + void incrementSeq(String today); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml index f13f0be0c..6bc449e14 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml @@ -174,10 +174,26 @@ USER_ID - + SELECT current_num + FROM st_seq_daily + WHERE seq_date = #{today} FOR UPDATE diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java index 7f9bada86..4ed2a5e11 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java @@ -49,5 +49,7 @@ public interface IStStockInoutRecordService extends BaseService stockList = Collections.singletonList(stock); /* 2. 生成账单号 & 批次号 */ - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // String piNo = stStockInoutRecordService.generatePiNo("Q"); /* 3. 一条记录 = 原主账单 + 原明细 字段合并 */ diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java index ea71a512c..389105223 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java @@ -1,8 +1,6 @@ package org.springblade.wms.service.impl; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -160,23 +158,6 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl preOutStockList = new ArrayList<>(); - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } - // 4. 遍历每个玻璃饼,单独匹配库存+判断是否生成预出库 if (!CollectionUtils.isEmpty(glassCakePartList)) { for (DsPartEntity glassCake : glassCakePartList) { @@ -291,9 +272,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl preOutStockList = new ArrayList<>(); - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } int childNum = 1; - lastNum++; + String parentOutCode = stStockInoutRecordService.generateOutStockNo(); // 遍历每个子件 for (DsPartEntity subItem : allChildPartList) { @@ -183,7 +165,6 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl stockMap = stockList.stream() .collect(Collectors.toMap(StRealtimeStock::getId, Function.identity())); - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } - // ========== 1.3 组装所有商品明细 ========== for (StRealtimeStock stock : outList) { StRealtimeStock entity = stockMap.get(stock.getId()); @@ -265,9 +248,8 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl Integer.parseInt(p.substring(9))) .orElse(0); - // 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } // 主账单字段 = 明细合计 for (StStockInoutRecord detail : inoutList) { // 校验单条明细的必传字段 @@ -145,9 +130,7 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl= 1){ +// String realNum = arr[0]; +// // 只有全数字才转整型 +// if(StrUtil.isNumeric(realNum)){ +// lastNum = Integer.parseInt(realNum); +// } +// } +// } +// // 3. 补零拼接 +// return datePrefix + StrUtil.padPre(String.valueOf(++lastNum), 4, '0'); +// } + + @Transactional(rollbackFor = Exception.class) public String generateCode() { - // 1. 日期前缀 - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = baseMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } - // 3. 补零拼接 - return datePrefix + StrUtil.padPre(String.valueOf(++lastNum), 4, '0'); + // 1. 获取日期 + String today = DateUtil.format(new Date(), "yyMMdd"); + // 初始化当天序号(不存在则插入0) + baseMapper.insertTodaySeq(today); + // 3. 原子 +1 + baseMapper.incrementSeq(today); + // 4. 加行锁,查询当前值 + Integer currentNum = baseMapper.getCurrentSeqForUpdate(today); + String seqNo = String.format("%05d", currentNum); + return "RK" + today + seqNo; } -// @Override -// @Transactional -// public String makeCode() { -// // 时间格式:yyMMddHHmmss(2位年+月+日+时+分+秒) -// String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")); -// // 获取下一个流水号 -// int serialNo = baseMapper.getMaxSerialNoByDate(dateTime); -// // 拼接最终单号:CK + 时间 + 4位流水号(前面补0) -// String sirCode = "CK" + dateTime + String.format("%04d", serialNo); -// -// return sirCode; -// } + @Transactional(rollbackFor = Exception.class) + public String generateOutStockNo() { + // 1. 获取日期 + String today = DateUtil.format(new Date(), "yyMMdd"); + // 初始化当天序号(不存在则插入0) + baseMapper.insertTodaySeq(today); + // 3. 原子 +1 + baseMapper.incrementSeq(today); + // 4. 加行锁,查询当前值 + Integer currentNum = baseMapper.getCurrentSeqForUpdate(today); + String seqNo = String.format("%05d", currentNum); + return "CK" + today + seqNo; + } @Override public String getMaxPiNo(String typeCode) {