Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-pcn-ext-v1.0
LML丶 12 months ago
commit f0f143e246

@ -12,10 +12,10 @@ public interface IEquipmentExtService {
@ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合")
List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode);
@ApiOperation(value = "根据设备代码,变量类型,二级变量查询设备数据变量集合")
List<MesEquipmentVariable> getEquipmentVariableList(MesCellEquipContext cellEquipmentContext, Integer variableType, List<String> categoryLevelTwoList);
@ApiOperation(value = "根据设备变量配置类型查询设备数据变量接口逻辑集合")
List<MesEquipmentVariableCfg> getEquipmentVariableCfgList(String organizeCode, String variableCfgType);
@ApiOperation(value = "根据设备变量配置类型,二级变量查询设备数据变量集合")
List<MesEquipmentVariableCfg> getEquipmentVariableCfgList(MesCellEquipContext cellEquipmentContext, List<String> categoryLevelTwoList);
@ApiOperation(value = "根据设备代码,变量类型查询设备数据变量集合")
List<MesEquipmentVariable> getEquipmentVariableList(String organizeCode, String equipmentCode, Integer variableType);
}

@ -1,13 +1,14 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesProductionProcessContextStepService {
@ -35,28 +36,36 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "获取设备数据变量信息")
MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, Integer variableType, String... categoryLevelTwo);
@ApiOperation(value = "获取设备数据变量信息")
MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo);
@ApiOperation(value = "获取设备数据变量接口逻辑信息")
MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean);
@ApiOperation(value = "获取设备数据变量接口逻辑信息")
MesProductionProcessContext getEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "对设备数据变量信息进行必要性验证")
MesProductionProcessContext checkNecessaryEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo);
@ApiOperation(value = "根据变量类别过滤设备数据变量接口逻辑信息")
List<MesEquipmentVariableCfg> filterEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory);
@ApiOperation(value = "对设备数据变量接口逻辑信息进行必要性验证")
MesProductionProcessContext checkNecessaryEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息")
MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory);
@ApiOperation(value = "获取设备分表采集数据")
MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "过滤设备数据变量接口逻辑信息中的二级变量")
List<String> filterCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList);
@ApiOperation(value = "设备数据变量接口逻辑信息数据分组")
Map<String, List<MesEquipmentVariableCfg>> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "获取设备数据变量信息")
MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType);
@ApiOperation(value = "获取设备数据变量信息")
MesProductionProcessContext getEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType);
@ApiOperation(value = "获取设备数据变量信息")
List<MesEquipmentVariable> findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType);
@ApiOperation(value = "获取设备数据变量信息")
List<MesEquipmentVariable> findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType, List<String> categoryLevelTwoList);
@ApiOperation(value = "获取设备数据变量信息")
List<MesEquipmentVariable> findEquipmentVariableList(List<MesEquipmentVariable> equipmentVariableList, Integer variableType, List<String> categoryLevelTwoList);
@ApiOperation(value = "根据设备数据变量接口逻辑信息匹配结果")
MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
MesEquipVariableCollectContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue);
@ApiOperation(value = "获取设备数据变量对应的采集数据")
List<MesEquipVariableCfgCollectLogContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList);
}

