@ -1,18 +1,16 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step ;
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step ;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.* ;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.* ;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.* ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.* ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords ;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService ;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService ;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService ;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService ;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService ;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil ;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil ;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil ;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable ;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable ;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg ;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg ;
import cn.estsh.i3plus.pojo.mes.bean.MesPart ;
import cn.estsh.i3plus.pojo.mes.bean.MesPart ;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam ;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam ;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean ;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean ;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean ;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean ;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean ;
import cn.estsh.i3plus.pojo.mes.model.StepResult ;
import cn.estsh.i3plus.pojo.mes.model.StepResult ;
@ -28,7 +26,6 @@ import java.util.ArrayList;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
import java.util.Optional ;
import java.util.Optional ;
import java.util.concurrent.atomic.AtomicReference ;
import java.util.stream.Collectors ;
import java.util.stream.Collectors ;
/ * *
/ * *
@ -52,13 +49,13 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
private IMesProductionCustomContextStepService productionCustomContextStepService ;
private IMesProductionCustomContextStepService productionCustomContextStepService ;
@Autowired
@Autowired
private IMesEquipmentLogExtService equipmentLogExt Service;
private MesPartDataMapSaveStepService partDataMapSaveStep Service;
@Autowired
@Autowired
private IMesEquip VariableCfgRuleMatchDispatchService equipVariableCfgRuleMatch Service;
private IMesEquip mentLogExtService equipmentLogExt Service;
@Autowired
@Autowired
private I PartService part Service;
private I MesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatch Service;
@Override
@Override
public void title ( StationRequestBean reqBean ) {
public void title ( StationRequestBean reqBean ) {
@ -98,8 +95,8 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
//获取上下文信息
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService . dispatchCurCellEquipment ( reqBean , stepParamMap ) ;
MesProductionProcessContext productionProcessContext = productionProcessContextStepService . dispatchCurCellEquipment ( reqBean , stepParamMap ) ;
//当前工序已存在产出零件 号跟产出零件 信息
//当前工序已存在产出零件 信息
if ( productionDispatchContextStepService . checkProductionPart NoIsExistContext( reqBean ) & & productionDispatchContextStepService . checkProductionPart IsExistContext( reqBean ) ) return stepResult ;
if ( productionDispatchContextStepService . checkProductionPart IsExistContext( reqBean ) ) return stepResult ;
//获取生产过程上下文对象有异常信息 抛出异常
//获取生产过程上下文对象有异常信息 抛出异常
if ( ! productionProcessContextStepService . getEquipmentVariableCfgList ( productionProcessContext ) . getSuccess ( ) ) stepExpSendMsgAndThrowEx ( reqBean , resultBean . writeDbLog ( ) , productionProcessContext . getMessage ( ) ) ;
if ( ! productionProcessContextStepService . getEquipmentVariableCfgList ( productionProcessContext ) . getSuccess ( ) ) stepExpSendMsgAndThrowEx ( reqBean , resultBean . writeDbLog ( ) , productionProcessContext . getMessage ( ) ) ;
@ -168,75 +165,41 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
MesPcnEnumUtil . STATION_BUSI_TYPE . GUIDE , MesPcnEnumUtil . STATION_DATA_TYPE . TEXT , stepParamMap , MesPcnExtConstWords . READ_FAILURE_SLEEP , MesPcnExtConstWords . READ_FAILURE_SLEEP_DEFAULT_TIME ) ;
MesPcnEnumUtil . STATION_BUSI_TYPE . GUIDE , MesPcnEnumUtil . STATION_DATA_TYPE . TEXT , stepParamMap , MesPcnExtConstWords . READ_FAILURE_SLEEP , MesPcnExtConstWords . READ_FAILURE_SLEEP_DEFAULT_TIME ) ;
}
}
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
equipmentLogExtService . updateEquipmentLogList ( reqBean . getOrganizeCode ( ) , cellEquipContext . getEquipId ( ) , equipLogDispatchContext . getResetEquipmentLogIdMap ( ) ) ;
this . sendMessage ( reqBean , resultBean . writeDbLog ( MesPcnEnumUtil . WORK_CELL_SCAN_MONITOR_LOG_TYPE . READ . getValue ( ) ) ,
String . format ( "读取到设备[%s]产出零件号的详细JSON内容: %s" , cellEquipContext . getEquipmentName ( ) , JSONObject . toJSONString ( equipLogDispatchContext ) ) , MesPcnEnumUtil . STATION_BUSI_TYPE . RUNNING_INFO , MesPcnEnumUtil . STATION_DATA_TYPE . TEXT ) ;
//发送工步内容
//发送工步内容
String scanInfo = equipVariableCollectContextList . stream ( ) . filter ( o - > null ! = o ) . map ( MesEquipVariableCollectContext : : getEquipVariableValue ) . collect ( Collectors . joining ( MesPcnExtConstWords . SEMICOLON ) ) ;
String scanInfo = equipVariableCollectContextList . stream ( ) . filter ( o - > null ! = o ) . map ( MesEquipVariableCollectContext : : getEquipVariableValue ) . collect ( Collectors . joining ( MesPcnExtConstWords . SEMICOLON ) ) ;
productionCustomContextStepService . sendStepContextMessage ( reqBean , scanInfo , MesExtEnumUtil . CELL_MESSAGE_SOURCE . READ ) ;
productionCustomContextStepService . sendStepContextMessage ( reqBean , scanInfo , MesExtEnumUtil . CELL_MESSAGE_SOURCE . READ ) ;
//获取产出零件信息 获取零件信息
List < MesProductionPartContext > productionPartContextList = getProductionPartContext ( reqBean , resultBean , productionProcessContext , equipVariableCollectContextList ) ;
//更新展示组件MODULE_CONTENT内容
doCacheMoudleContext ( reqBean , productionPartContextList ) ;
return stepSuccessCompleteAndSendMsgReturn ( reqBean , resultBean . writeDbLog ( MesPcnEnumUtil . WORK_CELL_SCAN_MONITOR_LOG_TYPE . READ . getValue ( ) ) . scanInfo ( scanInfo ) , stepResult , String . format ( "当前已读取到设备[%s]产出零件号[%s]!" , cellEquipContext . getEquipmentName ( ) , scanInfo ) ) ;
}
private List < MesProductionPartContext > getProductionPartContext ( StationRequestBean reqBean , StationResultBean resultBean , MesProductionProcessContext productionProcessContext , List < MesEquipVariableCollectContext > equipVariableCollectContextList ) {
//从上下文中取出零件信息集合
Map < String , MesPart > partDataMap = productionDispatchContextStepService . getPartDataContext ( reqBean ) ;
//从读取信息中搜集零件编码并去重
//从读取信息中搜集零件编码并去重
List < String > partNoList = ( equipVariableCollectContextList . stream ( ) . filter ( o - > ( null ! = o ) ) . map ( MesEquipVariableCollectContext : : getEquipVariableValue ) . collect ( Collectors . toList ( ) ) ) . stream ( ) . filter ( o - > ! StringUtils . isEmpty ( o ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < String > readList = equipVariableCollectContextList . stream ( ) . filter ( o - > null ! = o ) . map ( MesEquipVariableCollectContext : : getEquipVariableValue ) . collect ( Collectors . toList ( ) ) ;
List < String > partNoList = readList . stream ( ) . filter ( o - > ( ! StringUtils . isEmpty ( o ) & & ! o . equals ( productionProcessContext . getFinishCode ( ) ) ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if ( CollectionUtils . isEmpty ( partDataMap ) | | ( ! partDataMap . keySet ( ) . containsAll ( partNoList ) | | ! partNoList . containsAll ( partDataMap . keySet ( ) ) ) ) partDataMap = partService . getPartMap ( reqBean . getOrganizeCode ( ) , partNoList ) ;
//零件信息缺失 抛出异常
if ( ! partDataMapSaveStepService . savePartDataMap ( reqBean , resultBean , stepResult , partNoList , true , false ) . isCompleted ( ) ) {
List < MesProductionPartContext > productionPartContextList = getProductionPartContext ( reqBean , resultBean , partNoList , partDataMap , equipVariableCollectContextList ) ;
this . sendMessage ( reqBean , new StationResultBean ( ) . writeDbLog ( MesPcnEnumUtil . WORK_CELL_SCAN_MONITOR_LOG_TYPE . READ . getValue ( ) ) . checkRepeat ( ) ,
String . format ( "当前未读取到设备[%s]有效的产出零件号,%s持续监听中...%s" , cellEquipContext . getEquipmentName ( ) , stepResult . getMsg ( ) , JSONObject . toJSONString ( equipLogDispatchContext ) ) , MesPcnEnumUtil . STATION_BUSI_TYPE . RUNNING_INFO , MesPcnEnumUtil . STATION_DATA_TYPE . EXP_TEXT ) ;
//保存设备当前一轮工序的产出零件号,产出零件信息,零件信息
stepThreadSleepAndSendTaskCompleteAndThrowEx ( reqBean , resultBean ,
productionDispatchContextStepService . dispatchProductionPartNoContext ( reqBean , equipVariableCollectContextList ) ;
stepResult . isCompleted ( false ) . msg ( String . format ( "当前未读取到设备[%s]有效的产出零件号,%s持续监听中..." , cellEquipContext . getEquipmentName ( ) , stepResult . getMsg ( ) ) ) ,
productionDispatchContextStepService . dispatchProductionPartContext ( reqBean , productionPartContextList ) ;
MesPcnEnumUtil . STATION_BUSI_TYPE . GUIDE , MesPcnEnumUtil . STATION_DATA_TYPE . TEXT , stepParamMap , MesPcnExtConstWords . READ_FAILURE_SLEEP , MesPcnExtConstWords . READ_FAILURE_SLEEP_DEFAULT_TIME ) ;
productionDispatchContextStepService . dispatchPartDataContext ( reqBean , partDataMap ) ;
}
return productionPartContextList ;
}
private List < MesProductionPartContext > getProductionPartContext ( StationRequestBean reqBean , StationResultBean resultBean , List < String > partNoList , Map < String , MesPart > partDataMap , List < MesEquipVariableCollectContext > equipVariableCollectContextList ) {
Map < String , MesPart > partDataMap = ( Map < String , MesPart > ) stepResult . getObj ( ) ;
List < String > filterList = CollectionUtils . isEmpty ( partDataMap ) ? null : partNoList . stream ( ) . filter ( o - > ( null ! = o & & ! partDataMap . containsKey ( o ) ) ) . collect ( Collectors . toList ( ) ) ;
// 验证错误 抛出异常
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
if ( CollectionUtils . isEmpty ( partDataMap ) | | ! CollectionUtils . isEmpty ( filterList ) ) stepExpSendMsgAndThrowEx ( reqBean , resultBean . writeDbLog ( ) , String . format ( "请检查零件信息,零件编码%s信息不存在!" , CollectionUtils . isEmpty ( partDataMap ) ? partNoList . toString ( ) : filterList . toString ( ) ) ) ;
equipmentLogExtService . updateEquipmentLogList ( reqBean . getOrganizeCode ( ) , cellEquipContext . getEquipId ( ) , equipLogDispatchContext . getResetEquipmentLogIdMap ( ) ) ;
List < MesProductionPartContext > productionPartContextList = new ArrayList < > ( ) ;
this . sendMessage ( reqBean , resultBean . writeDbLog ( MesPcnEnumUtil . WORK_CELL_SCAN_MONITOR_LOG_TYPE . READ . getValue ( ) ) ,
equipVariableCollectContextList . stream ( ) . filter ( o - > null ! = o ) . forEach ( o - > productionPartContextList . add ( new MesProductionPartContext ( ) . copyPartNo ( reqBean . getOrganizeCode ( ) , o . getEquipVariableValue ( ) , partDataMap . get ( o . getEquipVariableValue ( ) ) . getPartName ( ) ) ) ) ;
String . format ( "读取到设备[%s]产出零件号的详细JSON内容: %s" , cellEquipContext . getEquipmentName ( ) , JSONObject . toJSONString ( equipLogDispatchContext ) ) , MesPcnEnumUtil . STATION_BUSI_TYPE . RUNNING_INFO , MesPcnEnumUtil . STATION_DATA_TYPE . TEXT ) ;
return productionPartContextList ;
//获取产出零件信息信息
List < MesProductionPartContext > productionPartContextList = partDataMapSaveStepService . getProductionPartContext ( reqBean , productionProcessContext , new ArrayList < > ( ) , partDataMap , readList ) ;
}
//保存设备当前一轮工序的产出零件信息
productionDispatchContextStepService . dispatchProductionPartContext ( reqBean , productionPartContextList ) ;
private void doCacheMoudleContext ( StationRequestBean reqBean , List < MesProductionPartContext > productionPartContextList ) {
//存储展示组件MODULE_CONTENT内容
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService . dispatchModuleContentContext ( reqBean , getModuleContextData ( reqBean , productionPartContextList ) ) ;
productionDispatchContextStepService . dispatchModuleContentContext ( reqBean , partDataMapSaveStepService . getModuleContextData2PartNo ( reqBean , productionPartContextList ) ) ;
}
return stepSuccessCompleteAndSendMsgReturn ( reqBean , resultBean . writeDbLog ( MesPcnEnumUtil . WORK_CELL_SCAN_MONITOR_LOG_TYPE . READ . getValue ( ) ) . scanInfo ( scanInfo ) , stepResult , String . format ( "当前已读取到设备[%s]产出零件号[%s]!" , cellEquipContext . getEquipmentName ( ) , scanInfo ) ) ;
//封装展示组件MODULE_CONTENT内容
private List < List < StationKvBean > > getModuleContextData ( StationRequestBean reqBean , List < MesProductionPartContext > productionPartContextList ) {
List < List < StationKvBean > > dataList = new ArrayList < > ( ) ;
AtomicReference < Integer > index = new AtomicReference < > ( 0 ) ;
productionPartContextList . forEach ( o - > StationKvBeanUtil . addStationKvBeanList ( dataList , new ArrayList < > ( ) ,
new StationKvBean ( MesPcnExtConstWords . PART_NO , "零件编码" , o . getPartNo ( ) ) , new StationKvBean ( MesPcnExtConstWords . PART_NAME , "零件名称" , o . getPartName ( ) ) ,
new StationKvBean ( MesPcnExtConstWords . CAVITY , "腔数" , index . updateAndGet ( v - > v + 1 ) + "/" + productionPartContextList . size ( ) ) ) ) ;
return dataList ;
}
}
}
}