出入库单按规则生成;

This commit is contained in:
王奎兴
2026-08-08 18:02:30 +08:00
parent 993746ee41
commit 296176c85e
4 changed files with 241 additions and 16 deletions
@@ -172,12 +172,14 @@ public class ReservationStockInOrderDomainService {
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockInOrderDO.setInOrderNumber(datePrefix + seq);
stockInOrderDO.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockInOrderDO.setInOrderNumber(prefix + seq);
stockInOrderDO.setBusinessOrderNo(prefix + seq);
}
// stockInOrderDO.setInOrderNumber(generateReserveOrderNumber());
@@ -234,12 +236,14 @@ public class ReservationStockInOrderDomainService {
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockInOrderDO.setInOrderNumber(datePrefix + seq);
stockInOrderDO.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockInOrderDO.setInOrderNumber(prefix + seq);
stockInOrderDO.setBusinessOrderNo(prefix + seq);
}
// //设置物料信息
@@ -651,7 +655,40 @@ public class ReservationStockInOrderDomainService {
reservationStockInOrder.setWarehouseCode(warehouseCode);
reservationStockInOrder.setWarehouseName(warehouseName);
reservationStockInOrder.setBusinessInOrderNumber(inOrderNumber);
reservationStockInOrder.setInOrderNumber(generateExecutionOrderNumber(warehouseCode));
//设置入库单号
Long warehouseId1 = reservationStockInOrder.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId1);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = reservationStockInOrder.getOrganizationId();
Long warehouseIdForCount = reservationStockInOrder.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setInOrderNumber(datePrefix + seq);
// reservationStockInOrder.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setInOrderNumber(prefix + seq);
// reservationStockInOrder.setBusinessOrderNo(prefix + seq);
}
List<ExecutionInMaterialDetail> inMaterialDetailList = new ArrayList<>();
int index = 1;
@@ -808,7 +845,40 @@ public class ReservationStockInOrderDomainService {
reservationStockInOrder.setWarehouseCode(warehouseCode);
reservationStockInOrder.setWarehouseName(warehouseName);
reservationStockInOrder.setBusinessInOrderNumber(inOrderNumber);
reservationStockInOrder.setInOrderNumber(generateExecutionOrderNumber(warehouseCode));
//设置入库单号
// Long warehouseId1 = reservationStockInOrder.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = reservationStockInOrder.getOrganizationId();
Long warehouseIdForCount = reservationStockInOrder.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setInOrderNumber(datePrefix + seq);
// reservationStockInOrder.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setInOrderNumber(prefix + seq);
// reservationStockInOrder.setBusinessOrderNo(prefix + seq);
}
List<ExecutionInMaterialDetail> inMaterialDetailList = new ArrayList<>();
int index = 1;
@@ -230,9 +230,41 @@ public class ReservationStockOutOrderDomainService {
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<ReservationStockOutOrderDO> stockOutOrderDOList) {
for (ReservationStockOutOrderDO stockOutOrderDO : stockOutOrderDOList){
if (StringUtils.isBlank(stockOutOrderDO.getOutOrderNumber())){
stockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK"));
//设置单号
Long warehouseId = stockOutOrderDO.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = stockOutOrderDO.getOrganizationId();
Long warehouseIdForCount = stockOutOrderDO.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockOutOrderDO.setOutOrderNumber(datePrefix + seq);
stockOutOrderDO.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockOutOrderDO.setOutOrderNumber(prefix + seq);
stockOutOrderDO.setBusinessOrderNo(prefix + seq);
}
//设置物料信息
setMaterialDetailInfo(stockOutOrderDO);
//统计种类
@@ -455,7 +487,40 @@ public class ReservationStockOutOrderDomainService {
// reservationStockInOrder.setTopOrganizationId(topOrgId);
reservationStockInOrder.setBusinessOutOrderNumber(inOrderNumber);
reservationStockInOrder.setOutOrderNumber(generateExecutionOrderNumber(warehouseCode));
// reservationStockInOrder.setOutOrderNumber(generateExecutionOrderNumber(warehouseCode));
//设置单号
Long warehouseId1 = reservationStockInOrder.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId1);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = stockOutOrderDO.getOrganizationId();
Long warehouseIdForCount = stockOutOrderDO.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setOutOrderNumber(datePrefix + seq);
// reservationStockInOrder.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setOutOrderNumber(prefix + seq);
// reservationStockInOrder.setBusinessOrderNo(prefix + seq);
}
List<ExecutionOutMaterialDetail> inMaterialDetailList = new ArrayList<>();
@@ -584,7 +649,40 @@ public class ReservationStockOutOrderDomainService {
reservationStockInOrder.setWarehouseCode(warehouseCode);
reservationStockInOrder.setWarehouseName(warehouseName);
reservationStockInOrder.setBusinessOutOrderNumber(inOrderNumber);
reservationStockInOrder.setOutOrderNumber(generateExecutionOrderNumber(warehouseCode));
//设置单号
// Long warehouseId1 = reservationStockInOrder.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = stockOutOrderDO.getOrganizationId();
Long warehouseIdForCount = stockOutOrderDO.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setOutOrderNumber(datePrefix + seq);
// reservationStockInOrder.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reserveStockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
reservationStockInOrder.setOutOrderNumber(prefix + seq);
// reservationStockInOrder.setBusinessOrderNo(prefix + seq);
}
List<ExecutionOutMaterialDetail> inMaterialDetailList = new ArrayList<>();
for (ReservationOutMaterialDetail reservationOutMaterialDetail : details) {
@@ -166,8 +166,36 @@ public class ReserveStockInOrderDomainService {
*/
public Boolean batchInsert(List<ReserveStockInOrderDO> stockInOrderDOList) {
for (ReserveStockInOrderDO stockInOrderDO : stockInOrderDOList){
if (StringUtils.isBlank(stockInOrderDO.getInOrderNumber())){
stockInOrderDO.setInOrderNumber(generateReserveOrderNumber());
Long warehouseId = stockInOrderDO.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = stockInOrderDO.getOrganizationId();
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = reservationStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockInOrderDO.setInOrderNumber(datePrefix + seq);
stockInOrderDO.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = reservationStockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockInOrderDO.setInOrderNumber(prefix + seq);
stockInOrderDO.setBusinessOrderNo(prefix + seq);
}
// //设置物料信息
// setMaterialDetailInfo(stockInOrderDO);
@@ -507,15 +535,15 @@ public class ReserveStockInOrderDomainService {
String oldInOrderNumber = reservationStockInOrder.getInOrderNumber();
// 生成新业务单号防止与已生成的入库业务单号重复
String newOrderNumber = reservationStockInOrderDomainService.generateReserveOrderNumber();
reservationStockInOrder.setInOrderNumber(newOrderNumber);
reservationStockInOrder.setBusinessOrderNo(newOrderNumber);
// reservationStockInOrder.setInOrderNumber(newOrderNumber);
// reservationStockInOrder.setBusinessOrderNo(newOrderNumber);
List<ReserveInMaterialDetail> materialDetailList = materialDetailService.list(new QueryWrapper<ReserveInMaterialDetail>().lambda().eq(ReserveInMaterialDetail::getInOrderNumber, oldInOrderNumber));
List<ReservationInMaterialDetail> inMaterialDetailList = new ArrayList<>();
int index = 1;
for (ReserveInMaterialDetail reserveInMaterialDetail : materialDetailList) {
ReservationInMaterialDetail reservationInMaterialDetail = new ReservationInMaterialDetail();
BeanUtils.copyProperties(reserveInMaterialDetail, reservationInMaterialDetail,"materialDetailId");
reservationInMaterialDetail.setInOrderNumber(newOrderNumber); // 使用新单号保持与主表关联
// reservationInMaterialDetail.setInOrderNumber(newOrderNumber); // 使用新单号保持与主表关联
reservationInMaterialDetail.setQuantity(reserveInMaterialDetail.getReserveQuantity());
String lot = generateDateSerialNumber();
lot = lot+"-"+index;
@@ -185,8 +185,37 @@ public class ReserveStockOutOrderDomainService {
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<ReserveStockOutOrderDO> stockOutOrderDOList) {
for (ReserveStockOutOrderDO stockOutOrderDO : stockOutOrderDOList){
if (StringUtils.isBlank(stockOutOrderDO.getOutOrderNumber())){
stockOutOrderDO.setOutOrderNumber(generateReserveOrderNumber());
//设置单号
Long warehouseId = stockOutOrderDO.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
throw new ServiceException("获取仓库信息失败");
}
//仓库信息
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
String prefix = warehouseFeignPO.getInOrderNoPrefix();
if (prefix == null || prefix.isEmpty()) {
prefix = "RK";
}
Long organizationId = stockOutOrderDO.getOrganizationId();
Long warehouseIdForCount = stockOutOrderDO.getWarehouseId();
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
String datePrefix = prefix + dateStr;
List<String> orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockOutOrderDO.setOutOrderNumber(datePrefix + seq);
stockOutOrderDO.setBusinessOrderNo(datePrefix + seq);
} else {
//历史累加: 前缀 + 历史最大序号+1
List<String> orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
String seq = String.format("%03d", maxSeq + 1);
stockOutOrderDO.setOutOrderNumber(prefix + seq);
stockOutOrderDO.setBusinessOrderNo(prefix + seq);
}
//设置物料信息
setMaterialDetailInfo(stockOutOrderDO);
@@ -369,8 +398,8 @@ public class ReserveStockOutOrderDomainService {
String oldOutOrderNumber = reservationStockOutOrder.getOutOrderNumber();
// 生成出库业务单号防止与已生成的出库业务单号重复
String newOrderNumber = reservationStockOutOrderDomainService.generateReserveOrderNumber();
reservationStockOutOrder.setOutOrderNumber(newOrderNumber);
reservationStockOutOrder.setBusinessOrderNo(newOrderNumber);
// reservationStockOutOrder.setOutOrderNumber(newOrderNumber);
// reservationStockOutOrder.setBusinessOrderNo(newOrderNumber);
reservationStockOutOrderService.save(reservationStockOutOrder);
List<ReserveOutMaterialDetail> materialDetailList = outMaterialDetailService.list(new QueryWrapper<ReserveOutMaterialDetail>().lambda().eq(ReserveOutMaterialDetail::getOutOrderNumber, oldOutOrderNumber));
List<ReservationOutMaterialDetail> inMaterialDetailList = new ArrayList<>();
@@ -378,7 +407,7 @@ public class ReserveStockOutOrderDomainService {
for (ReserveOutMaterialDetail reserveOutMaterialDetail : materialDetailList) {
ReservationOutMaterialDetail reservationOutMaterialDetail = new ReservationOutMaterialDetail();
BeanUtils.copyProperties(reserveOutMaterialDetail, reservationOutMaterialDetail,"materialDetailId");
reservationOutMaterialDetail.setOutOrderNumber(newOrderNumber); // 使用新单号保持与主表关联
// reservationOutMaterialDetail.setOutOrderNumber(newOrderNumber); // 使用新单号保持与主表关联
String lot = generateDateSerialNumber();
lot = lot+"-"+index;
index++;