|
|
|
@ -1,7 +1,9 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.IMesShippingScanStrategyService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel;
|
|
|
|
@ -12,16 +14,17 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.util.StringUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@ -30,6 +33,7 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description :
|
|
|
|
@ -44,17 +48,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesShippingOrderManagementRepository shippingOrderManagementRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProduceSnRepository produceSnRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProduceSnExtService produceSnExtService;
|
|
|
|
|
private MesProduceSnRepository produceSnRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesPartShippingGroupRepository partShippingGroupRepository;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesLoadingListRepository listRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@ -70,30 +71,141 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
private IMesJisShippingService jisShippingService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesLoadingListDetailRepository vehiclesOrderDetailRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesLoadingListRepository vehiclesOrderRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesCustomerPartRepository mesCustomerPartRepository;
|
|
|
|
|
private MesPartShippingGroupService mesPartShippingGroupService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesPartShippingGroupService mesPartShippingGroupService;
|
|
|
|
|
private MesBallTrackRuleRepository mesBallTrackRuleRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesConfigService mesConfigService;
|
|
|
|
|
private IMesWorkOrderExtService mesWorkOrderExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesEquipmentExtService mesEquipmentExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesEquipVariableRwExtService equipVariableRwExtService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) {
|
|
|
|
|
//校验发运单
|
|
|
|
|
MesShippingOrderManagement orderManagement = getMesShippingOrderManagement(shippingOrderManagement);
|
|
|
|
|
if(Objects.isNull(orderManagement)){
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
//校验发运单扫描顺序
|
|
|
|
|
checkShippingOrderSeq(shippingOrderManagement, orderManagement);
|
|
|
|
|
//根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据!
|
|
|
|
|
checkLoadingList(shippingOrderManagement, orderManagement);
|
|
|
|
|
//返回数据组装
|
|
|
|
|
MesSortShippingCheckModel model = new MesSortShippingCheckModel();
|
|
|
|
|
if (!StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
|
|
|
|
|
model.setIsScanLocationCode(true);
|
|
|
|
|
}
|
|
|
|
|
//发运单号
|
|
|
|
|
model.setShippingCode(orderManagement.getShippingCode());
|
|
|
|
|
//零件发运组
|
|
|
|
|
model.setMesPartShippingGroup(getMesPartShippingGroup(orderManagement.getOrganizeCode(),orderManagement.getShippingGroupCode()));
|
|
|
|
|
//发运单明细
|
|
|
|
|
model.setDetailList(getMesShippingOrderManagementDetails(orderManagement));
|
|
|
|
|
//最近扫描完成的发运单号
|
|
|
|
|
MesShippingOrderManagement lastShippingOrder = getLastShippingOrder(orderManagement.getOrganizeCode());
|
|
|
|
|
if (!Objects.isNull(lastShippingOrder)) {
|
|
|
|
|
model.setRecentlyScanShippingCode(lastShippingOrder.getShippingCode());
|
|
|
|
|
}
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model) {
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model);
|
|
|
|
|
//零件发运组
|
|
|
|
|
MesPartShippingGroup shippingGroup = Objects.isNull(model.getMesPartShippingGroup()) ? getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode()) : model.getMesPartShippingGroup();
|
|
|
|
|
//扫描跳过码
|
|
|
|
|
if (!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE, model.getIsPass())) {
|
|
|
|
|
skipShippingDetails(model, model.getUserInfo(), orderManagement);
|
|
|
|
|
//扫描条码
|
|
|
|
|
} else{
|
|
|
|
|
model = ((IMesShippingScanStrategyService) SpringContextsUtil.getBean(MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.valueOfServiceImpl(Integer.parseInt(shippingGroup.getConfirmPartType())))).doScan(model,orderManagement,shippingGroup);
|
|
|
|
|
}
|
|
|
|
|
model.setDetailList(model.getDetailList());
|
|
|
|
|
//当前发运单全部扫描完成 并且不需要扫位置码
|
|
|
|
|
if (model.getIsScanCount() == model.getDetailList().size() && StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
|
|
|
|
|
//保存数据库
|
|
|
|
|
saveDate(orderManagement, model, model.getOrganizeCode(), model.getUserInfo());
|
|
|
|
|
}
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel saveSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo) {
|
|
|
|
|
//校验条码
|
|
|
|
|
MesProduceSn produceSn = checkMesProduceSn(model, organizeCode);
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model);
|
|
|
|
|
//根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true.
|
|
|
|
|
boolean scanFlg = false;
|
|
|
|
|
for (MesShippingOrderManagementDetail detail : model.getDetailList()) {
|
|
|
|
|
if (detail.getPartNo().equals(produceSn.getPartNo())) {
|
|
|
|
|
scanFlg = true;
|
|
|
|
|
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
detail.setBarcode(produceSn.getSerialNumber());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!scanFlg) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count();
|
|
|
|
|
|
|
|
|
|
//当前发运单全部扫描完成
|
|
|
|
|
if (count.intValue() == model.getDetailList().size()) {
|
|
|
|
|
//保存数据库
|
|
|
|
|
saveDate(orderManagement, model, organizeCode, userInfo);
|
|
|
|
|
}
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org) {
|
|
|
|
|
//查询最近扫描完成的装车单号
|
|
|
|
|
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), "status", orderPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(shippingGroupNo, "shippingGroupCode", orderPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"seq"}, orderPackBean);
|
|
|
|
|
return shippingOrderManagementRepository.getByProperty(orderPackBean);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) {
|
|
|
|
|
if(StringUtil.isEmpty(org) ||StringUtil.isEmpty(partShippingGroupCode)){
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode);
|
|
|
|
|
if(Objects.isNull(shippingGroup)){
|
|
|
|
|
throw new ImppBusiException(String.format("零件发运组【%s】信息不存在,请检查数据!", partShippingGroupCode));
|
|
|
|
|
}
|
|
|
|
|
return shippingGroup;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagement getMesShippingOrderManagement(MesShippingOrderManagement shippingOrderManagement) {
|
|
|
|
|
//查询发运单信息 发运跳过
|
|
|
|
|
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(shippingOrderManagement.getShippingCode(), "shippingCode", orderManagementPackBean);
|
|
|
|
|
DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", orderManagementPackBean);
|
|
|
|
|
MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderManagementPackBean);
|
|
|
|
|
if (StringUtils.isEmpty(orderManagement)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此发运单不存在,请检查数据!", shippingOrderManagement.getShippingCode()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//校验发运单状态 必须是未装车条码
|
|
|
|
|
if (orderManagement.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue() && orderManagement.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()) {
|
|
|
|
|
if (!Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue(),MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).collect(Collectors.toList()).contains(orderManagement.getStatus())) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此发运单状态为【%s】,请选择状态为【%s】或【%s】状态的发运单", shippingOrderManagement.getShippingCode(),
|
|
|
|
|
MesExtEnumUtil.SHIPPING_ORDER_STATUS.valueOfDescription(orderManagement.getStatus()),
|
|
|
|
|
MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription()));
|
|
|
|
@ -109,35 +221,26 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
updateShippingOrderDetails(orderManagement.getOrganizeCode(), shippingOrderManagement.getModifyUser(), orderManagement.getId());
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return orderManagement;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//校验发运单扫描顺序
|
|
|
|
|
List<Integer> statusForCheckList = new ArrayList<>();
|
|
|
|
|
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue());
|
|
|
|
|
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue());
|
|
|
|
|
List<Integer> status = new ArrayList<>();
|
|
|
|
|
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue());
|
|
|
|
|
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue());
|
|
|
|
|
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue());
|
|
|
|
|
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICS.getValue());
|
|
|
|
|
private void checkShippingOrderSeq(MesShippingOrderManagement shippingOrderManagement, MesShippingOrderManagement orderManagement) {
|
|
|
|
|
//最后一个扫描完成的发运单信息
|
|
|
|
|
orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
|
|
|
|
|
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", orderManagementPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(), "shippingGroupCode", orderManagementPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackList(status, "status", orderManagementPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICS.getValue()).collect(Collectors.toList()), "status", orderManagementPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderBy("seq", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderManagementPackBean);
|
|
|
|
|
MesShippingOrderManagement management = shippingOrderManagementRepository.getByProperty(orderManagementPackBean);
|
|
|
|
|
//是否存在
|
|
|
|
|
//当前发运组是否存在比当前小的序号,且状态是未发运完成
|
|
|
|
|
orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", orderManagementPackBean);
|
|
|
|
|
if (!Objects.isNull(management)) {
|
|
|
|
|
DdlPreparedPack.getNumberBiggerPack(management.getSeq(), "seq", orderManagementPackBean);
|
|
|
|
|
}
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(), "shippingGroupCode", orderManagementPackBean);
|
|
|
|
|
DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean);
|
|
|
|
|
boolean exists = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean);
|
|
|
|
|
if (exists) {
|
|
|
|
|
DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()).collect(Collectors.toList()), "status", orderManagementPackBean);
|
|
|
|
|
if (shippingOrderManagementRepository.isExitByHql(orderManagementPackBean)) {
|
|
|
|
|
//1强过
|
|
|
|
|
if ((!Objects.isNull(shippingOrderManagement.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE, shippingOrderManagement.getIsPass()))) {
|
|
|
|
|
orderManagement.setRemark(MesPcnExtConstWords.STRONGER_PASS);
|
|
|
|
@ -148,8 +251,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
orderManagement.getShippingCode(), orderManagement.getSeq()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据!
|
|
|
|
|
private void checkLoadingList(MesShippingOrderManagement shippingOrderManagement, MesShippingOrderManagement orderManagement) {
|
|
|
|
|
if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) {
|
|
|
|
|
//查询装车单明细
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
|
|
|
|
@ -164,10 +268,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
if(Objects.isNull(loadingList)){
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没生成装车单,请检查数据!", shippingOrderManagement.getShippingCode()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//判断是否先装车
|
|
|
|
|
if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) {
|
|
|
|
|
|
|
|
|
|
//若没进行装车校验,则提示【%s】此发运单对应的【%s】此装车单状态为【%s】,请选择状态为【%s】的数据
|
|
|
|
|
if (loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此发运单对应的【%s】此装车单状态为【%s】,请选择状态为【%s】的数据!",
|
|
|
|
@ -177,265 +279,67 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MesSortShippingCheckModel model = new MesSortShippingCheckModel();
|
|
|
|
|
if (!StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
|
|
|
|
|
model.setIsScanLocationCode(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
|
|
|
|
|
private List<MesShippingOrderManagementDetail> getMesShippingOrderManagementDetails(MesShippingOrderManagement orderManagement) {
|
|
|
|
|
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderDetailPackBean);
|
|
|
|
|
DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),"status",orderDetailPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"custInfoSeq"}, orderDetailPackBean);
|
|
|
|
|
List<MesShippingOrderManagementDetail> detailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderDetailPackBean);
|
|
|
|
|
|
|
|
|
|
if(CollectionUtils.isEmpty(detailList)){
|
|
|
|
|
throw new ImppBusiException(String.format("发运单【%s】明细信息不存在,请检查数据!", orderManagement.getShippingCode()));
|
|
|
|
|
}
|
|
|
|
|
//已扫描数据
|
|
|
|
|
detailList.forEach(k -> {
|
|
|
|
|
if (k.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() || k.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()){
|
|
|
|
|
if (Stream.of(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()).collect(Collectors.toList()).contains(k.getStatus())){
|
|
|
|
|
k.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return detailList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Long count = detailList.stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count();
|
|
|
|
|
model.setIsScanCount(count.intValue());
|
|
|
|
|
|
|
|
|
|
//查询最近扫描完成的装车单号
|
|
|
|
|
DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode());
|
|
|
|
|
private MesShippingOrderManagement getLastShippingOrder(String organizeCode) {
|
|
|
|
|
DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", recentlyOrderPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"modifyDatetime"}, recentlyOrderPackBean);
|
|
|
|
|
MesShippingOrderManagement recentlyVehiclesOrder = shippingOrderManagementRepository.getByProperty(recentlyOrderPackBean);
|
|
|
|
|
|
|
|
|
|
model.setDetailList(detailList);
|
|
|
|
|
model.setShippingCode(orderManagement.getShippingCode());
|
|
|
|
|
if (!StringUtils.isEmpty(recentlyVehiclesOrder)) {
|
|
|
|
|
|
|
|
|
|
model.setRecentlyScanShippingCode(recentlyVehiclesOrder.getShippingCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo) {
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, organizeCode);
|
|
|
|
|
//零件发运组
|
|
|
|
|
MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode());
|
|
|
|
|
//根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true.
|
|
|
|
|
//根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。
|
|
|
|
|
//1 跳过
|
|
|
|
|
if(!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,model.getIsPass())){
|
|
|
|
|
Optional<MesShippingOrderManagementDetail> shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst();
|
|
|
|
|
if(shippingOrderManagementDetailOptional.isPresent()){
|
|
|
|
|
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get();
|
|
|
|
|
MesProduceSn produceSn = new MesProduceSn();
|
|
|
|
|
produceSn.setProductSn(model.getSn());
|
|
|
|
|
updateOrderManagementDetails(userInfo, produceSn, orderManagement, mesShippingOrderManagementDetail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(),MesPcnExtConstWords.SHIP_PASS);
|
|
|
|
|
}else{
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】明细已全部扫描完成,请检查数据!", orderManagement.getShippingCode()));
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
//校验条码
|
|
|
|
|
MesProduceSn produceSn = checkSn(model, organizeCode);
|
|
|
|
|
boolean scanFlg = false;
|
|
|
|
|
for (MesShippingOrderManagementDetail detail : model.getDetailList()) {
|
|
|
|
|
if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) {
|
|
|
|
|
//校验发运单明细顺序
|
|
|
|
|
if(!StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()){
|
|
|
|
|
Optional<MesShippingOrderManagementDetail> first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst();
|
|
|
|
|
if(first.isPresent()){
|
|
|
|
|
throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq()));
|
|
|
|
|
}
|
|
|
|
|
return shippingOrderManagementRepository.getByProperty(recentlyOrderPackBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//判断是否需要排序校验 默认排序则需要校验
|
|
|
|
|
if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) {
|
|
|
|
|
//获取明细中最小的
|
|
|
|
|
Optional<String> minPartNO = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode()))
|
|
|
|
|
.min(Comparator.comparingLong(k -> k.getCustInfoSeq())).map(k -> k.getPartNo());
|
|
|
|
|
//若扫描的不是最小顺序 则报错
|
|
|
|
|
if (minPartNO.isPresent() && !minPartNO.get().equals(produceSn.getPartNo())) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//校验客户零件信息是否存在
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean);
|
|
|
|
|
if(!mesCustomerPartRepository.isExitByHql(packBean)){
|
|
|
|
|
throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(),detail.getCustPartNo()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
scanFlg = true;
|
|
|
|
|
updateOrderManagementDetails(userInfo, produceSn, orderManagement, detail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),"扫描完成");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!scanFlg) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count();
|
|
|
|
|
model.setIsScanCount(count.intValue());
|
|
|
|
|
|
|
|
|
|
//当前发运单全部扫描完成 并且不需要扫位置码
|
|
|
|
|
if (count.intValue() == model.getDetailList().size() && StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
|
|
|
|
|
|
|
|
|
|
//保存数据库
|
|
|
|
|
saveDate(orderManagement, model, organizeCode, userInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateOrderManagementDetails(String userInfo, MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail,Integer status,String remark) {
|
|
|
|
|
if(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == status){
|
|
|
|
|
detail.setBarcode(produceSn.getProductSn());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
|
|
|
|
|
private void updateOrderManagementDetails(String userInfo, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail) {
|
|
|
|
|
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
detail.setStatus(status);
|
|
|
|
|
detail.setRemark(remark);
|
|
|
|
|
detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue());
|
|
|
|
|
detail.setRemark(MesPcnExtConstWords.SHIP_PASS);
|
|
|
|
|
//根据是否启动记忆判断 若启用记忆,则根据保存数据库
|
|
|
|
|
if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
|
|
|
|
|
|
|
|
|
|
//若发运单状态为创建或发布 则写入开始扫描时间
|
|
|
|
|
if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() ||
|
|
|
|
|
orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) {
|
|
|
|
|
orderManagement.setStartScanTime(TimeTool.getNowTime(true));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//发运单状态
|
|
|
|
|
orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
|
|
|
|
ConvertBean.serviceModelUpdate(orderManagement, userInfo);
|
|
|
|
|
update(orderManagement);
|
|
|
|
|
|
|
|
|
|
//发运单明细
|
|
|
|
|
detail.setActualQty(1);
|
|
|
|
|
detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
|
|
|
|
ConvertBean.serviceModelUpdate(detail, userInfo);
|
|
|
|
|
updateDetail(detail);
|
|
|
|
|
//内部条码更新条码状态
|
|
|
|
|
if (!Objects.isNull(produceSn.getId())) {
|
|
|
|
|
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
|
|
|
|
|
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
|
|
|
|
ConvertBean.serviceModelUpdate(detail, userInfo);
|
|
|
|
|
produceSnExtService.update(produceSn);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesSortShippingCheckModel saveSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo) {
|
|
|
|
|
|
|
|
|
|
//校验条码
|
|
|
|
|
MesProduceSn produceSn = checkMesProduceSn(model, organizeCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, organizeCode);
|
|
|
|
|
|
|
|
|
|
//根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true.
|
|
|
|
|
boolean scanFlg = false;
|
|
|
|
|
for (MesShippingOrderManagementDetail detail : model.getDetailList()) {
|
|
|
|
|
if (detail.getPartNo().equals(produceSn.getPartNo())) {
|
|
|
|
|
scanFlg = true;
|
|
|
|
|
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
detail.setBarcode(produceSn.getSerialNumber());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!scanFlg) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Long count = model.getDetailList().stream().filter(k -> k.getIsScanFlg() == MesCommonConstant.TRUE_INTEGER).count();
|
|
|
|
|
|
|
|
|
|
//当前发运单全部扫描完成
|
|
|
|
|
if (count.intValue() == model.getDetailList().size()) {
|
|
|
|
|
|
|
|
|
|
//保存数据库
|
|
|
|
|
saveDate(orderManagement, model, organizeCode, userInfo);
|
|
|
|
|
|
|
|
|
|
private MesSortShippingCheckModel skipShippingDetails(MesSortShippingCheckModel model, String userInfo, MesShippingOrderManagement orderManagement) {
|
|
|
|
|
Optional<MesShippingOrderManagementDetail> shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst();
|
|
|
|
|
if(!shippingOrderManagementDetailOptional.isPresent()){
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】明细已全部扫描完成,请检查数据!", orderManagement.getShippingCode()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//更新明细
|
|
|
|
|
updateOrderManagementDetails(userInfo, orderManagement, shippingOrderManagementDetailOptional.get());
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org) {
|
|
|
|
|
|
|
|
|
|
//查询最近扫描完成的装车单号
|
|
|
|
|
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), "status", orderPackBean);
|
|
|
|
|
// DdlPreparedPack.getStringEqualPack(shippingGroupNo, "shippingGroupCode", orderPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"seq"}, orderPackBean);
|
|
|
|
|
MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderPackBean);
|
|
|
|
|
|
|
|
|
|
return orderManagement;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) {
|
|
|
|
|
MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode);
|
|
|
|
|
if(Objects.isNull(shippingGroup)){
|
|
|
|
|
throw new ImppBusiException(String.format("零件发运组【%s】信息不存在,请检查数据!", partShippingGroupCode));
|
|
|
|
|
}
|
|
|
|
|
return shippingGroup;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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.setProductSn(model.getSn());
|
|
|
|
|
produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return produceSn;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model, String org) {
|
|
|
|
|
//外部解析条码长度卡控
|
|
|
|
|
String cfgValue = mesConfigService.getCfgValue(org, 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(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) {
|
|
|
|
|
//校验条码是否已经扫描
|
|
|
|
@ -470,9 +374,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model, String org) {
|
|
|
|
|
private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model) {
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getShippingCode(), "shippingCode", orderManagementPackBean);
|
|
|
|
|
MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderManagementPackBean);
|
|
|
|
|
if (StringUtils.isEmpty(orderManagement)) {
|
|
|
|
@ -513,6 +417,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
Map<Long, List<MesShippingOrderManagementDetail>> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getCustInfoSeq));
|
|
|
|
|
|
|
|
|
|
List<MesProduceSn> produceSnList = new ArrayList<>();
|
|
|
|
|
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
|
|
|
|
|
for (MesShippingOrderManagementDetail detail : orderManagementDetailList) {
|
|
|
|
|
//根据扫描的条码查询条码是否存在
|
|
|
|
|
packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
@ -538,13 +443,27 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSn, userInfo);
|
|
|
|
|
produceSnList.add(produceSn);
|
|
|
|
|
}
|
|
|
|
|
//更新工单
|
|
|
|
|
if(!StringUtils.isEmpty(detail.getVisualOrderNo())){
|
|
|
|
|
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(organizeCode, detail.getVisualOrderNo());
|
|
|
|
|
if(!Objects.isNull(workOrder)){
|
|
|
|
|
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrder, userInfo);
|
|
|
|
|
mesWorkOrderList.add(workOrder);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//更新条码
|
|
|
|
|
if(!CollectionUtils.isEmpty(produceSnList)){
|
|
|
|
|
produceSnRepository.saveAll(produceSnList);
|
|
|
|
|
}
|
|
|
|
|
//更新工单
|
|
|
|
|
if(!CollectionUtils.isEmpty(mesWorkOrderList)){
|
|
|
|
|
mesWorkOrderExtService.saveAll(mesWorkOrderList);
|
|
|
|
|
}
|
|
|
|
|
//更新发运单
|
|
|
|
|
ConvertBean.serviceModelUpdate(orderManagement,userInfo);
|
|
|
|
|
update(orderManagement);
|
|
|
|
@ -559,6 +478,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
vehiclesOrderDetailRepository.save(vehiclesOrderDetail);
|
|
|
|
|
}
|
|
|
|
|
if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){
|
|
|
|
|
//发送数据给辊道线
|
|
|
|
|
sendShippingFinishedCmd(model, organizeCode);
|
|
|
|
|
//保存当前发运单明细报工
|
|
|
|
|
jisShippingRepository.saveAll(getMesJisShippings(orderManagement,userInfo));
|
|
|
|
|
}else{
|
|
|
|
@ -596,6 +517,39 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void sendShippingFinishedCmd(MesSortShippingCheckModel model, String organizeCode) {
|
|
|
|
|
if (!Objects.isNull(model.getMesPartShippingGroup()) && !StringUtil.isEmpty(model.getMesPartShippingGroup().getEquipmentCode())) {
|
|
|
|
|
//辊道设备配置
|
|
|
|
|
MesBallTrackRule rule = getMesBallTrackRule(model, organizeCode);
|
|
|
|
|
//设备变量
|
|
|
|
|
MesEquipmentVariable mesEquipmentVariable = mesEquipmentExtService.getMesEquipmentVariable(organizeCode, rule.getEquipmentCode(), rule.getEquipVariableId());
|
|
|
|
|
if (Objects.isNull(mesEquipmentVariable)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("设备【%s】设备变量ID【%s】信息不存在,请检查", rule.getEquipmentCode(), rule.getEquipVariableId());
|
|
|
|
|
}
|
|
|
|
|
//设备通道
|
|
|
|
|
MesEquipmentChannel mesEquipmentChannel = mesEquipmentExtService.getMesEquipmentChannel(organizeCode, rule.getEquipmentCode(), mesEquipmentVariable.getChannel());
|
|
|
|
|
if (Objects.isNull(mesEquipmentChannel)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("设备【%s】设备通道【%s】信息不存在,请检查", rule.getEquipmentCode(), mesEquipmentVariable.getChannel());
|
|
|
|
|
}
|
|
|
|
|
//写入
|
|
|
|
|
MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(rule.getEquipVariableValue(), mesEquipmentVariable, mesEquipmentChannel.getKepwareFlag());
|
|
|
|
|
if (!equipVariableRwResult.getIsSuccessed()) {
|
|
|
|
|
MesPcnException.throwMesBusiException(String.format("设备【%s】:发运成功指令发送失败!原因:%s", mesEquipmentChannel.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesBallTrackRule getMesBallTrackRule(MesSortShippingCheckModel model, String organizeCode) {
|
|
|
|
|
DdlPackBean bean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getMesPartShippingGroup().getEquipmentCode(), "equipmentCode", bean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.BALL_TRACK_TYPE.BALL_TRACK_TYPE_30.getValue(), "ballTrackType", bean);
|
|
|
|
|
MesBallTrackRule rule = mesBallTrackRuleRepository.getByProperty(bean);
|
|
|
|
|
if (Objects.isNull(rule) || Objects.isNull(rule.getEquipVariableId())) {
|
|
|
|
|
MesPcnException.throwMesBusiException("设备【%s】辊道设备配置信息不存在,请检查", model.getMesPartShippingGroup().getEquipmentCode());
|
|
|
|
|
}
|
|
|
|
|
return rule;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName) {
|
|
|
|
|
DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean);
|
|
|
|
|