tags/yfai-pcn-ext-v1.0
王杰 11 months ago
parent 1374383614
commit d2a1b018d4

@ -68,6 +68,18 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文发送允许加工指令执行结果") @ApiOperation(value = "删除上下文发送允许加工指令执行结果")
void deleteSendProcessCmdContext(StationRequestBean reqBean); void deleteSendProcessCmdContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文产出零件号")
List<MesEquipVariableCollectContext> getProductionPartNoContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文产出零件号是否存在")
Boolean checkProductionPartNoIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文产出零件号", notes = "[JSON]List<MesEquipVariableCollectContext>")
Boolean saveProductionPartNoContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productionPartNoList);
@ApiOperation(value = "删除上下文产出零件号")
void deleteProductionPartNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文头道模具号") @ApiOperation(value = "获取上下文头道模具号")
MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean); MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean);
@ -113,6 +125,18 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文模具号") @ApiOperation(value = "删除上下文模具号")
void deleteMouldNoContext(StationRequestBean reqBean); void deleteMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产扫/读信息:加工单")
List<MesEquipVariableCollectContext> getScanWorkOrderNoContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文扫/读信息:加工单是否存在")
Boolean checkScanWorkOrderNoIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文扫/读信息:加工单", notes = "[JSON]List<MesEquipVariableCollectContext>")
Boolean saveScanWorkOrderNoContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productSnList);
@ApiOperation(value = "删除上下文扫/读信息:加工单")
void deleteScanWorkOrderNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产扫/读信息:主条码") @ApiOperation(value = "获取上下文生产扫/读信息:主条码")
List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean); List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean);
@ -201,10 +225,10 @@ public interface IMesProductionDispatchContextStepService {
void deleteProductionStatisticsContext(StationRequestBean reqBean); void deleteProductionStatisticsContext(StationRequestBean reqBean);
@ApiOperation(value = "获取手动选择的腔数及工单信息上下文") @ApiOperation(value = "获取手动选择的腔数及工单信息上下文")
String getFunctionChooseCavityOrderContext(StationRequestBean reqBean); List<StationKvBean> getFunctionChooseCavityOrderContext(StationRequestBean reqBean);
@ApiOperation(value = "保存手动选择的腔数及工单信息上下文", notes = "腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3") @ApiOperation(value = "保存手动选择的腔数及工单信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=1)]")
Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, String value); Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List<StationKvBean> resultList);
@ApiOperation(value = "删除手动选择的腔数及工单信息上下文") @ApiOperation(value = "删除手动选择的腔数及工单信息上下文")
void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean);

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesWorkOrderExtService {
@ApiOperation(value = "根据生产工单号集合 查询生产工单数据")
List<MesWorkOrder> getWorkOrderList(String organizeCode, List<String> workOrderNoList);
@ApiOperation(value = "根据生产工单号集合 查询生产工单数据")
Map<String, MesWorkOrder> getWorkOrderMap(String organizeCode, List<String> workOrderNoList);
}

@ -0,0 +1,51 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
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;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesWorkOrderExtService implements IMesWorkOrderExtService {
@Autowired
private MesWorkOrderRepository workOrderRepository;
//根据生产工单号集合 查询生产工单数据
@Override
public List<MesWorkOrder> getWorkOrderList(String organizeCode, List<String> workOrderNoList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return null;
workOrderNoList = workOrderNoList.size() == 1 ? workOrderNoList : workOrderNoList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
return workOrderRepository.findByHqlWhere(packBean);
}
//根据生产工单号集合 查询生产工单数据
@Override
public Map<String, MesWorkOrder> getWorkOrderMap(String organizeCode, List<String> workOrderNoList) {
List<MesWorkOrder> workOrderList = getWorkOrderList(organizeCode, workOrderNoList);
return CollectionUtils.isEmpty(workOrderList) ? null : workOrderList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, o -> o));
}
}

