设备发送加工参数

tags/yfai-pcn-ext-v1.1 yfai-pcn-ext-v1.1
王杰 10 months ago
parent 395de65f82
commit 85bf50215e

@ -24,4 +24,8 @@ public interface IMesEquipmentExtService {
@ApiOperation(value = "根据设备代码查询生产设备信息")
MesEquipment getMesEquipment(String organizeCode, String equipmentCode);
@ApiOperation(value = "根据设备数据变量ID集合查询设备数据变量信息")
List<MesEquipmentVariable> getEquipmentVariableList(String organizeCode, List<Long> equipVariableIdList);
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesEquipmentProdParamCfgService {
@ApiOperation(value = "根据来源ID查询设备加工参数信息")
List<MesEquipmentProdParamCfg> getEquipmentProdParamCfgList(String organizeCode, List<Long> sourceIdList);
}

@ -17,6 +17,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@ -106,4 +107,14 @@ public class MesEquipmentExtService implements IMesEquipmentExtService {
DdlPreparedPack.getStringEqualPack(equipmentCode, MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
return equipmentRepository.getByProperty(packBean);
}
@Override
public List<MesEquipmentVariable> getEquipmentVariableList(String organizeCode, List<Long> equipVariableIdList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(equipVariableIdList)) return null;
equipVariableIdList = equipVariableIdList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (equipVariableIdList.size() == 1) DdlPreparedPack.getNumEqualPack(equipVariableIdList.get(0), MesPcnExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(equipVariableIdList, MesPcnExtConstWords.ID, packBean);
return equipmentVariableRepository.findByHqlWhere(packBean);
}
}

@ -0,0 +1,38 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentProdParamCfgService;
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.MesEquipmentProdParamCfg;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository;
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.stream.Collectors;
@Slf4j
@Service
public class MesEquipmentProdParamCfgService implements IMesEquipmentProdParamCfgService {
@Autowired
private MesEquipmentProdParamCfgRepository equipmentProdParamCfgRepository;
//根据来源ID查询设备加工参数信息
@Override
public List<MesEquipmentProdParamCfg> getEquipmentProdParamCfgList(String organizeCode, List<Long> sourceIdList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(sourceIdList)) return null;
sourceIdList = sourceIdList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (sourceIdList.size() == 1) DdlPreparedPack.getNumEqualPack(sourceIdList.get(0), MesPcnExtConstWords.SOURCE_ID, packBean);
else DdlPreparedPack.getInPackList(sourceIdList, MesPcnExtConstWords.SOURCE_ID, packBean);
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = equipmentProdParamCfgRepository.findByHqlWhere(packBean);
return CollectionUtils.isEmpty(equipmentProdParamCfgList) ? null :
equipmentProdParamCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipVariableId()) && !StringUtils.isEmpty(o.getMatchRule()))).collect(Collectors.toList());
}
}

