@ -2,15 +2,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService ;
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.util.MesPcnExtConstWords ;
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.util.StationKvBeanUtil ;
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.bean.MesPart ;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam ;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean ;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean ;
@ -58,7 +57,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
private IMesMouldMultiCavityService mouldMultiCavityService ;
@Autowired
private IPartService part Service;
private MesPartDataMapSaveStepService partDataMapSaveStep Service;
@Override
public void title ( StationRequestBean reqBean ) {
@ -172,10 +171,10 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
productionCustomContextStepService . sendStepContextMessage ( reqBean , firstMouldNo , MesExtEnumUtil . CELL_MESSAGE_SOURCE . READ ) ;
//验证一模多腔信息
List < MesProductionPartContext > productionPartContextList = getProductionPartList ( reqBean , resultBean , productionProcessContext, cellEquipContext, firstMouldNo , true ) ;
List < MesProductionPartContext > productionPartContextList = getProductionPartList ( reqBean , resultBean , cellEquipContext, firstMouldNo , true ) ;
//保存零件数据信息
savePartDataMap ( reqBean , resultBean , stepResult , productionP rocessContext, productionPartContextList , false ) ;
savePartDataMap 2PPC ( reqBean , resultBean , stepResult , productionP artContextList, false , false ) ;
//保存设备当前一轮工序的头道模具号,产出零件(一模多腔)信息
productionDispatchContextStepService . dispatchFirstMouldNoContext ( reqBean , equipVariableCollectContextList . get ( 0 ) ) ;
@ -190,76 +189,47 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
}
public List < MesProductionPartContext > getProductionPartList ( StationRequestBean reqBean , StationResultBean resultBean , MesProductionProcessContext productionProcessContext , MesCellEquipContext cellEquipContext , String mouldNo , Boolean isFirstMouldNo ) {
//从上下文中取出产出零件(一模多腔)信息集合
List < MesProductionPartContext > productionPartContextList = productionDispatchContextStepService . getProductionPartContext ( reqBean ) ;
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if ( ! checkCachedProductionPartValid ( productionPartContextList , cellEquipContext . getEquipmentCode ( ) , mouldNo ) ) productionPartContextList = mouldMultiCavityService . getProductionPartList ( reqBean . getOrganizeCode ( ) , cellEquipContext . getEquipmentCode ( ) , mouldNo ) ;
//配置错误 抛出异常
if ( CollectionUtils . isEmpty ( productionPartContextList ) ) stepExpSendMsgAndThrowEx ( reqBean , resultBean . writeDbLog ( ) . scanInfo ( mouldNo ) , String . format ( "当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!" , cellEquipContext . getEquipmentName ( ) , isFirstMouldNo ? "头道" : MesPcnExtConstWords . EMPTY , mouldNo ) ) ;
return productionPartContextList ;
}
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配
private Boolean checkCachedProductionPartValid ( List < MesProductionPartContext > productionPartContextList , String equipmentCode , String firstMouldNo ) {
return ( ! CollectionUtils . isEmpty ( productionPartContextList ) & & productionPartContextList . get ( 0 ) . getEquipmentCode ( ) . equals ( equipmentCode ) & & productionPartContextList . get ( 0 ) . getMouldNo ( ) . equals ( firstMouldNo ) ) ? true : false ;
}
public StepResult savePartDataMap ( StationRequestBean reqBean , StationResultBean resultBean , StepResult stepResult , MesProductionProcessContext productionProcessContext , List < MesProductionPartContext > productionPartContextList , Boolean isBackError ) {
//从一模多腔信息中搜集零件编码并去重
List < String > partNoList = ( productionPartContextList . stream ( ) . filter ( o - > ( null ! = o & & ! StringUtils . isEmpty ( o . getPartNo ( ) ) ) ) . map ( MesProductionPartContext : : getPartNo ) . collect ( Collectors . toList ( ) ) ) . stream ( ) . filter ( o - > ! StringUtils . isEmpty ( o ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
return savePartDataMap ( reqBean , resultBean , stepResult , partNoList , isBackError ) ;
//封装展示组件MODULE_CONTENT内容
private List < List < StationKvBean > > getModuleContextData ( StationRequestBean reqBean , List < MesProductionPartContext > productionPartContextList , Boolean isFirstMouldNo ) {
List < List < StationKvBean > > dataList = new ArrayList < > ( ) ;
AtomicReference < Integer > index = new AtomicReference < > ( 0 ) ;
productionPartContextList . forEach ( o - > StationKvBeanUtil . addStationKvBeanList ( dataList , new ArrayList < > ( ) ,
new StationKvBean ( MesPcnExtConstWords . MOULD_NO , isFirstMouldNo ? "头道模具号" : "模具号" , o . getMouldNo ( ) ) , 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 ;
}
public StepResult savePartDataMap ( StationRequestBean reqBean , StationResultBean resultBean , StepResult stepResult , List < String > partNoList , Boolean isBackError ) {
if ( CollectionUtils . isEmpty ( partNoList ) ) return stepResult ;
//从上下文中取出零件信息集合
Map < String , MesPart > partDataMap = productionDispatchContextStepService . getPartDataContext ( reqBean ) ;
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if ( ! CollectionUtils . isEmpty ( partDataMap ) & & ! CollectionUtils . isEmpty ( partNoList ) & & partDataMap . keySet ( ) . containsAll ( partNoList ) & & partNoList . containsAll ( partDataMap . keySet ( ) ) ) return stepResult . obj ( partDataMap ) ;
//根据物料编码集合查询物料信息
Map < String , MesPart > finalPartDataMap = partService . getPartMap ( reqBean . getOrganizeCode ( ) , partNoList ) ;
//保存零件数据信息
public void savePartDataMap2PPC ( StationRequestBean reqBean , StationResultBean resultBean , StepResult stepResult , List < MesProductionPartContext > productionPartContextList , Boolean isBackError , Boolean isFilter ) {
//保存零件数据信息
partDataMapSaveStepService . savePartDataMap2PPC ( reqBean , resultBean , stepResult , productionPartContextList , false , false ) ;
}
//零件信息缺失 抛出异常
List < String > filterList = CollectionUtils . isEmpty ( finalPartDataMap ) ? null : partNoList . stream ( ) . filter ( o - > ( null ! = o & & ! finalPartDataMap . containsKey ( o ) ) ) . collect ( Collectors . toList ( ) ) ;
//验证一模多腔信息
public List < MesProductionPartContext > getProductionPartList ( StationRequestBean reqBean , StationResultBean resultBean , MesCellEquipContext cellEquipContext , String mouldNo , Boolean isFirstMouldNo ) {
//保存上下文零件数据信息
if ( ! CollectionUtils . isEmpty ( finalPartDataMap ) & & CollectionUtils . isEmpty ( filterList ) )
return stepResult . isCompleted ( productionDispatchContextStepService . dispatchPartDataContext ( reqBean , finalPartDataMap ) ) . obj ( finalPartDataMap ) . msg ( ! stepResult . isCompleted ( ) ? "零件数据信息保存上下文操作执行失败,请重试!" : null ) ;
//从上下文中取出产出零件(一模多腔)信息集合
List < MesProductionPartContext > productionPartContextList = productionDispatchContextStepService . getProductionPartContext ( reqBean ) ;
//验证 错误 根据isBackError判断是否抛出异常
stepResult . isCompleted ( false ) . msg ( String . format ( "请检查零件信息,零件编码%s信息不存在!" , CollectionUtils . isEmpty ( finalPartDataMap ) ? partNoList . toString ( ) : filterList . toString ( ) ) ) ;
//验证 产出零件(一模多腔)信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if ( ! checkCachedProductionPartValid ( productionPartContextList , cellEquipContext . getEquipmentCode ( ) , mouldNo ) ) productionPartContextList = mouldMultiCavityService . getProductionPartList ( reqBean . getOrganizeCode ( ) , cellEquipContext . getEquipmentCode ( ) , mouldNo ) ;
if ( ! isBackError ) stepExpSendMsgAndThrowEx ( reqBean , resultBean . writeDbLog ( ) , stepResult . getMsg ( ) ) ;
//配置错误 抛出异常
if ( CollectionUtils . isEmpty ( productionPartContextList ) ) stepExpSendMsgAndThrowEx ( reqBean , resultBean . writeDbLog ( ) . scanInfo ( mouldNo ) , String . format ( "当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!" , cellEquipContext . getEquipmentName ( ) , isFirstMouldNo ? "头道" : MesPcnExtConstWords . EMPTY , mouldNo ) ) ;
return stepResul t;
return productionPartContextLis t;
}
//更新展示组件MODULE_CONTENT内容
public void doCacheMoudleContext ( StationRequestBean reqBean , List < MesProductionPartContext > productionPartContextList , Boolean isFirstMouldNo ) {
//存储展示组件MODULE_CONTENT内容
productionDispatchContextStepService . dispatchModuleContentContext ( reqBean , getModuleContextData ( reqBean , productionPartContextList , isFirstMouldNo ) ) ;
}
//封装展示组件MODULE_CONTENT内容
private List < List < StationKvBean > > getModuleContextData ( StationRequestBean reqBean , List < MesProductionPartContext > productionPartContextList , Boolean isFirstMouldNo ) {
List < List < StationKvBean > > dataList = new ArrayList < > ( ) ;
AtomicReference < Integer > index = new AtomicReference < > ( 0 ) ;
productionPartContextList . forEach ( o - > StationKvBeanUtil . addStationKvBeanList ( dataList , new ArrayList < > ( ) ,
new StationKvBean ( MesPcnExtConstWords . MOULD_NO , isFirstMouldNo ? "头道模具号" : "模具号" , o . getMouldNo ( ) ) , 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 ;
}
}