@ -36,6 +36,9 @@ public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVar
case FIRST_MOULD_NO: case FIRST_MOULD_NO:
case MOULD_NO: case MOULD_NO:
case ASSEMBLY: case ASSEMBLY:
case PRODUCT_SN:
case WORK_ORDER:
case PRODUCTION_PART_NO:
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchBackValueService"); return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchBackValueService");
//TODO CASE 数据变量接口逻辑根据变量类别实现策略 //TODO CASE 数据变量接口逻辑根据变量类别实现策略

@ -7,17 +7,25 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
**/ **/
@ -49,14 +57,15 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
return false; return false;
} }
if (!checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue())) { List<StationKvBean> resultList = checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue());
if (CollectionUtils.isEmpty(resultList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,请检查选择的工单信息[%s]的有效性!", this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,请检查选择的工单信息[%s]的有效性!",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
return false; return false;
} }
//保存手动选择的腔数及工单信息上下文 //保存手动选择的腔数及工单信息上下文
productionDispatchContextStepService.saveFunctionChooseCavityOrderContext(reqBean, buttonDynamicModel.getFunctionValue()); productionDispatchContextStepService.saveFunctionChooseCavityOrderContext(reqBean, resultList);
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功,请等待验证! 提交信息[%s]", this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功,请等待验证! 提交信息[%s]",
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -73,29 +82,29 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
} }
//腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3 //腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3
private Boolean checkCavityOrderIsValid(String functionValue) { private List<StationKvBean> checkCavityOrderIsValid(String functionValue) {
if (StringUtils.isEmpty(functionValue)) return false; List<String> list = !StringUtils.isEmpty(functionValue) ? new ArrayList<>(Arrays.asList(functionValue.split(MesPcnExtConstWords.SEMICOLON))) : null;
String[] value = functionValue.split(MesPcnExtConstWords.SEMICOLON); if (CollectionUtils.isEmpty(list)) return null;
if (null == value) return false; List<StationKvBean> resultList = null;
try { try {
Integer cavity = Integer.valueOf(value[0]); Integer cavity = Integer.valueOf(list.get(0));
if (cavity != list.size() - 1) return null;
if (cavity != value.length - 1) return false; return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", list.remove(0)),
new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "加工单", list.stream().filter(o -> null != o).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return false; return null;
} }
return true;
} }
} }

@ -105,6 +105,9 @@ public class MesAssemblyReadStepService extends BaseStepService {
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据 //获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -115,9 +118,6 @@ public class MesAssemblyReadStepService extends BaseStepService {
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//匹配读取的装配件的有效性 //匹配读取的装配件的有效性
return matchAssemblySnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); return matchAssemblySnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);

@ -59,15 +59,15 @@ public class MesAssemblyScanStepService extends BaseStepService {
//获取生产过程上下文对象有异常信息 抛出异常 //获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//保存设备当前一轮工序待验证的装配件条码信息 //保存设备当前一轮工序待验证的装配件条码信息
productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, getAssemblySnJson(reqBean, scanInfo)); productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, getAssemblySnJson(reqBean, scanInfo));
//发送工步内容 //发送工步内容
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo)); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo));
} }
@ -76,7 +76,7 @@ public class MesAssemblyScanStepService extends BaseStepService {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>(); List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true))); equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()));
return equipVariableCollectContextList; return equipVariableCollectContextList;

@ -60,6 +60,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//配置错误 抛出异常 //配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//从上下文中取出生产线对象 //从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
@ -81,6 +84,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
//保存上下文产品加工规则信息集合
if (prodRuleContextList.size() != initSize) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); if (prodRuleContextList.size() != initSize) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
//显示装配件信息 //显示装配件信息

@ -56,6 +56,9 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
//配置错误 抛出异常 //配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//从上下文中取出生产线对象 //从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
@ -74,6 +77,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList)) if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList))
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单"); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单");
//保存上下文产品加工规则信息集合
productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!"); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!");

