|
|
|
@ -122,53 +122,53 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService |
|
|
|
throw new RuntimeException("卷不存在"); |
|
|
|
} |
|
|
|
|
|
|
|
// 多个卷取第一个做校验 |
|
|
|
InventoryStock stock = stocks.get(0); |
|
|
|
if(!"在库".equals(stock.getStatus())) { |
|
|
|
throw new RuntimeException("卷状态不是在库,无法操作"); |
|
|
|
} |
|
|
|
|
|
|
|
// 添加检查逻辑:检查卷是否已经在其他箱子里 |
|
|
|
if (stock.getParentRollNo() != null && stock.getParentRollNo().startsWith("BOX")) { |
|
|
|
throw new RuntimeException("卷已经在箱子:" + stock.getParentRollNo() + "中,请先取出"); |
|
|
|
} |
|
|
|
List<OutboundNotificationDetailEntity> checkPartNo=boxForNotificationMapper.searchOutboundNotificationDetail(box.getSite(),box.getBuNo(),box.getOrderNo()); |
|
|
|
// 添加校验逻辑:检查checkPartNo中是否至少有一行记录的partNo与卷的partNo相同 |
|
|
|
boolean partNoMatch = checkPartNo.stream() |
|
|
|
.anyMatch(detail -> detail.getPartNo() != null && detail.getPartNo().equals(stock.getPartNo())); |
|
|
|
for (InventoryStock stock : stocks) { |
|
|
|
data.setFinalRollNo(stock.getRollNo()); |
|
|
|
// 添加检查逻辑:检查卷是否已经在其他箱子里 |
|
|
|
if (stock.getParentRollNo() != null && stock.getParentRollNo().startsWith("BOX")) { |
|
|
|
throw new RuntimeException("卷已经在箱子:" + stock.getParentRollNo() + "中,请先取出"); |
|
|
|
} |
|
|
|
List<OutboundNotificationDetailEntity> checkPartNo=boxForNotificationMapper.searchOutboundNotificationDetail(box.getSite(),box.getBuNo(),box.getOrderNo()); |
|
|
|
// 添加校验逻辑:检查checkPartNo中是否至少有一行记录的partNo与卷的partNo相同 |
|
|
|
boolean partNoMatch = checkPartNo.stream() |
|
|
|
.anyMatch(detail -> detail.getPartNo() != null && detail.getPartNo().equals(stock.getPartNo())); |
|
|
|
|
|
|
|
if (!partNoMatch) { |
|
|
|
throw new RuntimeException("该卷的物料编号与销售发货单中的物料编号不匹配"); |
|
|
|
} |
|
|
|
if(stock.getBatchNo()==null||"".equals(stock.getBatchNo())){ |
|
|
|
throw new RuntimeException("该卷的批次号为空,无法操作"); |
|
|
|
} |
|
|
|
//---*批号的物料可以通吃 |
|
|
|
if(!"*".equals(stock.getBatchNo())) { |
|
|
|
// 校验批次号:只要有一行partNo和batchNo都匹配即可 |
|
|
|
boolean batchNoMatch = checkPartNo.stream() |
|
|
|
.filter(detail -> detail.getPartNo() != null && detail.getPartNo().equals(stock.getPartNo())) |
|
|
|
.anyMatch(detail -> detail.getOutBatchNo() != null && detail.getOutBatchNo().equals(stock.getBatchNo())); |
|
|
|
if (!batchNoMatch) { |
|
|
|
throw new RuntimeException("该卷的批次号与销售发货单中的批次号不匹配"); |
|
|
|
if (!partNoMatch) { |
|
|
|
throw new RuntimeException("该卷的物料编号与销售发货单中的物料编号不匹配"); |
|
|
|
} |
|
|
|
if(stock.getBatchNo()==null||"".equals(stock.getBatchNo())){ |
|
|
|
throw new RuntimeException("该卷的批次号为空,无法操作"); |
|
|
|
} |
|
|
|
//---*批号的物料可以通吃 |
|
|
|
if(!"*".equals(stock.getBatchNo())) { |
|
|
|
// 校验批次号:只要有一行partNo和batchNo都匹配即可 |
|
|
|
boolean batchNoMatch = checkPartNo.stream() |
|
|
|
.filter(detail -> detail.getPartNo() != null && detail.getPartNo().equals(stock.getPartNo())) |
|
|
|
.anyMatch(detail -> detail.getOutBatchNo() != null && detail.getOutBatchNo().equals(stock.getBatchNo())); |
|
|
|
if (!batchNoMatch) { |
|
|
|
throw new RuntimeException("该卷的批次号与销售发货单中的批次号不匹配"); |
|
|
|
} |
|
|
|
} |
|
|
|
// 检查箱的仓库是否为空,如果为空则更新为卷的仓库,如果不为空则检查是否一致 |
|
|
|
if(box.getWareHouseID()==null||"".equals(box.getWareHouseID())){ |
|
|
|
boxForNotificationMapper.updateBoxWareHouse(data.getSite(),data.getBuNo(),data.getBoxNo(),stock.getWarehouseId()); |
|
|
|
}else if(!box.getWareHouseID().equals(stock.getWarehouseId())){ |
|
|
|
throw new RuntimeException("该卷的仓库与箱的仓库不一致"); |
|
|
|
} |
|
|
|
// 改卷上级标签 |
|
|
|
boxForNotificationMapper.updateStockParentRollNo(data.getFinalRollNo(), data.getBoxNo(), data.getSite(), data.getBuNo()); |
|
|
|
SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); |
|
|
|
data.setRollQty(stock.getQtyOnHand()); |
|
|
|
data.setReceivedBy(currentUser.getUsername()); |
|
|
|
data.setWareHouseID(stock.getWarehouseId()); |
|
|
|
data.setPartNo(stock.getPartNo()); |
|
|
|
|
|
|
|
// 3. 添加卷到箱子 |
|
|
|
boxForNotificationMapper.addBoxRoll(data); |
|
|
|
boxForNotificationMapper.updateBoxRollQty(data.getSite(),data.getBuNo(),data.getBoxNo()); |
|
|
|
} |
|
|
|
// 检查箱的仓库是否为空,如果为空则更新为卷的仓库,如果不为空则检查是否一致 |
|
|
|
if(box.getWareHouseID()==null||"".equals(box.getWareHouseID())){ |
|
|
|
boxForNotificationMapper.updateBoxWareHouse(data.getSite(),data.getBuNo(),data.getBoxNo(),stock.getWarehouseId()); |
|
|
|
}else if(!box.getWareHouseID().equals(stock.getWarehouseId())){ |
|
|
|
throw new RuntimeException("该卷的仓库与箱的仓库不一致"); |
|
|
|
} |
|
|
|
//改卷上级标签 |
|
|
|
boxForNotificationMapper.updateStockParentRollNo(data.getFinalRollNo(), data.getBoxNo(), data.getSite(), data.getBuNo()); |
|
|
|
SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); |
|
|
|
data.setRollQty(stock.getQtyOnHand()); |
|
|
|
data.setReceivedBy(currentUser.getUsername()); |
|
|
|
data.setWareHouseID(stock.getWarehouseId()); |
|
|
|
data.setPartNo(stock.getPartNo()); |
|
|
|
// 3. 添加卷到箱子 |
|
|
|
boxForNotificationMapper.addBoxRoll(data); |
|
|
|
boxForNotificationMapper.updateBoxRollQty(data.getSite(),data.getBuNo(),data.getBoxNo()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
@Override |
|
|
|
@ -263,37 +263,26 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public SoReceiveCasesData validateAndScanCaseRoll(SoReceiveCasesData data) { |
|
|
|
public List<SoReceiveCasesData> validateAndScanCaseRoll(SoReceiveCasesData data) { |
|
|
|
// 参数校验 |
|
|
|
if (data == null || data.getSite() == null || data.getCasesNo() == null |
|
|
|
|| data.getRollNo() == null || data.getPartNo() == null) { |
|
|
|
throw new RuntimeException("参数不完整"); |
|
|
|
} |
|
|
|
|
|
|
|
// 查询卷的信息并进行校验 |
|
|
|
SoReceiveCasesData rollInfo = boxForNotificationMapper.validateCaseRoll( |
|
|
|
// 查询卷的信息并进行校验(现在返回的是集合) |
|
|
|
List<SoReceiveCasesData> rollInfoList = boxForNotificationMapper.validateCaseRoll( |
|
|
|
data.getSite(), |
|
|
|
data.getPartNo(), |
|
|
|
data.getRollNo(), |
|
|
|
data.getCasesNo() |
|
|
|
); |
|
|
|
|
|
|
|
if (rollInfo == null) { |
|
|
|
if (rollInfoList == null || rollInfoList.isEmpty()) { |
|
|
|
throw new RuntimeException("未找到对应的卷信息,请检查卷标签和物料编码是否正确"); |
|
|
|
} |
|
|
|
|
|
|
|
// 校验1: 检查状态是否为"在库" |
|
|
|
if (!"在库".equals(rollInfo.getStatus())) { |
|
|
|
throw new RuntimeException("该标签状态不是在库(当前状态:" + rollInfo.getStatus() + "),请检查"); |
|
|
|
} |
|
|
|
|
|
|
|
// 校验2: 检查上级标签类型 |
|
|
|
if ("盒标签".equals(rollInfo.getParentRollType()) || "箱标签".equals(rollInfo.getParentRollType())) { |
|
|
|
throw new RuntimeException("该标签已经装盒/装箱,不允许重复扫描"); |
|
|
|
} |
|
|
|
|
|
|
|
// 校验3: 检查合约号码 |
|
|
|
// 需要查询出库单明细获取合约号进行比对 |
|
|
|
// 查询出库单明细获取合约号进行比对 |
|
|
|
List<OutboundNotificationDetailEntity> outboundDetails = boxForNotificationMapper.searchOutboundNotificationDetail( |
|
|
|
data.getSite(), |
|
|
|
data.getBuNo(), |
|
|
|
@ -304,17 +293,30 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService |
|
|
|
throw new RuntimeException("未找到对应的出库单明细"); |
|
|
|
} |
|
|
|
|
|
|
|
// 检查是否有匹配的合约号(只要有一行的合约号匹配即可) |
|
|
|
boolean batchMatched = outboundDetails.stream() |
|
|
|
.filter(detail -> detail.getPartNo() != null && detail.getPartNo().equals(data.getPartNo())) |
|
|
|
.anyMatch(detail -> detail.getOutBatchNo() != null && detail.getOutBatchNo().equals(rollInfo.getBatchNo())); |
|
|
|
// 对每一条卷信息进行校验 |
|
|
|
for (SoReceiveCasesData rollInfo : rollInfoList) { |
|
|
|
// 校验1: 检查状态是否为"在库" |
|
|
|
if (!"在库".equals(rollInfo.getStatus())) { |
|
|
|
throw new RuntimeException("标签 " + rollInfo.getRollNo() + " 状态不是在库(当前状态:" + rollInfo.getStatus() + "),请检查"); |
|
|
|
} |
|
|
|
|
|
|
|
// 校验2: 检查上级标签类型 |
|
|
|
if ("盒标签".equals(rollInfo.getParentRollType()) || "箱标签".equals(rollInfo.getParentRollType())) { |
|
|
|
throw new RuntimeException("标签 " + rollInfo.getRollNo() + " 已经装盒/装箱,不允许重复扫描"); |
|
|
|
} |
|
|
|
|
|
|
|
// 校验3: 检查合约号码 |
|
|
|
boolean batchMatched = outboundDetails.stream() |
|
|
|
.filter(detail -> detail.getPartNo() != null && detail.getPartNo().equals(data.getPartNo())) |
|
|
|
.anyMatch(detail -> detail.getOutBatchNo() != null && detail.getOutBatchNo().equals(rollInfo.getBatchNo())); |
|
|
|
|
|
|
|
if (!batchMatched) { |
|
|
|
throw new RuntimeException("该标签合约号码(" + rollInfo.getBatchNo() + ")不符,请检查"); |
|
|
|
if (!batchMatched) { |
|
|
|
throw new RuntimeException("标签 " + rollInfo.getRollNo() + " 合约号码(" + rollInfo.getBatchNo() + ")不符,请检查"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 校验通过,返回卷信息 |
|
|
|
return rollInfo; |
|
|
|
// 校验通过,返回卷信息列表 |
|
|
|
return rollInfoList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|