From 40ae22240f73a77a4738f5f2c2821d4017c20685 Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 14 Mar 2025 18:04:35 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=88=90=E9=83=BD=E5=8F=91=E8=BF=90?= =?UTF-8?q?=EF=BC=8C=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesSortShippingCheckService.java | 3 + .../busi/MesSortShippingCheckController.java | 43 ++++ .../busi/MesSortShippingCheckService.java | 21 ++ ...eckVolvoRackNoAndPartNoStrategyServiceImpl.java | 247 +++++++++++++++++++++ .../pcn/pojo/model/MesSortShippingCheckModel.java | 3 + 5 files changed, 317 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java 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 817a563..3bbbb53 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 @@ -20,6 +20,9 @@ public interface IMesSortShippingCheckService { @ApiOperation(value = "扫描发运单") MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement); + @ApiOperation(value = "保存料架条码") + MesSortShippingCheckModel saveRackNo(MesSortShippingCheckModel model, String organizeCode, String userInfo); + @ApiOperation(value = "保存条码") MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java index 27a535d..b70880c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java @@ -94,6 +94,49 @@ public class MesSortShippingCheckController { } } + @PostMapping("/scan-rack-no") + @ApiOperation(value = "扫描料架条码") + public ResultBean saveRackNo(@RequestBody MesSortShippingCheckModel model) { + Boolean lockFlg = false; + String moduleKey = null; + String organizeCode = null; + String userInfo = null; + try { + + if (StringUtils.isEmpty(model.getVolvoRackNo())) MesPcnException.throwBusiException("请扫描料架号!"); + + organizeCode = !StringUtils.isEmpty(model.getOrganizeCode()) ? model.getOrganizeCode() : AuthUtil.getOrganize().getOrganizeCode(); + + userInfo = !StringUtils.isEmpty(model.getUserInfo()) ? model.getUserInfo() : AuthUtil.getSessionUser().getUserName(); + + moduleKey = organizeCode + key + "VOLVO_RACK_NO:" + model.getVolvoRackNo(); + + log.info("工厂:{} 排序发运扫描料架条码 --- {} --- START --- 操作人:{} --- THREAD:{}", organizeCode, moduleKey, userInfo, Thread.currentThread().getName()); + + //加锁 + lockFlg = redisLockUtil.redisLock(moduleKey); + + log.info("工厂:{} 排序发运扫描料架条码 --- {} --- LOCKED --- 操作人:{} --- THREAD:{}", organizeCode, moduleKey, userInfo, Thread.currentThread().getName()); + + // 数据校验 + ValidatorBean.checkNotNull(model.getShippingCode(), "发运单不能为空"); + ValidatorBean.checkNotNull(model.getDetailList(), "发运明细不能为空"); + + sortShippingCheckService.saveRackNo(model, organizeCode, userInfo); + return ResultBean.success("查询成功").setResultObject(model); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + //解锁 + if (lockFlg) { + redisLockUtil.redisUnLock(lockFlg, moduleKey); + log.info("工厂:{} 排序发运扫描位置码 --- {} --- UNLOCK --- 操作人:{} --- THREAD:{}", organizeCode, moduleKey, userInfo, Thread.currentThread().getName()); + } + } + } + @PostMapping("/scan-sn") @ApiOperation(value = "扫描条码") public ResultBean saveSn(@RequestBody MesSortShippingCheckModel model) { 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 23e022c..a9b3f87 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 @@ -117,6 +117,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Autowired private IMesProduceSnExtService mesProduceSnExtService; + @Autowired + private MesVolvoRackRepository mesVolvoRackRDao; + @Override public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) { //校验发运单 @@ -149,6 +152,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } @Override + public MesSortShippingCheckModel saveRackNo(MesSortShippingCheckModel model, String organizeCode, String userInfo) { + checkVolvoRack(model, organizeCode); + return model; + } + + @Override public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model) { //校验发运单是否存在 MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); @@ -239,6 +248,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService scanFlg = true; detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); detail.setBarcode(produceSn.getSerialNumber()); + detail.setPartPosition(model.getLocationCode()); + shippingOrderManagementDetailRepository.update(detail); break; } } @@ -492,6 +503,16 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } + private void checkVolvoRack(MesSortShippingCheckModel model, String organizeCode) { + //校验发运单是否存在 + DdlPackBean rackPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getVolvoRackNo(), "barCode", rackPackBean); + MesVolvoRack volvoRack = mesVolvoRackRDao.getByProperty(rackPackBean); + if (volvoRack == null) { + throw new ImppBusiException(String.format("无效料架条码【%s】,请重新扫描!", model.getVolvoRackNo())); + } + } + private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model) { //校验发运单是否存在 DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java new file mode 100644 index 0000000..ee30ad7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java @@ -0,0 +1,247 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.shippingscan.strategy; + +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.util.MesPcnExtConstWords; +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.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.MesPartShippingGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +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.MesCustomerPartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import groovy.util.logging.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Description : 扫描条码 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/25 10:54 + * @Modify: + **/ +@Service +@Slf4j +public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements IMesShippingScanStrategyService { + @Autowired + private MesShippingOrderManagementRepository shippingOrderManagementRepository; + @Autowired + private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + @Autowired + private MesProduceSnRepository produceSnRepository; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Autowired + private MesCustomerPartRepository mesCustomerPartRepository; + + @Autowired + private IMesConfigService mesConfigService; + + @Autowired + private IMesPartShippingGroupService mesPartShippingGroupService; + + @Autowired + private IMesShippingSnUniqueService mesShippingSnUniqueService; + + @Override + public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { + //校验条码 + MesProduceSn produceSn = checkSn(model); + boolean scanFlg = false; + for (MesShippingOrderManagementDetail detail : model.getDetailList()) { + if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { + //校验发运明细 + checkShippingDetails(model, orderManagement, shippingGroup, produceSn, detail); + scanFlg = true; + //明细更新 + updateOrderManagementDetails(produceSn, orderManagement, detail, model.getUserInfo()); + break; + } + } + if (!scanFlg) { + throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); + } + model.setMsg(String.format("条码【%s】扫描完成,请扫描下一个条码", model.getSn())); + return model; + } + + private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) { + + + //校验发运单明细顺序 + if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) { + Optional first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if (first.isPresent()) { + throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq())); + } + } + //判断是否需要排序校验 默认排序则需要校验 + if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && !Objects.isNull(MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.valueOfDescription(orderManagement.getScanSeqWay()))) { + //按照页面显示顺序校验 + Optional nextShippingDetail = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if (nextShippingDetail.isPresent() && !StringUtils.isEmpty(nextShippingDetail.get().getPartTypeCode()) && !nextShippingDetail.get().getPartNo().equals(produceSn.getPartNo())) { + throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); + } + } + + //校验客户零件信息是否存在 (默认需要验证, 值可能是[空/0/20]) + if (StringUtils.isEmpty(shippingGroup.getScanMethodJudgment()) || !shippingGroup.getScanMethodJudgment().equals(MesExtEnumUtil.SHIPPING_GROUP_SCAN_METHOD_JUDGMENT.PART_NO.getValueStr())) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean); + DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean); + if (!mesCustomerPartRepository.isExitByHql(packBean)) { + throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(), detail.getCustPartNo())); + } + } + + } + + private MesProduceSn checkSn(MesSortShippingCheckModel model) { + //校验条码是否重复扫描 (不区分大小写) + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equalsIgnoreCase(model.getSn())).findFirst(); + if (optional.isPresent()) { + throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); + if (!StringUtils.isEmpty(produceSn)) { + //校验状态 + checkStatus(model, produceSn); + } else { + //外部条码解析 + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model); + //封装信息 + produceSn = new MesProduceSn(); + produceSn.setSerialNumber(model.getSn()); + produceSn.setProductSn(model.getSn()); + produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo()); + produceSn.setOrganizeCode(model.getOrganizeCode()); + } + return produceSn; + } + + private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) { + //校验产品条码状态 必须是状态为已下线条码 + if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), + MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(), MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); + } + //校验产品质量状态 必须是状态为合格条码 + List statusList = Stream.of(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()).collect(Collectors.toList()); + if (!statusList.contains(produceSn.getQcStatus())){ + throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()), + MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription())); + } + } + + private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) { + //外部解析条码长度卡控 + String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH); + if (Integer.parseInt(cfgValue) < model.getSn().length()) { + MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位,请检查数据!", model.getSn(), cfgValue); + } + //唯一性校验 + if (mesShippingSnUniqueService.checkMesShippingSnUnique(model.getOrganizeCode(),model.getSn())) { + throw new ImppBusiException(String.format("【%s】条码唯一性校验数据已存在,请检查数据!", model.getSn())); + } + //发运组代码不存在 + if (Objects.isNull(model.getMesPartShippingGroup())) { + MesPcnException.throwMesBusiException("发运组信息不存在,请检查数据!"); + } + List detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList()); + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null; + for (MesShippingOrderManagementDetail managementDetail : detailList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean); + DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean); + if (checkMesPartShippingGroupDetailRule(model, managementDetail) && mesCustomerPartRepository.isExitByHql(packBean)) { + mesShippingOrderManagementDetail = managementDetail; + break; + } + } + if (Objects.isNull(mesShippingOrderManagementDetail)) { + throw new ImppBusiException(String.format("【%s】此条码未匹配到数据,请检查数据!", model.getSn())); + } + return mesShippingOrderManagementDetail; + } + + private void updateOrderManagementDetails(MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, String userInfo) { + if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + detail.setBarcode(produceSn.getProductSn()); + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + detail.setRemark("扫描完成"); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + + //若发运单状态为创建或发布 则写入开始扫描时间 + if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { + orderManagement.setStartScanTime(TimeTool.getNowTime(true)); + } + + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(orderManagement, userInfo); + update(orderManagement); + + detail.setActualQty(1); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(detail, userInfo); + updateDetail(detail); + //内部条码更新条码状态 + if (!Objects.isNull(produceSn.getId())) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(produceSn, userInfo); + produceSnExtService.update(produceSn); + }else{ + //记录唯一性校验表 + mesShippingSnUniqueService.insertMesShippingSnUnique(orderManagement.getOrganizeCode(),detail.getBarcode(),orderManagement.getShippingCode(),userInfo); + } + } + } + } + + @MonitorLog + public void update(MesShippingOrderManagement item) { + shippingOrderManagementRepository.update(item); + } + + @MonitorLog + public void updateDetail(MesShippingOrderManagementDetail item) { + shippingOrderManagementDetailRepository.update(item); + } + + private Boolean checkMesPartShippingGroupDetailRule(MesSortShippingCheckModel model, MesShippingOrderManagementDetail managementDetail) { + MesPartShippingGroupDetail mesPartShippingGroupDetail = mesPartShippingGroupService.getMesPartShippingGroupDetail(model.getOrganizeCode(), model.getMesPartShippingGroup().getShippingGroupCode(), managementDetail.getPartNo(), managementDetail.getCustPartNo()); + return !Objects.isNull(mesPartShippingGroupDetail) && !StringUtil.isEmpty(mesPartShippingGroupDetail.getSnRule()) && ((Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(model.getOrganizeCode(), model.getSn(), mesPartShippingGroupDetail.getSnRule(), mesPartShippingGroupDetail.getSnRule()).get(MesPcnExtConstWords.RESULT)); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java index aea5c1f..87a2b8a 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java @@ -54,6 +54,9 @@ public class MesSortShippingCheckModel { @ApiParam("提示引导信息") private String msg; + @ApiParam("料架条码") + private String volvoRackNo; + public void setDetailList(List detailList) { this.detailList = detailList; this.isScanCount = (int) detailList.stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count(); From ab2a49e0c88e99fd946c479150de55d9858b1bf2 Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 14 Mar 2025 21:48:16 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=88=90=E9=83=BD=E5=8F=91=E8=BF=90?= =?UTF-8?q?=EF=BC=8C=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java | 1 + 1 file changed, 1 insertion(+) 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 a9b3f87..11af897 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 @@ -138,6 +138,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } //发运单号 model.setShippingCode(orderManagement.getShippingCode()); + model.setVolvoRackNo(orderManagement.getRackNo()); //零件发运组 model.setMesPartShippingGroup(getMesPartShippingGroup(orderManagement.getOrganizeCode(),orderManagement.getShippingGroupCode())); //发运单明细 From 1d689e80758cccce254cef734039361e1d7fbba4 Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 17 Mar 2025 03:09:55 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=88=90=E9=83=BD=E5=8F=91=E8=BF=90?= =?UTF-8?q?=EF=BC=8C=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesShippingLoadingCheckService.java | 15 +++- .../busi/MesSortShippingCheckService.java | 80 ++++++++++++++++----- ...eckVolvoRackNoAndPartNoStrategyServiceImpl.java | 83 +++++++++++++++++----- 3 files changed, 142 insertions(+), 36 deletions(-) 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 8149389..3985f03 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 @@ -157,6 +157,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS }else{ //校验发运单是否存在 checkLoadingList(model, organizeCode, loadingList); +// checkdddLoadingList(model, organizeCode, loadingList); //查询零件发运组 MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, loadingList.getPartShippingGroupCode()); boolean scanflg = false; @@ -184,8 +185,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误,请检查数据!", model.getShippingCode())); } } - //更新页面状态 - updateLoadingListDetail(model, userInfo, loadingList, loadingListDetail,"扫描完成",MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),userInfo); //根据扫描的装车单找到是否先装车配置 //若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。 @@ -193,10 +192,13 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(loadingListDetail.getShippingId(),"id",packBean); MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(packBean); - if (!StringUtils.isEmpty(orderManagement)) { + if (orderManagement == null || orderManagement.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()) { throw new ImppBusiException(String.format("【%s】此装车单中发运单为【%s】,还未做完【排序发运校验】,请检查数据", model.getShippingCode(), loadingListDetail.getShippingCode())); } } + + //更新页面状态 + updateLoadingListDetail(model, userInfo, loadingList, loadingListDetail,"扫描完成",MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),userInfo); scanflg = true; break; } @@ -251,6 +253,13 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS } } + private void checkdddLoadingList(MesShippingLoadingCheckModel model, String organizeCode, MesLoadingList loadingList) { + DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", orderDetailPackBean); + List vehiclesOrderDetails = vehiclesOrderDetailRepository.findByHqlWhere(orderDetailPackBean); + model.setDetailList(vehiclesOrderDetails); + } + private void updateLoadingListDetail(MesShippingLoadingCheckModel model, String userInfo, MesLoadingList loadingList, MesLoadingListDetail loadingListDetail, String tempStatusVal, Integer status,String userName) { if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == status){ loadingListDetail.setScanSn(model.getShippingCode()); 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 11af897..f854e16 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 @@ -17,12 +17,11 @@ 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.MesLoadingList; -import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; -import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; -import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.bean.edi.cd.MesCimVolvoJisRackIdDetail; +import cn.estsh.i3plus.pojo.mes.bean.shipping.*; import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.edi.cd.MesCimVolvoJisRackIdDetailRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; @@ -119,6 +118,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Autowired private MesVolvoRackRepository mesVolvoRackRDao; + @Autowired + private MesCustSoftInfoRepository custSoftInfoRDao; + @Autowired + private MesCimVolvoJisRackIdDetailRepository rackIdDetailRDao; @Override public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) { @@ -155,6 +158,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Override public MesSortShippingCheckModel saveRackNo(MesSortShippingCheckModel model, String organizeCode, String userInfo) { checkVolvoRack(model, organizeCode); + MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); + orderManagement.setRackNo(model.getVolvoRackNo()); + shippingOrderManagementRepository.update(orderManagement); return model; } @@ -245,11 +251,33 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. boolean scanFlg = false; for (MesShippingOrderManagementDetail detail : model.getDetailList()) { - if (detail.getPartNo().equals(produceSn.getPartNo())) { + if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getPartPosition())) { scanFlg = true; + String tmpAfterBarCode = model.getLocationCode().replaceAll("\\p{Cc}", ""); + String tmpMidStr = tmpAfterBarCode.replace("[)>061B", ""); + String[] splitStrArray = tmpMidStr.split("1Y"); + if (splitStrArray.length > 0) { + if (StringUtils.isEmpty(orderManagement.getRackNo()) || !orderManagement.getRackNo().contains(splitStrArray[0])) { + throw new ImppBusiException(String.format("料箱类型与顺序不一致,请检查数据")); + } + } + String detailPosition = ddddd(model, detail); + String tmpPosition = tmpAfterBarCode.substring(tmpAfterBarCode.length() - 2); + StringBuilder splitPosition = new StringBuilder(); + for (char c : tmpPosition.toCharArray()) { + if (Character.isDigit(c)) { + splitPosition.append(c); + } + } + //验证位置号 + if (!detailPosition.contentEquals(splitPosition)) { + throw new ImppBusiException(String.format("零件与位置信息不符,请检查数据")); + } + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - detail.setBarcode(produceSn.getSerialNumber()); +// detail.setBarcode(detail.getBarcode() + "," + model.getLocationCode()); detail.setPartPosition(model.getLocationCode()); +// detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue()); shippingOrderManagementDetailRepository.update(detail); break; } @@ -269,6 +297,23 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService return model; } + private String ddddd(MesSortShippingCheckModel model, MesShippingOrderManagementDetail detail) { + MesWorkOrder workOrder = mesWorkOrderService.getWorkOrderNoByCustSn(model.getOrganizeCode(), model.getSn()); + if (workOrder == null || StringUtils.isEmpty(workOrder.getWorkOrderSource())) { + return ""; + } + + MesCustSortInfo custSoftInfo = custSoftInfoRDao.getById(Long.parseLong(workOrder.getWorkOrderSource())); + if (custSoftInfo != null) { + MesCimVolvoJisRackIdDetail rackIdDetail = rackIdDetailRDao.getById(custSoftInfo.getSourceId()); + if (rackIdDetail != null) { + detail.setVisualOrderNo(workOrder.getWorkOrderNo()); + return rackIdDetail.getPosition(); + } + } + return ""; + } + @Override public MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org) { //查询最近扫描完成的装车单号 @@ -282,7 +327,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) { if(StringUtil.isEmpty(org) ||StringUtil.isEmpty(partShippingGroupCode)){ - return null; + throw new ImppBusiException("零件发运组信息不存在,请检查数据!"); } MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode); if(Objects.isNull(shippingGroup)){ @@ -473,10 +518,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private MesProduceSn checkMesProduceSn(MesSortShippingCheckModel model, String org) { //校验条码是否已经扫描 - Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); - if (optional.isPresent()) { - throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); - } +// Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); +// if (optional.isPresent()) { +// throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); +// } DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); @@ -493,10 +538,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) { //校验产品条码状态 必须是状态为已下线条码 - if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { - throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), - MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(),MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); - } +// if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { +// throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), +// MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(),MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); +// } //校验产品质量状态 必须是状态为合格条码 if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()), @@ -504,8 +549,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } + // 判断维护的条码是否和扫描的条码一致 private void checkVolvoRack(MesSortShippingCheckModel model, String organizeCode) { - //校验发运单是否存在 DdlPackBean rackPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getVolvoRackNo(), "barCode", rackPackBean); MesVolvoRack volvoRack = mesVolvoRackRDao.getByProperty(rackPackBean); @@ -596,7 +641,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //更新应急件库位管理库存出库 mesEmergencyLocationService.doShippingStockOutOnline(organizeCode, detail.getVisualOrderNo(), userInfo, true); //条码格式(扫描目视单,扫描条码) - detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString()); +// detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString()); + detail.setBarcode(detail.getBarcode() + "," + detail.getPartPosition()); } } //客供品移库 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java index ee30ad7..628a676 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java @@ -16,12 +16,13 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.edi.cd.MesCimVolvoJisRackIdDetail; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; 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.MesCustomerPartRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.edi.cd.MesCimVolvoJisRackIdDetailRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; @@ -67,19 +68,32 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements @Autowired private IMesShippingSnUniqueService mesShippingSnUniqueService; + @Autowired + private MesWorkOrderRepository workOrderRDao; + @Autowired + private MesCustSoftInfoRepository custSoftInfoRDao; + @Autowired + private MesCimVolvoJisRackIdDetailRepository rackIdDetailRDao; @Override public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { //校验条码 MesProduceSn produceSn = checkSn(model); + MesWorkOrder workOrder = checkWorkOrder(model); + if (!Objects.equals(workOrder.getPartNo(), produceSn.getPartNo())) { + throw new ImppBusiException(String.format("产品条码物料【%s】与工单物料【%s】不一致,请检查数据!", produceSn.getPartNo(), workOrder.getPartNo())); + } boolean scanFlg = false; for (MesShippingOrderManagementDetail detail : model.getDetailList()) { if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { + if (Objects.equals(detail.getVin(), workOrder.getVinCode())) { + throw new ImppBusiException(String.format("产品条码明细【%s】与发运单明细不匹配,请重新扫描!", model.getSn())); + } //校验发运明细 checkShippingDetails(model, orderManagement, shippingGroup, produceSn, detail); scanFlg = true; //明细更新 - updateOrderManagementDetails(produceSn, orderManagement, detail, model.getUserInfo()); + updateOrderManagementDetails(produceSn, orderManagement, detail, workOrder, model.getUserInfo()); break; } } @@ -110,17 +124,41 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements } //校验客户零件信息是否存在 (默认需要验证, 值可能是[空/0/20]) - if (StringUtils.isEmpty(shippingGroup.getScanMethodJudgment()) || !shippingGroup.getScanMethodJudgment().equals(MesExtEnumUtil.SHIPPING_GROUP_SCAN_METHOD_JUDGMENT.PART_NO.getValueStr())) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean); - DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean); - if (!mesCustomerPartRepository.isExitByHql(packBean)) { - throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(), detail.getCustPartNo())); - } - } +// if (StringUtils.isEmpty(shippingGroup.getScanMethodJudgment()) || !shippingGroup.getScanMethodJudgment().equals(MesExtEnumUtil.SHIPPING_GROUP_SCAN_METHOD_JUDGMENT.PART_NO.getValueStr())) { +// DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(detail.getPartNo(), "erpPartNo", packBean); +// DdlPreparedPack.getStringEqualPack(detail.getCustPartNo(), "custPartNo", packBean); +// if (!mesCustomerPartRepository.isExitByHql(packBean)) { +// throw new ImppBusiException(String.format("零件号【%s】客户零件号【%s】关系不存在,请检查数据!", detail.getPartNo(), detail.getCustPartNo())); +// } +// } } + private MesWorkOrder checkWorkOrder(MesSortShippingCheckModel model) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getSn(), "custSn", packBean); + MesWorkOrder workOrder = workOrderRDao.getByProperty(packBean); + if (workOrder == null) { + throw new ImppBusiException(String.format("客户条码【%s】对应的工单号不存在,请检查数据!", model.getSn())); + } + if (workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()) { + throw new ImppBusiException(String.format("工单【%s】状态为已发运,请检查数据!", workOrder.getWorkOrderNo())); + } + if (workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + throw new ImppBusiException(String.format("工单【%s】状态为已发布,请检查数据!", workOrder.getWorkOrderNo())); + } + if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue() && + workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() && + workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()) { + throw new ImppBusiException(String.format("工单【%s】状态为【%s】,请检查数据!", workOrder.getWorkOrderNo(), workOrder.getWorkOrderStatus())); + } + if (Objects.equals(workOrder.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue())) { + throw new ImppBusiException(String.format("工单【%s】的工单标识为空单,请检查数据!", workOrder.getWorkOrderNo())); + } + return workOrder; + } + private MesProduceSn checkSn(MesSortShippingCheckModel model) { //校验条码是否重复扫描 (不区分大小写) Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equalsIgnoreCase(model.getSn())).findFirst(); @@ -192,12 +230,24 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements return mesShippingOrderManagementDetail; } - private void updateOrderManagementDetails(MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, String userInfo) { - if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + private void updateOrderManagementDetails(MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder, String userInfo) { +// if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { detail.setBarcode(produceSn.getProductSn()); detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); detail.setRemark("扫描完成"); + updateDetail(detail); + orderManagement.setCheckSeqCode("1"); + update(orderManagement); + +// MesCustSortInfo custSoftInfo = custSoftInfoRDao.getById(Long.parseLong(workOrder.getWorkOrderSource())); +// if (custSoftInfo != null) { +// MesCimVolvoJisRackIdDetail rackIdDetail = rackIdDetailRDao.getById(custSoftInfo.getSourceId()); +// if (rackIdDetail != null) { +// detail.setPartPosition(rackIdDetail.getPosition()); +// } +// } + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { @@ -214,6 +264,7 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements detail.setActualQty(1); detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + detail.setVisualOrderNo(workOrder.getWorkOrderNo()); ConvertBean.serviceModelUpdate(detail, userInfo); updateDetail(detail); //内部条码更新条码状态 @@ -227,7 +278,7 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements mesShippingSnUniqueService.insertMesShippingSnUnique(orderManagement.getOrganizeCode(),detail.getBarcode(),orderManagement.getShippingCode(),userInfo); } } - } +// } } @MonitorLog From a8568af62693153405020704a5e050075ffcdaa5 Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 17 Mar 2025 10:08:27 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=88=90=E9=83=BD=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesShippingLoadingCheckService.java | 8 -- .../busi/MesSortShippingCheckService.java | 127 +++++++++++++++++++-- .../mes/pcn/pojo/constant/MesCommonConstant.java | 2 + .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 99 ++++++++++++++++ 4 files changed, 216 insertions(+), 20 deletions(-) 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 3985f03..72e07cb 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 @@ -157,7 +157,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS }else{ //校验发运单是否存在 checkLoadingList(model, organizeCode, loadingList); -// checkdddLoadingList(model, organizeCode, loadingList); //查询零件发运组 MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, loadingList.getPartShippingGroupCode()); boolean scanflg = false; @@ -253,13 +252,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS } } - private void checkdddLoadingList(MesShippingLoadingCheckModel model, String organizeCode, MesLoadingList loadingList) { - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", orderDetailPackBean); - List vehiclesOrderDetails = vehiclesOrderDetailRepository.findByHqlWhere(orderDetailPackBean); - model.setDetailList(vehiclesOrderDetails); - } - private void updateLoadingListDetail(MesShippingLoadingCheckModel model, String userInfo, MesLoadingList loadingList, MesLoadingListDetail loadingListDetail, String tempStatusVal, Integer status,String userName) { if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == status){ loadingListDetail.setScanSn(model.getShippingCode()); 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 f854e16..3eb76a0 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 @@ -117,6 +117,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private IMesProduceSnExtService mesProduceSnExtService; @Autowired + private MesShippingQueueRepository shippingQueueRDao; + + @Autowired + private IMesConfigService mesConfigService; + + @Autowired private MesVolvoRackRepository mesVolvoRackRDao; @Autowired private MesCustSoftInfoRepository custSoftInfoRDao; @@ -141,7 +147,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } //发运单号 model.setShippingCode(orderManagement.getShippingCode()); - model.setVolvoRackNo(orderManagement.getRackNo()); //零件发运组 model.setMesPartShippingGroup(getMesPartShippingGroup(orderManagement.getOrganizeCode(),orderManagement.getShippingGroupCode())); //发运单明细 @@ -222,7 +227,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService }else{ //自制件校验前道工艺 零件发运组详情中的优先 MesPartShippingGroupDetail groupDetail = mesPartShippingGroupService.getMesPartShippingGroupDetailByPartNo(organizeCode, shippingGroup.getShippingGroupCode(), produceSn.getPartNo()); - if (null == groupDetail) return true; + if (null == groupDetail) { + return true; + } if (!StringUtils.isEmpty(groupDetail.getFrontProcessCode())){ Integer count = mesProductionRecordService.findFrontProcessProductionRecord(organizeCode, produceSn.getProductSn(), groupDetail.getFrontProcessCode()); if (count > 0){ @@ -248,6 +255,40 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService MesProduceSn produceSn = checkMesProduceSn(model, organizeCode); //校验发运单是否存在 MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); + final String confirmPartType = getConfirmPartType(orderManagement); + if (Objects.equals(confirmPartType, String.valueOf(MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.SHIPPING_GROUP_CONFIRM_PART_TYPE_50.getValue()))) { + return saveChengDuSnAndLocationCode(model, organizeCode, userInfo); + } + //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. + boolean scanFlg = false; + for (MesShippingOrderManagementDetail detail : model.getDetailList()) { + if (detail.getPartNo().equals(produceSn.getPartNo())) { + scanFlg = true; + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setBarcode(produceSn.getSerialNumber()); + break; + } + } + + if (!scanFlg) { + throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); + } + + Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).count(); + + //当前发运单全部扫描完成 + if (count.intValue() == model.getDetailList().size()) { + //保存数据库 + saveDate(orderManagement, model, organizeCode, userInfo); + } + return model; + } + + private MesSortShippingCheckModel saveChengDuSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo) { + //校验条码 + MesProduceSn produceSn = checkMesProduceSn(model, organizeCode); + //校验发运单是否存在 + MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. boolean scanFlg = false; for (MesShippingOrderManagementDetail detail : model.getDetailList()) { @@ -281,6 +322,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService shippingOrderManagementDetailRepository.update(detail); break; } + + final String confirmPartType = getConfirmPartType(orderManagement); } if (!scanFlg) { @@ -425,10 +468,22 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } private List getMesShippingOrderManagementDetails(MesShippingOrderManagement orderManagement,MesPartShippingGroup mesPartShippingGroup) { + //45550 PDA-MES-PDA发运扫描排序方式修改 + List shippingBusiSoftCfgList = mesConfigService.getConfigList(orderManagement.getOrganizeCode(), + MesCommonConstant.SHIPPING_BUSI_SOFT_CFG, mesPartShippingGroup.getShippingGroupCode(), null); DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderDetailPackBean); DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),"status",orderDetailPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"custInfoSeq"}, orderDetailPackBean); + if (CollectionUtils.isEmpty(shippingBusiSoftCfgList)) { + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"custInfoSeq"}, orderDetailPackBean); + }else { + MesConfig mesConfig = shippingBusiSoftCfgList.get(0); + if (!Objects.isNull(mesConfig) && + !StringUtils.isEmpty(mesConfig.getCfgValue()) && + "logic_seq".equals(mesConfig.getCfgValue())) { + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"logicSeq"}, orderDetailPackBean); + } + } List detailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderDetailPackBean); if(CollectionUtils.isEmpty(detailList)){ throw new ImppBusiException(String.format("发运单【%s】明细信息不存在,请检查数据!", orderManagement.getShippingCode())); @@ -538,10 +593,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) { //校验产品条码状态 必须是状态为已下线条码 -// if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { -// throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), -// MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(),MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); -// } + if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() && produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】或【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), + MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription(),MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getDescription())); + } //校验产品质量状态 必须是状态为合格条码 if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()), @@ -612,6 +667,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //查询条码信息 Map> produceSnByCustSnMap = getProduceSnByCustSnMap(orderManagement.getIsEnableMemory(), organizeCode, detailList.stream().map(MesShippingOrderManagementDetail::getBarcode).filter(barCode -> !StringUtil.isEmptyAndNull(barCode)).collect(Collectors.toList())); + final String confirmPartType = getConfirmPartType(orderManagement); List produceSnList = new ArrayList<>(); List workOrderNoList = new ArrayList<>(); List mesShippingSnUniqueList = new ArrayList<>(); @@ -640,9 +696,16 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService workOrderNoList.add(detail.getVisualOrderNo()); //更新应急件库位管理库存出库 mesEmergencyLocationService.doShippingStockOutOnline(organizeCode, detail.getVisualOrderNo(), userInfo, true); - //条码格式(扫描目视单,扫描条码) -// detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString()); - detail.setBarcode(detail.getBarcode() + "," + detail.getPartPosition()); + // 保存到发运队列,后续发运单的条码会拼接,而保存到发运队列中的为拼接前的数据,因此要在拼接前调用。 + saveShippingQueue(orderManagement, detail, userInfo); + if (!Objects.equals(confirmPartType, String.valueOf(MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.SHIPPING_GROUP_CONFIRM_PART_TYPE_40.getValue()))) { + if (Objects.equals(confirmPartType, String.valueOf(MesExtEnumUtil.SHIPPING_GROUP_CONFIRM_PART_TYPE.SHIPPING_GROUP_CONFIRM_PART_TYPE_50.getValue()))) { + detail.setBarcode(detail.getBarcode() + "," + detail.getPartPosition()); + } else { + //条码格式(扫描目视单,扫描条码) + detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString()); + } + } } } //客供品移库 @@ -685,7 +748,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService DdlPreparedPack.getNumEqualPack(orderManagement.getLoadingListId(),"pid",orderManagementPackBean); DdlPreparedPack.getNumberSmallerEqualPack(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(),"status",orderManagementPackBean); List listDetails = vehiclesOrderDetailRepository.findByHqlWhere(orderManagementPackBean); - if(CollectionUtils.isEmpty(listDetails)) return; + if(CollectionUtils.isEmpty(listDetails)) { + return; + } List shippingCodeList = listDetails.stream().map(MesLoadingListDetail::getShippingCode).collect(Collectors.toList()); orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -759,6 +824,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService return rule; } + @Override public List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,List shippingOrderManagementDetails,String userName) { if (CollectionUtils.isEmpty(shippingOrderManagementDetails)) { DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode()); @@ -783,7 +849,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } private void updateShippingOrderDetails(String organizeCode, String userName, long id) { - if(StringUtils.isEmpty(id) || StringUtils.isEmpty(organizeCode)) return; + if(StringUtils.isEmpty(id) || StringUtils.isEmpty(organizeCode)) { + return; + } DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(id, "pid",packBean); shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, @@ -835,4 +903,39 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } } } + + private void saveShippingQueue(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, String userInfo) { + if (StringUtil.isEmpty(detail.getVin())) { + MesPcnException.throwMesBusiException("发运单【%s】零件号【%s】vin号为空,请检查数据", orderManagement.getShippingCode(), detail.getPartNo()); + } + final boolean matchCfgValue = mesConfigService.checkCfgValueIsContainItem(orderManagement.getOrganizeCode(), MesPcnExtConstWords.MES_SHIPPING_QUEUE_SAVE_CFG, null, null, ",", orderManagement.getShippingGroupCode()); + if (!matchCfgValue) { + return; + } + + MesShippingQueue mesShippingQueue = new MesShippingQueue(); + mesShippingQueue.setOrganizeCode(orderManagement.getOrganizeCode()); + mesShippingQueue.setShippingCode(orderManagement.getShippingCode()); + mesShippingQueue.setShippingGroupCode(orderManagement.getShippingGroupCode()); + mesShippingQueue.setShippingType(orderManagement.getShippingType()); + mesShippingQueue.setWorkOrderNo(detail.getVisualOrderNo()); + mesShippingQueue.setCustSn(detail.getBarcode()); + mesShippingQueue.setPartNo(detail.getPartNo()); + mesShippingQueue.setPartName(detail.getPartName()); + mesShippingQueue.setVin(detail.getVin()); + mesShippingQueue.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + ConvertBean.serviceModelInitialize(mesShippingQueue, userInfo); + shippingQueueRDao.insert(mesShippingQueue); + } + + private String getConfirmPartType(MesShippingOrderManagement orderManagement) { + if (StringUtils.isEmpty(orderManagement.getShippingGroupCode())) { + return ""; + } + MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode()); + if (shippingGroup == null) { + return ""; + } + return shippingGroup.getConfirmPartType(); + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java index 23b074f..455530b 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java @@ -32,5 +32,7 @@ public class MesCommonConstant { //报工条码规则 public static final String REPORT_SN = "REPORT_SN"; + //PDA发运校验-排序字段参数配置 + public static final String SHIPPING_BUSI_SOFT_CFG = "SHIPPING_BUSI_SOFT_CFG"; } 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 076b45f..496506a 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 @@ -85,6 +85,8 @@ public class MesPcnExtConstWords { // 零件名称 public static final String PART_NAME = "partName"; // 设备代码 + public static final String EQUIP_CODE = "equipCode"; + // 设备代码 public static final String EQUIPMENT_CODE = "equipmentCode"; // 设备名称 public static final String EQUIPMENT_NAME = "equipmentName"; @@ -246,6 +248,8 @@ public class MesPcnExtConstWords { public static final String CUST_ORDER_NO = "custOrderNo"; //包装条码 public static final String PACKAGE_NO = "packageNo"; + //包装一维码 + public static final String PACKAGE_ONE_CODE = "packageOneCode"; //包条码 public static final String PACKAGE_SN = "packageSn"; //包类型 @@ -323,6 +327,60 @@ public class MesPcnExtConstWords { public static final String UNIT = "unit"; //包装规格数量 public static final String PACK_SPEC_QTY = "packSpecQty"; + //动态列名 + public static final String ATTR_BEAN_LIST = "ATTR_BEAN_LIST"; + //支持允许前端开窗选零件 + public static final String IS_SELECT_PART = "IS_SELECT_PART"; + //点检类型 + public static final String SPOT_CHECK_ITEM_TYPE = "spotCheckItemType"; + //点检项目ID + public static final String SPOT_CHECK_ID = "spotCheckId"; + //设定值录入方式 + public static final String SET_VALUE_RECORD_TYPE = "setValueRecordType"; + //实际值录入方式 + public static final String REAL_VALUE_RECORD_TYPE = "realValueRecordType"; + //设定值数值 + public static final String SPOT_CHECK_SET_VALUE = "spotCheckSetValue"; + //实际值数值 + public static final String SPOT_CHECK_REAL_VALUE = "spotCheckRealValue"; + //是否超差 + public static final String IS_TOLERANCE = "isTolerance"; + //点检结果 + public static final String SPOT_CHECK_RESULT = "spotCheckResult"; + //点检单据结果 + public static final String SPOT_CHECK_ORDER_RESULT = "spotCheckOrderResult"; + //点检单据时间 + public static final String SPOT_CHECK_TIME = "spotCheckTime"; + //点检人 + public static final String SPOT_CHECK_USER = "spotCheckUser"; + //发运组代码 + public static final String SHIPPING_GROUP_CODE = "shippingGroupCode"; + //发运单代码 + public static final String SHIPPING_CODE = "shippingCode"; + //最后打印时间 + public static final String LAST_PRINT_TIME = "lastPrintTime"; + //发运组名称 + public static final String SHIPPING_GROUP_NAME = "shippingGroupName"; + //队列状态 + public static final String QUEUE_STATUS = "queueStatus"; + //目标工位 + public static final String TARGET_WORK_CELL_CODE = "targetWorkCellCode"; + //工艺顺序号 + public static final String PROCESS_SEQ = "processSeq"; + //工艺顺序号(上面) + public static final String PROCESS_SEQ_UP = "processSeqUp"; + //工艺顺序号(下面) + public static final String PROCESS_SEQ_DOWN = "processSeqDown"; + //推送来源代码 + public static final String PUSH_SOURCE_CODE = "pushSourceCode"; + //业务类型 + public static final String BUSI_TYPE = "busiType"; + //当前页数 + public static final String CURRENT_PAGE = "currentPage"; + //页面数量 + public static final String PAGE_SIZE = "pageSize"; + //枚举代码 + public static final String ENUM_CODE = "enumCode"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) @@ -409,6 +467,12 @@ public class MesPcnExtConstWords { public static final String CONTEXT_UNBINDING_STEP = "CONTEXT_UNBINDING_STEP"; // 零件条码统计OEE共享信息[工步参数] public static final String BARCODE_COUNT_SHARE_INFO = "BARCODE_COUNT_SHARE_INFO"; + //替换起始位置[工步参数] + public static final String REPLACE_INDEX = "replaceIndex"; + //替换长度[工步参数] + public static final String REPLACE_LENGTH = "replaceLength"; + //替换信息[工步参数] + public static final String REPLACE_INFO = "replaceInfo"; // 装配件显示规则配置[工位参数] public static final String ASSEMBLY_SHOW_MR_CFG = "ASSEMBLY_SHOW_MR_CFG"; @@ -430,6 +494,8 @@ public class MesPcnExtConstWords { public static final String ENDLESS_LOOP_READ_TIMES_DEFAULT = "10"; // 所有分屏强制跳过工序密码[工位参数] public static final String MANY_CELL_TRIGGER_JUMP_PROCESS_PWD = "MANY_CELL_TRIGGER_JUMP_PROCESS_PWD"; + // 非排序顺序防错级别配置[工位参数] 1=物料 否则=生产线 + public static final String CHECK_PRODUCT_SEQ_CFG = "CHECK_PRODUCT_SEQ_CFG"; // 工位/工步 参数按钮事件 public static final String FUNCTION_CMD = "FUNCTION_CMD"; @@ -450,6 +516,8 @@ public class MesPcnExtConstWords { public static final String FUNCTION_CHOOSE_CAVITY_ORDER = "FUNCTION_CHOOSE_CAVITY_ORDER"; // 工位参数按钮事件: 选择产成零件(先选腔数, 再选零件) public static final String FUNCTION_CHOOSE_CAVITY_PART = "FUNCTION_CHOOSE_CAVITY_PART"; + // 工位参数按钮事件: 选择发运组 + public static final String FUNCTION_CHOOSE_SHIPPING_GROUP = "FUNCTION_CHOOSE_SHIPPING_GROUP"; // 工位参数按钮事件: 切换工位 public static final String FUNCTION_SWITCH_CELL = "FUNCTION_SWITCH_CELL"; // 工位参数按钮事件: 锁定 @@ -476,8 +544,14 @@ public class MesPcnExtConstWords { public static final Integer FOUR = 4; //7 public static final Integer SEVEN = 7; + //10 + public static final Integer TEN = 10; //14 public static final Integer FOURTEEN = 14; + //49 + public static final Integer FORTY_NINE = 49; + //50 + public static final Integer FIFTY = 50; //60 public static final Integer SIXTY = 60; //100 @@ -578,6 +652,16 @@ public class MesPcnExtConstWords { public static final String PACKAGE_DATA_CONTEXT = "PACKAGE_DATA_CONTEXT"; // 打包规则上下文 public static final String PACKAGE_RULE_CONTEXT = "PACKAGE_RULE_CONTEXT"; + // 设备点检上下文 + public static final String EQUIP_SPOT_CHECK_CONTEXT = "EQUIP_SPOT_CHECK_CONTEXT"; + // 加工不可用规则上下文 + public static final String PROD_RULE_IGNORE_CFG_CONTEXT = "PROD_RULE_IGNORE_CFG_CONTEXT"; + // 推送队列配置上下文 + public static final String QUEUE_PUSH_CFG_CONTEXT = "QUEUE_PUSH_CFG_CONTEXT"; + // 推送队列锁上下文 + public static final String QUEUE_PUSH_LOCK_CONTEXT = "QUEUE_PUSH_LOCK_CONTEXT"; + // 推送队列上下文 + public static final String QUEUE_PUSH_CONTEXT = "QUEUE_PUSH_CONTEXT"; // 上下文: 展示组件数据 public static final String MODULE_CONTENT_CONTEXT = "MODULE_CONTENT_CONTEXT"; @@ -621,6 +705,8 @@ public class MesPcnExtConstWords { public static final String WORK_ORDER_CUT_FG_DATA_CONTEXT = "WORK_ORDER_CUT_FG_DATA_CONTEXT"; // 上下文: 临时数据 public static final String PROD_TEMP_DATA_CONTEXT = "PROD_TEMP_DATA_CONTEXT"; + // 上下文: 发运队列 + public static final String SHIPPING_QUEUE_CONTEXT = "SHIPPING_QUEUE_CONTEXT"; //OPC_API_PARAM @@ -745,6 +831,10 @@ public class MesPcnExtConstWords { public static final String FG_PART_NO = "fgPartNo"; // 打印日期 public static final String PRINT_DATE = "printDate"; + // 生产日期 + public static final String PRODUCT_DATE = "productDate"; + // 生产日期 + public static final String PRODUCT_TIME = "productTime"; // 打印时间 public static final String PRINT_TIME = "printTime"; //替换数 @@ -763,6 +853,8 @@ public class MesPcnExtConstWords { // 车型名称 public static final String CAR_MODEL_NAME = "carModelName"; + // VIN + public static final String VIN = "vin"; // VIN_CODE public static final String VIN_CODE = "vinCode"; // VIN_CODE 后四位 @@ -806,4 +898,11 @@ public class MesPcnExtConstWords { //螺钉包保存生产版本标记 public static final String SAVE_PRODUCT_VERSION_FLAG = "ZFBT"; + //发运组配置后写入mes_shipping_queue + public static final String MES_SHIPPING_QUEUE_SAVE_CFG = "MES_SHIPPING_QUEUE_SAVE_CFG"; + + //SPS拉动单打印模版全局配置 + public static final String PART_PULL_PRINT_TEMPLATE = "PART_PULL_PRINT_TEMPLATE"; + //排序发运全局打印配置 + public static final String SORT_SHIPPING_PRINT_TEMPLATE = "SORT_SHIPPING_PRINT_TEMPLATE"; }