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 ae3c820..64ddc70 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 @@ -189,4 +189,7 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除料桶原材料数据集合") void deleteMesRawPartChargingDataContext(StationRequestBean reqBean); + @ApiOperation(value = "验证工步集死循环执行时是否超过最大执行次数") + Boolean doCheckOverEndlessLoopReadTimes(StationRequestBean reqBean, String maxTimes); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 8e7b741..97d85e2 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -588,13 +588,14 @@ public class MesWorkOrderService implements IMesWorkOrderService { oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); if (StringUtils.isEmpty(productionRecord.getWorkOrderNo())) { oldMesWorkOrder.setCompleteQty(oldMesWorkOrder.getReportedQty()); + double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); + oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); } //更新SAP计划完成数量 saveMesProductPlan(oldMesWorkOrder, false, true); //更新工单状态 - double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); - oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); + if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) { oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtService.java index 7671021..dc30512 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtService.java @@ -23,7 +23,10 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.List; +import java.util.Map; import java.util.StringJoiner; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; @Slf4j @@ -36,59 +39,93 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic @Autowired private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository; + private final static Map> cellMsg2RepeatMap = new ConcurrentHashMap(); + @Override public void doWriteDbLog(StationResultBean resultBean) { - MesWorkCellScanMonitorLog workCellScanMonitorLog; - //获取上下文工位扫描监控信息 MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.getScanMonitorContext(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode()); - if (null != scanMonitorContext) { + if (checkRepeat(resultBean, scanMonitorContext)) return; - if (checkRepeat(resultBean, scanMonitorContext)) return; + MesWorkCellScanMonitorLog workCellScanMonitorLog = new MesWorkCellScanMonitorLog(); - workCellScanMonitorLog = new MesWorkCellScanMonitorLog(); + if (null != scanMonitorContext) BeanUtils.copyProperties(scanMonitorContext, workCellScanMonitorLog); + else log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExtService --- 上下文当前不存在工位扫描监控信息 --- {}", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), resultBean.toWriteDbString()); - BeanUtils.copyProperties(scanMonitorContext, workCellScanMonitorLog); + BeanUtils.copyProperties(resultBean, workCellScanMonitorLog); + + workCellScanMonitorLog.setMessageType(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.codeOfValue(resultBean.getDataType())); + + workCellScanMonitorLog.setOrgWorkCode(new StringJoiner(MesPcnExtConstWords.E_UNDERLINE).add(workCellScanMonitorLog.getOrganizeCode()).add(workCellScanMonitorLog.getWorkCenterCode()).toString()); + + ConvertBean.serviceModelInitialize(workCellScanMonitorLog, resultBean.getUserInfo()); + workCellScanMonitorLog.setCreateDatetime(resultBean.getCreateDatetime()); + //存在开模ID的记录延迟同步 + if (!StringUtils.isEmpty(workCellScanMonitorLog.getMouldRecordId())) { + workCellScanMonitorLog.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + workCellScanMonitorLog.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue()); } else { + workCellScanMonitorLog.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + workCellScanMonitorLog.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()); + } + + workCellScanMonitorLogRepository.insert(workCellScanMonitorLog); + + } + + private Boolean checkRepeat(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) { + + initCellMsg2RepeatMap(resultBean); - workCellScanMonitorLog = new MesWorkCellScanMonitorLog(); + Long mouldRecordId = null != scanMonitorContext ? scanMonitorContext.getMouldRecordId() : null; + String mouldRecordIdStr = !StringUtils.isEmpty(mouldRecordId) ? mouldRecordId.toString() : MesPcnExtConstWords.EMPTY; - log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExtService --- 上下文当前不存在工位扫描监控信息 --- {}", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), resultBean.toWriteDbString()); + if (!cellMsg2RepeatMap.get(resultBean.getClientInfo()).get(0).equals(mouldRecordIdStr)) { + cellMsg2RepeatMap.get(resultBean.getClientInfo()).clear(); + cellMsg2RepeatMap.get(resultBean.getClientInfo()).add(0, mouldRecordIdStr); + + //补偿数据 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue(), MesPcnExtConstWords.DEAL_STATUS, packBean); + if (!StringUtils.isEmpty(mouldRecordId)) DdlPreparedPack.getNumNOEqualPack(mouldRecordId, MesPcnExtConstWords.MOULD_RECORD_ID, packBean); + int count = workCellScanMonitorLogRepository.updateByPropertiesNoSync( + new String[]{MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.DEAL_STATUS}, + new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()}, + packBean); + + log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExtService --- 补偿同步条数:{} ---", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), count); } - BeanUtils.copyProperties(resultBean, workCellScanMonitorLog); + if (resultBean.getIsCheckRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return false; - workCellScanMonitorLog.setMessageType(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.codeOfValue(resultBean.getDataType())); + synchronized ((resultBean.getClientInfo() + this.getClass().getSimpleName()).intern()) { - workCellScanMonitorLog.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue()); + if (cellMsg2RepeatMap.get(resultBean.getClientInfo()).contains(resultBean.getMessage())) return true; - workCellScanMonitorLog.setOrgWorkCode(new StringJoiner(MesPcnExtConstWords.E_UNDERLINE).add(workCellScanMonitorLog.getOrganizeCode()).add(workCellScanMonitorLog.getWorkCenterCode()).toString()); + cellMsg2RepeatMap.get(resultBean.getClientInfo()).add(resultBean.getMessage()); - ConvertBean.serviceModelInitialize(workCellScanMonitorLog, resultBean.getUserInfo()); + return false; - workCellScanMonitorLogRepository.insert(workCellScanMonitorLog); + } } - private Boolean checkRepeat(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) { + private void initCellMsg2RepeatMap(StationResultBean resultBean) { - if (resultBean.getIsCheckRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return false; + cellMsg2RepeatMap.computeIfAbsent(resultBean.getClientInfo(), o -> { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); - DdlPreparedPack.getStringEqualPack(resultBean.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean); - DdlPreparedPack.getNumEqualPack(scanMonitorContext.getMouldRecordId(), MesPcnExtConstWords.MOULD_RECORD_ID, packBean); - DdlPreparedPack.getStringEqualPack(resultBean.getStepCode(), MesPcnExtConstWords.STEP_CODE, packBean); - if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) DdlPreparedPack.getStringEqualPack(resultBean.getMessage(), MesPcnExtConstWords.MESSAGE, packBean); - else DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); - MesWorkCellScanMonitorLog workCellScanMonitorLogDb = workCellScanMonitorLogRepository.getByProperty(packBean); - if (null == workCellScanMonitorLogDb || StringUtils.isEmpty(workCellScanMonitorLogDb.getMessage())) return false; - if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !workCellScanMonitorLogDb.getMessage().equals(resultBean.getMessage())) return false; - return true; + List list = new CopyOnWriteArrayList<>(); + + list.add(0, MesPcnExtConstWords.EMPTY); + + return list; + + }); } @@ -108,7 +145,6 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); -// DdlPreparedPack.getStringEqualPack(resultBean.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean); DdlPreparedPack.getNumEqualPack(Long.valueOf(resultBean.getScanInfo()), MesPcnExtConstWords.MOULD_RECORD_ID, packBean); workCellScanMonitorLogRepository.updateByProperties( @@ -120,5 +156,4 @@ public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogServic } - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtServiceBak.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtServiceBak.java new file mode 100644 index 0000000..f1ee3b6 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesWorkCellScanMonitorLogExtServiceBak.java @@ -0,0 +1,124 @@ +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService; +//import cn.estsh.i3plus.platform.common.convert.ConvertBean; +//import cn.estsh.i3plus.platform.common.tool.TimeTool; +//import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +//import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellScanMonitorLog; +//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +//import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellScanMonitorLogRepository; +//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.BeanUtils; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +//import org.springframework.util.CollectionUtils; +//import org.springframework.util.StringUtils; +// +//import java.util.List; +//import java.util.StringJoiner; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Service +//public class MesWorkCellScanMonitorLogExtServiceBak implements ISwsWriteDbLogService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository; +// +// @Override +// public void doWriteDbLog(StationResultBean resultBean) { +// +// MesWorkCellScanMonitorLog workCellScanMonitorLog; +// +// //获取上下文工位扫描监控信息 +// MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.getScanMonitorContext(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode()); +// +// if (null != scanMonitorContext) { +// +// if (checkRepeat(resultBean, scanMonitorContext)) return; +// +// workCellScanMonitorLog = new MesWorkCellScanMonitorLog(); +// +// BeanUtils.copyProperties(scanMonitorContext, workCellScanMonitorLog); +// +// } else { +// +// workCellScanMonitorLog = new MesWorkCellScanMonitorLog(); +// +// log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExtService --- 上下文当前不存在工位扫描监控信息 --- {}", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), resultBean.toWriteDbString()); +// +// } +// +// BeanUtils.copyProperties(resultBean, workCellScanMonitorLog); +// +// workCellScanMonitorLog.setMessageType(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.codeOfValue(resultBean.getDataType())); +// +// workCellScanMonitorLog.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue()); +// +// workCellScanMonitorLog.setOrgWorkCode(new StringJoiner(MesPcnExtConstWords.E_UNDERLINE).add(workCellScanMonitorLog.getOrganizeCode()).add(workCellScanMonitorLog.getWorkCenterCode()).toString()); +// +// ConvertBean.serviceModelInitialize(workCellScanMonitorLog, resultBean.getUserInfo()); +// +// workCellScanMonitorLogRepository.insert(workCellScanMonitorLog); +// +// } +// +// private Boolean checkRepeat(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) { +// +// if (resultBean.getIsCheckRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return false; +// +// DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); +// DdlPreparedPack.getStringEqualPack(resultBean.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean); +// DdlPreparedPack.getNumEqualPack(scanMonitorContext.getMouldRecordId(), MesPcnExtConstWords.MOULD_RECORD_ID, packBean); +// DdlPreparedPack.getStringEqualPack(resultBean.getStepCode(), MesPcnExtConstWords.STEP_CODE, packBean); +// if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) DdlPreparedPack.getStringEqualPack(resultBean.getMessage(), MesPcnExtConstWords.MESSAGE, packBean); +// else DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); +// MesWorkCellScanMonitorLog workCellScanMonitorLogDb = workCellScanMonitorLogRepository.getByProperty(packBean); +// if (null == workCellScanMonitorLogDb || StringUtils.isEmpty(workCellScanMonitorLogDb.getMessage())) return false; +// if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !workCellScanMonitorLogDb.getMessage().equals(resultBean.getMessage())) return false; +// return true; +// +// } +// +// @Override +// public void doRestoreDbLog(StationResultBean resultBean) { +// +// if (StringUtils.isEmpty(resultBean.getScanInfo()) || CollectionUtils.isEmpty(resultBean.getResultList())) return; +// +// List productionPsOutContextList = resultBean.getResultList(); +// +// String workOrderNo = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesProductionPsOutContext::getWorkOrderNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); +// String serialNumber = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSerialNumber()))).map(MesProductionPsOutContext::getSerialNumber).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); +// String productSn = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProductSn()))).map(MesProductionPsOutContext::getProductSn).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); +// String custSn = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCustSn()))).map(MesProductionPsOutContext::getCustSn).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); +// String partNo = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); +// String partName = productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartName()))).map(MesProductionPsOutContext::getPartName).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); +// +// DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(resultBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); +//// DdlPreparedPack.getStringEqualPack(resultBean.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean); +// DdlPreparedPack.getNumEqualPack(Long.valueOf(resultBean.getScanInfo()), MesPcnExtConstWords.MOULD_RECORD_ID, packBean); +// +// workCellScanMonitorLogRepository.updateByProperties( +// new String[]{MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.SERIAL_NUMBER, MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.CUST_SN, +// MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PART_NAME, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.DEAL_STATUS}, +// new Object[]{workOrderNo, serialNumber, productSn, custSn, +// partNo, partName, TimeTool.getNowTime(true), resultBean.getUserInfo(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()}, +// packBean); +// +// } +// +// +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchCompareValueService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchCompareValueService.java index 2eafcef..68b7cb5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchCompareValueService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchCompareValueService.java @@ -4,7 +4,9 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -65,15 +67,28 @@ public class MesEvcRuleMatchCompareValueService implements IMesEquipVariableCfgR if (StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) return false; //比对值是否相等 - if (!compareTo(collectContext.getValue(), equipVariableCollectContext.getEquipVariableValue())) return false; + if (!compareTo(collectContext.getValue(), equipVariableCollectContext.getEquipVariableValue(), equipVariableCollectContext.getDataType())) return false; } return true; } - private Boolean compareTo(String value1, String value2) { - return value1.toLowerCase().equals(value2.toLowerCase()) ? true : false; + private Boolean compareTo(String value1, String value2, Integer dataType) { + value1 = value1.toUpperCase(); + value2 = value2.toUpperCase(); + if (value1.equals(value2)) return true; + if (StringUtils.isEmpty(dataType) || dataType.compareTo(MesExtEnumUtil.VARIABLE_DATA_TYPE.VARIABLE_DATA_TYPE_40.getValue()) != 0) return false; + value1 = transferValueBoo(value1); + return value1.equals(value2); + } + + private String transferValueBoo(String value) { + if (value.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) return CommonEnumUtil.TRUE_OR_FALSE.TRUE.name(); + if (value.equals(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValueStr())) return CommonEnumUtil.TRUE_OR_FALSE.FALSE.name(); + if (value.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr(); + if (value.equals(CommonEnumUtil.TRUE_OR_FALSE.FALSE.name())) return CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValueStr(); + return value; } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java index d34e780..bb19156 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; 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.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; @@ -13,7 +14,6 @@ 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; @@ -34,6 +34,9 @@ import java.util.stream.Collectors; public class MesAssemblyReadStepService extends BaseStepService { @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired @@ -59,10 +62,20 @@ public class MesAssemblyReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + StepResult stepResult = StepResult.getSuccessComplete(); + + String endlessLoopReadTimes = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); + if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; + if (productionDispatchContextStepService.doCheckOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + } + //发送工步内容 productionCustomContextStepService.doSendStepContextMessage(reqBean); - return super.init(reqBean); + return stepResult; } @@ -71,11 +84,11 @@ public class MesAssemblyReadStepService extends BaseStepService { StationResultBean resultBean = new StationResultBean(); + StepResult stepResult = StepResult.getSuccessComplete(); + //获取工步参数 Optional> stepParamMap = getStepParams(reqBean); - StepResult stepResult = StepResult.getSuccessComplete().stepParamMap(stepParamMap); - //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean, stepParamMap); @@ -127,7 +140,7 @@ public class MesAssemblyReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -152,7 +165,7 @@ public class MesAssemblyReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的装配件进行规则匹配 @@ -160,14 +173,13 @@ public class MesAssemblyReadStepService extends BaseStepService { //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中..", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } - //保存设备当前一轮工序待验证的装配件条码信息 productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList); @@ -176,7 +188,7 @@ public class MesAssemblyReadStepService extends BaseStepService { productionCustomContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]装配件条码的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]装配件条码的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).scanInfo(scanInfo), stepResult, String.format("当前已读取到设备[%s]装配件条码信息[%s]!", cellEquipContext.getEquipmentName(), scanInfo)); 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 10e2641..a80f69d 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.checkRepeatType(false); + } else resultBean.checkRepeat(); //显示装配件信息 showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index 5d342d3..ec76139 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -91,7 +91,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); //保存进料主条码数据 if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList); - } else resultBean.checkRepeatType(false); + } else resultBean.checkRepeat(); if (!stepResult.isCompleted()) return stepResult; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java index 646c15c..c31c3c5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java @@ -16,7 +16,6 @@ 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; @@ -72,7 +71,7 @@ public class MesEquipByPassReadStepService extends BaseStepService { //配置错误 if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfgAndValue(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue()).getSuccess()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeatType(false), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage()); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage()); //搜集设备数据变量接口逻辑信息中的二级变量 List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); @@ -82,7 +81,7 @@ public class MesEquipByPassReadStepService extends BaseStepService { //配置错误 if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeatType(false), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage()); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage()); //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList, true); @@ -95,18 +94,18 @@ public class MesEquipByPassReadStepService extends BaseStepService { private StepResult matchByPassValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 - if (!equipLogDispatchContext.getIsCollectValue()) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeatType(false), stepResult, false, + if (!equipLogDispatchContext.getIsCollectValue()) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]BYPASS信号,持续监听中...", cellEquipContext.getEquipmentName())); //匹配BYPASS信号有效性 Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(false), String.format("读取到设备[%s]BYPASS信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), String.format("读取到设备[%s]BYPASS信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //发送BYPASS信号给客户端 this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BYPASS_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(result ? MesExtEnumUtil.COLOR.GREEN.getValue() : MesExtEnumUtil.COLOR.RED.getValue())); - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(false).scanInfo(resultBean.getResultObj().toString()), stepResult, + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat().scanInfo(resultBean.getResultObj().toString()), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前已读取到设备[%s]BYSS信号[%s]!", cellEquipContext.getEquipmentName(), resultBean.getResultObj())); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index c855fc3..9ec8077 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -17,7 +17,6 @@ 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; @@ -123,7 +122,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -137,7 +136,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的头道模具号进行规则匹配 @@ -145,8 +144,8 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -157,7 +156,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]头道模具号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]头道模具号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //默认只需要配置一个点位 String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java index 29dda29..29b09f5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java @@ -14,7 +14,6 @@ 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; @@ -113,7 +112,7 @@ public class MesMembraneSignalReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -131,21 +130,21 @@ public class MesMembraneSignalReadStepService extends BaseStepService { MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]胎膜切换信号,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]胎膜切换信号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //匹配就绪信号有效性 Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MEMBRANE_SIGNAL.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); if (!result) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("读取设备[%s]胎膜切换信号的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("读取设备[%s]胎膜切换信号的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]胎膜切换信号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]胎膜切换信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]胎膜切换信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //匹配成功发送工步内容 productionCustomContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MEMBRANE_SIGNAL.getDescription(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index 8c0af96..9751417 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -13,7 +13,6 @@ 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; @@ -119,7 +118,7 @@ public class MesMouldNoReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -140,7 +139,7 @@ public class MesMouldNoReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || !StringUtils.isEmpty(isReadMultiCavityCfg))) { - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } else if (!equipLogDispatchContext.getIsCollectValue()) { return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentName())); @@ -151,8 +150,8 @@ public class MesMouldNoReadStepService extends BaseStepService { //没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息 if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || !StringUtils.isEmpty(isReadMultiCavityCfg))) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("当前未读取到设备[%s]有效的模具号,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("当前未读取到设备[%s]有效的模具号,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -165,7 +164,7 @@ public class MesMouldNoReadStepService extends BaseStepService { equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]模具号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]模具号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //默认只需要配置一个点位 String mouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index a0c0061..0b66669 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -15,7 +15,6 @@ 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; @@ -117,7 +116,7 @@ public class MesProductResultReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -128,7 +127,7 @@ public class MesProductResultReadStepService extends BaseStepService { equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]加工结果的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]加工结果的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); return stepResult; @@ -140,7 +139,7 @@ public class MesProductResultReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //根据变量类别分别匹配加工结果 @@ -181,8 +180,8 @@ public class MesProductResultReadStepService extends BaseStepService { String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()))); } - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckNosortStepService.java index 0fa288a..b430d49 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckNosortStepService.java @@ -119,35 +119,54 @@ public class MesProductSnCheckNosortStepService extends BaseStepService { String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY; - List standardList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0)).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); - List unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) { + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size())); + } + if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) { return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.stream().filter(o -> null != o).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)))); } - if (CollectionUtils.isEmpty(standardList)) { + produceSnList = produceSnList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); + + MesProduceSn produceSn = produceSnList.get(0); + + if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()))); + + if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()))); - productionPsInContextList.add(new MesProductionPsInContext( - reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(unknowList.get(0).getId(), unknowList.get(0).getProcessCode(), unknowList.get(0).getCraftCode())); + //正常条码 + if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { - } else { + productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); - if (MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != standardList.get(0).getQcStatus() && - MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue() != standardList.get(0).getQcStatus()) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(standardList.get(0).getQcStatus()))); + return stepResult; + } + + //未知条码【工序为空 代表新做的工序没有加工完成】 + if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { + + productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); - if (MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue() < standardList.get(0).getSnStatus()) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(standardList.get(0).getSnStatus()))); + return stepResult; + } + + //未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】 + if (StringUtils.isEmpty(produceSn.getProcessCode())) { - MesProductionPsInContext productionPsInContext = new MesProductionPsInContext(workCell, standardList.get(0)).messageSource(equipVariableCollectContext.getMessageSource()); - if (!CollectionUtils.isEmpty(unknowList)) productionPsInContext.relateId(unknowList.get(0).getId(), standardList.get(0).getProcessCode(), standardList.get(0).getCraftCode()); - productionPsInContextList.add(productionPsInContext); + productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + return stepResult; } + //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 + productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + return stepResult; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckSortStepService.java index b8fc600..9489aa0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckSortStepService.java @@ -90,7 +90,7 @@ public class MesProductSnCheckSortStepService extends BaseStepService { //封装 读/扫主条件信息到进料主条码数据信息中 List productionPsInContextList = new ArrayList<>(); - if (!CollectionUtils.isEmpty(productSnList)) equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnMap.get(o.getEquipVariableValue()).get(0)).messageSource(o.getMessageSource()).queueId(queueOrderMap.get(o).get(0).getId()))); + if (!CollectionUtils.isEmpty(productSnList)) equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnMap.get(o.getEquipVariableValue()).get(0)).messageSource(o.getMessageSource()).relateId(queueOrderMap.get(o).get(0).getId()))); //获取进料主条码数据信息 List productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index 4303e76..bd08357 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -14,6 +14,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -29,8 +30,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -113,6 +116,8 @@ public class MesProductSnGenerateStepService extends BaseStepService { List partNoList = (prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false); + //从上下文中取出工位对象 + MesWorkCell workCell = productionProcessContext.getWorkCell(); //获取上下文加工结果 String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); @@ -123,7 +128,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { //循环生成零件条码,并写入产出零件 List productionPsOutContextList = new ArrayList<>(); prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getOutPartNo()))).forEach(o -> { - MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, ppMap, psMap, partMap, prodShiftContext, productResult); + MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, workCell, o, ppMap, psMap, partMap, prodShiftContext, productResult); if (null != productionPsOutContext) productionPsOutContextList.add(productionPsOutContext); }); @@ -135,7 +140,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { } //生成零件条码 - private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext, + private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCell workCell, MesProdRuleContext prodRuleContext, Map ppMap, Map psMap, Map partMap, MesProdShiftContext prodShiftContext, String productResult) { //产出零件数据信息 @@ -147,6 +152,8 @@ public class MesProductSnGenerateStepService extends BaseStepService { //加工规则中进料零件与产出零件是否一致 Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext); + //工位是否不累计工单完成数 + Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty()); MesProduceSn produceSn; //进出一致, 不累计工单完成数量 在显示装配件工步中已经验证了 进出一致 进出存在工单则必须一致 @@ -205,7 +212,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { produceSn = produceSnExtService.insert(produceSn); } else produceSnExtService.updateNoSync(produceSn); - return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(!StringUtils.isEmpty(produceSn.getWorkOrderNo()) && !isSamePart); + return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty(isCellNoCalcQty, produceSn.getWorkOrderNo(), isSamePart, productionPartContext, productionPsInContext)); } @@ -230,6 +237,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { return part.getProductMatchRule(); } + //加工规则中进料零件与产出零件是否一致 private Boolean isSamePart(MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext) { if (null == productionPsInContext) return false; if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false; @@ -238,4 +246,26 @@ public class MesProductSnGenerateStepService extends BaseStepService { return true; } + //工位是否不累计工单完成数 + private Boolean isCellNoCalcQty(Integer noCalcOrderQty) { + return (!StringUtils.isEmpty(noCalcOrderQty) && noCalcOrderQty.compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) ? true : false; + } + + //判断是否累计工单完成数 + private Boolean isCalcCompleteQty(Boolean isCellNoCalcQty, String workOrderNo, Boolean isSamePart, MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext) { + if (isCellNoCalcQty) return false; + if (StringUtils.isEmpty(workOrderNo)) return false; + if (checkIsSameWorkOrder(isSamePart, productionPartContext, productionPsInContext)) return false; + return true; + } + + //进出一致的情况下判断进出是否都存在工单 + private Boolean checkIsSameWorkOrder(Boolean isSamePart, MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext) { + if (!isSamePart) return false; + //进出零件一致则无需验证进出的对象为空 + if (StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || StringUtils.isEmpty(productionPsInContext.getWorkOrderNo())) return false; + //无需验证进出的工单是否一致,在匹配加工规则的时候已经验证了必须一致 + return true; + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java index 5ca3b49..a21657a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; 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.actor.shipping.dispatch.IFsmCommonService; 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; @@ -14,11 +15,11 @@ 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; @@ -35,6 +36,9 @@ import java.util.stream.Collectors; public class MesProductSnReadStepService extends BaseStepService { @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired @@ -60,10 +64,20 @@ public class MesProductSnReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + StepResult stepResult = StepResult.getSuccessComplete(); + + String endlessLoopReadTimes = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); + if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; + if (productionDispatchContextStepService.doCheckOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + } + //发送工步内容 productionCustomContextStepService.doSendStepContextMessage(reqBean); - return super.init(reqBean); + return stepResult; } @@ -120,7 +134,7 @@ public class MesProductSnReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -134,7 +148,7 @@ public class MesProductSnReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的主条码进行规则匹配 @@ -142,8 +156,8 @@ public class MesProductSnReadStepService extends BaseStepService { //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("当前未读取到设备[%s]有效的主条码,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("当前未读取到设备[%s]有效的主条码,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -152,8 +166,8 @@ public class MesProductSnReadStepService extends BaseStepService { //根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态 equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); - this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("读取到设备[%s]主条码的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("读取到设备[%s]主条码的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //读取主条码前置验证 checkReadProductSnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java index a82dbfa..b43b3f8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java @@ -16,7 +16,6 @@ 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; @@ -122,7 +121,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -136,7 +135,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]产出零件号,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]产出零件号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的产出零件号进行规则匹配 @@ -144,8 +143,8 @@ public class MesProductionPartNoReadStepService extends BaseStepService { //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("当前未读取到设备[%s]有效的产出零件号,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("当前未读取到设备[%s]有效的产出零件号,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的产出零件号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -155,7 +154,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService { equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]产出零件号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]产出零件号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //发送工步内容 String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java index 32aff62..69bda53 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java @@ -14,7 +14,6 @@ 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; @@ -113,7 +112,7 @@ public class MesReadySignalReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -131,21 +130,21 @@ public class MesReadySignalReadStepService extends BaseStepService { MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]就绪信号,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]就绪信号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //匹配就绪信号有效性 Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); if (!result) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("读取设备[%s]就绪信号的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("读取设备[%s]就绪信号的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]就绪信号,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), - String.format("读取到设备[%s]就绪信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + String.format("读取到设备[%s]就绪信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //匹配成功发送工步内容 productionCustomContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getDescription(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java index 571335c..000909a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java @@ -196,7 +196,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService { MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(matchValue, equipmentVariable, cellEquipContext.getKepwareFlag(equipmentVariable.getChannel())); if (!equipVariableRwResult.getIsSuccessed()) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeatType(false), String.format("设备[%s]:发送设备加工参数失败!原因:%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("设备[%s]:发送设备加工参数失败!原因:%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); continue; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java index 91c47c5..fb0bbad 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java @@ -109,9 +109,9 @@ public class MesSendInitializationCmdStepService extends BaseStepService { equipVariableRwResult = equipVariableRwExtService.writeVariable(categoryLevelTwoMap.get(equipmentVariable.getCategoryLevelTwo()).get(0), equipmentVariable, kepwareFlag); if (equipVariableRwResult.getIsSuccessed()) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeatType(false), String.format("[%s]%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("[%s]%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); } else { - this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeatType(false), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); break; } } @@ -122,7 +122,7 @@ public class MesSendInitializationCmdStepService extends BaseStepService { if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentName())); - execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeatType(false), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); + execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); //每失败一次 睡眠 if (i != maxRetryTimes) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java index 4333314..f11d6b4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java @@ -111,9 +111,9 @@ public class MesSendProcessCmdStepService extends BaseStepService { equipVariableRwResult = equipVariableRwExtService.writeVariable(categoryLevelTwoMap.get(equipmentVariable.getCategoryLevelTwo()).get(0), equipmentVariable, kepwareFlag); if (equipVariableRwResult.getIsSuccessed()) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeatType(false), String.format("[%s]%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("[%s]%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); } else { - this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeatType(false), String.format("设备[%s]:允许加工指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("设备[%s]:允许加工指令发送失败!原因:%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); break; } @@ -125,7 +125,7 @@ public class MesSendProcessCmdStepService extends BaseStepService { if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:允许加工指令发送成功!", cellEquipContext.getEquipmentName())); - execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeatType(false), stepResult, String.format("设备[%s]:允许加工指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); + execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, String.format("设备[%s]:允许加工指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage())); //每失败一次 睡眠 if (i != maxRetryTimes) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java index 9eefa76..e40bfe8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; 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.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; @@ -15,11 +16,11 @@ 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.List; import java.util.Map; @@ -35,6 +36,9 @@ import java.util.stream.Collectors; public class MesWorkOrderReadStepService extends BaseStepService { @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired @@ -57,10 +61,20 @@ public class MesWorkOrderReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + StepResult stepResult = StepResult.getSuccessComplete(); + + String endlessLoopReadTimes = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); + if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; + if (productionDispatchContextStepService.doCheckOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + } + //发送工步内容 productionCustomContextStepService.doSendStepContextMessage(reqBean); - return super.init(reqBean); + return stepResult; } @@ -119,7 +133,7 @@ public class MesWorkOrderReadStepService extends BaseStepService { //验证设备通信质量 productionCustomContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s],持续监听中...", cellEquipContext.getEquipmentName(), cellEquipContext.getQuality())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); @@ -138,7 +152,7 @@ public class MesWorkOrderReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeatType(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工单,持续监听中...", cellEquipContext.getEquipmentName())), + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工单,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的加工单进行规则匹配 @@ -146,15 +160,15 @@ public class MesWorkOrderReadStepService extends BaseStepService { //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(), - String.format("当前未读取到设备[%s]有效的加工单,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("当前未读取到设备[%s]有效的加工单,持续监听中...%s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的加工单,持续监听中...", cellEquipContext.getEquipmentName())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } - this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(false), - String.format("读取到设备[%s]加工单的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), + String.format("读取到设备[%s]加工单的详细JSON内容: %s", cellEquipContext.getEquipmentName(), equipLogDispatchContext.getDefaultJSONString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //保存设备当前一轮工序的待验证的加工单信息 productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList); 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 4591c84..a3f4641 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 @@ -417,4 +417,17 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT); } + @Override + public Boolean doCheckOverEndlessLoopReadTimes(StationRequestBean reqBean, String maxTimes) { + String item = new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES).add(reqBean.getCurFsmState().getNextStatus()).toString(); + String endlessLoopReadTimes = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item); + if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ZERO_STR; + if (Integer.valueOf(endlessLoopReadTimes).compareTo(Integer.valueOf(maxTimes)) >= 0) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item); + return true; + } + saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item, String.valueOf(Integer.valueOf(endlessLoopReadTimes) + 1)); + return false; + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties index ccbee59..47d2f62 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties @@ -1,5 +1,5 @@ #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=71 +spring.profiles.active=docker #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C\u7801 desc.application.name=\u751F\u4EA7\u4E2D\u5FC3\u8282\u70B9 ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### @@ -13,7 +13,7 @@ spring.message.encoding=UTF-8 #\u542F\u52A8\u65F6\u52A0\u8F7D\uFF0C\u9884\u52A0\u8F7Dcontroller spring.mvc.servlet.load-on-startup=1 #\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4impp.web.cross.hosts -impp.web.cross=trueWorkCellCacheDataRedisFilterService +impp.web.cross=true #\u4E0A\u4F20\u5355\u4E2A\u6587\u4EF6\u5927\u5C0F spring.servlet.multipart.max-file-size=10MB #request\u8BF7\u6C42\u5168\u90E8\u6570\u636E\u6700\u5927\u9650\u5236 diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipLogDispatchContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipLogDispatchContext.java index 0f629e0..0b62069 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipLogDispatchContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipLogDispatchContext.java @@ -1,5 +1,8 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.support.spring.PropertyPreFilters; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -55,4 +58,8 @@ public class MesEquipLogDispatchContext implements Serializable { return this; } + public String getDefaultJSONString() { + return JSONObject.toJSONString(this, new PropertyPreFilters().addFilter().addExcludes(MesPcnExtConstWords.EQUIP_VARIABLE_READ_TIME)); + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java index 5306ec5..3fcb6f7 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java @@ -105,15 +105,8 @@ public class MesProductionPsInContext implements Serializable { return this; } - public MesProductionPsInContext relateId(Long relateId, String processCode, String craftCode) { + public MesProductionPsInContext relateId(Long relateId) { this.relateId = relateId; - if (!StringUtils.isEmpty(processCode)) this.processCode = processCode; - if (!StringUtils.isEmpty(craftCode)) this.craftCode = craftCode; - return this; - } - - public MesProductionPsInContext queueId(Long queueId) { - this.relateId = queueId; return this; } 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 75922ae..26fcd49 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 @@ -175,6 +175,8 @@ public class MesPcnExtConstWords { public static final String PRINT_STATUS = "printStatus"; // 颜色 public static final String COLOR = "color"; + // 数据变量读取时间 + public static final String EQUIP_VARIABLE_READ_TIME = "equipVariableReadtime"; // 时间格式 public static final String DATE_FORMAT_SSS = "yyyy-MM-dd HH:mm:ss.SSS"; @@ -230,7 +232,10 @@ public class MesPcnExtConstWords { public static final String COUNT_DOWN_CFG_DEFAULT = "60,5"; // 工位参数按钮事件参数: 自动上锁 public static final String ATUO_PRODUCTION_LOCK = "ATUO_PRODUCTION_LOCK"; - + // 死循环读取次数[工位参数] + public static final String ENDLESS_LOOP_READ_TIMES = "ENDLESS_LOOP_READ_TIMES"; + // 死循环读取默认默认次数 + public static final String ENDLESS_LOOP_READ_TIMES_DEFAULT = "10"; // 工位/工步 参数按钮事件 public static final String FUNCTION_CMD = "FUNCTION_CMD";