@ -38,16 +38,16 @@ public class MesAssemblyShowStepService extends BaseStepService {
//配置错误 抛出异常 //配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//存储生产过程上下文对象 //存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取排序线的装配件清单 //从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//排序线 显示装配件扫描项工步
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowSortStepService")).execute(reqBean); if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowSortStepService")).execute(reqBean);
//获取非排序线的装配件清单 //非排序线 显示装配件扫描项工步
return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowNosortStepService")).execute(reqBean); return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowNosortStepService")).execute(reqBean);
} }

@ -59,6 +59,9 @@ public class MesCountDownShowStepService extends BaseStepService {
//获取生产过程上下文对象有异常信息 抛出异常 //获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取工位信息 //获取工位信息
MesWorkCell workCell = productionProcessContext.getWorkCell(); MesWorkCell workCell = productionProcessContext.getWorkCell();

@ -112,6 +112,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据 //获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -122,9 +125,6 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//验证头道模具号的有效性 //验证头道模具号的有效性
return checkFirstMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); return checkFirstMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);

@ -106,6 +106,9 @@ public class MesMouldNoReadStepService extends BaseStepService {
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据 //获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -116,9 +119,6 @@ public class MesMouldNoReadStepService extends BaseStepService {
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//验证模具号的有效性 //验证模具号的有效性
checkMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); checkMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);

@ -103,6 +103,9 @@ public class MesProductResultReadStepService extends BaseStepService {
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据 //获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -113,9 +116,6 @@ public class MesProductResultReadStepService extends BaseStepService {
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//匹配加工结果 //匹配加工结果
return matchProductResult(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); return matchProductResult(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);

@ -64,6 +64,9 @@ public class MesProductSnCheckStepService extends BaseStepService {
//获取上下文扫/读信息:主条码 //获取上下文扫/读信息:主条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanProductSnContext(reqBean); List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanProductSnContext(reqBean);
//清除本次已获取得到的主条码信息
productionDispatchContextStepService.deleteScanProductSnContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execDynamicsCompleteAndSendMsgReturn( if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execDynamicsCompleteAndSendMsgReturn(
reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前上下文中没有需要验证的主条码!"); reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前上下文中没有需要验证的主条码!");
@ -75,9 +78,6 @@ public class MesProductSnCheckStepService extends BaseStepService {
//验证上下文中主条码的有效性 //验证上下文中主条码的有效性
List<MesProduceSn> produceSnList = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList); List<MesProduceSn> produceSnList = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList);
//清除本次已完成验证的主条码信息
productionDispatchContextStepService.deleteScanProductSnContext(reqBean);
if (!stepResult.isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("验证失败!原因:%s!", stepResult.getMsg())); if (!stepResult.isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("验证失败!原因:%s!", stepResult.getMsg()));
//获取上下文的工位 //获取上下文的工位
@ -100,7 +100,7 @@ public class MesProductSnCheckStepService extends BaseStepService {
//变更主条码状态为未知 //变更主条码状态为未知
saveProduceSnList(reqBean, resultBean, produceSnList); saveProduceSnList(reqBean, resultBean, produceSnList);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码[%s]验证条码状态成功!", productSnList)); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码%s验证条码状态成功!", equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString()));
} }

@ -102,6 +102,9 @@ public class MesProductSnReadStepService extends BaseStepService {
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据 //获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -112,9 +115,6 @@ public class MesProductSnReadStepService extends BaseStepService {
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//匹配读取的主条码的有效性 //匹配读取的主条码的有效性
return matchProductSnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); return matchProductSnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);

