|
|
|
@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
@ -11,6 +12,7 @@ import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.auth.AuthUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ImppRedis;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@ -20,9 +22,8 @@ import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -74,8 +75,19 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
|
|
|
|
|
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingVehiclesOrder.organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(loadingVehiclesOrder.getLoadingOrderNo(), "loadingOrderNo", orderDetailPackBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seq"}, orderDetailPackBean);
|
|
|
|
|
List<MesLoadingVehiclesOrderDetail> detailList = vehiclesOrderDetailRepository.findByHqlWhere(orderDetailPackBean);
|
|
|
|
|
|
|
|
|
|
//是否逆转
|
|
|
|
|
if (vehiclesOrder.getIsReverse() == MesCommonConstant.TRUE_INTEGER) {
|
|
|
|
|
// 逆转
|
|
|
|
|
for (int i = 0; i < detailList.size(); i += vehiclesOrder.getReverseQuantity()) {
|
|
|
|
|
if (i + vehiclesOrder.getReverseQuantity() - 1 < detailList.size()) {
|
|
|
|
|
Collections.reverse(detailList.subList(i, i + vehiclesOrder.getReverseQuantity()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据扫描的装车单找到是否先装车配置
|
|
|
|
|
//若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。
|
|
|
|
|
if (vehiclesOrder.getIsFirstInstall() == MesCommonConstant.FALSE_INTEGER) {
|
|
|
|
@ -97,32 +109,8 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MesShippingLoadingCheckModel model = new MesShippingLoadingCheckModel();
|
|
|
|
|
//根据是否启用记忆
|
|
|
|
|
//若启用,则获取redis数据,redis中数据为空,则获取装车单明细数据 若redis中数据不为空,则根据装车单明细中发运单号,将扫描过的标记。 若不启动则获取装车单明细数据
|
|
|
|
|
if (vehiclesOrder.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) {
|
|
|
|
|
|
|
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
stringBuilder.append(loadingVehiclesOrder.getOrganizeCode()).append(":").append(loadingVehiclesOrder.getLoadingOrderNo()).append(":");
|
|
|
|
|
|
|
|
|
|
//获取redis数据
|
|
|
|
|
if (redisMesPcn.hasKey(stringBuilder.toString())) {
|
|
|
|
|
//redis中数据不为空
|
|
|
|
|
List<MesLoadingVehiclesOrderDetail> isScanDetailList = (List<MesLoadingVehiclesOrderDetail>) redisMesPcn.getObject(stringBuilder.toString());
|
|
|
|
|
|
|
|
|
|
AtomicReference<Integer> isScanCount = new AtomicReference<>(0);
|
|
|
|
|
//根据装车单明细中发运单号,将扫描过的标记
|
|
|
|
|
detailList.forEach(k -> {
|
|
|
|
|
Optional optional = isScanDetailList.stream().filter(scanDetail -> scanDetail.getLoadingOrderNo().equals(k.getLoadingOrderNo())).findFirst();
|
|
|
|
|
if (optional.isPresent()) {
|
|
|
|
|
k.setTempStatus(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
isScanCount.getAndSet(isScanCount.get() + 1);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
model.setIsScanCount(isScanCount.get());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
Long count = detailList.stream().filter(k -> k.getStatus() == MesExtEnumUtil.LOADING_DETAIL_ORDER_DETAIL_STATUS.SCAN.getValue()).count();
|
|
|
|
|
model.setIsScanCount(count.intValue());
|
|
|
|
|
|
|
|
|
|
//查询最近扫描完成的装车单号
|
|
|
|
|
DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(loadingVehiclesOrder.organizeCode);
|
|
|
|
@ -155,6 +143,13 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
@Override
|
|
|
|
|
public MesShippingLoadingCheckModel saveVehiclesOrderAndDetail(MesShippingLoadingCheckModel model, String org) {
|
|
|
|
|
|
|
|
|
|
//校验装车单是否存在
|
|
|
|
|
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getLoadingOrderNo(), "loadingOrderNo", orderPackBean);
|
|
|
|
|
MesLoadingVehiclesOrder vehiclesOrder = vehiclesOrderRepository.getByProperty(orderPackBean);
|
|
|
|
|
if (StringUtils.isEmpty(vehiclesOrder)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此装车单不存在,请检查数据!", model.getLoadingOrderNo()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//校验发运单是否存在
|
|
|
|
|
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
@ -174,6 +169,19 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
}
|
|
|
|
|
mesLoadingVehiclesOrderDetail.setTempStatus(MesCommonConstant.TRUE_INTEGER);
|
|
|
|
|
mesLoadingVehiclesOrderDetail.setTempStatusVal("扫描完成");
|
|
|
|
|
|
|
|
|
|
//根据是否启动记忆判断 若启用记忆,则根据保存数据库
|
|
|
|
|
if (vehiclesOrder.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) {
|
|
|
|
|
|
|
|
|
|
vehiclesOrder.setStatus(MesExtEnumUtil.LOADING_ORDER_STATUS.LOADING.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(vehiclesOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
vehiclesOrderRepository.save(vehiclesOrder);
|
|
|
|
|
|
|
|
|
|
mesLoadingVehiclesOrderDetail.setStatus(MesExtEnumUtil.LOADING_DETAIL_ORDER_DETAIL_STATUS.SCAN.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesLoadingVehiclesOrderDetail, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
vehiclesOrderDetailRepository.save(mesLoadingVehiclesOrderDetail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
scanflg = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -182,21 +190,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】扫描的发运单号不在【%s】此装车单中,请检查数据!", model.getShippingOrderNo(), model.getLoadingOrderNo()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//校验装车单是否存在
|
|
|
|
|
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(model.getLoadingOrderNo(), "loadingOrderNo", orderPackBean);
|
|
|
|
|
MesLoadingVehiclesOrder vehiclesOrder = vehiclesOrderRepository.getByProperty(orderPackBean);
|
|
|
|
|
if (StringUtils.isEmpty(vehiclesOrder)) {
|
|
|
|
|
throw new ImppBusiException(String.format("【%s】此装车单不存在,请检查数据!", model.getLoadingOrderNo()));
|
|
|
|
|
}
|
|
|
|
|
if (vehiclesOrder.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) {
|
|
|
|
|
|
|
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
stringBuilder.append(org).append(":").append(model.getLoadingOrderNo()).append(":");
|
|
|
|
|
|
|
|
|
|
redisMesPcn.putHash(stringBuilder.toString(), MesPcnConstWords.BIND_KEY_PART, model.getVehiclesOrderDetailList(), -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Long count = model.getVehiclesOrderDetailList().stream().filter(k -> k.getTempStatus() == MesCommonConstant.TRUE_INTEGER).count();
|
|
|
|
|
model.setIsScanCount(count.intValue());
|
|
|
|
|
|
|
|
|
@ -211,12 +204,16 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
|
|
|
|
|
//装车单主表
|
|
|
|
|
vehiclesOrder.setStatus(MesExtEnumUtil.LOADING_ORDER_STATUS.LOADED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(vehiclesOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
|
|
|
|
|
//装车单明细
|
|
|
|
|
DdlPackBean vehiclesOrderDetailPackBean = DdlPackBean.getDdlPackBean(org);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(vehiclesOrder.getLoadingOrderNo(), "loadingOrderNo", vehiclesOrderDetailPackBean);
|
|
|
|
|
List<MesLoadingVehiclesOrderDetail> vehiclesOrderDetailList = vehiclesOrderDetailRepository.findByHqlWhere(vehiclesOrderDetailPackBean);
|
|
|
|
|
vehiclesOrderDetailList.forEach(k -> k.setStatus(MesExtEnumUtil.LOADING_DETAIL_ORDER_STATUS.LOADED.getValue()));
|
|
|
|
|
vehiclesOrderDetailList.forEach(k -> {
|
|
|
|
|
k.setStatus(MesExtEnumUtil.LOADING_DETAIL_ORDER_STATUS.LOADED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
vehiclesOrderDetailRepository.saveAll(vehiclesOrderDetailList);
|
|
|
|
|
vehiclesOrderRepository.save(vehiclesOrder);
|
|
|
|
@ -248,15 +245,34 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(vehiclesOrder.getLoadingOrderNo(), "loadingOrderNo", vehiclesOrderDetailPackBean);
|
|
|
|
|
List<MesLoadingVehiclesOrderDetail> vehiclesOrderDetailList = vehiclesOrderDetailRepository.findByHqlWhere(vehiclesOrderDetailPackBean);
|
|
|
|
|
|
|
|
|
|
orderManagementList.forEach(k -> k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()));
|
|
|
|
|
orderManagementDetailList.forEach(k -> k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()));
|
|
|
|
|
produceSnList.forEach(k -> k.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()));
|
|
|
|
|
//发运单
|
|
|
|
|
orderManagementList.forEach(k -> {
|
|
|
|
|
k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
});
|
|
|
|
|
//发运单明细
|
|
|
|
|
orderManagementDetailList.forEach(k -> {
|
|
|
|
|
k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
});
|
|
|
|
|
//条码
|
|
|
|
|
produceSnList.forEach(k -> {
|
|
|
|
|
k.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//装车单
|
|
|
|
|
vehiclesOrder.setStatus(MesExtEnumUtil.LOADING_ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(vehiclesOrder, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
|
|
|
|
|
//装车单明细
|
|
|
|
|
vehiclesOrderDetailList.forEach(k -> {
|
|
|
|
|
k.setStatus(MesExtEnumUtil.LOADING_DETAIL_ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
k.setStatus(MesExtEnumUtil.LOADING_DETAIL_ORDER_DETAIL_STATUS.SHIPPING.getValue());
|
|
|
|
|
k.setShippingStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//报工数据
|
|
|
|
|
List<MesJisShipping> jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org);
|
|
|
|
|
|
|
|
|
|
//保存当前发运单明细报工
|
|
|
|
|