From 49cee1361fcee9c25aa42e8b44a16c4add2aadb9 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 19 Jun 2025 16:49:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=B8=E7=86=9F=E4=B8=8A=E6=96=99=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesContainerSnBindService.java | 3 + .../busi/MesContainerSnBindController.java | 16 ++++ .../busi/MesContainerSnBindServiceImpl.java | 30 +++++++ .../MesFunctionDialogContainerSnBindService.java | 93 ++++++++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogContainerSnBindService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnBindService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnBindService.java index 3bef697..b865614 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnBindService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesContainerSnBindService.java @@ -18,4 +18,7 @@ public interface IMesContainerSnBindService { @ApiOperation("强制关箱") MesContainerSnBindModel doClosePackage(MesContainerSnBindModel model); + + @ApiOperation("开箱") + MesContainerSnBindModel doOpenPackage(MesContainerSnBindModel model); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesContainerSnBindController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesContainerSnBindController.java index bb1d806..6c69369 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesContainerSnBindController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesContainerSnBindController.java @@ -115,4 +115,20 @@ public class MesContainerSnBindController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping("/open-package") + @ApiOperation(value = "开箱") + public ResultBean doOpenPackage(@RequestBody MesContainerSnBindModel model) { + try { + ValidatorBean.checkNotNull(model.getContainerSn(), "容器条码不能为空"); + ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂代码不能为空"); + ValidatorBean.checkNotNull(model.getUserName(), "操作人不能为空"); + containerSnBindService.doOpenPackage(model); + return ResultBean.success("开箱成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java index 5e0a15e..69fbf7c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesContainerSnBindService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesContainerSnService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPackageContainerSnService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.MesNumberRuleMatchRegularExpressionService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.containerbind.ContainerBindManager; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.containerbind.checkqty.MesAbstractContainerBindCheckQtyService; @@ -19,6 +20,7 @@ import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindi import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.ResultBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -50,6 +52,8 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService private MesContainerPackageDetailBindingRepository detailBindingRDao; @Autowired private MesNumberRuleMatchRegularExpressionService matchRegularService; + @Autowired + private IMesPackageContainerSnService packageContainerSnService; private MesContainerType getMesContainerType(String organizeCode, String containerTypeCode) { MesContainerType containerType = null; @@ -242,6 +246,8 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService if (containerType.getMixType() == null) { MesPcnException.throwMesBusiException("容器类型代码【%s】未配置混包类型,请检查容器类型主数据", containerSn.getContainerTypeCode()); } +// ResultBean containerResult = packageContainerSnService.packageContain(model.getOrganizeCode(), model.getUserName(), model.getContainerSn(), model.getBarCode()); +// if (containerResult ) List packageDetails; MesContainerPackage containerPackage = containerPackageRDao.getByProperty( @@ -299,6 +305,11 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService containerPackageRDao.save(containerPackage); } if (!CollectionUtils.isEmpty(model.getPackageDetails())) { + if (containerPackage != null) { + for (MesContainerPackageDetail packageDetail : model.getPackageDetails()) { + packageDetail.setPid(containerPackage.getId()); + } + } containerPackageDetailRDao.saveAll(model.getPackageDetails()); } if (!CollectionUtils.isEmpty(model.getBindingList())) { @@ -324,6 +335,7 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService containerPackageDetailRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"}, new Object[]{model.getUserName(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}, ddlPackBean); + containerPackage.setQty(0); containerPackage.setPackageStatus(MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_30.getValue()); ConvertBean.serviceModelUpdate(containerPackage, model.getUserName()); containerPackageRDao.update(containerPackage); @@ -397,6 +409,24 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService return model; } + @Override + public MesContainerSnBindModel doOpenPackage(MesContainerSnBindModel model) { + //校验容器条码 + MesContainerSn containerSn = containerSnService.checkContainerSn(model.getOrganizeCode(), model.getContainerSn()); + MesContainerPackage containerPackage = getContainerPackage(model, containerSn); + if (containerPackage == null) { + MesPcnException.throwMesBusiException("容器条码【%s】未生成容器条码上料主表,请检查数据", containerSn.getContainerSn()); + } + if (!Objects.equals(containerPackage.getPackageStatus(), MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_20.getValue())) { + MesPcnException.throwMesBusiException("容器条码【%s】未关箱,不能执行开箱操作!", containerSn.getContainerSn()); + } + + containerPackage.setPackageStatus(MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_10.getValue()); + ConvertBean.serviceModelUpdate(containerPackage, model.getUserName()); + containerPackageRDao.update(containerPackage); + return model; + } + private MesContainerPartsModel checkProduceSn(String organizeCode, MesContainerSn containerSn, String barCode, String partNo) { MesContainerPartsModel model; MesProduceSn produceSn = produceSnRDao.getByProperty( diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogContainerSnBindService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogContainerSnBindService.java new file mode 100644 index 0000000..2ad3f195 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogContainerSnBindService.java @@ -0,0 +1,93 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +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.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : 容器与条码绑定弹框接口实现【电子化检验弹框】 + **/ +@Service +@Slf4j +public class MesFunctionDialogContainerSnBindService extends BaseSwsService implements IFsmModuleFunctionService { + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public Boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + +// this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()), +// String.format("生产线[%s]工位[%s]电子化检验弹框提交信息成功!提交信息[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtils.isEmpty(buttonDynamicModel.getFunctionValue()) ? "合格" : "可疑:" + buttonDynamicModel.getFunctionValue()), +// MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); +// +// //functionValue=电子化检验的判断结果 +// List inspectionList = StringUtils.isEmpty(buttonDynamicModel.getFunctionValue()) ? null : Arrays.asList(buttonDynamicModel.getFunctionValue().split(MesPcnExtConstWords.COMMA)); +// +// Boolean isSaveFlag = false; +// //获取上下文产出条码数据信息集合 +// if (!CollectionUtils.isEmpty(inspectionList)) { +// List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); +// if (!CollectionUtils.isEmpty(productionPsOutContextList)) { +// for (MesProductionPsOutContext productionPsOutContext : productionPsOutContextList) { +// if (null == productionPsOutContext) continue; +// if (productionPsOutContext.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 +// || !inspectionList.contains(productionPsOutContext.getProductSn())) continue; +// //电子化检验弹框判可疑 +// productionPsOutContext.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); +// isSaveFlag = true; +// } +// //保存上下文产出条码数据信息集合 +// if (isSaveFlag) productionDispatchContextStepService.dispatchProductionPsOutContext(reqBean, productionPsOutContextList); +// } +// } + + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); + reqBean.setButtonCode(buttonDynamicModel.getButtonCode()); + reqBean.setStepDialogStatus(true); + shippingDispatchService.sendScanQueueNextExec(reqBean); + + return true; + + } + + @Override + public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) { + + return dialogBean; + //获取上下文产出条码数据信息集合 +// List productionPsOutContext = productionDispatchContextStepService.getProductionPsOutContext(reqBean); +// +// //如果当前存在产出条码列表则返回条码集合 +// if (!CollectionUtils.isEmpty(productionPsOutContext)) { +// List snList = productionPsOutContext.stream().filter(o -> !StringUtils.isEmpty(o.getProductSn())).map(MesProductionPsOutContext::getProductSn).distinct().collect(Collectors.toList()); +// // 条码列表为空则表示不需要弹框 +// if (CollectionUtils.isEmpty(snList)) return dialogBean.unDialog(); +// else return dialogBean.obj(snList); +// } else return dialogBean.unDialog(); + + } +}