|
|
|
@ -122,12 +122,8 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService |
|
|
|
throw new RuntimeException("卷不存在"); |
|
|
|
} |
|
|
|
|
|
|
|
// 多个卷取第一个做校验 |
|
|
|
InventoryStock stock = stocks.get(0); |
|
|
|
if(!"在库".equals(stock.getStatus())) { |
|
|
|
throw new RuntimeException("卷状态不是在库,无法操作"); |
|
|
|
} |
|
|
|
|
|
|
|
for (InventoryStock stock : stocks) { |
|
|
|
data.setFinalRollNo(stock.getRollNo()); |
|
|
|
// 添加检查逻辑:检查卷是否已经在其他箱子里 |
|
|
|
if (stock.getParentRollNo() != null && stock.getParentRollNo().startsWith("BOX")) { |
|
|
|
throw new RuntimeException("卷已经在箱子:" + stock.getParentRollNo() + "中,请先取出"); |
|
|
|
@ -159,16 +155,20 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService |
|
|
|
}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("未找到对应的出库单明细"); |
|
|
|
} |
|
|
|
|
|
|
|
// 检查是否有匹配的合约号(只要有一行的合约号匹配即可) |
|
|
|
// 对每一条卷信息进行校验 |
|
|
|
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() + ")不符,请检查"); |
|
|
|
throw new RuntimeException("标签 " + rollInfo.getRollNo() + " 合约号码(" + rollInfo.getBatchNo() + ")不符,请检查"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 校验通过,返回卷信息 |
|
|
|
return rollInfo; |
|
|
|
// 校验通过,返回卷信息列表 |
|
|
|
return rollInfoList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|