@ -58,18 +58,18 @@ public class MesProductSnScanStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
//扫描信息置空
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
//获取上下文信息 //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//获取生产过程上下文对象有异常信息 抛出异常 //获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象 //存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//扫描信息置空
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
//当前工位使用的设备 //当前工位使用的设备
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
@ -92,7 +92,7 @@ public class MesProductSnScanStepService extends BaseStepService {
Boolean isAllowJump = checkIsAllowJump(reqBean, productionPsInContextList, isCraftJumpCode, scanInfo); Boolean isAllowJump = checkIsAllowJump(reqBean, productionPsInContextList, isCraftJumpCode, scanInfo);
//封装待验证的主条码信息 //封装待验证的主条码信息
if (!isCraftJumpCode && !StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, equipVariableCollectContextList, scanInfo); if (!isCraftJumpCode && !StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean.getOrganizeCode(), scanInfo, equipVariableCollectContextList);
//先判断前期扫描数量 //先判断前期扫描数量
Integer scanedQty = (CollectionUtils.isEmpty(equipVariableCollectContextList) ? MesPcnExtConstWords.ZERO : equipVariableCollectContextList.size()) + (CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.ZERO : productionPsInContextList.size()); Integer scanedQty = (CollectionUtils.isEmpty(equipVariableCollectContextList) ? MesPcnExtConstWords.ZERO : equipVariableCollectContextList.size()) + (CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.ZERO : productionPsInContextList.size());
@ -186,11 +186,11 @@ public class MesProductSnScanStepService extends BaseStepService {
} }
//封装扫/读信息:主条码信息 //封装扫/读信息:主条码信息
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, List<MesEquipVariableCollectContext> equipVariableCollectContextList, String scanInfo) { private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(String organizeCode, String scanInfo, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true))); equipVariableCollectContextList.add(new MesEquipVariableCollectContext(organizeCode, scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()));
return equipVariableCollectContextList; return equipVariableCollectContextList;

@ -0,0 +1,207 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesProductionPartNoReadStepService")
public class MesProductionPartNoReadStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IPartService partService;
@Override
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在产出零件号跟产出零件信息
if (productionDispatchContextStepService.checkProductionPartNoIsExistContext(reqBean) && productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
//根据变量类别[产出零件号]搜集设备数据变量接口逻辑信息
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue());
//当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue()).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//搜集设备数据变量接口逻辑信息中的二级变量
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
//根据变量类型与二级变量获取设备数据变量信息
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//验证产出零件号的有效性
return checkProductionPartNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
}
//验证产出零件号的有效性
private StepResult checkProductionPartNoValid(StationRequestBean reqBean, StationResultBean resultBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) {
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue())
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]产出零件号,持续监听中...", cellEquipContext.getEquipmentCode())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
//读取的产出零件号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
//发送工步内容
String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//获取产出零件信息 获取零件信息
List<MesProductionPartContext> productionPartContextList = getProductionPartContext(reqBean, resultBean, productionProcessContext, equipVariableCollectContextList);
//更新展示组件MODULE_CONTENT内容
doCacheMoudleContext(reqBean, productionPartContextList);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentCode(), scanInfo));
}
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//从读取信息中搜集零件编码并去重
List<String> partNoList = (equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if (CollectionUtils.isEmpty(partDataMap) || (!partDataMap.keySet().containsAll(partNoList) || !partNoList.containsAll(partDataMap.keySet()))) partDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
//零件信息缺失 抛出异常
List<MesProductionPartContext> productionPartContextList = getProductionPartContext(reqBean, resultBean, partNoList, partDataMap, equipVariableCollectContextList);
//保存设备当前一轮工序的产出零件号,产出零件信息,零件信息
productionDispatchContextStepService.saveProductionPartNoContext(reqBean, equipVariableCollectContextList);
productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap);
return productionPartContextList;
}
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, List<String> partNoList, Map<String, MesPart> partDataMap, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
List<String> filterList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (null != o && !partDataMap.containsKey(o))).collect(Collectors.toList());
//验证错误 抛出异常
if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(partDataMap) ? partNoList.toString() : filterList.toString()));
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o.getEquipVariableValue(), partDataMap.get(o.getEquipVariableValue()).getPartName())));
return productionPartContextList;
}
private void doCacheMoudleContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList));
}
//封装展示组件MODULE_CONTENT内容
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
List<List<StationKvBean>> dataList = new ArrayList<>();
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName())));
return dataList;
}
}

