Merge remote-tracking branch 'origin/dev_WMS20260401' into dev_WMS20260401

This commit is contained in:
王奎兴
2026-04-20 11:46:26 +08:00
3 changed files with 47 additions and 34 deletions
@@ -147,15 +147,26 @@ public class ReviewOrderDomainService {
throw new ServiceException("复核单主表保存失败");
}
int detailInserted = 0;
for (PickingOrder po : pickingOrders) {
List<PickingMaterialDetail> lines = pickingMaterialDetailService.list(new LambdaQueryWrapper<PickingMaterialDetail>()
.eq(PickingMaterialDetail::getPickingOrderNumber, po.getPickingOrderNumber())
.eq(PickingMaterialDetail::getDelFlag, 1));
for (PickingMaterialDetail line : lines) {
BigDecimal picked = line.getPickingQuantity();
if (picked == null || picked.compareTo(BigDecimal.ZERO) <= 0) {
continue;
}
ReviewMaterialDetail row = buildDetailFromPicking(line, reviewOrderId, reviewOrderNumber, outOrderNumber, loginUser, now);
reviewMaterialDetailMapper.insert(row);
detailInserted++;
}
}
if (detailInserted == 0) {
reviewOrderMapper.deleteById(reviewOrderId);
log.info("跳过生成复核单:拣货明细无已拣货数量>0 的行 outOrderNumber={}", outOrderNumber);
return;
}
// 复核也生成作业单(同拣货作业单表结构),用于作业任务跟踪
genStockOutTaskOrderForReview(header, loginUser, now);
@@ -1301,40 +1301,40 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
// 校验批次号唯一性:货主+商品+库存属性值相同时,批次号不能重复
// 校验批次号:仅本入库单范围内,货主+商品+库存属性+批次在库存中是否已存在(不同入库单允许相同批次号)
if (shipperId != null && materialBaseInfoId != null && batchNumber != null && !batchNumber.trim().isEmpty()) {
if (StringUtils.isBlank(currentInOrderNumber)) {
log.warn("batchReceiptUpdate:未解析到入库单号,跳过库存批次重复校验,receiptOrderNumber={}",
receiptMaterialDetailDO != null ? receiptMaterialDetailDO.getReceiptOrderNumber() : null);
return;
}
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MaterialInventory> wrapper =
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MaterialInventory>()
.eq(MaterialInventory::getShipperId, shipperId)
.eq(MaterialInventory::getMaterialBaseInfoId, materialBaseInfoId)
.eq(MaterialInventory::getBatchNumber, batchNumber)
.eq(MaterialInventory::getDelFlag, 1)
.eq(MaterialInventory::getInOrderNumber, currentInOrderNumber);
// 如果库存属性值不为空,需要精确匹配;如果为空,查询库存属性值为空或null的记录
if (materialStatusCode != null && !materialStatusCode.trim().isEmpty()) {
wrapper.eq(MaterialInventory::getMaterialStatusCode, materialStatusCode);
} else {
wrapper.and(w -> w.isNull(MaterialInventory::getMaterialStatusCode)
.or()
.eq(MaterialInventory::getMaterialStatusCode, ""));
}
List<MaterialInventory> existingInventoryList = materialInventoryMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(existingInventoryList)) {
String statusCodeDesc = (materialStatusCode != null && !materialStatusCode.trim().isEmpty())
? ",库存属性值:" + materialStatusCode
: ",库存属性值:空";
throw new ServiceException("批次号【" + batchNumber + "】在本入库单「" + currentInOrderNumber
+ "」下已存在库存,货主ID【" + shipperId + "】+商品ID【" + materialBaseInfoId + "" + statusCodeDesc
+ ",不允许重复使用");
}
}
// if (shipperId != null && materialBaseInfoId != null && batchNumber != null && !batchNumber.trim().isEmpty()) {
// if (StringUtils.isBlank(currentInOrderNumber)) {
// log.warn("batchReceiptUpdate:未解析到入库单号,跳过库存批次重复校验,receiptOrderNumber={}",
// receiptMaterialDetailDO != null ? receiptMaterialDetailDO.getReceiptOrderNumber() : null);
// return;
// }
// com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MaterialInventory> wrapper =
// new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MaterialInventory>()
// .eq(MaterialInventory::getShipperId, shipperId)
// .eq(MaterialInventory::getMaterialBaseInfoId, materialBaseInfoId)
// .eq(MaterialInventory::getBatchNumber, batchNumber)
// .eq(MaterialInventory::getDelFlag, 1)
// .eq(MaterialInventory::getInOrderNumber, currentInOrderNumber);
//
// // 如果库存属性值不为空,需要精确匹配;如果为空,查询库存属性值为空或null的记录
// if (materialStatusCode != null && !materialStatusCode.trim().isEmpty()) {
// wrapper.eq(MaterialInventory::getMaterialStatusCode, materialStatusCode);
// } else {
// wrapper.and(w -> w.isNull(MaterialInventory::getMaterialStatusCode)
// .or()
// .eq(MaterialInventory::getMaterialStatusCode, ""));
// }
//
// List<MaterialInventory> existingInventoryList = materialInventoryMapper.selectList(wrapper);
//
// if (!CollectionUtils.isEmpty(existingInventoryList)) {
// String statusCodeDesc = (materialStatusCode != null && !materialStatusCode.trim().isEmpty())
// ? ",库存属性值:" + materialStatusCode
// : ",库存属性值:空";
// throw new ServiceException("批次号【" + batchNumber + "】在本入库单「" + currentInOrderNumber
// + "」下已存在库存,货主ID【" + shipperId + "】+商品ID【" + materialBaseInfoId + "】" + statusCodeDesc
// + ",不允许重复使用");
// }
// }
}
}
@@ -1058,6 +1058,7 @@ public class StockShelfOrderDomainService {
inventoryParamDO.setCreateBy(loginUser.getUserid());
inventoryParamDO.setCreateByName(loginUser.getUsername());
inventoryParamDO.setCreateTime(new Date());
inventoryParamDO.setUpdateTime(new Date());
// materialInventoryMapper.insert(materialInventory);
inventoryParamDO.setType("1");
@@ -1117,6 +1118,7 @@ public class StockShelfOrderDomainService {
inventoryParamDO.setLotNumber(shelfMaterialDetail.getLotNumber());
inventoryParamDO.setQuantity(shelfMaterialDetail.getShelvesQuantity());
inventoryParamDO.setType("1");
inventoryParamDO.setUpdateTime(new Date());
materialInventoryService.xgkc(inventoryParamDO);
//库存调整记录
materialInventoryService.kctzjl(inventoryParamDO, "入库", loginUser);