|
|
|
@ -67,23 +67,34 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) {
|
|
|
|
|
if (!Objects.isNull(model.getLastShippingDetailId())) {
|
|
|
|
|
//校验条码
|
|
|
|
|
MesProduceSn produceSn = checkSn(model);
|
|
|
|
|
//更新单据信息
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
MesProduceSn produceSn = checkSn(model);
|
|
|
|
|
updateOrderManagementDetails(orderManagement, detail, getMesWorkOrder(model, produceSn, detail), produceSn, model.getUserInfo());
|
|
|
|
|
});
|
|
|
|
|
model.setLastShippingDetailId(null);
|
|
|
|
|
} else {
|
|
|
|
|
//校验目视单
|
|
|
|
|
MesWorkOrder workOrder = getWorkOrder(model);
|
|
|
|
|
//查询工单
|
|
|
|
|
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn());
|
|
|
|
|
//扫描的工单或条码对应的零件
|
|
|
|
|
String partNo = getPartNo(model, workOrder);
|
|
|
|
|
boolean scanFlg = false;
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
//校验通过的明细ID
|
|
|
|
|
model.setLastShippingDetailId(detail.getId());
|
|
|
|
|
scanFlg = true;
|
|
|
|
@ -91,25 +102,42 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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) {
|
|
|
|
|
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), detail.getVisualOrderNo());
|
|
|
|
|
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()) {
|
|
|
|
|
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())) {
|
|
|
|
|
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())) {
|
|
|
|
@ -165,7 +193,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
|
|
|
|
|
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()) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|