@ -99,6 +99,9 @@ public class MesReadySignalReadStepService extends BaseStepService {
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据 //获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
@ -109,9 +112,6 @@ public class MesReadySignalReadStepService extends BaseStepService {
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//匹配就绪信号有效性 //匹配就绪信号有效性
return matchReadySignal(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); return matchReadySignal(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);

@ -0,0 +1,129 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesWorkOrderCheckNosortStepService")
public class MesWorkOrderCheckNosortStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取上下文生产扫/读信息:加工单
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中缺失待验证的加工单信息!");
//获取上下文产出零件信息
List<MesProductionPartContext> cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//清除本次已获取得到的加工单信息
productionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean);
//非扫描场景 清除历史产出零件信息
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionDispatchContextStepService.deleteProductionPartContext(reqBean);
//验证工单的有效性
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//扫描场景下合并历史产出零件信息
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList);
//保存上下文产出零件信息
productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString()));
//当前工位使用的设备
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
if (cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0)
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!",
equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size()));
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息加工单[%s]验证工单状态成功,上下文中的加工单个数[%s]已满足腔数!", equipVariableCollectContextList.get(0).getEquipVariableValue(), productionPartContextList.size()));
}
//验证工单的有效性
private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList) {
//搜集生产工单号
List<String> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
List<String> workOrderNoList = filterList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//获取生产工单信息
Map<String, MesWorkOrder> workOrderMap = workOrderExtService.getWorkOrderMap(reqBean.getOrganizeCode(), workOrderNoList);
for (String workOrderNo : workOrderNoList) {
if (StringUtils.isEmpty(workOrderNo)) continue;
MesWorkOrder workOrderDb = (CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(workOrderNo)) ? null : workOrderMap.get(workOrderNo);
if (null == workOrderDb) return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo));
if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workOrderDb.getWorkOrderStatus())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus())));
if (!workOrderDb.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDb.getWorkCenterCode(), reqBean.getWorkCenterCode()));
}
equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(workOrderMap.get(o.getEquipVariableValue()))));
return stepResult.obj(filterList);
}
}

@ -0,0 +1,59 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesWorkOrderCheckStepService")
public class MesWorkOrderCheckStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//排序线 加工单验证工步
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckSortStepService")).execute(reqBean);
//非排序线 加工单验证工步
return ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckNosortStepService")).execute(reqBean);
}
}

@ -0,0 +1,149 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.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.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
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 java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesWorkOrderReadStepService")
public class MesWorkOrderReadStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Override
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在读取待验证的加工单信息
if (productionDispatchContextStepService.checkScanWorkOrderNoIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
//根据变量类别[加工单]搜集设备数据变量接口逻辑信息
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue());
//当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue()).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//搜集设备数据变量接口逻辑信息中的二级变量
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
//根据变量类型与二级变量获取设备数据变量信息
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取设备LOG采集数据
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
//匹配读取的加工单的有效性
return matchWorkOrderValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
}
//匹配读取的加工单的有效性
private StepResult matchWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) {
//未采集到数据
if (!equipLogDispatchContext.getIsCollectValue())
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工单,持续监听中...", cellEquipContext.getEquipmentCode())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
//读取的加工单进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的加工单,持续监听中...", cellEquipContext.getEquipmentCode())),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
//保存设备当前一轮工序的待验证的加工单信息
productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
//发送工步内容
String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]加工单信息[%s]!", cellEquipContext.getEquipmentCode(), scanInfo));
}
}

