diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java index 62002ab..24c2104 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -45,4 +46,6 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic @ApiOperation("查询发运零件子零件明细") ListPager queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager); + + void doHandleCockpitShippingError(MesShippingOrderManagementDetail detail, MesWorkOrder workOrder); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java index bc5af0f..0a7d297 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -67,6 +68,19 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } } + @ApiOperation(value = "cockpit发运处理", notes = "cockpit发运处理") + @PostMapping("/handle-cockpit-shipping-error") + public ResultBean handleCockpitShippingError(MesShippingOrderManagementDetail detail, MesWorkOrder workOrder) { + try { + shippingOrderManagementDetailService.doHandleCockpitShippingError(detail, workOrder); + return ResultBean.success("处理成功"); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @ApiOperation(value = "根据客户零件匹配零件号", notes = "根据客户零件匹配零件号") @GetMapping("/master/part/supplyBycustPartNo") public ResultBean supplyBycustPartNo(Long[] ids) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index 3242344..d441446 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -13,6 +13,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; 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.*; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; @@ -59,10 +60,18 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager) { List modelList=new ArrayList<>(); List shippingDetails = shippingOrderManagementDetailDao.queryMesShippingOrderManagementDetail(bean); @@ -325,4 +335,76 @@ public class MesShippingOrderManagementDetailService extends BaseMesService(modelList, pager); } + @Override + public void doHandleCockpitShippingError(MesShippingOrderManagementDetail detail, MesWorkOrder workOrder) { + if (StringUtils.isEmpty(detail.getPartNo())) { + MesException.throwFlowException("发运单明细对应零件号为空"); + } + if (StringUtils.isEmpty(detail.getBarcode())) { + MesException.throwMesBusiException("发运单条码信息不存在"); + } + String organizeCode = AuthUtil.getOrganizeCode(); + String userName = AuthUtil.getSessionUser().getUserName(); + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(detail.getPid(), "id", orderPackBean); + MesShippingOrderManagement orderManagement = shippingOrderRepository.getByProperty(orderPackBean); + if (orderManagement == null || StringUtils.isEmpty(orderManagement.getShippingGroupCode())) { + MesException.throwFlowException("发运单主表不存在"); + } + + DdlPackBean partShippingGroupPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringLikerPack(orderManagement.getShippingGroupCode(), "shippingGroupCode", partShippingGroupPackBean); + MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupRDao.getByProperty(partShippingGroupPackBean); + if (mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getConfirmPartType()) || Integer.parseInt(mesPartShippingGroup.getConfirmPartType()) != MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.SHIPPING_GROUP_CONFIRM_PART_TYPE_30.getValue()) { + MesException.throwFlowException("零件发运组【%s】,扫描确认零件方式应为【装配目视单和客户零件条码】", orderManagement.getShippingGroupCode()); + } + + DdlPackBean workOrderPartPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrder.getWorkOrderNo(), "workOrderNo", workOrderPartPackBean); + List workOrderParts = mesWorkOrderPartRepository.findByHqlWhere(workOrderPartPackBean); + if (!CollectionUtils.isEmpty(workOrderParts)) { + List shippingList = new ArrayList<>(); + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_10.getValue(), "groupType", ddlPackBean); + DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(), "code", ddlPackBean); + List mesMoveRuleList = mesMoveRuleRepository.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesMoveRuleList)) { + MesException.throwFlowException(String.format("移库规则不存在:发运单编号:%s,发运组代码:%s,", orderManagement.getShippingCode(), orderManagement.getShippingGroupCode())); + } + Map mesMoveRuleMap = mesMoveRuleList.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.toMap(MesMoveRule::getSrcType, Function.identity(), (x, y) -> y)); + + for (MesWorkOrderPart orderPart : workOrderParts) { + MesPart itemPart = mesPartService.getPartByPartNo(orderPart.getPartNo(), organizeCode); + MesMoveRule moveRule = mesMoveRuleMap.get(itemPart.getEsd()); + if (Objects.equals(moveRule.getMoveNum(), MesExtEnumUtil.MOVE_RULE_MOVE_NUM.MOVE_RULE_MOVE_NUM_20.getValue()) && MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) { + shippingList.add(getMesJisShipping(orderManagement, detail, moveRule.getErpSrcLocateNo(), orderPart, userName)); + } else { + log.info("客供品移库零件【{}】在零件发运组【{}】的移库规则中,汇报类型未维护或不为发运", orderPart.getPartNo(), workOrder.getPartProdGroupCode()); + } + } + + jisShippingRepository.saveAll(shippingList); + } + + List mesProduceSnList = mesProduceSnService.findMesProduceSn(organizeCode, detail.getBarcode()); + for (MesProduceSn mesProduceSn : mesProduceSnList) { + //更新条码状态为完成 + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + mesProduceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(mesProduceSn, userName); + mesProduceSnRepository.update(mesProduceSn); + } + + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + workOrder.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(workOrder, userName); + mesWorkOrderRDao.update(workOrder); + + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + detail.setRemark("cockpit发运处理"); + ConvertBean.serviceModelUpdate(detail, userName); + shippingOrderDetailRepository.update(detail); + } }