@ -123,7 +123,7 @@ public class MesProductionRecordService implements IMesProductionRecordService {
/**
* MATCH_RULE_10("10", "生产时间小于装配件有效期"),
* MATCH_RULE_20("20", "小于最小时差有效"),
* MATCH_RULE_30("30", "大于最时差有效"),
* MATCH_RULE_30("30", "大于最时差有效"),
* MATCH_RULE_40("40", "最大最小时差有效"),
* MATCH_RULE_50("50", "最大外或最小内有效");
*
@ -138,23 +138,23 @@ public class MesProductionRecordService implements IMesProductionRecordService {
Double minValue = timeliness.getMinValue();
Double maxValue = timeliness.getMaxValue();
if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_20.getValue().equals(matchRule)) {
//差值 大于等于最小值
//差值 小于最小时差有效
if (minDiff >= minValue){
return false;
}
} else if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_30.getValue().equals(matchRule)) {
// 差值 小于等于最大值
if (minDiff <= minValue){
// 差值 大于最大时差有效
if (minDiff <= maxValue){
return false;
}
} else if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_40.getValue().equals(matchRule)) {
// 差值 在 最大值 最小值之间
// 差值 最大最小时差有效 在 最大值 最小值之间
if (minDiff <= minValue || minDiff >= maxValue){
return false;
}
} else if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_50.getValue().equals(matchRule)) {
// 差值 在 最小值之间
if (minDiff >= minValue && maxValue <= minDiff){
// 差值 最大外或最小内有效
if (minDiff >= minValue && minDiff <= maxValue){
return false;
}
}

@ -84,14 +84,14 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService {
params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel());
params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId().toString());
LOGGER.info("设备数据变量写值开始-> 地址:{}, params={}", equipVariableRwModel.getWriteRequestUrl(), params);
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null);
LOGGER.info("设备数据变量写值返回-> data:{} ", data);
LOGGER.info("设备数据变量写值-> 地址:{}, params={}, data:{} ", equipVariableRwModel.getWriteRequestUrl(), params, data);
result = !StringUtils.isEmpty(data) ? JsonUtilTool.decode(data, MesEquipVariableRwResult.class).obj(JSONObject.toJSONString(equipVariableRwModel)) : result.noSuccessed();
return result.obj(JSONObject.toJSONString(equipVariableRwModel)).message(String.format("%s设备数据变量写值%s! CLIENT_HANDLE[%s] CHANNEL[%s] EQUIPMENT_ID[%s] VALUE[%s]",
return result.obj(JSONObject.toJSONString(equipVariableRwModel)).message(String.format("%s设备数据变量写值%s! CLIENT_HANDLE[%s] CHANNEL[%s] EQUIPMENT_ID[%s] VALUE[%s] TAG_NAME[%s] EQUIP_VARIABLE_ID[%s]",
!StringUtils.isEmpty(result.getMessage()) ? String.format("%s!", result.getMessage()) : MesPcnExtConstWords.EMPTY,
result.getIsSuccessed() ? "成功" : "失败", equipVariableRwModel.getClientHandle(), equipVariableRwModel.getChannel(), equipVariableRwModel.getEquipId(), equipVariableRwModel.getValue()));
result.getIsSuccessed() ? "成功" : "失败",
equipVariableRwModel.getClientHandle(), equipVariableRwModel.getChannel(), equipVariableRwModel.getEquipId(), equipVariableRwModel.getValue(), equipVariableRwModel.getTagName(), equipVariableRwModel.getEquipVariableId()));
}
@ -135,14 +135,14 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService {
public MesEquipVariableRwResult writeVariable(MesEquipmentVariableCfg equipmentVariableCfg, MesEquipmentVariable equipmentVariable, String kepwareFlag) {
MesEquipVariableRwModel equipVariableRwModel = new MesEquipVariableRwModel();
BeanUtils.copyProperties(equipmentVariable, equipVariableRwModel);
return writeVariable(equipVariableRwModel.value(equipmentVariableCfg.getValue()).kepwareFlag(kepwareFlag));
return writeVariable(equipVariableRwModel.tagName(equipmentVariable.getId(), equipmentVariable.getTagName()).value(equipmentVariableCfg.getValue()).kepwareFlag(kepwareFlag));
}
@Override
public MesEquipVariableRwResult writeVariable(String value, MesEquipmentVariable equipmentVariable, String kepwareFlag) {
MesEquipVariableRwModel equipVariableRwModel = new MesEquipVariableRwModel();
BeanUtils.copyProperties(equipmentVariable, equipVariableRwModel);
return writeVariable(equipVariableRwModel.value(value).kepwareFlag(kepwareFlag));
return writeVariable(equipVariableRwModel.tagName(equipmentVariable.getId(), equipmentVariable.getTagName()).value(value).kepwareFlag(kepwareFlag));
}
}

@ -146,8 +146,8 @@ public class MesProductResultReadStepService extends BaseStepService {
//根据变量类别分别匹配加工结果
matchVariableCategoryMap(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果
if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfCodeStr((String) stepResult.getObj()));
//保存设备当前一轮工序的加工结果
if (!StringUtils.isEmpty(stepResult.getObj())) productionDispatchContextStepService.saveProductResultContext(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfCodeStr((String) stepResult.getObj()));
return stepResult;
@ -172,7 +172,7 @@ public class MesProductResultReadStepService extends BaseStepService {
if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
return stepResult.isCompleted(false);
return stepResult.isCompleted(false).obj(entry.getKey());
}
//设备加工成功/零件报废/设备加工可疑 均返回true; 零件报废/设备加工可疑标记错误信息

@ -0,0 +1,256 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentProdParamCfgService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
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.Optional;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : zxw
**/
@Slf4j
@Service("mesSendEquipParamsCmdStepService2")
public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesEquipmentProdParamCfgService equipmentProdParamCfgService;
@Autowired
private IMesEquipVariableRwExtService equipVariableRwExtService;
@Autowired
private IMesEquipmentExtService equipmentExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
if (CollectionUtils.isEmpty(prodRuleContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前没有加工规则数据,跳过发送!");
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//获取生产线信息
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//搜集加工参数关联ID集合
List<Long> sourceIdList = getEquipmentProdParamCfgSourceIdList(productionProcessContext, prodRuleContextList, workCenter);
//根据来源ID查询设备加工参数信息
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList);
if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!");
//设备加工参数信息集合根据来源ID分组
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId));
//设备加工参数信息集合根据数据变量ID分组
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2EquipVariableId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getEquipVariableId));
//根据设备数据变量ID集合查询设备数据变量信息
List<MesEquipmentVariable> equipmentVariableList = equipmentExtService.getEquipmentVariableList(reqBean.getOrganizeCode(), new ArrayList<>(eppcMap2EquipVariableId.keySet()));
//设备加工参数信息集合根据数据变量ID分组
Map<Long, MesEquipmentVariable> evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o));
//当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//获取上下文中的业务数据
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
List<MesProductionPsInContext> productionPsInContexts = productionDispatchContextStepService.getProductionPsInContext(reqBean);
List<MesProductionPsOutContext> productionPsOutContexts = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
//发送设备加工参数
prodRuleContextList.stream().filter(o -> null != o).forEach(o -> {
Optional<MesProductionPartContext> productionPartContextOp = CollectionUtils.isEmpty(productionPartContextList) ? null :
productionPartContextList.stream().filter(i -> (null != i && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst();
Optional<MesProductionPsInContext> productionPsInContextOp = CollectionUtils.isEmpty(productionPsInContexts) ? null :
productionPsInContexts.stream().filter(i -> (null != i && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst();
Optional<MesProductionPsOutContext> productionPsOutContextOp = CollectionUtils.isEmpty(productionPsOutContexts) ? null :
productionPsOutContexts.stream().filter(i -> (null != i && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst();
doSendEquipParamsCmd(reqBean, resultBean, o, workCenter, cellEquipContext, eppcMap2SourceId, evMap, productionProcessContext, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
});
return StepResult.getSuccessComplete();
}
//搜集加工参数关联ID集合
private List<Long> getEquipmentProdParamCfgSourceIdList(MesProductionProcessContext productionProcessContext, List<MesProdRuleContext> prodRuleContextList, MesWorkCenter workCenter) {
if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()) {
return prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).map(MesProdRuleContext::getPid).collect(Collectors.toList());
} else {
List<Long> sourceIdList = null;
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
List<Long> itemIdList = prodRuleContext.getSortAssemblyDataContext().stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSourceId()))).map(MesProductionAssemblySortContext::getSourceId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(itemIdList)) continue;
if (CollectionUtils.isEmpty(sourceIdList)) sourceIdList = new ArrayList<>();
sourceIdList.addAll(itemIdList);
}
return sourceIdList;
}
}
//发送设备加工参数
private void doSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, MesProductionProcessContext productionProcessContext, String productResult,
Optional<MesProductionPartContext> productionPartContextOp, Optional<MesProductionPsInContext> productionPsInContextOp, Optional<MesProductionPsOutContext> productionPsOutContextOp) {
if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType())
doSendEquipParamsCmdNosort(reqBean, resultBean, prodRuleContext, cellEquipContext, eppcMap2SourceId, evMap, productionProcessContext, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
else
doSendEquipParamsCmdSort(reqBean, resultBean, prodRuleContext, cellEquipContext, eppcMap2SourceId, evMap, productionProcessContext, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
}
//发送设备加工参数【非排序】
private void doSendEquipParamsCmdNosort(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesCellEquipContext cellEquipContext,
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, MesProductionProcessContext productionProcessContext, String productResult,
Optional<MesProductionPartContext> productionPartContextOp, Optional<MesProductionPsInContext> productionPsInContextOp, Optional<MesProductionPsOutContext> productionPsOutContextOp) {
//当前加工规则的PID对应的设备加工参数
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = eppcMap2SourceId.get(prodRuleContext.getPid());
if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return;
MesProductionPartContext productionPartContext = (null != productionPartContextOp && productionPartContextOp.isPresent()) ? productionPartContextOp.get() : null;
MesProductionPsInContext productionPsInContext = (null != productionPsInContextOp && productionPsInContextOp.isPresent()) ? productionPsInContextOp.get() : null;
MesProductionPsOutContext productionPsOutContext = (null != productionPsOutContextOp && productionPsOutContextOp.isPresent()) ? productionPsOutContextOp.get() : null;
//搜集发送规则并去重
List<String> matchRuleList = (equipmentProdParamCfgList.stream().filter(o -> null != o).map(o -> o.getMatchRule().toLowerCase()).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
for (String matchRule : matchRuleList) {
if (StringUtils.isEmpty(matchRule)) continue;
Optional<MesEquipmentProdParamCfg> equipmentProdParamCfgOp = equipmentProdParamCfgList.stream().filter(o -> (null != o && o.getMatchRule().toLowerCase().equals(matchRule) && evMap.containsKey(o.getEquipVariableId()))).findFirst();
if (null == equipmentProdParamCfgOp || !equipmentProdParamCfgOp.isPresent()) continue;
//数据转换
String matchValue = transferValue(matchRule, reqBean, prodRuleContext, productionProcessContext, productResult, productionPartContext, productionPsInContext, productionPsOutContext);
if (StringUtils.isEmpty(matchValue)) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:[%s]未匹配到业务数据", matchRule), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
continue;
}
MesEquipmentVariable equipmentVariable = evMap.get(equipmentProdParamCfgOp.get().getEquipVariableId());
if (null == equipmentVariable) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:设备加工参数信息ID[%s]关联的设备数据变量ID[%s]未维护有效的设备数据变量信息!", equipmentProdParamCfgOp.get().getId(), equipmentProdParamCfgOp.get().getEquipVariableId()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
continue;
}
//写值
MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(matchValue, equipmentVariable, cellEquipContext.getKepwareFlag(equipmentVariable.getChannel()));
if (!equipVariableRwResult.getIsSuccessed()) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeatType(false), String.format("设备[%s]:发送设备加工参数失败!原因:%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
continue;
}
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("设备[%s]:发送设备加工参数成功!%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
}
}
//发送设备加工参数【排序】
private void doSendEquipParamsCmdSort(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesCellEquipContext cellEquipContext,
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, MesProductionProcessContext productionProcessContext, String productResult,
Optional<MesProductionPartContext> productionPartContextOp, Optional<MesProductionPsInContext> productionPsInContextOp, Optional<MesProductionPsOutContext> productionPsOutContextOp) {
}
//数据转换
private String transferValue(String matchRule, StationRequestBean reqBean, MesProdRuleContext prodRuleContext, MesProductionProcessContext productionProcessContext, String productResult,
MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext, MesProductionPsOutContext productionPsOutContext) {
switch (matchRule) {
case "%RESULT%" :
return MesExtEnumUtil.PRODUCT_RESULT_EQUIP_PARAM.codeOfValue(productResult);
case "%PARAM%":
case "%ORDERCODE%":
return prodRuleContext.getWorkOrderNo();
case "%CUSTPARTNO%":
return null != productionPartContext ? productionPartContext.getCustPartNo() : null;
case "%EMPLOYEENO%":
case "%CREATEUSER%":
return reqBean.getUserInfo();
case "%BARCODE%":
return null != productionPsOutContext ? productionPsOutContext.getProductSn() : null;
case "%CREATEDATE%":
case "%GETDATE%":
return TimeTool.getNowTime(true);
case "%SHIFT%":
return "shift";
case "%STATUS%":
return null != productionPsInContext ? productionPsInContext.getSnStatus().toString() : null;
case "%CUSTORDERCOD%":
return null != productionPartContext ? productionPartContext.getCustOrderNo() : null;
case "%PARTNO%":
return null != productionPsOutContext ? productionPsOutContext.getPartNo() : null;
case "%VINCODE%":
return null != productionPartContext ? productionPartContext.getVinCode() : null;
case "%SEQUENCE%":
return null != productionPartContext ? productionPartContext.getWorkOrderSeq() : null;
case "%CUSTBARCODE%":
return null != productionPsOutContext ? productionPsOutContext.getCustSn() : null;
default:
return matchRule;
}
}
}

@ -195,12 +195,21 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(mesProdShiftKvBean.getShiftGroup(), name, countStr), new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
} else {
AtomicReference<Boolean> flag = new AtomicReference<>(false);
stationKvBeans.stream().forEach(stationKvBean -> {
if (stationKvBean.getKey().contains(mesProdShiftKvBean.getShiftGroup())) {
stationKvBean.setValue(stationKvBean == null ? countStr : String.valueOf(Integer.valueOf(stationKvBean.getValue()) + count));
amount.set(Integer.valueOf(stationKvBean.getValue()));
flag.set(true);
}
});
if (!flag.get()) {
String name = "加工数";
stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(mesProdShiftKvBean.getShiftGroup(), name, countStr), new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
}
}
saveProductionStatisticsContext(reqBean, stationKvBeans);

Loading…
Cancel
Save