@ -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.MesEquipVariableC ollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableC fgC ollectLog Context;
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 getEquipmentVariable CfgList ( StationRequestBean reqBean ) {
return getEquipmentVariable CfgList ( getCurCellEquipment ( reqBean ) ) ;
}
@Override
public MesProductionProcessContext getEquipmentVariable ( StationRequestBean reqBean , MesProductionProcessContext productionProcessContext , Integer variableType , String . . . categoryLevelTwo ) {
public MesProductionProcessContext getEquipmentVariable CfgList( 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 ( equipmentVariableDb List) ;
//生产过程上下文对象赋值设备数据变量接口逻辑集合信息
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 ;
M ap< String , List < MesEquipmentVariableCfg > > cfgMap = getEquipmentVariableCfgMap ( reqBean , productionProcessContext ) ;
M esCellEquipContext 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());
// }
}