tags/yfai-pcn-ext-v1.0
王杰 12 months ago
parent 7e6ecb7483
commit da319beefa

@ -7,6 +7,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
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.util.MesExtEnumUtil;
import io.swagger.annotations.ApiOperation;
import java.util.List;
@ -15,15 +16,6 @@ import java.util.Optional;
public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "存储上下文对象")
Boolean doCacheContext(StationRequestBean reqBean, String item, Object o);
@ApiOperation(value = "获取上下文对象")
String getCachedContext(StationRequestBean reqBean, String item);
@ApiOperation(value = "获取展示组件MODULE_CONTENT内容")
List<List<StationKvBean>> getCachedModuleContext(StationRequestBean reqBean);
@ApiOperation(value = "存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】")
Boolean doCacheProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ -90,4 +82,29 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "发送设备质量信息")
void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext);
@ApiOperation(value = "存储展示组件MODULE_CONTENT内容")
Boolean doCacheModuleContext(StationRequestBean reqBean, List<List<StationKvBean>> dataList);
@ApiOperation(value = "获取展示组件MODULE_CONTENT内容")
List<List<StationKvBean>> getCachedModuleContext(StationRequestBean reqBean);
@ApiOperation(value = "存储上个扫描/读取信息")
Boolean doCacheLastScanContext(StationRequestBean reqBean, List<StationKvBean> dataList);
@ApiOperation(value = "获取上个扫描/读取信息")
List<StationKvBean> getCachedLastScanContext(StationRequestBean reqBean);
@ApiOperation(value = "发送工步内容")
void doSendStepContextMessage(StationRequestBean reqBean);
@ApiOperation(value = "发送工步内容")
void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source);
@ApiOperation(value = "发送工步内容")
void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> resultList);
}

@ -28,6 +28,7 @@ import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
@ -50,6 +51,15 @@ public class MesAssemblyReadStepService extends BaseStepService {
private IMesMouldMultiCavityService mouldMultiCavityService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
@ -115,9 +125,11 @@ public class MesAssemblyReadStepService extends BaseStepService {
//保存设备当前一轮工序待验证的装配件条码信息
productionProcessContext.assemblySnJson(equipVariableCollectContextList);
productionProcessContextStepService.doSendStepContextMessage(reqBean,
equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
return stepResult;
}
}

@ -8,6 +8,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool;
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;
@ -29,7 +30,11 @@ public class MesAssemblyScanStepService extends BaseStepService {
@Override
public StepResult guide(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描装配件条码!");
}
@Override
@ -46,6 +51,8 @@ public class MesAssemblyScanStepService extends BaseStepService {
//保存设备当前一轮工序待验证的装配件条码信息
productionProcessContext.assemblySnJson(getAssemblySnJson(reqBean));
productionProcessContextStepService.doSendStepContextMessage(reqBean, reqBean.getScanInfo(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
return stepResult;
}

@ -57,6 +57,15 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
private IPartService partService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
@ -121,13 +130,15 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
productionProcessContextStepService.doSendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//验证一模多腔信息
List<MesMouldMultiCavity> mouldMultiCavityList = getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true);
//获取物料信息
//获取零件信息
Map<String, MesPart> partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList);
//保存设备当前一轮工序的头道模具号,一模多腔信息,物料信息
//保存设备当前一轮工序的头道模具号,一模多腔信息,零件信息
productionProcessContext.firstMouldNo(equipVariableCollectContextList.get(0)).mouldCavityJson(mouldMultiCavityList).partDataJson(partDataMap);
//更新展示组件MODULE_CONTENT内容
@ -164,24 +175,24 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
Map<String, MesPart> finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
//物料信息缺失 抛出异常
//零件信息缺失 抛出异常
List<String> filterList = CollectionUtils.isEmpty(finalPartDataMap) ? null : partNoList.stream().filter(o -> (null != o && !finalPartDataMap.containsKey(o))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查物料信息,物料编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString()));
if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString()));
return finalPartDataMap;
}
public void doCacheMoudleContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList, Boolean isFirstMouldNo) {
productionProcessContextStepService.doCacheContext(reqBean, MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue(), getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo));
productionProcessContextStepService.doCacheModuleContext(reqBean, getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo));
}
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList, Boolean isFirstMouldNo) {
List<List<StationKvBean>> moduleContextData = new ArrayList<>();
mouldMultiCavityList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(moduleContextData,
new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "物料编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "物料名称", o.getPartName())));
return moduleContextData;
List<List<StationKvBean>> dataList = new ArrayList<>();
mouldMultiCavityList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList,
new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName())));
return dataList;
}

