|
|
|
@ -26,6 +26,7 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
@ -69,6 +70,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
private MesLoadingListDetailRepository vehiclesOrderDetailRepository;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesLoadingListRepository vehiclesOrderRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesCustomerPartRepository mesCustomerPartRepository;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel queryShippingOrderNo(MesShippingOrderManagement shippingOrderManagement) {
|
|
|
|
|
|
|
|
|
@ -196,7 +201,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String org) {
|
|
|
|
|
|
|
|
|
|
//校验条码
|
|
|
|
|
MesProduceSn produceSn = checkMesProduceSn(model, org);
|
|
|
|
|
MesProduceSn produceSn = checkSn(model, org);
|
|
|
|
|
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, org);
|
|
|
|
@ -214,7 +219,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
Optional<String> minPartNO = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode()))
|
|
|
|
|
.min(Comparator.comparingLong(k -> k.getCustInfoSeq())).map(k -> k.getPartNo());
|
|
|
|
|
//若扫描的不是最小顺序 则报错
|
|
|
|
|
if (!minPartNO.get().equals(produceSn.getPartNo())) {
|
|
|
|
|
if (minPartNO.isPresent() && !minPartNO.get().equals(produceSn.getPartNo())) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -242,10 +247,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(detail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
updateDetail(detail);
|
|
|
|
|
|
|
|
|
|
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(detail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
//内部条码更新条码状态
|
|
|
|
|
if (!Objects.isNull(produceSn.getId())) {
|
|
|
|
|
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(detail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@ -321,8 +328,57 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProduceSn checkSn(MesSortShippingCheckModel model, String org) {
|
|
|
|
|
//校验条码是否重复扫描
|
|
|
|
|
Optional<MesShippingOrderManagementDetail> optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst();
|
|
|
|
|
if (optional.isPresent()) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
|
|
|
|
|
MesProduceSn produceSn = produceSnRepository.getByProperty(packBean);
|
|
|
|
|
if (!StringUtils.isEmpty(produceSn)) {
|
|
|
|
|
//校验状态
|
|
|
|
|
checkStatus(model, produceSn);
|
|
|
|
|
}else{
|
|
|
|
|
//外部条码解析
|
|
|
|
|
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model, org);
|
|
|
|
|
//封装信息
|
|
|
|
|
produceSn = new MesProduceSn();
|
|
|
|
|
produceSn.setSerialNumber(model.getSn());
|
|
|
|
|
produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return produceSn;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model, String org) {
|
|
|
|
|
List<MesShippingOrderManagementDetail> detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && !StringUtils.isEmpty(k.getBarcode())).collect(Collectors.toList());
|
|
|
|
|
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null;
|
|
|
|
|
for (MesShippingOrderManagementDetail managementDetail : detailList) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
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 MesProduceSn checkMesProduceSn(MesSortShippingCheckModel model, String org) {
|
|
|
|
|
//校验条码是否已经扫描
|
|
|
|
|
Optional<MesShippingOrderManagementDetail> optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst();
|
|
|
|
|
if (optional.isPresent()) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
|
|
|
|
@ -332,6 +388,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
if (StringUtils.isEmpty(produceSn)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此产品条码不存在,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
//校验状态
|
|
|
|
|
checkStatus(model, produceSn);
|
|
|
|
|
return produceSn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) {
|
|
|
|
|
//校验产品条码状态 必须是状态为已下线条码
|
|
|
|
|
if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()),
|
|
|
|
@ -342,12 +404,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()),
|
|
|
|
|
MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst();
|
|
|
|
|
if (optional.isPresent()) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
return produceSn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model, String org) {
|
|
|
|
@ -400,16 +456,17 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
|
|
|
|
|
MesProduceSn produceSn = produceSnRepository.getByProperty(packBean);
|
|
|
|
|
if(Objects.isNull(produceSn)){
|
|
|
|
|
MesPcnException.throwMesBusiException("【%s】此产品条码不存在,请检查数据!", detail.getBarcode());
|
|
|
|
|
if(!Objects.isNull(produceSn)){
|
|
|
|
|
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSn, userName);
|
|
|
|
|
produceSnList.add(produceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSn, userName);
|
|
|
|
|
produceSnList.add(produceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
produceSnRepository.saveAll(produceSnList);
|
|
|
|
|
if(!CollectionUtils.isEmpty(produceSnList)){
|
|
|
|
|
produceSnRepository.saveAll(produceSnList);
|
|
|
|
|
}
|
|
|
|
|
update(orderManagement);
|
|
|
|
|
shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList);
|
|
|
|
|
//1.更新装车单明细对应的发运单状态=发运
|
|
|
|
|