@ -0,0 +1,127 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
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.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesWorkOrderScanStepService")
public class MesWorkOrderScanStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StepResult guide(StationRequestBean reqBean) {
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(), "请扫描加工单!");
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//扫描信息置空
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//当前工位使用的设备
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
//如果没有扫描信息, 取手选工单信息, 封装扫/读信息:加工单信息
List<MesEquipVariableCollectContext> equipVariableCollectContextList;
if (!StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, scanInfo);
else equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult);
//扫描信息为空
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描加工单!");
//保存上下文扫/读信息:加工单
productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
}
//封装扫/读信息:加工单信息 (扫描)
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, String scanInfo) {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()));
//发送工步内容
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
stepResult.msg(String.format("当前扫描信息加工单[%s]!", scanInfo));
return equipVariableCollectContextList;
}
//封装扫/读信息:加工单信息 (选择)
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult) {
List<StationKvBean> chooseCavityOrder = productionDispatchContextStepService.getFunctionChooseCavityOrderContext(reqBean);
if (CollectionUtils.isEmpty(chooseCavityOrder)) return null;
List<String> pickList = new ArrayList<>(Arrays.asList(chooseCavityOrder.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.WORK_ORDER_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON)));
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
pickList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), o, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.PICK.getValue())));
//发送工步内容
String scanInfo = chooseCavityOrder.stream().filter(o -> null != o).map(o -> o.getName() + "[" + o.getValue() + "]").collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.PICK);
stepResult.msg(String.format("当前选择信息%s!", scanInfo));
return equipVariableCollectContextList;
}
}

@ -158,6 +158,33 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SEND_PROCESS_CMD_CONTEXT); deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SEND_PROCESS_CMD_CONTEXT);
} }
//获取上下文产出零件号
@Override
public List<MesEquipVariableCollectContext> getProductionPartNoContext(StationRequestBean reqBean) {
String productionPartNoJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT);
return !StringUtils.isEmpty(productionPartNoJson) ? JSONObject.parseArray(productionPartNoJson, MesEquipVariableCollectContext.class) : null;
}
//验证上下文产出零件号是否存在
@Override
public Boolean checkProductionPartNoIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文产出零件号 [JSON]List<MesEquipVariableCollectContext>
@Override
public Boolean saveProductionPartNoContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productionPartNoList) {
if (CollectionUtils.isEmpty(productionPartNoList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT, JSONObject.toJSONString(productionPartNoList));
}
//删除上下文产出零件号
@Override
public void deleteProductionPartNoContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT);
}
//获取上下文头道模具号 //获取上下文头道模具号
@Override @Override
public MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean) { public MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean) {
@ -259,6 +286,33 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT); deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT);
} }
//获取上下文扫/读信息:加工单
@Override
public List<MesEquipVariableCollectContext> getScanWorkOrderNoContext(StationRequestBean reqBean) {
String productSnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT);
return !StringUtils.isEmpty(productSnJson) ? JSONObject.parseArray(productSnJson, MesEquipVariableCollectContext.class) : null;
}
//验证上下文扫/读信息:加工单是否存在
@Override
public Boolean checkScanWorkOrderNoIsExistContext(StationRequestBean reqBean) {
String productSnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT);
return !StringUtils.isEmpty(productSnJson) ? true : false;
}
//保存上下文扫/读信息:加工单 [JSON]List<MesEquipVariableCollectContext>
@Override
public Boolean saveScanWorkOrderNoContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productSnList) {
if (CollectionUtils.isEmpty(productSnList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT, JSONObject.toJSONString(productSnList));
}
//删除上下文扫/读信息:加工单
@Override
public void deleteScanWorkOrderNoContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT);
}
//获取上下文扫/读信息:主条码 //获取上下文扫/读信息:主条码
@Override @Override
public List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean) { public List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean) {
@ -483,15 +537,16 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
//获取手动选择的腔数及工单信息上下文 //获取手动选择的腔数及工单信息上下文
@Override @Override
public String getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { public List<StationKvBean> getFunctionChooseCavityOrderContext(StationRequestBean reqBean) {
return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); String chooseCavityOrderJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER);
return !StringUtils.isEmpty(chooseCavityOrderJson) ? JSONObject.parseArray(chooseCavityOrderJson, StationKvBean.class) : null;
} }
//保存手动选择的腔数及工单信息上下文 腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3 //保存手动选择的腔数及工单信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=1)]
@Override @Override
public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, String value) { public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List<StationKvBean> resultList) {
if (StringUtils.isEmpty(value)) return false; if (CollectionUtils.isEmpty(resultList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER, value); return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER, JSONObject.toJSONString(resultList));
} }
//删除手动选择的腔数及工单信息上下文 //删除手动选择的腔数及工单信息上下文

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context; package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -87,21 +88,29 @@ public class MesEquipVariableCollectContext implements Serializable {
@ApiParam("读取时间") @ApiParam("读取时间")
private String equipVariableReadtime; private String equipVariableReadtime;
@ApiParam("信息来源")
private Integer messageSource;
public MesEquipVariableCollectContext() {} public MesEquipVariableCollectContext() {}
public MesEquipVariableCollectContext(Long equipVariableId) { public MesEquipVariableCollectContext(Long equipVariableId) {
this.equipVariableId = equipVariableId; this.equipVariableId = equipVariableId;
} }
public MesEquipVariableCollectContext(String organizeCode, String equipVariableValue, String equipVariableReadtime) { //扫描/选择信息赋值
public MesEquipVariableCollectContext(String organizeCode, String equipVariableValue, String equipVariableReadtime, Integer messageSource) {
this.organizeCode = organizeCode; this.organizeCode = organizeCode;
this.equipVariableValue = equipVariableValue; this.equipVariableValue = equipVariableValue;
this.equipVariableReadtime = equipVariableReadtime; this.equipVariableReadtime = equipVariableReadtime;
this.messageSource = messageSource;
} }
//读取信息赋值
public void copyValue(MesEquipmentLog equipmentLog, String equipVariableReadtime) { public void copyValue(MesEquipmentLog equipmentLog, String equipVariableReadtime) {
if (null == equipmentLog) return; if (null == equipmentLog) return;
BeanUtils.copyProperties(equipmentLog, this); BeanUtils.copyProperties(equipmentLog, this);
this.equipVariableReadtime = equipVariableReadtime; this.equipVariableReadtime = equipVariableReadtime;
this.messageSource = MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue();
} }
} }

