仓库管理修改

liweidong
wusiyu 3 days ago
parent 95eddb5786
commit 0a1f12d811
  1. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGlassCakeOutController.java
  2. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java
  3. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java
  4. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java
  5. 24
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml
  6. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java
  7. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StClassRequestServiceImpl.java
  8. 23
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java
  9. 21
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java
  10. 24
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java
  11. 19
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java
  12. 81
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StStockInoutRecordServiceImpl.java

@ -140,7 +140,7 @@ public class StGlassCakeOutController extends BladeController {
@Operation(summary = "生成玻璃饼出库单号", description = "获取新单据号并返回空账单对象")
public R<StStockInoutRecordVO> generateCode() {
// 1. 生成单号
String sirCode = stStockInoutRecordService.generateCode();
String sirCode = stStockInoutRecordService.generateOutStockNo();
// 2. 封装合表 VO
StStockInoutRecordVO vo = new StStockInoutRecordVO();

@ -140,7 +140,7 @@ public class StGraphiteMoldOutController extends BladeController {
@Operation(summary = "生成石墨模出库单号", description = "获取新单据号并返回空账单对象")
public R<StStockInoutRecordVO> generateCode() {
// 1. 生成单号
String sirCode = stStockInoutRecordService.generateCode();
String sirCode = stStockInoutRecordService.generateOutStockNo();
// 2. 封装合表 VO
StStockInoutRecordVO vo = new StStockInoutRecordVO();

@ -219,7 +219,7 @@ public class StOtherOutRecordController extends BladeController {
@Operation(summary = "生成其他出库单号", description = "获取新单据号并返回空账单对象")
public R<StStockInoutRecordVO> generateCode() {
// 1. 生成单号
String sirCode = stStockInoutRecordService.generateCode();
String sirCode = stStockInoutRecordService.generateOutStockNo();
// 2. 封装合表 VO
StStockInoutRecordVO vo = new StStockInoutRecordVO();

@ -48,6 +48,10 @@ public interface StStockInoutRecordMapper extends BaseMapper<StStockInoutRecord>
String getTeamSetByUserId(Long picker);
int getMaxSerialNoByDate(String dateTime);
void insertTodaySeq(String today);
Integer getCurrentSeqForUpdate(String today);
void incrementSeq(String today);
}

@ -174,10 +174,26 @@
USER_ID
</select>
<select id="getMaxSerialNoByDate" resultType="java.lang.Integer">
SELECT NVL(MAX(TO_NUMBER(SUBSTR(SIR_CODE, 13, 4))), 0) + 1
FROM ST_STOCK_INOUT_RECORD
WHERE SIR_CODE LIKE CONCAT('CK', #{dateTime}, '%')
<insert id="insertTodaySeq">
MERGE INTO st_seq_daily t
USING DUAL
ON (t.seq_date = #{today})
WHEN NOT MATCHED THEN
INSERT (seq_date, current_num) VALUES (#{today}, 0)
</insert>
<!-- 2. 序号 +1(原子操作) -->
<update id="incrementSeq">
UPDATE st_seq_daily
SET current_num = current_num + 1
WHERE seq_date = #{today}
</update>
<!-- 3. 行锁查询(Oracle 写法:FOR UPDATE) -->
<select id="getCurrentSeqForUpdate" resultType="java.lang.Integer">
SELECT current_num
FROM st_seq_daily
WHERE seq_date = #{today}
FOR UPDATE
</select>

@ -49,5 +49,7 @@ public interface IStStockInoutRecordService extends BaseService<StStockInoutReco
StStockInoutRecord createInoutRecord(Short inOutSource, Long shId, BladeUser createUser, BladeUser userId, Double arriveQuantity, Double unitPrice, String piNo, StGoods stGoods, Long brId, Long slId, String checkNo, String quantityLevel, String buyCode, boolean moldBaseMaterial);
String getTeamSetByUserId(Long picker);
String generateOutStockNo();
}

@ -343,7 +343,7 @@ public class StClassRequestServiceImpl extends BaseServiceImpl<StClassRequestMap
List<StRealtimeStock> stockList = Collections.singletonList(stock);
/* 2. 生成账单号 & 批次号 */
String sirCode = stStockInoutRecordService.generateCode();
String sirCode = stStockInoutRecordService.generateOutStockNo();
// String piNo = stStockInoutRecordService.generatePiNo("Q");
/* 3. 一条记录 = 原主账单 + 原明细 字段合并 */

@ -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<StGlassCakeOutMap
// 3. 初始化预出库列表(收集所有库存充足的预出库实体)
List<StGlassCakeOut> 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<StGlassCakeOutMap
preOutStock.setPartCode(faYieldOrder.getPartCode());
preOutStock.setPartName(faYieldOrder.getPartName());
lastNum++;
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
preOutStock.setOutCode(sirCode);
preOutStock.setOutCode(stStockInoutRecordService.generateOutStockNo());
// preOutStock.setOutCode(stStockInoutRecordService.generateCode());
preOutStock.setRequireQty(requireQty);
preOutStock.setPreOutQty(actualTake);

@ -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;
@ -135,24 +133,8 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
List<StGraphiteMoldOut> 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<StGraphiteMold
preOutStock.setYoCode(faYieldOrder.getYoCode());
preOutStock.setCardNo(dto.getCardNo());
String parentOutCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
preOutStock.setParentOutCode(parentOutCode);
String outCode = parentOutCode + "-" + childNum;
preOutStock.setOutCode(outCode);

@ -151,7 +151,7 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
stock.setOutQuantity(stOtherOutRecord.getOutQty());
StStockInoutRecord detail = new StStockInoutRecord();
// 明细复用主单公共属性
detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码
detail.setSirCode(stStockInoutRecordService.generateOutStockNo()); // 单据编码
detail.setInOutDate(mainInout.getInOutDate());
detail.setInOutSource(mainInout.getInOutSource());
detail.setShId(stock.getShId());
@ -240,23 +240,6 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
Map<Long, StRealtimeStock> 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<StOtherOutRecor
}
StStockInoutRecord detail = new StStockInoutRecord();
// 明细复用主单公共属性
lastNum++;
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
detail.setSirCode(sirCode);
detail.setSirCode(stStockInoutRecordService.generateOutStockNo());
// detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码
detail.setInOutDate(mainInout.getInOutDate());
detail.setInOutSource(mainInout.getInOutSource());

@ -111,21 +111,6 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl<StOtherRece
.map(p -> 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<StOtherRece
}
if (detail.getSirCode() == null) {
lastNum++;
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
detail.setSirCode(sirCode);
detail.setSirCode(stStockInoutRecordService.generateCode());
}
detail.setInOutSource(StStockInoutRecord.INOUT_SOURCE_OTHER_PURCHASE_RECEIPT);
// 赋值公共属性:批次号、入库单关联ID、部门/创建人

@ -2,7 +2,6 @@ package org.springblade.wms.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
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;
@ -18,6 +17,7 @@ import org.springblade.wms.pojo.vo.StStockInoutRecordVO;
import org.springblade.wms.service.IStStockInoutRecordService;
import org.springblade.wms.service.IStStorehouseService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@ -77,41 +77,56 @@ public class StStockInoutRecordServiceImpl extends BaseServiceImpl<StStockInoutR
return voPage;
}
@Override
// @Override
// public String generateCode1() {
// // 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');
// }
@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) {

Loading…
Cancel
Save