@ -51,6 +51,15 @@ public class MesMouldNoReadStepService extends BaseStepService {
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
@ -118,6 +127,8 @@ public class MesMouldNoReadStepService extends BaseStepService {
String mouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
productionProcessContextStepService.doSendStepContextMessage(reqBean, mouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
stepResult.obj(equipVariableCollectContextList.get(0));
if (!StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) || !StringUtils.isEmpty(productionProcessContext.getWorkOrderDataJson())) return stepResult;
@ -125,10 +136,10 @@ public class MesMouldNoReadStepService extends BaseStepService {
//磨具号当头道模具号的使用
List<MesMouldMultiCavity> mouldMultiCavityList = firstMouldNoReadStepService.getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false);
//获取物料信息
//获取零件信息
Map<String, MesPart> partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList);
//保存设备当前一轮工序的一模多腔信息,物料信息
//保存设备当前一轮工序的一模多腔信息,零件信息
productionProcessContext.mouldCavityJson(mouldMultiCavityList).partDataJson(partDataMap);
//更新展示组件MODULE_CONTENT内容

@ -46,6 +46,15 @@ public class MesProductResultReadStepService extends BaseStepService {
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
@ -120,6 +129,9 @@ public class MesProductResultReadStepService extends BaseStepService {
for (Map.Entry<String, List<MesEquipVariableCfgCollectContext>> entry : variableCategoryMap.entrySet()) {
if (null == entry) continue;
if (!(Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue;
productionProcessContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey()))
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.obj(entry.getKey()), true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE,

@ -28,6 +28,7 @@ import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
@ -50,6 +51,15 @@ public class MesProductSnReadStepService extends BaseStepService {
private IMesMouldMultiCavityService mouldMultiCavityService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
@ -115,6 +125,9 @@ public class MesProductSnReadStepService extends BaseStepService {
//保存设备当前一轮工序的待验证的主条码信息
productionProcessContext.productSnJson(equipVariableCollectContextList);
productionProcessContextStepService.doSendStepContextMessage(reqBean,
equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
return stepResult;
}

@ -8,6 +8,7 @@ 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.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
@ -22,10 +23,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -48,22 +46,6 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); }
@Override
public Boolean doCacheContext(StationRequestBean reqBean, String item, Object o) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item, JSONObject.toJSONString(o));
}
@Override
public String getCachedContext(StationRequestBean reqBean, String item) {
return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), item);
}
@Override
public List<List<StationKvBean>> getCachedModuleContext(StationRequestBean reqBean) {
String moduleContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue());
return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference<List<List<StationKvBean>>>() {});
}
@Override
public Boolean doCacheProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesProductionProcessContext.class.getSimpleName(), JSONObject.toJSONString(productionProcessContext));
}
@ -299,4 +281,57 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
this.sendMessage(reqBean, resultBean);
}
@Override
public Boolean doCacheModuleContext(StationRequestBean reqBean, List<List<StationKvBean>> dataList) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue(), JSONObject.toJSONString(dataList));
}
@Override
public List<List<StationKvBean>> getCachedModuleContext(StationRequestBean reqBean) {
String moduleContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue());
return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference<List<List<StationKvBean>>>() {});
}
@Override
public Boolean doCacheLastScanContext(StationRequestBean reqBean, List<StationKvBean> dataList) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO, JSONObject.toJSONString(dataList));
}
@Override
public List<StationKvBean> getCachedLastScanContext(StationRequestBean reqBean) {
String lastScanContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO);
return StringUtils.isEmpty(lastScanContent) ? new ArrayList<>() : JSONObject.parseArray(lastScanContent, StationKvBean.class);
}
@Override
public void doSendStepContextMessage(StationRequestBean reqBean) {
sendStepContextMessage(reqBean, getCachedLastScanContext(reqBean));
}
@Override
public void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source) {
List<StationKvBean> lastScanContext = getCachedLastScanContext(reqBean);
StationKvBeanUtil.addStationKvBeanLimix100ThenHalf(lastScanContext, new StationKvBean().name(source.getDescription()).value(scanInfo));
doCacheLastScanContext(reqBean, lastScanContext);
sendStepContextMessage(reqBean, lastScanContext);
}
@Override
public void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> lastScanContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null,
lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue());
this.sendMessage(reqBean, resultBean);
}
}

@ -83,10 +83,18 @@ public class MesPcnExtConstWords {
public static final String AND = "&";
// 空
public static final String EMPTY = "";
// ;
public static final String SEMICOLON = ";";
//生产过程控制上下文
// 生产过程控制上下文
public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT";
//定制页面名称(默认)
// 定制页面名称(默认)
public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT";
// 上个扫描信息
public static final String LAST_SCAN_INFO = "lastScanInfo";
// 当前扫描信息
public static final String SCAN_INFO = "scanInfo";
}

Loading…
Cancel
Save