From 6e7f3881b7142b2d593326ce2352abb8ea18f023 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 11 Jun 2024 16:28:00 +0800 Subject: [PATCH 1/3] step --- .../IMesProductionDispatchContextStepService.java | 9 ++ .../station/MesProductionNoSortModuleService.java | 11 ++- .../function/MesFunctionProductionLockService.java | 47 ++++++++++ .../MesFunctionProductionUnlockService.java | 39 ++++++++ .../step/MesAssemblyShowNosortStepService.java | 3 + .../step/MesCountDownShowStepService.java | 56 +++++++++--- .../step/MesWorkOrderCheckSortStepService.java | 100 +++++++++++++++++++++ .../MesProductionDispatchContextStepService.java | 20 +++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 9 +- 9 files changed, 278 insertions(+), 16 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index 7bbbd70..0729b95 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -17,6 +17,15 @@ import java.util.Map; */ public interface IMesProductionDispatchContextStepService { + @ApiOperation(value = "验证上下文工位加工锁是否存在") + Boolean checkProductionLockIsExistContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存上下文加工锁") + Boolean saveProductionLockContext(StationRequestBean reqBean, String value); + + @ApiOperation(value = "删除上下文加工锁") + void deleteProductionLockContext(StationRequestBean reqBean); + @ApiOperation(value = "发送设备质量信息") void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 4f36e3a..ea044cc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -2,12 +2,13 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; @@ -23,6 +24,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import com.alibaba.fastjson.JSONObject; import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; @@ -35,7 +37,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.StringJoiner; -import java.util.stream.Collectors; /** * @Description : 展示组件:非排序生产 @@ -84,8 +85,12 @@ public class MesProductionNoSortModuleService extends BaseModuleService { StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); this.sendMessage(reqBean, shiftCountBean); + //验证工位是否锁定 + reqBean.getDataMap().put(MesPcnConstWords.WS_CMD_INIT_MODULE, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); + ((IStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).execute(reqBean); - + //设备BYPASS监控 + ((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).execute(reqBean); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java new file mode 100644 index 0000000..9404af0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java @@ -0,0 +1,47 @@ +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.apiservice.serviceimpl.step.MesCountDownShowStepService; +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.IStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 工位参数按钮事件接口实现【锁定】 + **/ +@Service +public class MesFunctionProductionLockService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + //保存上下文加工锁 + productionDispatchContextStepService.saveProductionLockContext(reqBean, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); + + if (StringUtils.isEmpty(buttonDynamicModel.getParamCode()) || !buttonDynamicModel.getParamCode().equals(MesPcnExtConstWords.ATUO_PRODUCTION_LOCK)) { + + ((MesCountDownShowStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).checkCellProductionLockIsExist(reqBean, resultBean, false, true); + + } + + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!", + reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + + return true; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java new file mode 100644 index 0000000..8a0abf7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java @@ -0,0 +1,39 @@ +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.apiservice.serviceimpl.step.MesCountDownShowStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 工位参数按钮事件接口实现【解除锁定】 + **/ +@Service +public class MesFunctionProductionUnlockService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + //删除上下文加工锁 + productionDispatchContextStepService.deleteProductionLockContext(reqBean); + + ((MesCountDownShowStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).checkCellProductionLockIsExist(reqBean, resultBean, false, false); + + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!", + reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + return true; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index efd441d..d22bcf1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -216,6 +216,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { MesProdRuleNosortCfg filter = null; + Optional optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()))).findFirst(); + if (null == optional || !optional.isPresent()) break; + for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { //foreignKey有值代表已经匹配过产品加工规则 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java index c19e155..f84114d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java @@ -7,24 +7,22 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; -import cn.estsh.i3plus.pojo.mes.model.StationKvBean; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.model.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; /** * @Description : 倒计时显示工步 @@ -50,9 +48,6 @@ public class MesCountDownShowStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); - //获取工步参数 - Optional> stepParamMap = getStepParams(reqBean); - //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); @@ -68,14 +63,46 @@ public class MesCountDownShowStepService extends BaseStepService { //不用显示倒计时, 客户端默认显示绿色无数字 if (StringUtils.isEmpty(workCell.getIsShowTime()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsShowTime()) return stepResult; + //工位开启时间锁, 验证当前是否存在加工锁定状态 + Boolean isOpenTimeLock = (!StringUtils.isEmpty(workCell.getIsOpenTimeLock()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == workCell.getIsOpenTimeLock()) ? true : false; + if (isOpenTimeLock) checkCellProductionLockIsExist(reqBean, resultBean, true, true); + + String isInit = (String) reqBean.getDataMap().get(MesPcnConstWords.WS_CMD_INIT_MODULE); + reqBean.getDataMap().remove(MesPcnConstWords.WS_CMD_INIT_MODULE); +// if (!StringUtils.isEmpty(isInit)) return stepResult; + //解析工位参数 - String countDownTime = doCalcCountDownCfg(reqBean); + String countDownTime = doCalcCountDownCfg(reqBean, isOpenTimeLock); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("[%sS]倒计时启动!", countDownTime)); } - private String doCalcCountDownCfg(StationRequestBean reqBean) { + //验证当前是否存在加工锁定状态 + public void checkCellProductionLockIsExist(StationRequestBean reqBean, StationResultBean resultBean, Boolean isNeedCheck, Boolean isLock) { + + if (isNeedCheck && !productionDispatchContextStepService.checkProductionLockIsExistContext(reqBean)) return; + + List resultList = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesExtEnumUtil.COLOR.RED.getValue(), "已经超时", MesPcnExtConstWords.ZERO_STR)); + + StationResultBean stationResultBean = new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.TIME_MODULE_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()) + .resultList(resultList).resultObj(isLock ? CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + stationResultBean.setResultMap(functionPoductionUnlock()); + this.sendMessage(reqBean, stationResultBean); + + if (isNeedCheck) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]已被锁定!请扫描解除锁定验证码!")); + + } + + private Map functionPoductionUnlock() { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.FUNCTION_PRODUCTION_UNLOCK, JSONObject.toJSONString(new ButtonDynamicModel(MesPcnExtConstWords.FUNCTION_PRODUCTION_UNLOCK, "解除锁定", MesPcnExtConstWords.IS_CHECK_WCPC_PWD, MesPcnExtConstWords.FUNCTION_PRODUCTION_UNLOCK))); + resultMap.put(MesPcnExtConstWords.FUNCTION_PRODUCTION_LOCK, JSONObject.toJSONString(new ButtonDynamicModel(MesPcnExtConstWords.FUNCTION_PRODUCTION_LOCK, "锁定", MesPcnExtConstWords.ATUO_PRODUCTION_LOCK))); + return resultMap; + } + + private String doCalcCountDownCfg(StationRequestBean reqBean, Boolean isOpenTimeLock) { //获取工位参数 Map wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean); @@ -88,8 +115,13 @@ public class MesCountDownShowStepService extends BaseStepService { List resultList = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesExtEnumUtil.COLOR.GREEN.getValue(), "倒计时时长", countDownCfgArr[0]), new StationKvBean(MesExtEnumUtil.COLOR.YELLOW.getValue(), "即将超时", countDownCfgArr[1]), new StationKvBean(MesExtEnumUtil.COLOR.RED.getValue(), "已经超时", MesPcnExtConstWords.ZERO_STR)); + StationResultBean stationResultBean = new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.TIME_MODULE_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()) + .resultList(resultList).resultObj(isOpenTimeLock ? CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + stationResultBean.setResultMap(functionPoductionUnlock()); + //发送倒计时信号给客户端 - this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.TIME_MODULE_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()).resultList(resultList)); + this.sendMessage(reqBean, stationResultBean); return countDownCfgArr[0]; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java new file mode 100644 index 0000000..b249c49 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -0,0 +1,100 @@ +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +//import cn.estsh.i3plus.pojo.mes.model.StepResult; +//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 java.util.ArrayList; +//import java.util.List; +// +///** +// * @Description : 加工单验证工步【排序】 +// * @Author : wangjie +// **/ +//@Slf4j +//@Service("mesWorkOrderCheckSortStepService") +//public class MesWorkOrderCheckSortStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesProductionDispatchContextStepService productionDispatchContextStepService; +// +// @Autowired +// private IMesWorkOrderExtService workOrderExtService; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// //获取上下文信息 +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); +// +// //配置错误 抛出异常 +// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); +// +// //存储生产过程上下文对象 +// productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); +// +// //获取上下文生产扫/读信息:加工单 +// List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); +// +// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中缺失待验证的加工单信息!"); +// +// //获取上下文产出零件信息 +// List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); +// +// //清除本次已获取得到的加工单信息 +// productionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean); +// +// //非扫描场景 清除历史产出零件信息 +// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionDispatchContextStepService.deleteProductionPartContext(reqBean); +// +// //验证工单的有效性 +// List productionPartContextList = new ArrayList<>(); +// if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); +// +// //扫描场景下合并历史产出零件信息 +// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList); +// +// //保存上下文产出零件信息 +// productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); +// +// //更新展示组件MODULE_CONTENT内容 +// doCacheMoudleContext(reqBean, productionPartContextList); +// +// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString())); +// +// +// +// +// +// +// +// +// +// +// return stepResult; +// +// } +// +// +// +// +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index cb90d40..3ff199b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -17,6 +17,7 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.google.common.base.Objects; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -39,6 +40,25 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp private String getContextKey(String organizeCode, String busiCode) { return new StringJoiner(":").add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } + //验证上下文工位加工锁是否存在 + @Override + public Boolean checkProductionLockIsExistContext(StationRequestBean reqBean) { + String value = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_LOCK_CONTEXT); + return !StringUtils.isEmpty(value) ? true : false; + } + + //保存上下文加工锁 + @Override + public Boolean saveProductionLockContext(StationRequestBean reqBean, String value) { + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_LOCK_CONTEXT, value); + } + + //删除上下文加工锁 + @Override + public void deleteProductionLockContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_LOCK_CONTEXT); + } + //发送设备质量信息 @Override public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) { 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 69d9e8f..7555549 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 @@ -156,6 +156,8 @@ public class MesPcnExtConstWords { public static final String COUNT_DOWN_CFG = "COUNT_DOWN_CFG"; // 工位倒计时配置默认值 public static final String COUNT_DOWN_CFG_DEFAULT = "60,5"; + // 工位参数按钮事件参数: 是否验证密码 + public static final String ATUO_PRODUCTION_LOCK = "ATUO_PRODUCTION_LOCK"; // 工位/工步 参数按钮事件 @@ -177,7 +179,10 @@ public class MesPcnExtConstWords { public static final String FUNCTION_CHOOSE_CAVITY_ORDER = "FUNCTION_CHOOSE_CAVITY_ORDER"; // 工位参数按钮事件: 切换工位 public static final String FUNCTION_SWITCH_CELL = "FUNCTION_SWITCH_CELL"; - + // 工位参数按钮事件: 锁定 + public static final String FUNCTION_PRODUCTION_LOCK = "FUNCTION_PRODUCTION_LOCK"; + // 工位参数按钮事件: 解除锁定 + public static final String FUNCTION_PRODUCTION_UNLOCK = "FUNCTION_PRODUCTION_UNLOCK"; // 0 @@ -212,6 +217,8 @@ public class MesPcnExtConstWords { // 生产过程控制上下文目录名 public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT"; + // 生产过程控制工位加工锁 + public static final String PRODUCTION_LOCK_CONTEXT = "PRODUCTION_LOCK_CONTEXT"; // 上下文: 班次班组信息 public static final String PROD_SHIFT_DATA_CONTEXT = "PROD_SHIFT_DATA_CONTEXT"; // 上下文: 基础数据 From e4ab2342b1114ff90438a348504e405c483e8a25 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 11 Jun 2024 16:30:25 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=A3=85=E7=AE=B1=E9=98=B2=E9=94=99?= =?UTF-8?q?=E6=BC=94=E7=A4=BA=E5=8A=9F=E8=83=BD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/busi/IMesBoxingErrorProofingService.java | 3 +- .../busi/MesBoxingErrorProofingController.java | 3 +- .../busi/MesBoxingErrorProofingService.java | 101 ++++++++++++++------- 3 files changed, 71 insertions(+), 36 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java index 1e5da3b..abcf68d 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesPackage; import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail; +import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -28,7 +29,7 @@ public interface IMesBoxingErrorProofingService { void saveMesPackageDetails(List mesPackage, String userName); @ApiOperation(value = "更新包装表") - void updateMesPackage(MesPackage mesPackage); + ResultBean updateMesPackage(MesPackage mesPackage); @ApiOperation(value = "更新包装明细") void updateMesPackageDetails(MesPackageDetail mesPackage); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java index 53d2e76..67eb10d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java @@ -96,8 +96,7 @@ public class MesBoxingErrorProofingController { mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode()); ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName()); - mesBoxingErrorProofingService.updateMesPackage(mesPackage); - return ResultBean.success("保存成功"); + return mesBoxingErrorProofingService.updateMesPackage(mesPackage); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java index 2e35c9f..d69834e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java @@ -17,6 +17,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.util.ResultBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -104,28 +105,12 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer } //校验包装条码信息 MesPackage mesPackage = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode()); - //校验是否重复扫描 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean); - if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) { - MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描", mesPackageDetail.getSerialNumber()); - } //校验是否已关闭 if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) { MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码"); } - //获取包装定义明细 - ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(mesPackage.getPackageSn(), "packCode", ddlPackBean); - List defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean); - if (CollectionUtils.isEmpty(defineDetails)) { - MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护", mesPackage.getPackageSn()); - } - //校验是否包含 - String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails); - //物料信息 - MesPart mesPart = getPart(mesPackageDetail.getOrganizeCode(), partNo); + //校验条码规则 + MesPart mesPart = getMesPart(mesPackageDetail, mesPackage); //包装规格明细 MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart); if (mesPackageDetail.getIsMemoryBoolean()) { @@ -139,7 +124,6 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer } } - @Override public void saveMesPackageDetails(List mesPackageDetailList, String userName) { MesPackageDetail packageDetail = mesPackageDetailList.iterator().next(); @@ -147,15 +131,18 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer //校验包装条码信息 MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode()); //去掉重复零件条码 - checkSerialNumber(mesPackageDetailList, packageDetail, userName); + List saveMesPackageDetailList = new ArrayList<>(); + checkSerialNumber(saveMesPackageDetailList,mesPackageDetailList, packageDetail, userName); //保存包装明细 - mesPackageDetailRDao.saveAll(mesPackageDetailList); + if(!CollectionUtils.isEmpty(saveMesPackageDetailList)){ + mesPackageDetailRDao.saveAll(saveMesPackageDetailList); + } //更新包装表 updateMesPackage(mesPackage, userName, qty, false); } @Override - public void updateMesPackage(MesPackage mesPackage) { + public ResultBean updateMesPackage(MesPackage mesPackage) { String userName = mesPackage.getModifyUser(); if (Objects.isNull(CommonEnumUtil.TRUE_OR_FALSE.valueOfDescription(mesPackage.getIsSealed()))) { MesPcnException.throwMesBusiException("是否封箱不能为空"); @@ -164,16 +151,24 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer MesPackage mesPackageDb = getMesPackageAndCheck(mesPackage.getPackageNo(), mesPackage.getOrganizeCode()); if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) { if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackageDb.getIsSealed()) { - MesPcnException.throwMesBusiException("包装条码【%s】状态为已关箱,请勿重复操作", mesPackage.getPackageNo()); + MesPcnException.throwMesBusiException("箱条码【%s】状态为已关箱,请勿重复操作", mesPackage.getPackageNo()); + } + //校验是否存在包装明细 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", ddlPackBean); + if (!mesPackageDetailRDao.isExitByHql(ddlPackBean)) { + MesPcnException.throwMesBusiException("箱条码【%s】下不存在零件条码,不允许关箱", mesPackage.getPackageNo()); } //关箱 updateMesPackage(mesPackageDb, mesPackage.getModifyUser(), 0d, true); - } else if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackage.getIsSealed()) { + return ResultBean.success("关箱成功"); + } else { if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) { - MesPcnException.throwMesBusiException("包装条码【%s】状态不为已关箱,不需要拆箱", mesPackage.getPackageNo()); + MesPcnException.throwMesBusiException("箱条码【%s】状态不为已关箱,不需要拆箱", mesPackage.getPackageNo()); } //拆箱 unboxing(mesPackage, userName, mesPackageDb); + return ResultBean.success("拆箱成功"); } } @@ -182,11 +177,13 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer //查询包装条码信息 MesPackage mesPackageDb = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode()); if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) { - MesPcnException.throwMesBusiException("包装条码【%s】不为已关箱状态,不允许操作替换条码", mesPackageDetail.getPackageNo()); + MesPcnException.throwMesBusiException("箱条码【%s】不为已关箱状态,不允许操作替换条码", mesPackageDetail.getPackageNo()); } //校验是否重复扫描 List mesPackageDetails = getMesPackageDetailList(mesPackageDetail); - + //校验条码是否符合规则 + MesPart mesPart = getMesPart(mesPackageDetail, mesPackageDb); + boolean exist = false; for (MesPackageDetail packageDetail : mesPackageDetails) { //替换条码是否已经存在 if (packageDetail.getSerialNumber().equals(mesPackageDetail.getSerialNumber())) { @@ -196,9 +193,15 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer if (packageDetail.getSerialNumber().equals(mesPackageDetail.getOldSerialNumber())) { packageDetail.setSerialNumber(mesPackageDetail.getSerialNumber()); packageDetail.setOldSerialNumber(mesPackageDetail.getOldSerialNumber()); + packageDetail.setPartNo(mesPart.getPartNo()); + packageDetail.setPartName(mesPart.getPartName()); ConvertBean.serviceModelUpdate(packageDetail, mesPackageDetail.getModifyUser()); + exist = true; } } + if(!exist){ + MesPcnException.throwMesBusiException("原零件条码【%s】不存在", mesPackageDetail.getOldSerialNumber()); + } mesPackageDetailRDao.saveAll(mesPackageDetails); } @@ -222,6 +225,37 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer } } + private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackage mesPackage) { + //校验是否重复扫描 + checkSerialNumber(mesPackageDetail); + //获取包装定义明细 + List defineDetails = getMesPackingDefineDetails(mesPackageDetail.getOrganizeCode(), mesPackage.getPackageSn()); + //校验是否包含 + String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails); + //物料信息 + return getPart(mesPackageDetail.getOrganizeCode(), partNo); + } + + private void checkSerialNumber(MesPackageDetail mesPackageDetail) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean); + if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) { + MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描", mesPackageDetail.getSerialNumber()); + } + } + + private List getMesPackingDefineDetails(String organizeCode, String packCode) { + DdlPackBean ddlPackBean; + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(packCode, "packCode", ddlPackBean); + List defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(defineDetails)) { + MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护", packCode); + } + return defineDetails; + } + private void unboxing(MesPackage mesPackage, String userName, MesPackage mesPackageDb) { //更新包装表 mesPackageDb.setQty(0d); @@ -241,20 +275,21 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer private MesPackage getMesPackageAndCheck(String packageNo, String organizeCode) { MesPackage mesPackageDb = getMesPackage(organizeCode, packageNo); if (Objects.isNull(mesPackageDb)) { - MesPcnException.throwMesBusiException("包装条码【%s】信息不存在", packageNo); + MesPcnException.throwMesBusiException("箱条码【%s】信息不存在", packageNo); } return mesPackageDb; } - private void checkSerialNumber(List mesPackageDetailList, MesPackageDetail packageDetail, String userName) { + private void checkSerialNumber(List saveMesPackageDetailList,List mesPackageDetailList, MesPackageDetail packageDetail, String userName) { List mesPackageDetails = getMesPackageDetailList(packageDetail.getOrganizeCode(), packageDetail.getPackageNo()); if (!CollectionUtils.isEmpty(mesPackageDetails)) { List serialNumberList = mesPackageDetails.stream().map(MesPackageDetail::getSerialNumber).collect(Collectors.toList()); for (MesPackageDetail mesPackageDetail : mesPackageDetailList) { - if (serialNumberList.contains(mesPackageDetail.getSerialNumber())) { - mesPackageDetailList.remove(mesPackageDetail); - } ConvertBean.serviceModelInitialize(mesPackageDetail, userName); + if (!serialNumberList.contains(mesPackageDetail.getSerialNumber())) { + //校验零件规则 + saveMesPackageDetailList.add(mesPackageDetail); + } } } } @@ -319,7 +354,7 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer } } if (Objects.isNull(partNo)) { - MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackage.getSerialNumber()); + MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackageDetail.getSerialNumber()); } return partNo; } From f1b3ed59297a5a9911f4b43cb8b41a878f9e6f62 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 11 Jun 2024 18:21:53 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=BC=94=E7=A4=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesBoxingErrorProofingService.java | 2 +- .../controller/busi/MesBoxingErrorProofingController.java | 4 ++-- .../serviceimpl/busi/MesBoxingErrorProofingService.java | 15 +++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java index abcf68d..b65bcd5 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java @@ -26,7 +26,7 @@ public interface IMesBoxingErrorProofingService { MesPackage doScan(MesPackageDetail mesPackageDetail); @ApiOperation(value = "保存包装明细") - void saveMesPackageDetails(List mesPackage, String userName); + MesPackage saveMesPackageDetails(List mesPackage, String userName); @ApiOperation(value = "更新包装表") ResultBean updateMesPackage(MesPackage mesPackage); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java index 67eb10d..e893cf7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java @@ -76,8 +76,8 @@ public class MesBoxingErrorProofingController { ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空"); }); String userName = AuthUtil.getSessionUser().getUserName(); - mesBoxingErrorProofingService.saveMesPackageDetails(mesPackageDetailList, userName); - return ResultBean.success("保存成功"); + MesPackage mesPackage = mesBoxingErrorProofingService.saveMesPackageDetails(mesPackageDetailList, userName); + return ResultBean.success("保存成功").setResultObject(mesPackage); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java index d69834e..800d64b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java @@ -125,20 +125,25 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer } @Override - public void saveMesPackageDetails(List mesPackageDetailList, String userName) { + public MesPackage saveMesPackageDetails(List mesPackageDetailList, String userName) { MesPackageDetail packageDetail = mesPackageDetailList.iterator().next(); - int qty = mesPackageDetailList.size(); //校验包装条码信息 MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode()); + //校验是否已关闭 + if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) { + MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码"); + } //去掉重复零件条码 List saveMesPackageDetailList = new ArrayList<>(); checkSerialNumber(saveMesPackageDetailList,mesPackageDetailList, packageDetail, userName); //保存包装明细 if(!CollectionUtils.isEmpty(saveMesPackageDetailList)){ mesPackageDetailRDao.saveAll(saveMesPackageDetailList); + int qty = saveMesPackageDetailList.size(); + //更新包装表 + updateMesPackage(mesPackage, userName, qty, false); } - //更新包装表 - updateMesPackage(mesPackage, userName, qty, false); + return mesPackage; } @Override @@ -291,6 +296,8 @@ public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingSer saveMesPackageDetailList.add(mesPackageDetail); } } + }else{ + saveMesPackageDetailList.addAll(mesPackageDetailList); } }