From cdaa0c7b20fc09ed038f7aa6769c1b026e46829c Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 19 Aug 2024 10:10:32 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesAssemblyScanNoShowStepService.java | 232 +++++++++++++++++++++ .../step/MesWorkOrderSaveStepService.java | 40 ++-- 2 files changed, 253 insertions(+), 19 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java new file mode 100644 index 0000000..ed745a1 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java @@ -0,0 +1,232 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; +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.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +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 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.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +/** + * @Description : 扫描装配件条码工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesAssemblyScanStepService") +public class MesAssemblyScanNoShowStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Override + public StepResult guide(StationRequestBean reqBean) { + + productionCustomContextStepService.doSendStepContextMessage(reqBean); + + return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描装配件条码!"); + + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //扫描信息置空 + String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + //验证当前是否需要扫描装配件条码: 是否存在装配件清单 【当前验证只能对内部触发生效】 + if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedScanAssembly(prodRuleContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需扫描装配件条码!"); + + //处理装配件的装配爆炸图和音频文件 + doHandleAssemblyFile(reqBean, productionProcessContext.getWorkCenter(), prodRuleContextList); + + //验证当前是否需要读装配件条码: 验证是否存在待绑定数据 【当前验证只能对内部触发生效】 + if (!CollectionUtils.isEmpty(prodRuleContextList) && !hasUnBindAssembly(prodRuleContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则对应的装配件清单已扫描完毕,当前无需扫描装配件条码!"); + + if (StringUtils.isEmpty(scanInfo)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描装配件条码!"); + + //发送工步内容 + productionCustomContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); + + //封装当前扫描的装配件信息 + List equipVariableCollectContextList = getAssemblySnJson(reqBean, scanInfo); + + //从上下文中取出工位当前要使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + //需要扫描的绑定数量 [没有加工规则场景] + Integer needQty = cellEquipContext.getCavity() * cellEquipContext.getBindQty(); + + //没有加工规则代表需要反向匹配出加工规则, 需要根据设备腔数直接批量扫描 生成零件号 + if (CollectionUtils.isEmpty(prodRuleContextList)) { + + //根据设备代码获取可复用条码的个数 + Integer count = productionCustomContextStepService.getRepeatAssemblySnCount(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), cellEquipContext.getEquipmentCode()); + + //获取上下文生产扫/读信息:装配件条码 + List cachedEquipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean); + //删除上下文扫/读信息:装配件条码 + productionDispatchContextStepService.deleteScanAssemblySnContext(reqBean); + + Integer scanedQty = !CollectionUtils.isEmpty(cachedEquipVariableCollectContextList) ? cachedEquipVariableCollectContextList.size() : MesPcnExtConstWords.ZERO + count; + + //判断当前已存在数量是否超过需要数量 + if (scanedQty > needQty) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), String.format( + "当前可复用条码数量[%s]加上装配件条码数量[%s]已经超过设备腔数[%s]每腔个数[%s]配置,请重新扫描装配件条码!", count, cachedEquipVariableCollectContextList.size(), cellEquipContext.getCavity(), cellEquipContext.getBindQty())); + + if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList)) { + if (cachedEquipVariableCollectContextList.size() == needQty) equipVariableCollectContextList = cachedEquipVariableCollectContextList; + else equipVariableCollectContextList.addAll(cachedEquipVariableCollectContextList); + } + + } + + //保存上下文扫/读信息:装配件条码 + productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList); + + //存在加工规则 默认扫描一次 匹配一次 循环处理直到当前的加工规则全部匹配完毕 + if (!CollectionUtils.isEmpty(prodRuleContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo)); + + if (equipVariableCollectContextList.size() == needQty) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, String.format("当前扫描信息装配件条码[%s],已扫描个数[%s]!", scanInfo, equipVariableCollectContextList.size() + "/" + needQty)); + + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息装配件条码[%s],请继续扫描装配件条码,已扫描个数[%s]!", scanInfo, equipVariableCollectContextList.size() + "/" + needQty)); + + } + + //处理装配件的装配爆炸图和音频文件 + private void doHandleAssemblyFile(StationRequestBean reqBean, MesWorkCenter workCenter, List prodRuleContextList) { + + if (CollectionUtils.isEmpty(prodRuleContextList)) return; + + Boolean isSendFile = false; + Boolean isBreakLoop = false; + LOOP: + for (MesProdRuleContext prodRuleContext : prodRuleContextList) { + if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; + if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()) { + List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); + for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { + if (null == productionAssemblyNosortContext || + productionAssemblyNosortContext.getFileIsFinished().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || + productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue()) == 0 || + (StringUtils.isEmpty(productionAssemblyNosortContext.getImageFileUrl()) && StringUtils.isEmpty(productionAssemblyNosortContext.getAudioFileUrl()))) continue; + //不扫描的默认直接直接标记绿色已装配, 但是文件也需要发送 + if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue()) != 0) isBreakLoop = true; + isSendFile = true; + //发送文件到客户端 + sendFile(reqBean, productionAssemblyNosortContext.fileIsFinished()); + if (isBreakLoop) break LOOP; + } + prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList); + } else { + List productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext(); + for (MesProductionAssemblySortContext productionAssemblySortContext : productionAssemblySortContextList) { + if (null == productionAssemblySortContext || + productionAssemblySortContext.getFileIsFinished().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || + productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue()) == 0 || + (StringUtils.isEmpty(productionAssemblySortContext.getImageFileUrl()) && StringUtils.isEmpty(productionAssemblySortContext.getAudioFileUrl()))) continue; + //不扫描的默认直接直接标记绿色已装配, 但是文件也需要发送 + if (productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue()) != 0) isBreakLoop = true; + isSendFile = true; + //发送文件到客户端 + sendFile(reqBean, productionAssemblySortContext.fileIsFinished()); + if (isBreakLoop) break LOOP; + } + prodRuleContext.assemblyDataJson(productionAssemblySortContextList); + } + } + //保存上下文产品加工规则信息集合 + if (isSendFile) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); + } + + //发送文件到客户端 + private void sendFile(StationRequestBean reqBean, MesProductionAssemblyContext productionAssemblyContext) { + if (!StringUtils.isEmpty(productionAssemblyContext.getImageFileUrl())) + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()) + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()) + .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue()) + .customPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_ASSEMBLY) + .message(String.format("装配件信息来源ID[%s],装配件爆炸图URL[%s]", productionAssemblyContext.getSourceId(), productionAssemblyContext.getImageFileUrl())) + .resultObj(new JSONObject().put(MesPcnExtConstWords.URL, productionAssemblyContext.getImageFileUrl()))); + if (!StringUtils.isEmpty(productionAssemblyContext.getAudioFileUrl())) + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()) + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()) + .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue()) + .message(String.format("装配件信息来源ID[%s],装配件音频文件URL[%s]", productionAssemblyContext.getSourceId(), productionAssemblyContext.getAudioFileUrl())) + .resultObj(new JSONObject().put(MesPcnExtConstWords.URL, productionAssemblyContext.getAudioFileUrl()))); + } + + //判断是否存在装配件清单 + private Boolean checkIsNeedScanAssembly(List prodRuleContextList) { + Optional optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + + //验证是否存在待绑定数据 + private Boolean hasUnBindAssembly(List prodRuleContextList) { + Boolean hasUnBindAssembly = false; + for (MesProdRuleContext prodRuleContext : prodRuleContextList) { + if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; + List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); + Optional optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst(); + if (null == optional || !optional.isPresent()) continue; + + hasUnBindAssembly = true; + break; + } + return hasUnBindAssembly; + } + + //封装当前扫描的装配件信息 + private List getAssemblySnJson(StationRequestBean reqBean, String scanInfo) { + + List equipVariableCollectContextList = new ArrayList<>(); + + equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue())); + + return equipVariableCollectContextList; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java index 68d0e5c..a5b3879 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; 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.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.StringUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -20,6 +21,7 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; 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; @@ -108,6 +110,9 @@ public class MesWorkOrderSaveStepService extends BaseStepService { Map> proMap = productionPsOutContextList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); //产品加工规则 根据foreignKey分组 Map prMap = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o)); + + String prodResult = productionDispatchContextStepService.getProductResultContext(reqBean); + //遍历产出零件信息 for(Map.Entry> entry : ppMap.entrySet()) { @@ -123,11 +128,18 @@ public class MesWorkOrderSaveStepService extends BaseStepService { if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty += 1; } - if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) == 0 ) continue; + if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) == 0) continue; MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), entry.getValue().get(0).getId()); - entityManager.detach(workOrder); + if (null == workOrder) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息不存在!", entry.getKey())); + + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QURERY:{} --- calcCompleteQty:{} --- prodResult:{}", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), + StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder), calcCompleteQty, prodResult); + + entityManager.detach(workOrder); + //工单状态分 排序工单 和非排序工单; 现在必须是非排序工单 if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); @@ -136,20 +148,16 @@ public class MesWorkOrderSaveStepService extends BaseStepService { execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); List propertyNameList = new ArrayList<>(); - List propertyValueList = new ArrayList<>(); //修改完成数量 if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0) { workOrder.setCompleteQty(MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty)); propertyNameList.add("completeQty"); - propertyValueList.add(workOrder.getCompleteQty()); - } //修改未完成数量 if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0 && workOrder.getUnCompleteQty().compareTo(new Double(0)) > 0 && MathOperation.compareTo(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)), new Double(0)) >= 0) { workOrder.setUnCompleteQty(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty))); propertyNameList.add("unCompleteQty"); - propertyValueList.add(workOrder.getUnCompleteQty()); } /** @@ -159,7 +167,7 @@ public class MesWorkOrderSaveStepService extends BaseStepService { * 上下文中 已经按照工单分组了,因为有一模多腔问题 */ - String prodResult = productionDispatchContextStepService.getProductResultContext(reqBean); + if (!StringUtils.isEmpty(prodResult)) { //可疑品 boolean isSuspicious = MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue() == Integer.parseInt(prodResult); @@ -167,7 +175,6 @@ public class MesWorkOrderSaveStepService extends BaseStepService { int suspiciousQty = productionPsOutContextList.size(); workOrder.setSuspiciousPartQty(MathOperation.add(workOrder.getSuspiciousPartQty(), new Double(suspiciousQty))); propertyNameList.add("suspiciousPartQty"); - propertyValueList.add(workOrder.getSuspiciousPartQty()); } //报废数量 boolean isScrap = MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue() == Integer.parseInt(prodResult); @@ -175,32 +182,27 @@ public class MesWorkOrderSaveStepService extends BaseStepService { int scrapQty = productionPsOutContextList.size(); workOrder.setScrapPartQty(MathOperation.add(workOrder.getScrapPartQty(), new Double(scrapQty))); propertyNameList.add("scrapPartQty"); - propertyValueList.add(workOrder.getScrapPartQty()); } } if (MathOperation.compareTo(workOrder.getCompleteQty(), workOrder.getQty()) >= 0 && workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()) != 0) { workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); propertyNameList.add("workOrderStatus"); - propertyValueList.add(workOrder.getWorkOrderStatus()); } else if (workOrder.getCompleteQty() > 0 && workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); propertyNameList.add("workOrderStatus"); - propertyValueList.add(workOrder.getWorkOrderStatus()); } //如果数量都没有修改,不操作数据库 if (!propertyNameList.isEmpty()) { ConvertBean.serviceModelUpdate(workOrder, reqBean.getUserInfo()); workOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); workOrderExtService.update(workOrder); - /* propertyNameList.add("modifyUser"); - propertyValueList.add(reqBean.getUserInfo()); - propertyNameList.add("modifyDatetime"); - propertyValueList.add(TimeTool.getNowTime(true)); - DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(workOrder.getId(),"id",workOrderPackBean); - workOrderRepository.updateByProperties(propertyNameList.toArray(new String[]{}), propertyValueList.toArray(), workOrderPackBean); -*/ } + + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- UPDATE:{}", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), + StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder)); + + } } } From 845691f465ae5fa6863f6dbd1fa211e40361b682 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Mon, 19 Aug 2024 10:54:32 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=8F=AF=E7=96=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesInputDefectRecordService.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index 8b51643..451c2e0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -13,6 +13,7 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; 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.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; @@ -353,7 +354,6 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()); ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName()); - partInspectionRepository.save(model.getPartInspection()); //查询当前单据明细 List resultDetailList = queryResultDetailList(model, org); @@ -387,10 +387,23 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { checkProduceSn(produceSn, model.getSn()); produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); + String defectTypeCode = MesEnumUtil.DEFECT_TYPE_CODE.DETERMIND.getValue(); + + String defectTypeCodeStr = configService.getCfgValue(org, "MES_SUSPICIOUS_DEFECT_TYPE_CODE") == null ? "QX130" :configService.getCfgValue(org, ""); + + + //根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(defectTypeCodeStr, "defectTypeCode", packBean); + MesDefectType defectType = defectTypeRepository.getByProperty(packBean); + + model.getPartInspection().setDefectTypeCode(defectType.getDefectTypeCode()); + model.getPartInspection().setDefectTypeId(defectType.getId()); ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName()); produceSnExtService.update(produceSn); } + partInspectionRepository.save(model.getPartInspection()); partInspectionDetailRepository.saveAll(resultDetailList); partInspectionDetailRepository.saveAll(model.getPartInspectionDetailList()); From 63cf4c1a3b277af1d62712104aa3ca774ead4e6d Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 19 Aug 2024 14:03:33 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=BF=BD=E7=95=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesAssemblyMatchNosortStepService.java | 2 +- .../step/MesAssemblyMatchStepService.java | 14 +- .../step/MesAssemblyScanNoShowStepService.java | 232 --------------------- .../step/MesAssemblyShowNosortStepService.java | 2 +- 4 files changed, 9 insertions(+), 241 deletions(-) delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java index 18eea86..63115dc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java @@ -90,7 +90,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { //根据产出零件或者腔数拿到需要的加工规则数量, 优先使用产出零件数量 Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : cellEquipContext.getCavity(); - //全部匹配完毕,存在进料的时候直接调用 并且不存在产出零件的时候 生成零件条码工步 【收尾都调用是因为 生成零件条码工步 调用执行过程中可能会出现配置报错】 + //全部匹配完毕,存在进料的时候直接调用 并且不存在产出零件的时候 生成零件条码工步 【首尾都调用是因为 生成零件条码工步 调用执行过程中可能会出现配置报错】 if (!hasUnBindAssembly && !CollectionUtils.isEmpty(productionPsInContextList) && productionPsInContextList.size() >= needQty && !productionDispatchContextStepService.checkProductionPsOutIsExistContext(reqBean)) ((IStepService) SpringContextsUtil.getBean("mesProductSnGenerateStepService")).executeInState(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchStepService.java index dd08510..de43c1e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchStepService.java @@ -25,13 +25,13 @@ public class MesAssemblyMatchStepService extends BaseStepService { @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; - @Override - public StepResult init(StationRequestBean reqBean) { - - //显示装配件扫描项工步 - return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowStepService")).executeInState(reqBean); - - } +// @Override +// public StepResult init(StationRequestBean reqBean) { +// +// //显示装配件扫描项工步 +// return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowStepService")).executeInState(reqBean); +// +// } @Override public StepResult execute(StationRequestBean reqBean) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java deleted file mode 100644 index ed745a1..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanNoShowStepService.java +++ /dev/null @@ -1,232 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; -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.*; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; -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 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.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -/** - * @Description : 扫描装配件条码工步 - * @Author : wangjie - **/ -@Slf4j -@Service("mesAssemblyScanStepService") -public class MesAssemblyScanNoShowStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Override - public StepResult guide(StationRequestBean reqBean) { - - productionCustomContextStepService.doSendStepContextMessage(reqBean); - - return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描装配件条码!"); - - } - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //扫描信息置空 - String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean); - - //配置错误 抛出异常 - if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - - //获取上下文产品加工规则数据信息集合 - List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - - //验证当前是否需要扫描装配件条码: 是否存在装配件清单 【当前验证只能对内部触发生效】 - if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedScanAssembly(prodRuleContextList)) - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需扫描装配件条码!"); - - //处理装配件的装配爆炸图和音频文件 - doHandleAssemblyFile(reqBean, productionProcessContext.getWorkCenter(), prodRuleContextList); - - //验证当前是否需要读装配件条码: 验证是否存在待绑定数据 【当前验证只能对内部触发生效】 - if (!CollectionUtils.isEmpty(prodRuleContextList) && !hasUnBindAssembly(prodRuleContextList)) - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则对应的装配件清单已扫描完毕,当前无需扫描装配件条码!"); - - if (StringUtils.isEmpty(scanInfo)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描装配件条码!"); - - //发送工步内容 - productionCustomContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); - - //封装当前扫描的装配件信息 - List equipVariableCollectContextList = getAssemblySnJson(reqBean, scanInfo); - - //从上下文中取出工位当前要使用的设备 - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - - //需要扫描的绑定数量 [没有加工规则场景] - Integer needQty = cellEquipContext.getCavity() * cellEquipContext.getBindQty(); - - //没有加工规则代表需要反向匹配出加工规则, 需要根据设备腔数直接批量扫描 生成零件号 - if (CollectionUtils.isEmpty(prodRuleContextList)) { - - //根据设备代码获取可复用条码的个数 - Integer count = productionCustomContextStepService.getRepeatAssemblySnCount(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), cellEquipContext.getEquipmentCode()); - - //获取上下文生产扫/读信息:装配件条码 - List cachedEquipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean); - //删除上下文扫/读信息:装配件条码 - productionDispatchContextStepService.deleteScanAssemblySnContext(reqBean); - - Integer scanedQty = !CollectionUtils.isEmpty(cachedEquipVariableCollectContextList) ? cachedEquipVariableCollectContextList.size() : MesPcnExtConstWords.ZERO + count; - - //判断当前已存在数量是否超过需要数量 - if (scanedQty > needQty) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), String.format( - "当前可复用条码数量[%s]加上装配件条码数量[%s]已经超过设备腔数[%s]每腔个数[%s]配置,请重新扫描装配件条码!", count, cachedEquipVariableCollectContextList.size(), cellEquipContext.getCavity(), cellEquipContext.getBindQty())); - - if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList)) { - if (cachedEquipVariableCollectContextList.size() == needQty) equipVariableCollectContextList = cachedEquipVariableCollectContextList; - else equipVariableCollectContextList.addAll(cachedEquipVariableCollectContextList); - } - - } - - //保存上下文扫/读信息:装配件条码 - productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList); - - //存在加工规则 默认扫描一次 匹配一次 循环处理直到当前的加工规则全部匹配完毕 - if (!CollectionUtils.isEmpty(prodRuleContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo)); - - if (equipVariableCollectContextList.size() == needQty) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, String.format("当前扫描信息装配件条码[%s],已扫描个数[%s]!", scanInfo, equipVariableCollectContextList.size() + "/" + needQty)); - - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, false, - MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息装配件条码[%s],请继续扫描装配件条码,已扫描个数[%s]!", scanInfo, equipVariableCollectContextList.size() + "/" + needQty)); - - } - - //处理装配件的装配爆炸图和音频文件 - private void doHandleAssemblyFile(StationRequestBean reqBean, MesWorkCenter workCenter, List prodRuleContextList) { - - if (CollectionUtils.isEmpty(prodRuleContextList)) return; - - Boolean isSendFile = false; - Boolean isBreakLoop = false; - LOOP: - for (MesProdRuleContext prodRuleContext : prodRuleContextList) { - if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; - if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()) { - List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); - for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { - if (null == productionAssemblyNosortContext || - productionAssemblyNosortContext.getFileIsFinished().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || - productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue()) == 0 || - (StringUtils.isEmpty(productionAssemblyNosortContext.getImageFileUrl()) && StringUtils.isEmpty(productionAssemblyNosortContext.getAudioFileUrl()))) continue; - //不扫描的默认直接直接标记绿色已装配, 但是文件也需要发送 - if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue()) != 0) isBreakLoop = true; - isSendFile = true; - //发送文件到客户端 - sendFile(reqBean, productionAssemblyNosortContext.fileIsFinished()); - if (isBreakLoop) break LOOP; - } - prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList); - } else { - List productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext(); - for (MesProductionAssemblySortContext productionAssemblySortContext : productionAssemblySortContextList) { - if (null == productionAssemblySortContext || - productionAssemblySortContext.getFileIsFinished().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || - productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue()) == 0 || - (StringUtils.isEmpty(productionAssemblySortContext.getImageFileUrl()) && StringUtils.isEmpty(productionAssemblySortContext.getAudioFileUrl()))) continue; - //不扫描的默认直接直接标记绿色已装配, 但是文件也需要发送 - if (productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue()) != 0) isBreakLoop = true; - isSendFile = true; - //发送文件到客户端 - sendFile(reqBean, productionAssemblySortContext.fileIsFinished()); - if (isBreakLoop) break LOOP; - } - prodRuleContext.assemblyDataJson(productionAssemblySortContextList); - } - } - //保存上下文产品加工规则信息集合 - if (isSendFile) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); - } - - //发送文件到客户端 - private void sendFile(StationRequestBean reqBean, MesProductionAssemblyContext productionAssemblyContext) { - if (!StringUtils.isEmpty(productionAssemblyContext.getImageFileUrl())) - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()) - .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()) - .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue()) - .customPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_ASSEMBLY) - .message(String.format("装配件信息来源ID[%s],装配件爆炸图URL[%s]", productionAssemblyContext.getSourceId(), productionAssemblyContext.getImageFileUrl())) - .resultObj(new JSONObject().put(MesPcnExtConstWords.URL, productionAssemblyContext.getImageFileUrl()))); - if (!StringUtils.isEmpty(productionAssemblyContext.getAudioFileUrl())) - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()) - .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()) - .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue()) - .message(String.format("装配件信息来源ID[%s],装配件音频文件URL[%s]", productionAssemblyContext.getSourceId(), productionAssemblyContext.getAudioFileUrl())) - .resultObj(new JSONObject().put(MesPcnExtConstWords.URL, productionAssemblyContext.getAudioFileUrl()))); - } - - //判断是否存在装配件清单 - private Boolean checkIsNeedScanAssembly(List prodRuleContextList) { - Optional optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst(); - return (null == optional || !optional.isPresent()) ? false : true; - } - - //验证是否存在待绑定数据 - private Boolean hasUnBindAssembly(List prodRuleContextList) { - Boolean hasUnBindAssembly = false; - for (MesProdRuleContext prodRuleContext : prodRuleContextList) { - if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; - List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); - Optional optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst(); - if (null == optional || !optional.isPresent()) continue; - - hasUnBindAssembly = true; - break; - } - return hasUnBindAssembly; - } - - //封装当前扫描的装配件信息 - private List getAssemblySnJson(StationRequestBean reqBean, String scanInfo) { - - List equipVariableCollectContextList = new ArrayList<>(); - - equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue())); - - return equipVariableCollectContextList; - - } - -} 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 a80f69d..f3351e2 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 @@ -103,7 +103,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); //保存进料主条码数据 if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList); - } else resultBean.checkRepeat(); + } //显示装配件信息 showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList);