排序发运逻辑调整

tags/yfai-pcn-ext-v2.3
jun 9 months ago
parent e8b651168f
commit 7a4df0d184

@ -67,23 +67,34 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
@Override @Override
public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) {
if (!Objects.isNull(model.getLastShippingDetailId())) { if (!Objects.isNull(model.getLastShippingDetailId())) {
//校验条码
MesProduceSn produceSn = checkSn(model);
//更新单据信息 //更新单据信息
model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> { model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> {
//第一次扫描的是条码
if(StringUtils.isEmpty(detail.getVisualOrderNo())){
detail.setVisualOrderNo(model.getSn());
model.setSn(detail.getBarcode());
}else{
detail.setBarcode(model.getSn()); detail.setBarcode(model.getSn());
}
MesProduceSn produceSn = checkSn(model);
updateOrderManagementDetails(orderManagement, detail, getMesWorkOrder(model, produceSn, detail), produceSn, model.getUserInfo()); updateOrderManagementDetails(orderManagement, detail, getMesWorkOrder(model, produceSn, detail), produceSn, model.getUserInfo());
}); });
model.setLastShippingDetailId(null); model.setLastShippingDetailId(null);
} else { } else {
//校验目视单 //查询工单
MesWorkOrder workOrder = getWorkOrder(model); MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn());
//扫描的工单或条码对应的零件
String partNo = getPartNo(model, workOrder);
boolean scanFlg = false; boolean scanFlg = false;
for (MesShippingOrderManagementDetail detail : model.getDetailList()) { for (MesShippingOrderManagementDetail detail : model.getDetailList()) {
if (detail.getPartNo().equals(workOrder.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { if (detail.getPartNo().equals(partNo) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) {
//校验发运明细 //校验发运明细
checkShippingDetails(model, orderManagement, shippingGroup, workOrder.getPartNo(), detail); checkShippingDetails(model, orderManagement, shippingGroup, partNo, detail);
detail.setBarcode(model.getSn());
//如果第一次扫描的是目视单,先缓存数据用于第二次校验
if(!Objects.isNull(workOrder)){
detail.setVisualOrderNo(model.getSn()); detail.setVisualOrderNo(model.getSn());
}
//校验通过的明细ID //校验通过的明细ID
model.setLastShippingDetailId(detail.getId()); model.setLastShippingDetailId(detail.getId());
scanFlg = true; scanFlg = true;
@ -91,25 +102,42 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
} }
} }
if (!scanFlg) { if (!scanFlg) {
throw new ImppBusiException(String.format("【%s】此目视单对应的【%s】物料号与发运单中物料号不匹配请检查数据", model.getSn(), workOrder.getPartNo())); throw new ImppBusiException(String.format("【%s】此目视单对应的【%s】物料号与发运单中物料号不匹配请检查数据", model.getSn(), partNo));
} }
} }
return model; return model;
} }
private String getPartNo(MesSortShippingCheckModel model, MesWorkOrder workOrder) {
//校验目视单是否已经扫描
if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().contains(model.getSn()))) {
throw new ImppBusiException(String.format("【%s】此目视单已经扫描过请检查数据", model.getSn()));
}
if (Objects.isNull(workOrder)) {
//如果扫描的是条码,校验条码
return checkSn(model).getPartNo();
}else{
//校验目视单状态
if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) {
throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】不允许发运", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus())));
}
return workOrder.getPartNo();
}
}
private MesWorkOrder getMesWorkOrder(MesSortShippingCheckModel model, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) { private MesWorkOrder getMesWorkOrder(MesSortShippingCheckModel model, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) {
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), detail.getVisualOrderNo()); MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), detail.getVisualOrderNo());
if (Objects.isNull(workOrder)) { if (Objects.isNull(workOrder)) {
throw new ImppBusiException(String.format("目视单【%s】不存在请检查数据", model.getSn())); throw new ImppBusiException(String.format("目视单【%s】不存在请检查数据", detail.getVisualOrderNo()));
} }
//校验目视单状态 //校验目视单状态
if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) { if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) {
throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】不允许发运", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus()))); throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】不允许发运", detail.getVisualOrderNo(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus())));
} }
//校验条码是否匹配 //校验条码是否匹配
if (!Objects.equals(produceSn.getCustSn(), workOrder.getCustSn())) { if (!Objects.equals(produceSn.getCustSn(), workOrder.getCustSn())) {
throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】不匹配", detail.getVisualOrderNo(), workOrder.getCustSn(), model.getSn())); throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】不匹配", detail.getVisualOrderNo(), workOrder.getCustSn(), produceSn.getCustSn()));
} }
//校验零件是否匹配 //校验零件是否匹配
if (!Objects.equals(produceSn.getPartNo(), workOrder.getPartNo())) { if (!Objects.equals(produceSn.getPartNo(), workOrder.getPartNo())) {
@ -165,7 +193,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
private MesProduceSn checkSn(MesSortShippingCheckModel model) { private MesProduceSn checkSn(MesSortShippingCheckModel model) {
//校验条码是否重复扫描 //校验条码是否重复扫描
Optional<MesShippingOrderManagementDetail> optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); Optional<MesShippingOrderManagementDetail> optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().contains(model.getSn())).findFirst();
if (optional.isPresent()) { if (optional.isPresent()) {
throw new ImppBusiException(String.format("【%s】此条码已经扫描过请检查数据", model.getSn())); throw new ImppBusiException(String.format("【%s】此条码已经扫描过请检查数据", model.getSn()));
} }

Loading…
Cancel
Save