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 d035341..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,8 +3,10 @@ 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; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -22,9 +24,28 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic @ApiOperation("查询发运单明细") ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager); + @ApiOperation("查询发运单明细") + ListPager queryMesShippingErrorDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager); + + + @ApiOperation("根据客户零件匹配零件号") + public ResultBean supplyBycustPartNo(Long[] ids); + + + @ApiOperation("根据CBR匹配零件号") + public ResultBean supplyByCBR(Long[] ids); + + @ApiOperation("手动发运改数量") + public ResultBean updateQty(Long[] ids); + + @ApiOperation("同步") + public ResultBean syncShip(Long[] ids); + @ApiOperation("发运退回") void doShippingBack(Long[] idList,String organizeCode,String userName); @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 62010e7..4ddc33e 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 @@ -3,9 +3,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.MesHandleShippingErrorModel; 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; @@ -55,6 +57,85 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } } + @ApiOperation(value = "发运单异常明细", notes = "发运单异常明细") + @GetMapping("/master/error/query") + public ResultBean queryMesShippingErrorDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) { + try { + return ResultBean.success("查询成功").setListPager(shippingOrderManagementDetailService.queryMesShippingErrorDetailsByPager(mesShippingOrderManagementDetailModel,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "cockpit发运处理", notes = "cockpit发运处理") + @PostMapping("/handle-cockpit-shipping-error") + public ResultBean handleCockpitShippingError(@RequestBody MesHandleShippingErrorModel request) { + try { + MesShippingOrderManagementDetail detail = shippingOrderManagementDetailService.get(request.getDetail().getId()); + if (detail == null) { + return ResultBean.fail("无效发运单明细"); + } + if (detail.getPid() == null) { + return ResultBean.fail("发运单明细未关联有效发运单"); + } + shippingOrderManagementDetailService.doHandleCockpitShippingError(detail, request.getWorkOrder()); + 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) { + try { + return shippingOrderManagementDetailService.supplyBycustPartNo(ids); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "根据CBR匹配零件号", notes = "根据CBR匹配零件号") + @GetMapping("/master/part/supplyByCBR") + public ResultBean supplyByCBR(Long[] ids) { + try { + return shippingOrderManagementDetailService.supplyByCBR(ids); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @ApiOperation(value = "修改数量", notes = "修改数量") + @GetMapping("/master/part/updateQty") + public ResultBean updateQty(Long[] ids) { + try { + return shippingOrderManagementDetailService.updateQty(ids); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "发运同步", notes = "发运同步") + @GetMapping("/master/part/syncShip") + public ResultBean syncShip(Long[] ids) { + try { + return shippingOrderManagementDetailService.syncShip(ids); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @ApiOperation(value = "发运退回", notes = "发运退回") @PutMapping("/doShippingBack") public ResultBean doShippingBack(@RequestBody Long[] idList) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index e196c50..0e65b6b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -132,7 +132,11 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); query.setParameter("organizeCode", mesShippingOrderManagementDetailModel.getOrganizeCode()); - query.setParameter("status", MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + if (mesShippingOrderManagementDetailModel.getStatus() == null) { + query.setParameter("status", MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + } else { + query.setParameter("status", mesShippingOrderManagementDetailModel.getStatus()); + } if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingType())) query.setParameter("shippingType", mesShippingOrderManagementDetailModel.getShippingType()); if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeStart())) @@ -147,6 +151,7 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde query.setParameter("publishTimeStart", mesShippingOrderManagementDetailModel.getPublishTimeStart()); if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd())) query.setParameter("publishTimeEnd", mesShippingOrderManagementDetailModel.getPublishTimeEnd()); + } private String getOrderBy(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel) { @@ -166,6 +171,8 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde commonHql.append(" and d.status = :status "); if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingCode())) commonHql.append(" and m.shippingCode like '%").append(mesShippingOrderManagementDetailModel.getShippingCode()).append("%' "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingGroupCode())) + commonHql.append(" and m.shippingGroupCode like '%").append(mesShippingOrderManagementDetailModel.getShippingGroupCode()).append("%' "); if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getBarcode())) commonHql.append(" and d.barcode like '%").append(mesShippingOrderManagementDetailModel.getBarcode()).append("%' "); if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPartNo())) @@ -188,6 +195,8 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde commonHql.append(" and m.publishTime >= :publishTimeStart "); if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd())) commonHql.append(" and m.publishTime <= :publishTimeEnd "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getDetailsStatus())) + commonHql.append(" and d.status = " + mesShippingOrderManagementDetailModel.getDetailsStatus() + ""); return commonHql.toString(); } @Override 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 f98a89c..96a9735 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 @@ -1,34 +1,38 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService; import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; 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.mes.bean.MesPartShippingGroupDetail; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; +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; -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +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.util.ResultBean; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; 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.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @Service @@ -42,10 +46,41 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryMesShippingErrorDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) { + mesShippingOrderManagementDetailModel.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()); + return shippingOrderManagementDetailDao.queryMesShippingDetailsByPager(mesShippingOrderManagementDetailModel, pager); + } + + + @Override + public ResultBean supplyBycustPartNo(Long[] ids) { + + String organizeCode = AuthUtil.getOrganizeCode(); + String userName = AuthUtil.getSessionUser().getUserName(); + /*String organizeCode = "CR01"; + String userName ="zxw";*/ + List detailList = getManagementDetails(ids, organizeCode, userName); + + for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) { + DdlPackBean cbrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesShippingOrderManagementDetail.getCustPartNo(), "custPartNo", cbrPackBean); + MesCimGmCbrRule mesCimGmCbrRule = mesCimGmCbrRuleRepository.getByProperty(cbrPackBean); + if (mesCimGmCbrRule != null) { + log.info("CBR规则已配置,不允许此操作,你通过CBR匹配零件号:客户零件号:{}", mesShippingOrderManagementDetail.getCustPartNo()); + return ResultBean.fail(String.format("CBR规则已配置,不允许此操作,你通过CBR匹配零件号:客户零件号:%s", mesShippingOrderManagementDetail.getCustPartNo())); + } + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesShippingOrderManagementDetail.getCustPartNo(), "custPartNo", ddlPackBean); + MesCustomerPart mesCustomerPart = mesCustomerPartRepository.getByProperty(ddlPackBean); + if (mesCustomerPart == null) { + log.info("客户零件号不存在:{}", mesShippingOrderManagementDetail.getCustPartNo()); + return ResultBean.fail(String.format("客户零件号不存在:%s", mesShippingOrderManagementDetail.getCustPartNo())); + } + mesShippingOrderManagementDetail.setPartNo(mesCustomerPart.getErpPartNo()); + mesShippingOrderManagementDetail.setPartName(mesCustomerPart.getErpPartName()); + } + shippingOrderDetailRepository.saveAll(detailList); + return ResultBean.success().setResultList(detailList); + } + + @Override + public ResultBean supplyByCBR(Long[] ids) { + + + String organizeCode = AuthUtil.getOrganizeCode(); + String userName = AuthUtil.getSessionUser().getUserName(); + /*String organizeCode = "CR01"; + String userName ="zxw";*/ + List detailList = getManagementDetails(ids, organizeCode, userName); + + for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesShippingOrderManagementDetail.getCustPartNo(), "custPartNo", ddlPackBean); + MesCimGmCbrRule mesCimGmCbrRule = mesCimGmCbrRuleRepository.getByProperty(ddlPackBean); + if (mesCimGmCbrRule == null) { + log.info("CBR规则未配置:客户零件号:{}", mesShippingOrderManagementDetail.getCustPartNo()); + return ResultBean.fail(String.format("CBR规则未配置:客户零件号:%s", mesShippingOrderManagementDetail.getCustPartNo())); + } + mesShippingOrderManagementDetail.setPartNo(mesCimGmCbrRule.getErpPartNo()); + mesShippingOrderManagementDetail.setPartName(mesCimGmCbrRule.getErpPartName()); + } + shippingOrderDetailRepository.saveAll(detailList); + + return ResultBean.success().setResultList(detailList); + } + + + @Override + public ResultBean updateQty(Long[] ids) { + String organizeCode = AuthUtil.getOrganizeCode(); + String userName = AuthUtil.getSessionUser().getUserName(); + /*String organizeCode = "CR01"; + String userName ="zxw";*/ + List detailList = getManagementDetails(ids, organizeCode, userName); + + for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) { + if (StringUtils.isEmpty(mesShippingOrderManagementDetail.getPartNo())) { + log.info("发运单明细对应零件号为空"); + return ResultBean.fail(String.format("发运单明细对应零件号为空")); + } + mesShippingOrderManagementDetail.setActualQty((int)mesShippingOrderManagementDetail.getPlanQty()); + ConvertBean.serviceModelUpdate(mesShippingOrderManagementDetail, userName); } + if (!CollectionUtils.isEmpty(detailList)) { + shippingOrderDetailRepository.saveAll(detailList); + } + return ResultBean.success("操作成功"); + } + + @Override + public ResultBean syncShip(Long[] ids) { + String organizeCode = AuthUtil.getOrganizeCode(); + String userName = AuthUtil.getSessionUser().getUserName(); + /*String organizeCode = "CR01"; + String userName ="zxw";*/ + List detailList = getManagementDetails(ids, organizeCode, userName); + List idList = detailList.stream().map(MesShippingOrderManagementDetail::getPid).distinct().collect(Collectors.toList()); + + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "id", orderPackBean); + List shippingOrderManagements = shippingOrderRepository.findByHqlWhere(orderPackBean); + + Map orderMap = shippingOrderManagements.stream().collect(Collectors.toMap(MesShippingOrderManagement::getId, Function.identity())); + + List mesJisShippings = new ArrayList<>(); + + for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : detailList) { + MesShippingOrderManagement mesShippingOrderManagement = orderMap.get(mesShippingOrderManagementDetail.getPid()); + if (StringUtils.isEmpty(mesShippingOrderManagementDetail.getPartNo())) { + log.info("发运单明细对应零件号为空"); + return ResultBean.fail(String.format("发运单明细对应零件号为空")); + } + if ((int) mesShippingOrderManagementDetail.getPlanQty() != mesShippingOrderManagementDetail.getActualQty()) { + log.info("计划数量和实际数量不相等"); + return ResultBean.fail(String.format("计划数量和实际数量不相等")); + } + MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(organizeCode, mesShippingOrderManagement.getShippingGroupCode()); + + + mesShippingOrderManagementDetail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + mesShippingOrderManagementDetail.setRemark("手工发运"); + ConvertBean.serviceModelUpdate(mesShippingOrderManagementDetail, userName); + + + mesJisShippings.add(getMesJisShippings(mesShippingOrderManagement, mesShippingOrderManagementDetail, userName, mesPartShippingGroup)); + } + if (!CollectionUtils.isEmpty(detailList)) { + shippingOrderDetailRepository.saveAll(detailList); + } + // jis同步 + if(!CollectionUtils.isEmpty(mesJisShippings)){ + jisShippingRepository.saveAll(mesJisShippings); + } + return ResultBean.success("操作成功"); + } + + + public MesJisShipping getMesJisShippings(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail orderManagementDetail,String userName,MesPartShippingGroup mesPartShippingGroup) { + + String warerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WAREHOUS") : mesPartShippingGroup.getSrcWarerhouse(); + String erpWarehous = configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WAREHOUS"); + String useCustOrderNo = configService.getCfgValue(orderManagement.getOrganizeCode(), "USE_CUST_ORDER_NO"); + + MesJisShipping jisShipping = new MesJisShipping(); + BeanUtils.copyProperties(orderManagement, jisShipping); + BeanUtils.copyProperties(orderManagementDetail, jisShipping); + jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode()); + jisShipping.setShippingTime(TimeTool.getNowTime(true)); + jisShipping.setErpWarerhouse(warerhouse); + jisShipping.setErpWarehous(erpWarehous); + jisShipping.setDock(orderManagement.getSendDockCode()); + jisShipping.setCusCode(orderManagement.getCustCode()); + jisShipping.setCusDock(orderManagement.getCustDockCode()); + jisShipping.setCustOrderNo(useCustOrderNo); + // 20241115 没有给carNo赋值 + jisShipping.setCarNo(orderManagementDetail.getVin()); + jisShipping.setSerialNumber(orderManagementDetail.getBarcode()); + jisShipping.setQuantityPerCar(1d); + jisShipping.setPartNo(orderManagementDetail.getPartNo()); + jisShipping.setOffTime(TimeTool.getNowTime(true)); + jisShipping.setShippingOrderCode(orderManagement.getShippingCode()); + jisShipping.setFid(UUID.randomUUID().toString()); + jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelInitialize(jisShipping, userName); + return jisShipping; + } + + public MesJisShipping getMesJisShipping(MesShippingOrderManagement orderManagement,MesShippingOrderManagementDetail detail, String srcLocateNo, MesWorkOrderPart orderPart, String userName) { + MesJisShipping jisShipping = new MesJisShipping(); + BeanUtils.copyProperties(orderManagement, jisShipping, MesExtConstWords.ID); + BeanUtils.copyProperties(detail, jisShipping, MesExtConstWords.ID); + jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode()); + jisShipping.setShippingTime(TimeTool.getNowTime(true)); + jisShipping.setErpWarerhouse(srcLocateNo); + jisShipping.setErpWarehous(srcLocateNo); + jisShipping.setDock(orderManagement.getSendDockCode()); + jisShipping.setCusCode(orderManagement.getCustCode()); + jisShipping.setCusDock(orderManagement.getCustDockCode()); + jisShipping.setCustOrderNo(detail.getCustOrderNo()); + // 子零件信息赋值 + jisShipping.setPartNo(orderPart.getPartNo()); + jisShipping.setUnit(orderPart.getItemUnit()); + // 20241115 没有给carNo赋值 + jisShipping.setCarNo(detail.getVin()); + jisShipping.setSerialNumber(orderPart.getWorkOrderNo()); + jisShipping.setQuantityPerCar(orderPart.getItemQty()); + jisShipping.setOffTime(TimeTool.getNowTime(true)); + jisShipping.setShippingOrderCode(orderManagement.getShippingCode()); + jisShipping.setFid(UUID.randomUUID().toString()); + jisShipping.setRemark(null); + jisShipping.setDescription(null); + jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelInitialize(jisShipping, userName); + return jisShipping; + } + + @Override public void doShippingBack(Long[] idList, String organizeCode, String userName) { List detailList = getManagementDetails(idList, organizeCode, userName); if (CollectionUtils.isEmpty(detailList)) MesException.throwMesBusiException("选择数据无效,请检查"); @@ -113,6 +342,7 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager) { List modelList=new ArrayList<>(); List shippingDetails = shippingOrderManagementDetailDao.queryMesShippingOrderManagementDetail(bean); @@ -140,4 +370,80 @@ 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(workOrder.getCustSn())) { + MesException.throwMesBusiException("工单【%s】不存在客户条码", workOrder.getWorkOrderNo()); + } + 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); + if (itemPart == null) { + continue; + } + MesMoveRule moveRule = mesMoveRuleMap.get(itemPart.getEsd()); + if (moveRule != null && 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); + } + + MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(organizeCode, workOrder.getCustSn()); + if (mesProduceSn != null) { + //更新条码状态为完成 + 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.setBarcode(workOrder.getWorkOrderNo() + "," + workOrder.getCustSn()); + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + detail.setRemark("cockpit发运处理"); + ConvertBean.serviceModelUpdate(detail, userName); + shippingOrderDetailRepository.update(detail); + } } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesHandleShippingErrorModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesHandleShippingErrorModel.java new file mode 100644 index 0000000..0d48379 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesHandleShippingErrorModel.java @@ -0,0 +1,11 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import lombok.Data; + +@Data +public class MesHandleShippingErrorModel { + private MesShippingOrderManagementDetail detail; + private MesWorkOrder workOrder; +}