@ -1,6 +1,8 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context; package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -21,6 +23,9 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("组织代码") @ApiParam("组织代码")
private String organizeCode; private String organizeCode;
@ApiParam("生产工单ID")
private Long id;
@ApiParam("生产工单号") @ApiParam("生产工单号")
private String workOrderNo; private String workOrderNo;
@ -39,8 +44,23 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("模具代码") @ApiParam("模具代码")
private String mouldNo; private String mouldNo;
//根据一模多腔赋值
public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) { public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) {
BeanUtils.copyProperties(mouldMultiCavity, this); BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID);
return this;
}
//根据零件信息赋值
public MesProductionPartContext copyPartNo(String organizeCode, String partNo, String partName) {
this.organizeCode = organizeCode;
this.partNo = partNo;
this.partName = partName;
return this;
}
//根据工单信息赋值
public MesProductionPartContext copyPartNo(MesWorkOrder workOrder) {
BeanUtils.copyProperties(workOrder, this);
return this; return this;
} }

@ -116,6 +116,8 @@ public class MesPcnExtConstWords {
public static final String CUST_SN = "custSn"; public static final String CUST_SN = "custSn";
// 条码状态 // 条码状态
public static final String SN_STATUS = "snStatus"; public static final String SN_STATUS = "snStatus";
// 腔数
public static final String CAVITY = "cavity";
//设备数据变量读写访问配置 //设备数据变量读写访问配置

Loading…
Cancel
Save