@ -64,24 +64,20 @@ public class EquipmentExtService implements IEquipmentExtService {
}
@Override
public List<MesEquipmentVariable> getEquipmentVariableList(MesCellEquipContext cellEquipmentContext, Integer variableType, List<String> categoryLevelTwoList) {
if (StringUtils.isEmpty(variableType) || null == cellEquipmentContext) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(cellEquipmentContext.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(cellEquipmentContext.getEquipmentCode(), MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
DdlPreparedPack.getNumEqualPack(variableType, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
if (!CollectionUtils.isEmpty(categoryLevelTwoList) && categoryLevelTwoList.size() == 1) DdlPreparedPack.getStringEqualPack(categoryLevelTwoList.get(0), MesPcnExtConstWords.VARIABLE_TYPE, packBean);
else DdlPreparedPack.getInPackList(categoryLevelTwoList, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
return equipmentVariableRepository.findByHqlWhere(packBean);
public List<MesEquipmentVariableCfg> getEquipmentVariableCfgList(String organizeCode, String variableCfgType) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(variableCfgType)) return null;
return equipmentVariableCfgRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.VARIABLE_CFG_TYPE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), variableCfgType});
}
@Override
public List<MesEquipmentVariableCfg> getEquipmentVariableCfgList(MesCellEquipContext cellEquipmentContext, List<String> categoryLevelTwoList) {
if (null == cellEquipmentContext || StringUtils.isEmpty(cellEquipmentContext.getVariableCfgType()) || CollectionUtils.isEmpty(categoryLevelTwoList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(cellEquipmentContext.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(cellEquipmentContext.getVariableCfgType(), MesPcnExtConstWords.VARIABLE_CFG_TYPE, packBean);
if (!CollectionUtils.isEmpty(categoryLevelTwoList) && categoryLevelTwoList.size() == 1) DdlPreparedPack.getStringEqualPack(categoryLevelTwoList.get(0), MesPcnExtConstWords.VARIABLE_TYPE, packBean);
else DdlPreparedPack.getInPackList(categoryLevelTwoList, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
return equipmentVariableCfgRepository.findByHqlWhere(packBean);
public List<MesEquipmentVariable> getEquipmentVariableList(String organizeCode, String equipmentCode, Integer variableType) {
if (StringUtils.isEmpty(variableType) || StringUtils.isEmpty(equipmentCode) || StringUtils.isEmpty(variableType)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(equipmentCode, MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
DdlPreparedPack.getNumEqualPack(variableType, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
return equipmentVariableRepository.findByHqlWhere(packBean);
}
}

@ -0,0 +1,65 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
//
//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.MesEquipVariableCfgCollectLogContext;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
//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 java.util.List;
//import java.util.Map;
//
///**
// * @Description : 读头道模具号工步
// * @Author : wangjie
// **/
//@Slf4j
//@Service("mesFirstMouldNoReadStepService")
//public class MesFirstMouldNoReadStepService extends BaseStepService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Override
// public StepResult execute(StationRequestBean reqBean) {
//
// StationResultBean resultBean = new StationResultBean();
//
// StepResult stepResult = StepResult.getSuccessComplete();
//
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue());
//
// if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
// Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext);
//
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
//
//
//
// return stepResult;
// }
//
//
//
//}

@ -2,10 +2,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.MesEquipVariableCfgCollectLogContext;
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.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -15,12 +15,8 @@ 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.Optional;
import java.util.stream.Collectors;
/**
* @Description :
@ -40,67 +36,42 @@ public class MesProductResultReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(),
MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.SV_OPERATION_MODE.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_OK.getValue(),
MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_NOK.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_SCRAP.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_SUSPICIOUS.getValue());
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean);
if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_OK.getValue()).getSuccess())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
equipmentVariableCfgList = productionProcessContextStepService.filterEquipmentVariableCfgList(equipmentVariableCfgList,
MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue(),
MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult,
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]获取加工结果相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess())
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue()).getSuccess())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
List<String> categoryLevelTwoList = productionProcessContextStepService.filterCategoryLevelTwoList(equipmentVariableCfgList);
Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
if (CollectionUtils.isEmpty(equipmentVariableList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult,
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
List<MesEquipVariableCfgCollectLogContext> collectContextList = productionProcessContextStepService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
//验证加工模式
Optional<MesEquipVariableCollectContext> optional2Mode = isExistTypeVariableType(equipVariableCollectContextList, MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.SV_OPERATION_MODE.getValue());
if (null != optional2Mode && optional2Mode.isPresent() && !checkVariableType2Mode(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipmentVariableCfgMap, optional2Mode.get()).isCompleted())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, stepResult.getMsg());
equipVariableCollectContextList = equipVariableCollectContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipVariableValue()) && !o.getCategoryLevelTwo().equals(MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.SV_OPERATION_MODE.getValue()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("正在持续监听设备[%s]的加工结果...", cellEquipContext.getEquipmentCode()));
//验证加工结果
MesEquipmentVariableCfg equipmentVariableCfg = null;
for (MesEquipVariableCollectContext collectContext : equipVariableCollectContextList) {
if (null == cellEquipContext) continue;
equipmentVariableCfg = productionProcessContextStepService.execMatchEquipmentVariableCfgValue(reqBean, productionProcessContext, collectContext, equipmentVariableCfgMap, true);
if (!productionProcessContext.getSuccess()) this.sendMessage(reqBean, resultBean, productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
productionProcessContext.success();
if (null != equipmentVariableCfg) break;
}
if (null == equipmentVariableCfg) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("获取到设备[%s]数据变量的加工结果值与数据变量接口逻辑信息匹配失败!持续监听中...", cellEquipContext.getEquipmentCode()));
//TODO 根据二级变量+变量类别 判断结果
//失败: return false
//成功: 成功 return true/ 零件报废 return custom
//可疑/报废: return custom
return StepResult.getSuccessComplete();
}
private StepResult checkVariableType2Mode(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext,
MesCellEquipContext cellEquipContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, MesEquipVariableCollectContext collectContext) {
if (StringUtils.isEmpty(collectContext.getEquipVariableValue())) return stepResult.isCompleted(false).msg(String.format("未获取到设备[%s]加工模式数据变量[%s]的结果值,持续监听中...", cellEquipContext.getEquipmentCode(), collectContext.getTagName()));
MesEquipmentVariableCfg equipmentVariableCfg = productionProcessContextStepService.execMatchEquipmentVariableCfgValue(reqBean, productionProcessContext, collectContext, equipmentVariableCfgMap, true);
if (!productionProcessContext.getSuccess()) return stepResult.isCompleted(false).msg(productionProcessContext.getMessage());
if (null == equipmentVariableCfg) return stepResult.isCompleted(false).msg(String.format("获取到设备[%s]加工模式数据变量[%s]的结果值[%s]与数据变量接口逻辑信息匹配失败!持续监听中...", cellEquipContext.getEquipmentCode(), collectContext.getTagName(), collectContext.getEquipVariableValue()));
return stepResult;
}
private Optional<MesEquipVariableCollectContext> isExistTypeVariableType(List<MesEquipVariableCollectContext> equipVariableCollectContextList, String categoryLevelTwo) {
return equipVariableCollectContextList.stream().filter(o -> (null != o && o.getCategoryLevelTwo().equals(categoryLevelTwo))).findFirst();
}
}

@ -5,22 +5,23 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService;
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.MesEquipVariableCfgCollectLogContext;
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.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
@ -152,189 +153,236 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
}
@Override
public MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, Integer variableType, String... categoryLevelTwo) {
return getEquipmentVariable(reqBean, getCurCellEquipment(reqBean), variableType, categoryLevelTwo);
public MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean) {
return getEquipmentVariableCfgList(getCurCellEquipment(reqBean));
}
@Override
public MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo) {
public MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext) {
if (!productionProcessContext.getSuccess()) return productionProcessContext;
//判断生产过程上下文对象是否存在数据变量接口逻辑信息
if (!CollectionUtils.isEmpty(productionProcessContext.getEquipVariableCfgListByVct())) return productionProcessContext;
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
//判断生产过程上下文对象是否存在数据变量信息
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
List<String> categoryLevelTwoList = null != categoryLevelTwo ? Arrays.asList(categoryLevelTwo) : null;
if (!CollectionUtils.isEmpty(equipmentVariableList) && !CollectionUtils.isEmpty(equipmentVariableList.stream().filter(o ->
(null != o && o.getEquipmentCode().equals(cellEquipmentContext.getEquipmentCode()) && o.getVariableType().compareTo(variableType) == 0 &&
((CollectionUtils.isEmpty(categoryLevelTwoList) && StringUtils.isEmpty(o.getCategoryLevelTwo())) ||
(!CollectionUtils.isEmpty(categoryLevelTwoList) && !StringUtils.isEmpty(o.getCategoryLevelTwo()) && categoryLevelTwoList.contains(o.getCategoryLevelTwo()))))).collect(Collectors.toList())
)) return productionProcessContext;
if (null == cellEquipmentContext || !productionProcessContext.getSuccess()) return productionProcessContext;
List<MesEquipmentVariable> equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(cellEquipmentContext, variableType, categoryLevelTwoList);
List<MesEquipmentVariableCfg> equipmentVariableCfgList = equipmentExtService.getEquipmentVariableCfgList(productionProcessContext.getOrganizeCode(), cellEquipmentContext.getVariableCfgType());
//生产过程上下文对象赋值设备数据变量信息
if (null != equipmentVariableDbList) return productionProcessContext.equipVariableJson(equipmentVariableDbList);
//生产过程上下文对象赋值设备数据变量接口逻辑集合信息
if (!CollectionUtils.isEmpty(equipmentVariableCfgList)) productionProcessContext.equipVariableCfgJson(equipmentVariableCfgList);
return productionProcessContext.message(String.format("请检查设备[%s]的数据变量信息,变量类型[%s:%s],二级变量%s!",
cellEquipmentContext.getEquipmentCode(), variableType, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.valueOfDescription(variableType), !CollectionUtils.isEmpty(equipmentVariableList) ? equipmentVariableList.toString() : MesPcnExtConstWords.SQUARE_BRACKETS));
return productionProcessContext;
}
@Override
public MesProductionProcessContext getEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
if (!productionProcessContext.getSuccess()) return productionProcessContext;
//判断生产过程上下文对象是否存在数据变量接口逻辑信息
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList();
List<String> categoryLevelTwoList = (equipmentVariableList.stream().filter(o -> null != o).map(MesEquipmentVariable::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
if (!CollectionUtils.isEmpty(equipmentVariableCfgList) && !CollectionUtils.isEmpty(equipmentVariableCfgList.stream().filter(o ->
(null != o && o.getVariableCfgType().equals(cellEquipmentContext.getVariableCfgType()) && CollectionUtils.isEmpty(categoryLevelTwoList) && !StringUtils.isEmpty(o.getCategoryLevelTwo()) && categoryLevelTwoList.contains(o.getCategoryLevelTwo()))).collect(Collectors.toList())
)) return productionProcessContext;
List<MesEquipmentVariableCfg> equipmentVariableCfgDbList = equipmentExtService.getEquipmentVariableCfgList(cellEquipmentContext, categoryLevelTwoList);
//生产过程上下文对象赋值设备数据变量接口逻辑信息
if (null != equipmentVariableCfgDbList) return productionProcessContext.equipVariableCfgJson(equipmentVariableCfgDbList);
return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量%s!",
cellEquipmentContext.getEquipmentCode(), cellEquipmentContext.getVariableCfgType(), !CollectionUtils.isEmpty(equipmentVariableList) ? equipmentVariableList.toString() : MesPcnExtConstWords.SQUARE_BRACKETS));
public List<MesEquipmentVariableCfg> filterEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) {
List<String> variableCategoryList = null == variableCategory ? null : Arrays.asList(variableCategory);
return (CollectionUtils.isEmpty(equipmentVariableCfgList) || CollectionUtils.isEmpty(variableCategoryList)) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && variableCategoryList.contains(o.getVariableCategory()))).collect(Collectors.toList());
}
@Override
public MesProductionProcessContext checkNecessaryEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo) {
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
if (null == categoryLevelTwo) return productionProcessContext;
for (String item : categoryLevelTwo) {
if (StringUtils.isEmpty(item)) continue;
Optional<MesEquipmentVariable> optional = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> (null != o && o.getVariableType().compareTo(variableType) == 0 && o.getCategoryLevelTwo().equals(item))).findFirst();
if (null != optional && optional.isPresent()) continue;
return productionProcessContext.message(String.format("请检查设备[%s]必要的数据变量信息,变量类型[%s:%s],二级变量[%s]!", productionProcessContext.getCurCellEquip().getEquipmentCode(), variableType, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.valueOfDescription(variableType), item));
public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) {
List<String> variableCategoryList = null == variableCategory ? null : Arrays.asList(variableCategory);
Optional<MesEquipmentVariableCfg> optional = (CollectionUtils.isEmpty(equipmentVariableCfgList) || CollectionUtils.isEmpty(variableCategoryList)) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && variableCategoryList.contains(o.getVariableCategory()))).findFirst();
return (null != optional && optional.isPresent()) ? productionProcessContext : productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]变量类别%s的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType(), variableCategoryList.toString()));
}
}
@Override
public List<String> filterCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null :
(equipmentVariableCfgList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
}
return productionProcessContext;
@Override
public MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType) {
return getEquipmentVariableList(getEquipmentVariableCfgList(reqBean), variableType);
}
@Override
public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
public MesProductionProcessContext getEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType) {
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
if (!productionProcessContext.getSuccess() || StringUtils.isEmpty(variableType)) return productionProcessContext;
Map<String, List<MesEquipmentVariableCfg>> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext);
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
List<MesEquipmentVariable> filterList = (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(cfgMap)) ? equipmentVariableList :
equipmentVariableList.stream().filter(o -> (null != o && !cfgMap.containsKey(new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString()))).collect(Collectors.toList());
//判断生产过程上下文对象是否存在数据变量信息
if (!CollectionUtils.isEmpty(productionProcessContext.getEquipVariableListByEquVt(cellEquipmentContext.getEquipmentCode(), variableType))) return productionProcessContext;
if (CollectionUtils.isEmpty(filterList)) return productionProcessContext;
List<MesEquipmentVariable> equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(productionProcessContext.getOrganizeCode(), cellEquipmentContext.getEquipmentCode(), variableType);
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
//生产过程上下文对象赋值设备数据变量信息
if (null != equipmentVariableDbList) productionProcessContext.equipVariableJson(equipmentVariableDbList);
return productionProcessContext;
return productionProcessContext.message(String.format("请检查设备[%s]必要的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量%s!",
cellEquipmentContext.getEquipmentCode(), cellEquipmentContext.getVariableCfgType(),
(filterList.stream().filter(o -> null != o).map(MesEquipmentVariable::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).toString()));
}
@Override
public MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
public List<MesEquipmentVariable> findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType) {
if (!productionProcessContext.getSuccess()) return productionProcessContext;
//获取缓存的生产过程上下文对象中的历史变量接口逻辑采集信息并重置采集数据
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList.forEach(o -> o.clear());
else equipVariableCollectContextList = getEquipVariableCollectContext(reqBean, productionProcessContext);//封装设备数据变量平铺接口逻辑与采集信息
if (!productionProcessContext.getSuccess() || StringUtils.isEmpty(variableType)) return null;
if (!productionProcessContext.getSuccess() || CollectionUtils.isEmpty(equipVariableCollectContextList)) return productionProcessContext;
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
//根据常变值分别获取设备ID分表的采集数据
Map<Integer, MesEquipmentLog> needNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue());
Map<Integer, MesEquipmentLog> unNeedNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
//判断生产过程上下文对象是否存在数据变量信息
List<MesEquipmentVariable> equipmentVariableDbList = productionProcessContext.getEquipVariableListByEquVt(cellEquipmentContext.getEquipmentCode(), variableType);
if (!CollectionUtils.isEmpty(equipmentVariableDbList)) return equipmentVariableDbList;
//修改常变值配置对应的设备ID分表的采集数据的状态为1
if (!CollectionUtils.isEmpty(needNewValue2Collect)) equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), productionProcessContext.getCurCellEquip().getEquipId(), new ArrayList<>(needNewValue2Collect.keySet()));
equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(productionProcessContext.getOrganizeCode(), cellEquipmentContext.getEquipmentCode(), variableType);
//采集数据的值赋予生产过程上下文对象中的变量接口逻辑采集信息
equipVariableCollectContextList.forEach(o -> copyValue(o, needNewValue2Collect, unNeedNewValue2Collect));
//生产过程上下文对象赋值设备数据变量信息
if (null != equipmentVariableDbList) productionProcessContext.equipVariableJson(equipmentVariableDbList);
//生产过程上下文对象赋值设备分表采集信息
return productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList);
return equipmentVariableDbList;
}
private void copyValue(MesEquipVariableCollectContext collectContext, Map<Integer, MesEquipmentLog> needNewValue2Collect, Map<Integer, MesEquipmentLog> unNeedNewValue2Collect) {
if (!CollectionUtils.isEmpty(needNewValue2Collect) && needNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, needNewValue2Collect.get(collectContext.getClientHandle()));
if (!CollectionUtils.isEmpty(unNeedNewValue2Collect) && unNeedNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, unNeedNewValue2Collect.get(collectContext.getClientHandle()));
@Override
public List<MesEquipmentVariable> findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType, List<String> categoryLevelTwoList) {
List<MesEquipmentVariable> equipmentVariableList = findEquipmentVariableList(productionProcessContext, variableType);
return findEquipmentVariableList(equipmentVariableList, variableType, categoryLevelTwoList);
}
private Map<Integer, MesEquipmentLog> getEquipmentLog(StationRequestBean reqBean, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Integer needNewValue) {
List<MesEquipVariableCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(filterList)) return null;
List<MesEquipmentLog> equipmentLogList = equipmentLogExtService.getEquipmentLogList(reqBean.getOrganizeCode(),
filterList.get(0).getEquipId(), needNewValue, filterList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getClientHandle).collect(Collectors.toList()));
return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> Integer.valueOf(o.getId().toString()), o -> o));
@Override
public List<MesEquipmentVariable> findEquipmentVariableList(List<MesEquipmentVariable> equipmentVariableList, Integer variableType, List<String> categoryLevelTwoList) {
return (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(categoryLevelTwoList)) ? null :
equipmentVariableList.stream().filter(o -> (null != o && categoryLevelTwoList.contains(o.getCategoryLevelTwo()) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList());
}
private List<MesEquipVariableCollectContext> getEquipVariableCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
Map<String, List<MesEquipmentVariableCfg>> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext);
List<MesEquipVariableCollectContext> equipVariableCollectContextList = null;
for (MesEquipmentVariable equipmentVariable : equipmentVariableList) {
if (null == equipmentVariable) continue;
//一个数据变量如果匹配多个接口逻辑信息,验证接口逻辑信息配置的常变值是否统一
List<MesEquipmentVariableCfg> filterList = getEquipmentVariableCfgListByMap(cfgMap, equipmentVariable.getCategoryLevelTwo(), equipmentVariable.getVariableCfgType());
if (!CollectionUtils.isEmpty(filterList) && filterList.size() > 1 && (filterList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getNeedNewValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).size() > 1)
return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]关联的多个变量类别对应的常变值未配置统一!",
equipmentVariable.getEquipmentCode(), equipmentVariable.getVariableCfgType(), equipmentVariable.getCategoryLevelTwo())).getEquipVariableCfgCollectList();
@Override
public List<MesEquipVariableCfgCollectLogContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
MesEquipVariableCollectContext collectContext = new MesEquipVariableCollectContext(equipmentVariable.getId());
BeanUtils.copyProperties(equipmentVariable, collectContext);
collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
//List<MesEquipVariableCfgCollectLogContext> collectContextList = generateEquipVariableCfgCollectLogContextList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
equipVariableCollectContextList.add(collectContext);
}
//生产过程上下文对象赋值 设备数据变量平铺接口逻辑与采集信息
productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList);
return equipVariableCollectContextList;
}
@Override
public Map<String, List<MesEquipmentVariableCfg>> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList();
return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null :
equipmentVariableCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString()));
}
@Override
public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
MesEquipVariableCollectContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) {
List<MesEquipmentVariableCfg> equipmentVariableCfgList = getEquipmentVariableCfgListByMap(equipmentVariableCfgMap, collectContext.getCategoryLevelTwo(), collectContext.getVariableCfgType());
if (isNeedVariableCfgValue && CollectionUtils.isEmpty(CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getValue()))).collect(Collectors.toList()))) {
productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]对应的信息未配置参考值", collectContext.getVariableCfgType(), collectContext.getCategoryLevelTwo()));
return null;
}
Optional<MesEquipmentVariableCfg> optional = equipmentVariableCfgList.stream().filter(o -> (null != o && o.getValue().equals(collectContext.getEquipVariableValue()))).findFirst();
return null != optional && optional.isPresent() ? optional.get() : null;
return null;
}
private List<MesEquipmentVariableCfg> getEquipmentVariableCfgListByMap(Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, String categoryLevelTwo, String variableCfgType) {
return CollectionUtils.isEmpty(equipmentVariableCfgMap) ? null : equipmentVariableCfgMap.get(new StringJoiner(MesPcnExtConstWords.AND).add(categoryLevelTwo).add(variableCfgType).toString());
}
// private List<MesEquipVariableCfgCollectLogContext> generateEquipVariableCfgCollectLogContextList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
//
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = null;
//
// Map<String, >
//
//
// for (MesEquipmentVariableCfg equipmentVariableCfg : equipmentVariableCfgList) {
//
// if (null == equipmentVariableCfg) continue;
//
// MesEquipVariableCfgCollectLogContext collectLogContext = new MesEquipVariableCfgCollectLogContext(equipmentVariable.getId());
// BeanUtils.copyProperties(equipmentVariable, collectContext);
// collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
//
// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
// equipVariableCollectContextList.add(collectContext);
// }
//
//
//
//
// }
//
//
// public MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
//
// if (!productionProcessContext.getSuccess()) return productionProcessContext;
//
// //获取缓存的生产过程上下文对象中的历史变量接口逻辑采集信息并重置采集数据
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
// if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList.forEach(o -> o.clear());
// else equipVariableCollectContextList = getEquipVariableCollectContext(reqBean, productionProcessContext);//封装设备数据变量平铺接口逻辑与采集信息
//
// if (!productionProcessContext.getSuccess() || CollectionUtils.isEmpty(equipVariableCollectContextList)) return productionProcessContext;
//
// //根据常变值分别获取设备ID分表的采集数据
// Map<Integer, MesEquipmentLog> needNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue());
// Map<Integer, MesEquipmentLog> unNeedNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
//
// //修改常变值配置对应的设备ID分表的采集数据的状态为1
// if (!CollectionUtils.isEmpty(needNewValue2Collect)) equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), productionProcessContext.getCurCellEquip().getEquipId(), new ArrayList<>(needNewValue2Collect.keySet()));
//
// //采集数据的值赋予生产过程上下文对象中的变量接口逻辑采集信息
// equipVariableCollectContextList.forEach(o -> copyValue(o, needNewValue2Collect, unNeedNewValue2Collect));
//
// //生产过程上下文对象赋值设备分表采集信息
// return productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList);
//
// }
//
// private void copyValue(MesEquipVariableCfgCollectLogContext collectContext, Map<Integer, MesEquipmentLog> needNewValue2Collect, Map<Integer, MesEquipmentLog> unNeedNewValue2Collect) {
// if (!CollectionUtils.isEmpty(needNewValue2Collect) && needNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, needNewValue2Collect.get(collectContext.getClientHandle()));
// if (!CollectionUtils.isEmpty(unNeedNewValue2Collect) && unNeedNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, unNeedNewValue2Collect.get(collectContext.getClientHandle()));
// }
//
// private Map<Integer, MesEquipmentLog> getEquipmentLog(StationRequestBean reqBean, List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList, Integer needNewValue) {
// List<MesEquipVariableCfgCollectLogContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList());
// if (CollectionUtils.isEmpty(filterList)) return null;
// List<MesEquipmentLog> equipmentLogList = equipmentLogExtService.getEquipmentLogList(reqBean.getOrganizeCode(),
// filterList.get(0).getEquipId(), needNewValue, filterList.stream().filter(o -> (null != o)).map(MesEquipVariableCfgCollectLogContext::getClientHandle).collect(Collectors.toList()));
// return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> Integer.valueOf(o.getId().toString()), o -> o));
// }
//
// private List<MesEquipVariableCfgCollectLogContext> getEquipVariableCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
//
// List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
//
// Map<String, List<MesEquipmentVariableCfg>> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext);
//
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = null;
// for (MesEquipmentVariable equipmentVariable : equipmentVariableList) {
// if (null == equipmentVariable) continue;
//
// //一个数据变量如果匹配多个接口逻辑信息,验证接口逻辑信息配置的常变值是否统一
// List<MesEquipmentVariableCfg> filterList = getEquipmentVariableCfgListByMap(cfgMap, equipmentVariable.getCategoryLevelTwo(), equipmentVariable.getVariableCfgType());
// if (!CollectionUtils.isEmpty(filterList) && filterList.size() > 1 && (filterList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getNeedNewValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).size() > 1)
// return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]关联的多个变量类别对应的常变值未配置统一!",
// equipmentVariable.getEquipmentCode(), equipmentVariable.getVariableCfgType(), equipmentVariable.getCategoryLevelTwo())).getEquipVariableCfgCollectList();
//
// MesEquipVariableCfgCollectLogContext collectContext = new MesEquipVariableCfgCollectLogContext(equipmentVariable.getId());
// BeanUtils.copyProperties(equipmentVariable, collectContext);
// collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
//
// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
// equipVariableCollectContextList.add(collectContext);
// }
//
// //生产过程上下文对象赋值 设备数据变量平铺接口逻辑与采集信息
// productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList);
//
// return equipVariableCollectContextList;
// }
//
// public Map<String, List<MesEquipmentVariableCfg>> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
// List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList();
// return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null :
// equipmentVariableCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString()));
// }
//
//
// public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesEquipVariableCfgCollectLogContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) {
// return null;
// }
//
// public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
// MesEquipVariableCfgCollectLogContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) {
// List<MesEquipmentVariableCfg> equipmentVariableCfgList = getEquipmentVariableCfgListByMap(equipmentVariableCfgMap, collectContext.getCategoryLevelTwo(), collectContext.getVariableCfgType());
// if (isNeedVariableCfgValue && CollectionUtils.isEmpty(CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getValue()))).collect(Collectors.toList()))) {
// productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]对应的信息未配置参考值", collectContext.getVariableCfgType(), collectContext.getCategoryLevelTwo()));
// return null;
// }
// Optional<MesEquipmentVariableCfg> optional = equipmentVariableCfgList.stream().filter(o -> (null != o && o.getValue().equals(collectContext.getEquipVariableValue()))).findFirst();
// return null != optional && optional.isPresent() ? optional.get() : null;
// }
//
// private List<MesEquipmentVariableCfg> getEquipmentVariableCfgListByMap(Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, String categoryLevelTwo, String variableCfgType) {
// return CollectionUtils.isEmpty(equipmentVariableCfgMap) ? null : equipmentVariableCfgMap.get(new StringJoiner(MesPcnExtConstWords.AND).add(categoryLevelTwo).add(variableCfgType).toString());
// }
}

@ -4,21 +4,33 @@ import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* -
* -LOG
*/
@Data
public class MesEquipVariableCollectContext {
public class MesEquipVariableCfgCollectLogContext {
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("设备变量ID")
private Long equipVariableId;
@ApiParam("变量类别")
private String variableCategory;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("规则类别")
private String ruleCategory;
@ApiParam("参考值")
private String value;
@ApiParam("是否常变值")
private Integer needNewValue;
@ApiParam("设备ID")
private Integer equipId;
@ApiParam("OPC注册ID")
@ApiParam("OPC注册ID设备LOG表的主键")
private Integer clientHandle;
@ApiParam("设备代码")
@ -27,23 +39,32 @@ public class MesEquipVariableCollectContext {
@ApiParam("通道")
private String channel;
@ApiParam("通道")
@ApiParam("终端")
private String device;
@ApiParam("tag名称")
private String tagName;
@ApiParam("变量配置类型")
private String variableCfgType;
@ApiParam("tag地址")
private String tagAddress;
@ApiParam("变量类型")
private Integer variableType;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("数据类型")
private Integer variableDataType;
@ApiParam("是否常变值")
private Integer needNewValue;
@ApiParam("DB块")
private String code;
@ApiParam("轮询时间")
private Integer scanInterval;
@ApiParam("读写类型")
private Integer readWrite;
@ApiParam("设备变量ID")
private Long equipVariableId;
@ApiParam("设备变量名称")
private String equipVariableName;
@ -63,21 +84,8 @@ public class MesEquipVariableCollectContext {
@ApiParam("设备质量")
private Integer quality;
public MesEquipVariableCollectContext(Long equipVariableId) {
public MesEquipVariableCfgCollectLogContext(Long equipVariableId) {
this.equipVariableId = equipVariableId;
}
public MesEquipVariableCollectContext needNewValue(Integer needNewValue) {
this.needNewValue = needNewValue;
return this;
}
public void clear() {
this.equipVariableName = null;
this.equipVariableDesc = null;
this.readWriteFlag = null;
this.dataType = null;
this.equipVariableValue = null;
this.quality = null;
}
}

@ -10,8 +10,10 @@ import lombok.Data;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
@ -29,13 +31,13 @@ public class MesProductionProcessContext {
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("生产线信息")
@ApiParam("生产线信息([Json]MesWorkCenter)")
private String workCenterJson;
@ApiParam("工位信息")
@ApiParam("工位信息([Json]MesWorkCell)")
private String workCellJson;
@ApiParam("工位设备集合信息")
@ApiParam("工位设备信息([Json]List<MesCellEquipContext>)")
private String cellEquipListJson;
@ApiParam("工序代码")
@ -50,17 +52,14 @@ public class MesProductionProcessContext {
@ApiParam("工艺代码")
private String craftName;
@ApiParam("当前工位设备信息")
@ApiParam("当前工位设备对象([Json]MesCellEquipContext)")
private String curCellEquipJson;
@ApiParam("设备变量信息")
private String equipVariableJson;
@ApiParam("变量接口逻辑信息")
@ApiParam("变量接口逻辑信息([Json]List<MesEquipmentVariableCfg>)")
private String equipVariableCfgJson;
@ApiParam("变量接口逻辑采集信息")
private String equipVariableCfgCollectJson;
@ApiParam("设备变量集合信息([Json]List<MesEquipmentVariable>)")
private String equipVariableJson;
@ApiParam("头道模具号")
private String firstMouldNo;
@ -89,122 +88,158 @@ public class MesProductionProcessContext {
@ApiParam("零件条码信息")
private String produceSnJson;
public MesProductionProcessContext() {}
public MesProductionProcessContext(String organizeCode) {
this.organizeCode = organizeCode;
}
//上下文信息结果初始化
public MesProductionProcessContext success() {
this.success = true;
this.message = null;
return this;
}
//上下文信息结果信息赋值后给工步使用
public MesProductionProcessContext message(String message) {
this.success = false;
this.message = message;
return this;
}
//从上下文中取出生产线对象
public MesWorkCenter getWorkCenter() {
return StringUtils.isEmpty(this.workCenterJson) ? null : JSONObject.parseObject(this.workCenterJson, MesWorkCenter.class);
}
//上下文赋值生产线对象
public MesProductionProcessContext workCenterJson(MesWorkCenter workCenter) {
this.workCenterJson = null != workCenter ? JSONObject.toJSONString(workCenter) : null;
return this;
}
//从上下文中取出工位对象
public MesWorkCell getWorkCell() {
return StringUtils.isEmpty(this.workCellJson) ? null : JSONObject.parseObject(this.workCellJson, MesWorkCell.class);
}
//上下文赋值工位对象
public MesProductionProcessContext workCellJson(MesWorkCell workCell) {
this.workCellJson = null != workCell ? JSONObject.toJSONString(workCell) : null;
return this;
}
//上下文赋值工序信息
public MesProductionProcessContext processCode(String processCode, String processName) {
this.processCode = processCode;
this.processName = processName;
return this;
}
//上下文赋值工艺信息
public MesProductionProcessContext craftCode(String craftCode, String craftName) {
this.craftCode = craftCode;
this.craftName = craftName;
return this;
}
//从上下文中取出工位设备对象集合
private List<MesCellEquipContext> getCellEquipList() {
return StringUtils.isEmpty(this.cellEquipListJson) ? null : JSONObject.parseArray(this.cellEquipListJson, MesCellEquipContext.class);
}
//上下文赋值工位设备对象集合
public MesProductionProcessContext cellEquipListJson(List<MesCellEquipContext> cellEquipList) {
this.cellEquipListJson = !CollectionUtils.isEmpty(cellEquipList) ? JSONObject.toJSONString(cellEquipList) : null;
return this;
}
//从上下文中的工位设备对象集合中取出当前要使用的设备
public MesCellEquipContext filterCurCellEquip() {
List<MesCellEquipContext> cellEquipList = getCellEquipList();
if (CollectionUtils.isEmpty(cellEquipList) || cellEquipList.size() == 1) return filterCurCellEquip(cellEquipList);
return filterCurCellEquip(cellEquipList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSeq()))).sorted(Comparator.comparing(MesCellEquipContext::getSeq)).collect(Collectors.toList()));
}
//从上下文中的工位设备对象集合中根据设备代码取出当前要使用的设备
public MesCellEquipContext filterCurCellEquip(String equipmentCode) {
if (StringUtils.isEmpty(equipmentCode)) return filterCurCellEquip();
List<MesCellEquipContext> cellEquipList = getCellEquipList();
return filterCurCellEquip(CollectionUtils.isEmpty(cellEquipList) ? null : cellEquipList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(equipmentCode))).collect(Collectors.toList()));
}
//从上下文中的工位设备对象集合中取出第一个设备
private MesCellEquipContext filterCurCellEquip(List<MesCellEquipContext> cellEquipContextList) {
return CollectionUtils.isEmpty(cellEquipContextList) ? null : cellEquipContextList.get(0);
}
//从上下文中取出工位当前要使用的设备
public MesCellEquipContext getCurCellEquip() {
return StringUtils.isEmpty(this.curCellEquipJson) ? null : JSONObject.parseObject(this.curCellEquipJson, MesCellEquipContext.class);
}
//上下文赋值工位当前要使用的设备
public MesProductionProcessContext curCellEquipJson(MesCellEquipContext curEquip) {
this.curCellEquipJson = null != curEquip ? JSONObject.toJSONString(curEquip) : null;
return this;
}
public MesProductionProcessContext processCode(String processCode, String processName) {
this.processCode = processCode;
this.processName = processName;
return this;
}
public MesProductionProcessContext craftCode(String craftCode, String craftName) {
this.craftCode = craftCode;
this.craftName = craftName;
return this;
//从上下文中取出设备数据变量接口逻辑集合
private List<MesEquipmentVariableCfg> getEquipVariableCfgList() {
return StringUtils.isEmpty(this.equipVariableCfgJson) ? null : JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class);
}
public List<MesEquipmentVariable> getEquipVariableList() {
return StringUtils.isEmpty(this.equipVariableJson) ? null : JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class);
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
public List<MesEquipmentVariableCfg> getEquipVariableCfgListByVct() {
MesCellEquipContext cellEquipContext = getCurCellEquip();
return null == cellEquipContext ? null : getEquipVariableCfgListByVct(cellEquipContext.getVariableCfgType());
}
public MesProductionProcessContext equipVariableJson(List<MesEquipmentVariable> equipmentVariableList) {
if (CollectionUtils.isEmpty(equipmentVariableList)) return this;
if (!StringUtils.isEmpty(this.equipVariableJson)) equipmentVariableList.addAll(getEquipVariableList());
this.equipVariableJson = JSONObject.toJSONString(equipmentVariableList);
return this;
}
public List<MesEquipmentVariableCfg> getEquipVariableCfgList() {
return StringUtils.isEmpty(this.equipVariableCfgJson) ? null : JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class);
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
public List<MesEquipmentVariableCfg> getEquipVariableCfgListByVct(String variableCfgType) {
List<MesEquipmentVariableCfg> equipmentVariableCfgList = getEquipVariableCfgList();
return (StringUtils.isEmpty(variableCfgType) || CollectionUtils.isEmpty(equipmentVariableCfgList)) ? null :
equipmentVariableCfgList.stream().filter(o -> (null != o && o.getVariableCfgType().equals(variableCfgType))).collect(Collectors.toList());
}
//上下文赋值数据变量接口逻辑对象集合
public MesProductionProcessContext equipVariableCfgJson(List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) return this;
if (!StringUtils.isEmpty(this.equipVariableCfgJson)) equipmentVariableCfgList.addAll(getEquipVariableCfgList());
equipmentVariableCfgList = equipmentVariableCfgList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesEquipmentVariableCfg::getModifyDatetime).reversed()).collect(Collectors.toList());
equipmentVariableCfgList = equipmentVariableCfgList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesEquipmentVariableCfg::getId))), ArrayList::new));
this.equipVariableCfgJson = JSONObject.toJSONString(equipmentVariableCfgList);
return this;
}
public List<MesEquipVariableCollectContext> getEquipVariableCfgCollectList() {
if (StringUtils.isEmpty(this.equipVariableCfgCollectJson)) return null;
List<MesEquipVariableCollectContext> equipVariableCollectContextList = JSONObject.parseArray(this.equipVariableCfgCollectJson, MesEquipVariableCollectContext.class);
return equipVariableCollectContextList;
//从上下文中取出设备数据变量对象集合
private List<MesEquipmentVariable> getEquipVariableList() {
return StringUtils.isEmpty(this.equipVariableJson) ? null : JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class);
}
public MesProductionProcessContext equipVariableCfgCollectJson(List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
this.equipVariableCfgCollectJson = !CollectionUtils.isEmpty(equipVariableCollectContextList) ? JSONObject.toJSONString(equipVariableCollectContextList) : null;
return this;
//从上下文的设备数据变量对象集合中取出当前设备对应具体变量类型的数据变量对象集合
public List<MesEquipmentVariable> getEquipVariableListByEquVt(Integer variableType) {
MesCellEquipContext cellEquipContext = getCurCellEquip();
return (null == cellEquipContext || StringUtils.isEmpty(variableType)) ? null : getEquipVariableListByEquVt(cellEquipContext.getEquipmentCode(), variableType);
}
//从上下文的设备数据变量对象集合中取出当前设备对应具体变量类型的数据变量对象集合
public List<MesEquipmentVariable> getEquipVariableListByEquVt(String equipmentCode, Integer variableType) {
List<MesEquipmentVariable> equipmentVariableList = getEquipVariableList();
return (StringUtils.isEmpty(equipmentCode) || null == variableType || CollectionUtils.isEmpty(equipmentVariableList)) ? null :
equipmentVariableList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(equipmentCode) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList());
}
//上下文赋值数据变量对象集合
public MesProductionProcessContext equipVariableJson(List<MesEquipmentVariable> equipmentVariableList) {
equipmentVariableList = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCategoryLevelTwo()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(equipmentVariableList)) return this;
if (!StringUtils.isEmpty(this.equipVariableJson)) equipmentVariableList.addAll(getEquipVariableList());
equipmentVariableList = equipmentVariableList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesEquipmentVariable::getModifyDatetime).reversed()).collect(Collectors.toList());
equipmentVariableList = equipmentVariableList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesEquipmentVariable::getId))), ArrayList::new));
this.equipVariableJson = JSONObject.toJSONString(equipmentVariableList);
return this;
}
}

Loading…
Cancel
Save