|
|
|
@ -71,9 +71,13 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> {
|
|
|
|
|
//第一次扫描的是条码
|
|
|
|
|
if (StringUtils.isEmpty(detail.getVisualOrderNo())) {
|
|
|
|
|
//校验目视单是否已经扫描
|
|
|
|
|
checkVisualOrderNoIsScan(model);
|
|
|
|
|
detail.setVisualOrderNo(model.getSn());
|
|
|
|
|
model.setSn(detail.getBarcode());
|
|
|
|
|
} else {
|
|
|
|
|
//校验条码是否已经扫描
|
|
|
|
|
checkIsScan(model);
|
|
|
|
|
detail.setBarcode(model.getSn());
|
|
|
|
|
}
|
|
|
|
|
MesProduceSn produceSn = checkSn(model);
|
|
|
|
@ -110,14 +114,14 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)) {
|
|
|
|
|
//校验条码是否已经扫描
|
|
|
|
|
checkIsScan(model);
|
|
|
|
|
//如果扫描的是条码,校验条码
|
|
|
|
|
return checkSn(model).getPartNo();
|
|
|
|
|
}else{
|
|
|
|
|
//校验目视单是否已经扫描
|
|
|
|
|
checkVisualOrderNoIsScan(model);
|
|
|
|
|
//校验目视单状态
|
|
|
|
|
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())));
|
|
|
|
@ -146,24 +150,6 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
return workOrder;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model) {
|
|
|
|
|
//校验目视单是否已经扫描
|
|
|
|
|
if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().equals(model.getSn()))) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
//查询工单
|
|
|
|
|
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn());
|
|
|
|
|
if (Objects.isNull(workOrder)) {
|
|
|
|
|
throw new ImppBusiException(String.format("目视单【%s】不存在,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
//校验目视单状态
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, String partNo, MesShippingOrderManagementDetail detail) {
|
|
|
|
|
//校验发运单明细顺序
|
|
|
|
|
if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) {
|
|
|
|
@ -191,25 +177,28 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProduceSn checkSn(MesSortShippingCheckModel model) {
|
|
|
|
|
private void checkVisualOrderNoIsScan(MesSortShippingCheckModel model){
|
|
|
|
|
//校验目视单是否已经扫描
|
|
|
|
|
if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().contains(model.getSn()))) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkIsScan(MesSortShippingCheckModel model){
|
|
|
|
|
//校验条码是否重复扫描
|
|
|
|
|
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()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProduceSn checkSn(MesSortShippingCheckModel model) {
|
|
|
|
|
MesProduceSn produceSn = getMesProduceSn(model.getOrganizeCode(), model.getSn());
|
|
|
|
|
if (!StringUtils.isEmpty(produceSn)) {
|
|
|
|
|
if (StringUtils.isEmpty(produceSn)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码不存在,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
//校验状态
|
|
|
|
|
checkStatus(model, produceSn);
|
|
|
|
|
} else {
|
|
|
|
|
//外部条码解析
|
|
|
|
|
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model);
|
|
|
|
|
//封装信息
|
|
|
|
|
produceSn = new MesProduceSn();
|
|
|
|
|
produceSn.setSerialNumber(model.getSn());
|
|
|
|
|
produceSn.setProductSn(model.getSn());
|
|
|
|
|
produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
return produceSn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -233,28 +222,6 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) {
|
|
|
|
|
//外部解析条码长度卡控
|
|
|
|
|
String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH);
|
|
|
|
|
if (Integer.parseInt(cfgValue) < model.getSn().length())
|
|
|
|
|
MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位,请检查数据!", model.getSn(), cfgValue);
|
|
|
|
|
List<MesShippingOrderManagementDetail> detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList());
|
|
|
|
|
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null;
|
|
|
|
|
for (MesShippingOrderManagementDetail managementDetail : detailList) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean);
|
|
|
|
|
if (mesCustomerPartRepository.isExitByHql(packBean)) {
|
|
|
|
|
mesShippingOrderManagementDetail = managementDetail;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Objects.isNull(mesShippingOrderManagementDetail)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码未匹配到数据,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
return mesShippingOrderManagementDetail;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateOrderManagementDetails(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder,MesProduceSn produceSn, String userInfo) {
|
|
|
|
|
if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
|
|
|
|
|
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|