From 0850df73696a05a1eb8ef64d614cac899c251738 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 3 Dec 2024 18:33:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A6=E6=B1=89cockpit=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E9=98=B2=E9=94=99=E6=8C=89=E7=85=A7=E6=95=A3=E4=BB=B6=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesJisShippingService.java | 4 + .../ext/mes/pcn/api/busi/IMesMoveRuleService.java | 4 +- .../mes/pcn/api/busi/IMesProduceSnExtService.java | 6 + .../pcn/api/busi/IMesProductionRecordService.java | 4 + .../pcn/api/busi/IMesSortShippingCheckService.java | 2 +- .../mes/pcn/api/busi/IMesWorkOrderExtService.java | 3 + .../serviceimpl/base/MesPartServiceImpl.java | 14 +- .../busi/MesJisShippingServiceImpl.java | 34 +++++ .../serviceimpl/busi/MesMoveRuleServiceImpl.java | 13 +- .../serviceimpl/busi/MesProduceSnExtService.java | 25 ++++ .../busi/MesProductVersionServiceImpl.java | 7 +- .../busi/MesProductionRecordService.java | 13 ++ .../busi/MesShippingLoadingCheckService.java | 10 +- .../busi/MesSortShippingCheckService.java | 147 +++++++++++++++------ .../serviceimpl/busi/MesWorkOrderExtService.java | 17 +++ .../serviceimpl/busi/MesWorkOrderService.java | 44 ++---- ...sShippingScanSnAndOrderStrategyServiceImpl.java | 7 +- .../mes/pcn/pojo/model/MesSortShippingModel.java | 65 +++++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 8 ++ 19 files changed, 338 insertions(+), 89 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingModel.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java index cfc5ab7..61afbc3 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; @@ -16,6 +17,9 @@ import java.util.List; **/ public interface IMesJisShippingService { + @ApiOperation(value = "发运结果回传") + MesJisShipping getMesJisShipping(MesShippingOrderManagement orderManagement,MesShippingOrderManagementDetail detail, String srcLocateNo, MesWorkOrderPart orderPart, String userName); + @ApiOperation(value = "构筑发运报工数据") List getJisShipping(MesShippingOrderManagement orderManagement, List orderManagementDetailList,String userName); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesMoveRuleService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesMoveRuleService.java index 793f589..69a8c53 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesMoveRuleService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesMoveRuleService.java @@ -15,8 +15,8 @@ import java.util.List; public interface IMesMoveRuleService { @ApiOperation("根据规则代码查询移库规则") - List findMesMoveRuleByPartProdGroupCode(String code, String organizeCode); + List findMesMoveRuleByPartProdGroupCode(String code, String organizeCode,Integer groupType); @ApiOperation("根据规则代码查询移库规则") - List findMesMoveRuleByPartProdGroupCode(List codeList, String organizeCode); + List findMesMoveRuleByPartProdGroupCode(List codeList, String organizeCode,Integer groupType); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java index 740a11f..9d89691 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java @@ -30,6 +30,12 @@ public interface IMesProduceSnExtService { @ApiOperation(value = "根据零件条码查询零件条码信息") Map> getProduceSnMap(String organizeCode, List productSnList); + @ApiOperation(value = "根据零件客户条码查询零件条码信息") + List findProduceSnByCustSn(String organizeCode, List custSnList); + + @ApiOperation(value = "根据零件客户条码查询零件条码信息") + Map> getProduceSnByCustSnMap(String organizeCode, List custSnList); + @ApiOperation(value = "根据生产工单,生产线,工位查询工位队列信息") List getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java index d6c8f3f..7d1aad7 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java @@ -27,6 +27,9 @@ public interface IMesProductionRecordService { @ApiOperation(value = "根据零件条码,物料编码,工序代码,工艺代码查询加工记录信息") List findProductionRecordList(String organizeCode, String productSn, String partNo, String craftCode); + @ApiOperation(value = "根据工单,汇报状态查询加工记录信息") + List findProductionRecordList(String organizeCode, List orderNoList, Integer reportStatus); + void updateProductionRecord(String organizeCode, String userName, String sn); void updateProductionRecord(String organizeCode, String userName, Long id, String errorMsg); @@ -36,4 +39,5 @@ public interface IMesProductionRecordService { @ApiOperation(value = "更新加工记录") void updateProductionRecord(List recordList,String userName,Integer reportStatus,String msg); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java index adedc50..817a563 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java @@ -30,7 +30,7 @@ public interface IMesSortShippingCheckService { MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org); @ApiOperation("保存发运数据") - List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName); + List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,List shippingOrderManagementDetails,String userName); void update(MesShippingOrderManagement item); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java index 123449b..11150ee 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java @@ -47,4 +47,7 @@ public interface IMesWorkOrderExtService { @ApiOperation(value = "根据工单或者客户条码 查询生产工单信息(排序)") BaseBean getWorkOrderSort(String organizeCode, String sn, Boolean isBackOrder); + @ApiOperation(value = "根据工单更新工单状态") + void updateMesWorkOrderOrderStatusShippingByWorkOrderNo(String organizeCode, List workOrderNoList,String userName); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java index 6191816..93dcdb8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java @@ -61,8 +61,11 @@ public class MesPartServiceImpl implements IMesPartService { public List findMesPartByPartNo(List partNoList, String organizeCode) { if(StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(partNoList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - if(partNoList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(),"partNo",packBean); - DdlPreparedPack.getInPackList(partNoList,"partNo",packBean); + if (partNoList.size() == MesPcnExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(), "partNo", packBean); + } else { + DdlPreparedPack.getInPackList(partNoList, "partNo", packBean); + } return mesPartRDao.findByHqlWhere(packBean); } @@ -82,8 +85,11 @@ public class MesPartServiceImpl implements IMesPartService { public List findMesPartSapByPartNo(List partNoList, String organizeCode) { if(StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(partNoList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - if(partNoList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(),"partNo",packBean); - DdlPreparedPack.getInPackList(partNoList,"partNo",packBean); + if(partNoList.size() == MesPcnExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(),"partNo",packBean); + }else{ + DdlPreparedPack.getInPackList(partNoList,"partNo",packBean); + } return mesPartSapRDao.findByHqlWhere(packBean); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java index dc024bc..7b31e7e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java @@ -10,18 +10,21 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; 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.Objects; import java.util.UUID; +import java.util.stream.Collectors; /** * @Description : @@ -40,7 +43,38 @@ public class MesJisShippingServiceImpl implements IMesJisShippingService { @Autowired private IMesConfigService configService; + @Override + public MesJisShipping getMesJisShipping(MesShippingOrderManagement orderManagement,MesShippingOrderManagementDetail detail, String srcLocateNo, MesWorkOrderPart orderPart, String userName) { + MesJisShipping jisShipping = new MesJisShipping(); + BeanUtils.copyProperties(orderManagement, jisShipping, MesPcnExtConstWords.BASE_BEAN_FIELDS); + BeanUtils.copyProperties(detail, jisShipping, MesPcnExtConstWords.BASE_BEAN_FIELDS); + 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.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelInitialize(jisShipping, userName); + return jisShipping; + } + + @Override public List getJisShipping(MesShippingOrderManagement orderManagement, List orderManagementDetailList,String userName) { + orderManagementDetailList = CollectionUtils.isEmpty(orderManagementDetailList) ? orderManagementDetailList : orderManagementDetailList.stream().filter(t -> CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == t.getSaveFlag()).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(orderManagementDetailList)) return null; MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode()); String warerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(orderManagement.getOrganizeCode(), MesPcnExtConstWords.ERP_WARERHOUSE) : mesPartShippingGroup.getSrcWarerhouse(); String erpWarehous = configService.getCfgValue(orderManagement.getOrganizeCode(), MesPcnExtConstWords.ERP_WAREHOUS); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesMoveRuleServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesMoveRuleServiceImpl.java index ff5f1ab..abceda4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesMoveRuleServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesMoveRuleServiceImpl.java @@ -29,19 +29,24 @@ public class MesMoveRuleServiceImpl implements IMesMoveRuleService { private IMesMoveRuleRepository mesMoveRuleRepository; @Override - public List findMesMoveRuleByPartProdGroupCode(String code, String organizeCode) { + public List findMesMoveRuleByPartProdGroupCode(String code, String organizeCode,Integer groupType) { if (StringUtils.isEmpty(code) || StringUtils.isEmpty(organizeCode)) return null; DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(groupType, "groupType", ddlPackBean); DdlPreparedPack.getStringEqualPack(code, "code", ddlPackBean); return mesMoveRuleRepository.findByHqlWhere(ddlPackBean); } @Override - public List findMesMoveRuleByPartProdGroupCode(List codeList, String organizeCode) { + public List findMesMoveRuleByPartProdGroupCode(List codeList, String organizeCode,Integer groupType) { if (CollectionUtils.isEmpty(codeList) || StringUtils.isEmpty(organizeCode)) return null; DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - if (codeList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(codeList.iterator().next(), "code", ddlPackBean); - DdlPreparedPack.getInPackList(codeList, "code", ddlPackBean); + DdlPreparedPack.getNumEqualPack(groupType, "groupType", ddlPackBean); + if (codeList.size() == MesPcnExtConstWords.ONE){ + DdlPreparedPack.getStringEqualPack(codeList.iterator().next(), "code", ddlPackBean); + }else{ + DdlPreparedPack.getInPackList(codeList, "code", ddlPackBean); + } return mesMoveRuleRepository.findByHqlWhere(ddlPackBean); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java index dc94dfb..0708879 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java @@ -102,6 +102,31 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { } + @Override + public List findProduceSnByCustSn(String organizeCode, List custSnList) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(custSnList)) return null; + + custSnList = custSnList.size() == MesPcnExtConstWords.ONE ? custSnList : custSnList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (custSnList.size() == MesPcnExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(custSnList.get(MesPcnExtConstWords.ZERO), MesPcnExtConstWords.CUST_SN, packBean); + } else { + DdlPreparedPack.getInPackList(custSnList, MesPcnExtConstWords.CUST_SN, packBean); + } + + return produceSnRepository.findByHqlWhere(packBean); + } + + @Override + public Map> getProduceSnByCustSnMap(String organizeCode, List custSnList) { + List produceSnList = findProduceSnByCustSn(organizeCode, custSnList); + if(CollectionUtils.isEmpty(produceSnList)) return null; + //先排序再分组 + produceSnList = produceSnList.stream().sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); + return produceSnList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesProduceSn::getCustSn)); + } + //根据生产工单,生产线,工位查询工位队列信息 @Override public List getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductVersionServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductVersionServiceImpl.java index ca5d583..5438561 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductVersionServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductVersionServiceImpl.java @@ -51,8 +51,11 @@ public class MesProductVersionServiceImpl implements IMesProductVersionService { public List findMesProductVersionByPartNo(String organizeCode, List partNoList) { if (CollectionUtils.isEmpty(partNoList) || StringUtils.isEmpty(organizeCode)) return null; DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - if (partNoList.size() == MesPcnExtConstWords.ONE) DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(), "partNo", ddlPackBean); - DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean); + if (partNoList.size() == MesPcnExtConstWords.ONE){ + DdlPreparedPack.getStringEqualPack(partNoList.iterator().next(), "partNo", ddlPackBean); + }else{ + DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean); + } return mesProductVersionRepository.findByHqlWhere(ddlPackBean); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java index 0a802eb..ffd667b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java @@ -84,6 +84,19 @@ public class MesProductionRecordService implements IMesProductionRecordService { } @Override + public List findProductionRecordList(String organizeCode, List orderNoList, Integer reportStatus) { + if(StringUtils.isEmpty(orderNoList) || CollectionUtils.isEmpty(orderNoList) || Objects.isNull(reportStatus)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if(orderNoList.size() == MesPcnExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(orderNoList.iterator().next(),MesPcnExtConstWords.WORK_ORDER_NO,packBean); + } else{ + DdlPreparedPack.getInPackList(orderNoList,MesPcnExtConstWords.WORK_ORDER_NO,packBean); + } + DdlPreparedPack.getNumEqualPack(reportStatus,MesPcnExtConstWords.REPORT_TYPE,packBean); + return productionRecordRepository.findByHqlWhere(packBean); + } + + @Override public void updateProductionRecord(String organizeCode, String userName, String sn) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java index 5d24e8b..8149389 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java @@ -12,6 +12,7 @@ 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.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; @@ -385,9 +386,16 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS //关闭装发运单明细 List mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), shippingCodeList); if (!CollectionUtils.isEmpty(mesShippingOrderManagementList)) { + List shippingList = new ArrayList<>(); //发送数据给wms for (MesShippingOrderManagement mesShippingOrderManagement : mesShippingOrderManagementList) { - jisShippingRepository.saveAll(mesSortShippingCheckService.getMesJisShippings(mesShippingOrderManagement, userName)); + List mesJisShippings = mesSortShippingCheckService.getMesJisShippings(mesShippingOrderManagement, null, userName); + if (!CollectionUtils.isEmpty(mesJisShippings)) { + shippingList.addAll(mesJisShippings); + } + } + if (!CollectionUtils.isEmpty(shippingList)) { + jisShippingRepository.saveAll(shippingList); } //关闭发运单明细 closeShippingOrderDetails(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index f3b6311..436a2df 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -1,12 +1,14 @@ 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.base.IMesPartService; 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; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -26,12 +28,12 @@ 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.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.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -100,6 +102,21 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Autowired private MesShippingSnUniqueRepository mesShippingSnUniqueRepository; + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + @Autowired + private IMesMoveRuleService mesMoveRuleService; + + @Autowired + private IMesPartService mesPartService; + + @Autowired + private IMesProductionRecordService mesProductionRecordService; + + @Autowired + private IMesProduceSnExtService mesProduceSnExtService; + @Override public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) { //校验发运单 @@ -449,6 +466,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean); loadingList = listRepository.getByProperty(packBean); + //反填装车单信息到发运单 if(!Objects.isNull(loadingList)){ orderManagement.setOrderCode(loadingList.getOrderCode()); orderManagement.setLoadingListId(loadingList.getId()); @@ -470,28 +488,26 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService List detailList = model.getDetailList(); Map> custInfoSeqMap = detailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getId)); + //获取工单信息 + MesSortShippingModel sortShippingModel = getMesSortShippingModel(orderManagement.getShippingGroupCode(), organizeCode, detailList.stream().map(MesShippingOrderManagementDetail::getVisualOrderNo).filter(visualOrderNo -> !StringUtil.isEmptyAndNull(visualOrderNo)).collect(Collectors.toList())); + //查询条码信息 + Map> produceSnByCustSnMap = getProduceSnByCustSnMap(orderManagement.getIsEnableMemory(), organizeCode, detailList.stream().map(MesShippingOrderManagementDetail::getBarcode).filter(barCode -> !StringUtil.isEmptyAndNull(barCode)).collect(Collectors.toList())); + List produceSnList = new ArrayList<>(); - List mesWorkOrderList = new ArrayList<>(); + List workOrderNoList = new ArrayList<>(); List mesShippingSnUniqueList = new ArrayList<>(); + List shippingList = new ArrayList<>(); for (MesShippingOrderManagementDetail detail : orderManagementDetailList) { - //根据扫描的条码查询条码是否存在 - packBean = DdlPackBean.getDdlPackBean(organizeCode); - if (!Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){ - List mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getId()); - MesShippingOrderManagementDetail managementDetail = mesShippingOrderManagementDetails.get(0); - detail.setRemark(managementDetail.getRemark()); - detail.setStatus(managementDetail.getStatus()); - detail.setBarcode(managementDetail.getBarcode()); - detail.setVisualOrderNo(managementDetail.getVisualOrderNo()); + if (!Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + BeanUtils.copyProperties(custInfoSeqMap.get(detail.getId()).iterator().next(), detail); } //更新条码信息,更新目视单信息 if(!StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){ - DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "custSn", packBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); - MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); - if(!Objects.isNull(produceSn)){ + if (!Objects.isNull(produceSnByCustSnMap) && produceSnByCustSnMap.containsKey(detail.getBarcode())) { + MesProduceSn produceSn = produceSnByCustSnMap.get(detail.getBarcode()).iterator().next(); produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + produceSn.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY); ConvertBean.serviceModelUpdate(produceSn, userInfo); produceSnList.add(produceSn); } else { @@ -500,19 +516,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } //更新工单 if(!StringUtils.isEmpty(detail.getVisualOrderNo())){ - MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(organizeCode, detail.getVisualOrderNo()); - if(!Objects.isNull(workOrder)){ - workOrder.setShippingTime(TimeTool.getNowTime(true)); - workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); - workOrder.setSystemSyncStatus(CommonEnumUtil.FALSE); - workOrder.setModifyUser(userInfo); - workOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); - mesWorkOrderList.add(workOrder); - } + workOrderNoList.add(detail.getVisualOrderNo()); //更新应急件库位管理库存出库 mesEmergencyLocationService.doShippingStockOutOnline(organizeCode, detail.getVisualOrderNo(), userInfo, true); } } + //客供品移库 + customerSupplyMove(orderManagement, userInfo, sortShippingModel, shippingList, detail); + //条码格式(扫描目视单,扫描条码) if(!StringUtil.isEmpty(detail.getVisualOrderNo())){ detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString()); @@ -529,9 +540,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if(!CollectionUtils.isEmpty(produceSnList)){ produceSnRepository.saveAll(produceSnList); } - //更新工单 - if(!CollectionUtils.isEmpty(mesWorkOrderList)){ - mesWorkOrderExtService.saveAll(mesWorkOrderList); + //更新工单状态为已发运 + if(!CollectionUtils.isEmpty(workOrderNoList)){ + mesWorkOrderExtService.updateMesWorkOrderOrderStatusShippingByWorkOrderNo(organizeCode, workOrderNoList, userInfo); } //更新发运单 ConvertBean.serviceModelUpdate(orderManagement,userInfo); @@ -540,12 +551,15 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){ shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList); } - if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){ + if (StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())) { //发送数据给辊道线 sendShippingFinishedCmd(model, organizeCode); - //保存当前发运单明细报工 - jisShippingRepository.saveAll(getMesJisShippings(orderManagement,userInfo)); - }else{ + //保存当前发运单明细 + List mesJisShippings = getMesJisShippings(orderManagement, orderManagementDetailList, userInfo); + if (!CollectionUtils.isEmpty(mesJisShippings)) { + shippingList.addAll(mesJisShippings); + } + } else { //查询装车单明细 DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(orderManagement.getLoadingListId(),"pid",orderManagementPackBean); @@ -557,13 +571,16 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", orderManagementPackBean); boolean exitByHql = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean); //2.装车单中所有发运单全部变成发运回传 - if(!exitByHql){ + if (!exitByHql) { DdlPackBean jisBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(orderManagement.getOrderCode(), "orderCode", jisBean); List shippingOrderManagementList = shippingOrderManagementRepository.findByHqlWhere(jisBean); for (MesShippingOrderManagement mesShippingOrderManagement : shippingOrderManagementList) { - //保存当前发运单明细报工 - jisShippingRepository.saveAll(getMesJisShippings(mesShippingOrderManagement,userInfo)); + //保存当前发运单明细 + List mesJisShippings = getMesJisShippings(mesShippingOrderManagement, null, userInfo); + if (!CollectionUtils.isEmpty(mesJisShippings)) { + shippingList.addAll(mesJisShippings); + } } //更新装车单 if (!StringUtils.isEmpty(loadingList)) { @@ -574,6 +591,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } } + //发运结果回传 + if(!CollectionUtils.isEmpty(shippingList)){ + jisShippingRepository.saveAll(shippingList); + } } @@ -610,12 +631,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService return rule; } - public List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName) { - DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean); - List shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean); + public List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,List shippingOrderManagementDetails,String userName) { + if (CollectionUtils.isEmpty(shippingOrderManagementDetails)) { + DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean); + shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean); + } //当前装车单所有发运单明细 需要报工的数据 - return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails,userName); + return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails, userName); } @Override @@ -637,4 +660,50 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean); } + + private MesSortShippingModel getMesSortShippingModel(String shippingGroupCode, String organizeCode, List orderNoList) { + MesSortShippingModel sortShippingModel = new MesSortShippingModel(); + if (!CollectionUtils.isEmpty(orderNoList)) { + sortShippingModel.setMesWorkOrderList(mesWorkOrderExtService.getWorkOrderList(organizeCode, orderNoList)); + sortShippingModel.setMesWorkOrderPartList(mesWorkOrderService.findMesWorkOrderPartByOrderNo(organizeCode, orderNoList)); + sortShippingModel.setMesProductionRecordList(mesProductionRecordService.findProductionRecordList(organizeCode, orderNoList, MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue())); + sortShippingModel.setMesMoveRuleList(mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(shippingGroupCode, organizeCode,MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_10.getValue())); + sortShippingModel.setMesPartList(mesPartService.findMesPartByPartNo(sortShippingModel.getPartNoAllList(), organizeCode)); + } + return sortShippingModel; + } + + private Map> getProduceSnByCustSnMap(Integer isEnableMemory, String organizeCode, List custSnList) { + Map> produceSnByCustSnMap = null; + if (!Objects.equals(isEnableMemory, MesCommonConstant.TRUE_INTEGER)) { + produceSnByCustSnMap = mesProduceSnExtService.getProduceSnByCustSnMap(organizeCode, custSnList); + } + return produceSnByCustSnMap; + } + + private void customerSupplyMove(MesShippingOrderManagement orderManagement, String userInfo, MesSortShippingModel sortShippingModel, List shippingList, MesShippingOrderManagementDetail detail) { + if (!StringUtils.isEmpty(detail.getVisualOrderNo()) && !Objects.isNull(sortShippingModel.getMesWorkOrderMap()) && sortShippingModel.getMesWorkOrderMap().containsKey(detail.getVisualOrderNo())) { + MesWorkOrder workOrder = sortShippingModel.getMesWorkOrderMap().get(detail.getVisualOrderNo()); + //散件发运 + if (!Objects.isNull(sortShippingModel.getMesProductionRecordMap()) && sortShippingModel.getMesProductionRecordMap().containsKey(detail.getVisualOrderNo()) && !Objects.isNull(sortShippingModel.getMesWorkOrderPartMap()) && sortShippingModel.getMesWorkOrderPartMap().containsKey(detail.getVisualOrderNo())) { + //标记为总成不记录回传表 + detail.setSaveFlag(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + MesMoveRule moveRule = null; + //移库规则 + for (MesWorkOrderPart orderPart : sortShippingModel.getMesWorkOrderPartMap().get(detail.getVisualOrderNo())) { + MesPart itemPart = Objects.isNull(sortShippingModel.getMesPartMap()) || !sortShippingModel.getMesPartMap().containsKey(orderPart.getPartNo()) ? null : sortShippingModel.getMesPartMap().get(orderPart.getPartNo()); + if (Objects.isNull(itemPart) || StringUtil.isEmpty(itemPart.getEsd()) || Objects.isNull(sortShippingModel.getMesMoveRuleMap()) || !sortShippingModel.getMesMoveRuleMap().containsKey(itemPart.getEsd())) { + log.info("客供品移库零件【{}】维护的ESD属性未匹配到零件发运组【{}】中的移库规则", orderPart.getPartNo(), workOrder.getPartProdGroupCode()); + continue; + } + moveRule = sortShippingModel.getMesMoveRuleMap().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(jisShippingService.getMesJisShipping(orderManagement, detail, moveRule.getErpSrcLocateNo(), orderPart, userInfo)); + } else { + log.info("客供品移库零件【{}】在零件发运组【{}】的移库规则中,汇报类型未维护或不为发运", orderPart.getPartNo(), workOrder.getPartProdGroupCode()); + } + } + } + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java index e5530d5..456af24 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -13,6 +14,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -224,6 +227,20 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService { return isBackOrder ? getWorkOrderSort2Order(organizeCode, sn) : getWorkOrderSort2Ps(organizeCode, sn); } + @Override + public void updateMesWorkOrderOrderStatusShippingByWorkOrderNo(String organizeCode, List workOrderNoList, String userName) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesPcnExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.iterator().next(), MesPcnExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + } + workOrderRepository.updateByProperties( + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.SHIPPING_TIME}, + new Object[]{userName, (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue(), TimeTool.getNowTime(true)}, packBean); + } + private MesWorkOrder getWorkOrderSort2Order(String organizeCode, String sn) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn)) return null; MesProduceSn produceSn; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 84250bb..d9218b8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -568,7 +568,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { })); if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()) { for (Map.Entry> entry : map.entrySet()) { - mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0), productionRecord.getProductSn(), false, map.size())); + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0), productionRecord.getProductSn(), false,false,map.size())); } } else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) { customerSupplyMove(productionRecord, oldMesWorkOrder, mesProductVersion, mesBoms, mesProductOffLineList, mesMoveList, userName); @@ -612,7 +612,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } - private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom,String reportSn,boolean isItemReport,Integer bomSize) { + private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom,String reportSn,boolean isItemReport,boolean saveProductVersionFlag,Integer bomSize) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); BeanUtils.copyProperties(mesBom, newMesProductOffLine, MesPcnExtConstWords.BASE_BEAN_FIELDS); @@ -661,7 +661,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { if (Objects.equals(MesExtEnumUtil.ORDER_TYPE.BTO.getValue(), oldMesWorkOrder.getWorkOrderType())){ newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode()); } - newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); + newMesProductOffLine.setSapWorkCenter(saveProductVersionFlag ? mesProductVersion.getProductVersion() : mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime()); newMesProductOffLine.setProductionRecordId(productionRecord.getId().toString()); @@ -1333,7 +1333,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { public MesWorkOrderSortReportModel initMesWorkOrderSortReportModel(String organizeCode, Integer pageSize, String userName) { MesWorkOrderSortReportModel model = new MesWorkOrderSortReportModel(organizeCode, userName, mesProductionRecordDao.findMesProductionRecordNoReport(organizeCode, MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue(), pageSize,null)); model.setMesWorkOrderList(workOrderExtService.getWorkOrderList(organizeCode, model.getWorkOrderList())); - model.setMesMoveRuleList(mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(model.getPartProdGroupCodeList(), organizeCode)); + model.setMesMoveRuleList(mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(model.getPartProdGroupCodeList(), organizeCode,MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_20.getValue())); model.setMesWorkOrderPartList(findMesWorkOrderPartByOrderNo(organizeCode, model.getWorkOrderList())); model.setMesPartList(iMesPartService.findMesPartByPartNo(model.getPartNoAllList(), organizeCode)); model.setMesPartSapList(iMesPartService.findMesPartSapByPartNo(model.getPartNoAllList(), organizeCode)); @@ -1363,8 +1363,6 @@ public class MesWorkOrderService implements IMesWorkOrderService { isItemReport = true; } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) { isItemMove = true; - } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) { - shippingList.add(getMesJisShipping(model.getOrganizeCode(), workOrder.getWorkOrderNo(), workOrder.getCustCode(), record.getProductSn(), moveRule.getErpSrcLocateNo(), orderPart, model.getUserName())); } else { LOGGER.info("客供品移库零件【{}】在零件生产组【{}】的移库规则中,汇报类型未维护", orderPart.getPartNo(), workOrder.getPartProdGroupCode()); continue; @@ -1385,7 +1383,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { boolean isItemReport; MesMoveRule moveRule; //查询零件生产组的移库规则 - List moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode()); + List moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode(),MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_20.getValue()); if(CollectionUtils.isEmpty(moveRules)) { LOGGER.info("工单:{} 生产组:{}移库规则信息不存在",mesWorkOrder.getWorkOrderNo(),mesWorkOrder.getPartProdGroupCode()); return; @@ -1427,10 +1425,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { //bom下的子节汇报 if (!CollectionUtils.isEmpty(bomList)) { for (MesBom bom : bomList) { - mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, bom, reportSn, true, bomList.size())); + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, bom, reportSn, true, MesPcnExtConstWords.SAVE_PRODUCT_VERSION_FLAG.equals(itemPart.getEsd()), bomList.size())); } } else { - mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, mesBom, reportSn, true, MesPcnExtConstWords.ONE)); + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, mesBom, reportSn, true,false, MesPcnExtConstWords.ONE)); } } //移库 @@ -1448,7 +1446,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //bom下的子节汇报,总成也需要汇报 if (!CollectionUtils.isEmpty(mesProductOffLineList)) { for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom, productionRecord.getProductSn(), false,mesBoms.size())); + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom, productionRecord.getProductSn(), false,false,mesBoms.size())); } } } @@ -1515,9 +1513,11 @@ public class MesWorkOrderService implements IMesWorkOrderService { public List findMesWorkOrderPartByOrderNo(String organizeCode, List workOrderNoList) { if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - if (workOrderNoList.size() == MesPcnExtConstWords.ONE) + if (workOrderNoList.size() == MesPcnExtConstWords.ONE){ DdlPreparedPack.getStringEqualPack(workOrderNoList.iterator().next(), "workOrderNo", packBean); - DdlPreparedPack.getInPackList(workOrderNoList, "workOrderNo", packBean); + }else{ + DdlPreparedPack.getInPackList(workOrderNoList, "workOrderNo", packBean); + } return mesWorkOrderPartRepository.findByHqlWhere(packBean); } @@ -1545,26 +1545,6 @@ public class MesWorkOrderService implements IMesWorkOrderService { return mesProdRuleSortCfg; } - private MesJisShipping getMesJisShipping(String organizeCode, String workOrderNo,String custCode, String productSn, String srcLocateNo, MesWorkOrderPart orderPart,String userName) { - MesJisShipping jisShipping = new MesJisShipping(); - jisShipping.setPartNo(orderPart.getPartNo()); - jisShipping.setUnit(orderPart.getItemUnit()); - jisShipping.setOrganizeCode(organizeCode); - jisShipping.setFactoryCode(organizeCode); - jisShipping.setShippingTime(TimeTool.getNowTime(true)); - jisShipping.setErpWarerhouse(srcLocateNo); - jisShipping.setCusCode(custCode); - jisShipping.setCustOrderNo(workOrderNo); - jisShipping.setShippingOrderCode(workOrderNo); - jisShipping.setSerialNumber(productSn); - jisShipping.setQuantityPerCar(orderPart.getItemQty()); - jisShipping.setOffTime(TimeTool.getNowTime(true)); - jisShipping.setFid(UUID.randomUUID().toString()); - jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelInitialize(jisShipping, userName); - return jisShipping; - } - private MesProductOffLine getMesProductOffLine(MesWorkOrderSortReportModel model, MesProductionRecord record, MesWorkOrder workOrder, MesProductVersion mesProductVersion, MesWorkOrderPart mesWorkOrderPart,boolean isItemReport) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); if(!isItemReport){ diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java index 5316161..425c21c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java @@ -32,6 +32,8 @@ import java.util.Comparator; import java.util.Objects; import java.util.Optional; import java.util.StringJoiner; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 扫描条码和目视单 @@ -258,10 +260,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin produceSnExtService.update(produceSn); } //更新工单状态为发运 - workOrder.setShippingTime(TimeTool.getNowTime(true)); - workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); - ConvertBean.serviceModelUpdate(workOrder, userInfo); - mesWorkOrderExtService.update(workOrder); + mesWorkOrderExtService.updateMesWorkOrderOrderStatusShippingByWorkOrderNo(orderManagement.getOrganizeCode(), Stream.of(workOrder.getWorkOrderNo()).collect(Collectors.toList()), userInfo); } } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingModel.java new file mode 100644 index 0000000..b0371b2 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingModel.java @@ -0,0 +1,65 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.*; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.apache.commons.collections.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.function.Function; +import java.util.stream.Collectors; + +@Data +public class MesSortShippingModel { + + @ApiParam("工单") + private List mesWorkOrderList; + + @ApiParam("工单零件") + private List mesWorkOrderPartList; + + @ApiParam("加工记录") + private List mesProductionRecordList; + + @ApiParam("移库规则") + private List mesMoveRuleList; + + @ApiParam("零件信息") + private List mesPartList; + + public Map getMesWorkOrderMap() { + if (CollectionUtils.isEmpty(mesWorkOrderList)) return null; + return mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); + } + + public Map> getMesWorkOrderPartMap() { + if (CollectionUtils.isEmpty(mesWorkOrderPartList)) return null; + return mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo)); + } + + public Map getMesProductionRecordMap() { + if (CollectionUtils.isEmpty(mesProductionRecordList)) return null; + return mesProductionRecordList.stream().collect(Collectors.toMap(MesProductionRecord::getWorkOrderNo, Function.identity(), (x, y) -> y)); + } + + public List getPartNoAllList() { + List partNoList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(mesWorkOrderPartList)) partNoList.addAll(this.mesWorkOrderPartList.stream().map(MesWorkOrderPart::getPartNo).distinct().filter(t -> !StringUtils.isEmpty(t)).collect(Collectors.toList())); + return partNoList; + } + + public Map getMesPartMap() { + if (CollectionUtils.isEmpty(mesPartList)) return null; + return mesPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.toMap(MesPart::getPartNo, Function.identity(), (x, y) -> y)); + } + + public Map getMesMoveRuleMap() { + if (CollectionUtils.isEmpty(mesMoveRuleList)) return null; + return mesMoveRuleList.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.toMap(MesMoveRule::getSrcType, Function.identity(), (x, y) -> y)); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index c3c9607..871df7f 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -275,6 +275,10 @@ public class MesPcnExtConstWords { public static final String PULL_CODE = "pullCode"; //拉动单号 public static final String PULLING_ORDER_NO = "pullingOrderNo"; + //汇报类型 + public static final String REPORT_TYPE = "reportType"; + //发运时间 + public static final String SHIPPING_TIME = "shippingTime"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) @@ -733,4 +737,8 @@ public class MesPcnExtConstWords { // 工单序号 public static final String WORK_ORDER_SEQ = "workOrderSeq"; + + //螺钉包保存生产版本标记 + public static final String SAVE_PRODUCT_VERSION_FLAG = "ZFBT"; + }