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

tags/yfai-pcn-ext-v1.0
微笑着面对明天 12 months ago
commit 68304526ee

@ -1,20 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import io.swagger.annotations.ApiOperation;
import java.util.ArrayList;
import java.util.List;
public interface IEquipmentLogExtService {
@ApiOperation(value = "根据设备ID 查询设备ID分表所有采集数据")
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId);
@ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据")
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Integer> clientHandleList);
@ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态")
void updateEquipmentLogList(String organizeCode, Integer equipId, List<Integer> clientHandleList);
}

@ -7,7 +7,7 @@ import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
public interface IEquipmentExtService { public interface IMesEquipmentExtService {
@ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合") @ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合")
List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode); List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode);

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesMouldMultiCavityService {
@ApiOperation(value = "根据设备代码,模具号查询一模多腔信息")
List<MesMouldMultiCavity> getMouldMultiCavityList(String organizeCode, String equipmentCode, String mouldNo);
}

@ -6,7 +6,7 @@ import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
public interface IProdOrgExtService { public interface IMesProdOrgExtService {
@ApiOperation(value = "根据生产线代码查询工位集合") @ApiOperation(value = "根据生产线代码查询工位集合")
List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode); List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode);

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesEquipVariableCfgRuleMatchDispatchService {
@ApiOperation(value = "设备数据变量接口逻辑根据变量类别规则匹配")
Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList);
}

@ -0,0 +1,27 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import io.swagger.annotations.ApiOperation;
import java.util.ArrayList;
import java.util.List;
public interface IMesEquipmentLogExtService {
@ApiOperation(value = "根据设备ID 查询设备ID分表所有采集数据")
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId);
@ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据")
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Long> clientHandleList);
@ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态")
void updateEquipmentLogList(String organizeCode, Integer equipId, List<Long> clientHandleList);
@ApiOperation(value = "获取设备数据变量对应的采集数据")
List<MesEquipVariableCfgCollectContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList);
}

@ -1,17 +1,22 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; 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.ext.mes.pcn.pojo.context.MesProductionProcessContext;
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.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional;
public interface IMesProductionProcessContextStepService { public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "存储上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】")
Boolean doCacheContext(StationRequestBean reqBean, Object o);
@ApiOperation(value = "获取生产过程上下文对象") @ApiOperation(value = "获取生产过程上下文对象")
MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean); MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean);
@ -36,20 +41,26 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取工位当前设备信息") @ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap);
@ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Optional<Map<String, MesProdRouteOptParam>> stepParamMap);
@ApiOperation(value = "获取设备数据变量接口逻辑信息") @ApiOperation(value = "获取设备数据变量接口逻辑信息")
MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean); MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean);
@ApiOperation(value = "获取设备数据变量接口逻辑信息") @ApiOperation(value = "获取设备数据变量接口逻辑信息")
MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext); MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "根据变量类别过滤设备数据变量接口逻辑信息") @ApiOperation(value = "根据变量类别搜集设备数据变量接口逻辑信息")
List<MesEquipmentVariableCfg> filterEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory); List<MesEquipmentVariableCfg> collectEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory);
@ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息") @ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息")
MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory); MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory);
@ApiOperation(value = "过滤设备数据变量接口逻辑信息中的二级变量") @ApiOperation(value = "搜集设备数据变量接口逻辑信息中的二级变量")
List<String> filterCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList); List<String> collectCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList);
@ApiOperation(value = "获取设备数据变量信息") @ApiOperation(value = "获取设备数据变量信息")
MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType); MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType);
@ -66,6 +77,4 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取设备数据变量信息") @ApiOperation(value = "获取设备数据变量信息")
List<MesEquipmentVariable> findEquipmentVariableList(List<MesEquipmentVariable> equipmentVariableList, Integer variableType, List<String> categoryLevelTwoList); List<MesEquipmentVariable> findEquipmentVariableList(List<MesEquipmentVariable> equipmentVariableList, Integer variableType, List<String> categoryLevelTwoList);
@ApiOperation(value = "获取设备数据变量对应的采集数据")
List<MesEquipVariableCfgCollectLogContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList);
} }

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base; package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
@ -29,7 +29,7 @@ import java.util.List;
public class ProdOrgExtController extends MesPcnBaseController { public class ProdOrgExtController extends MesPcnBaseController {
@Autowired @Autowired
private IProdOrgExtService organizeService; private IMesProdOrgExtService organizeService;
@GetMapping({"/ext/query-work-cell-by-center"}) @GetMapping({"/ext/query-work-cell-by-center"})
@ApiOperation( @ApiOperation(

@ -1,49 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Slf4j
@Service
public class EquipmentLogExtService implements IEquipmentLogExtService {
@Autowired
private MesEquipmentLogRepository equipmentLogRepository;
@Override
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
return equipmentLogRepository.findByHqlWhere(packBean);
}
@Override
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Integer> clientHandleList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean);
if (MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) DdlPreparedPack.getNumEqualPack(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, packBean);
return equipmentLogRepository.findByHqlWhere(packBean);
}
@Override
public void updateEquipmentLogList(String organizeCode, Integer equipId, List<Integer> clientHandleList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean);
equipmentLogRepository.updateByProperties(new String[]{MesPcnExtConstWords.EQUIP_VARIABLE_STATUS}, new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()}, packBean);
}
}

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -26,7 +26,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class EquipmentExtService implements IEquipmentExtService { public class MesEquipmentExtService implements IMesEquipmentExtService {
@Autowired @Autowired
private MesWcEquipmentRepository wcEquipmentRepository; private MesWcEquipmentRepository wcEquipmentRepository;

@ -0,0 +1,29 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.repository.MesMouldMultiCavityRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
@Slf4j
@Service
public class MesMouldMultiCavityService implements IMesMouldMultiCavityService {
@Autowired
private MesMouldMultiCavityRepository mouldMultiCavityRepository;
@Override
public List<MesMouldMultiCavity> getMouldMultiCavityList(String organizeCode, String equipmentCode, String mouldNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipmentCode) || StringUtils.isEmpty(mouldNo)) return null;
return mouldMultiCavityRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE, MesPcnExtConstWords.MOULD_NO},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode, mouldNo});
}
}

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -19,7 +19,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class ProdOrgExtService implements IProdOrgExtService { public class MesProdOrgExtService implements IMesProdOrgExtService {
@Autowired @Autowired
private MesWorkCenterRepository workCenterRepository; private MesWorkCenterRepository workCenterRepository;

@ -197,12 +197,14 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
//根据条码状态判断 是不是已下线条码 //根据条码状态判断 是不是已下线条码
//若不是已下线的条码则提示 条码状态 请选择已下线的条码 //若不是已下线的条码则提示 条码状态 请选择已下线的条码
if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) { if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())); throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()),
MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription()));
} }
//是否需要判断条码质量状态 //是否需要判断条码质量状态
if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())); throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()),
MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription()));
} }
return produceSn; return produceSn;
} }

@ -71,7 +71,17 @@ public class MesNcProcessingService implements IMesNcProcessingService {
@Autowired @Autowired
private IMesNcProcessingDao ncProcessingDao; private IMesNcProcessingDao ncProcessingDao;
@Autowired
private MesProduceSnRepository produceSnRepository;
/***
*
* @param serialNumber
* @param partNo
* @param lot
* @param org
* @return
*/
@Override @Override
public MesNcProcessingModel queryProduceSn(String serialNumber, String partNo, String lot, String org) { public MesNcProcessingModel queryProduceSn(String serialNumber, String partNo, String lot, String org) {
@ -144,6 +154,13 @@ public class MesNcProcessingService implements IMesNcProcessingService {
} }
} }
/**
*
*
* @param defectRecordList
* @param org
* @return
*/
private MesPart checkPart(List<MesDefectRecord> defectRecordList, String org) { private MesPart checkPart(List<MesDefectRecord> defectRecordList, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
@ -178,6 +195,13 @@ public class MesNcProcessingService implements IMesNcProcessingService {
return part; return part;
} }
/**
*
*
* @param serialNumber
* @param org
* @return
*/
private List<MesDefectRecord> queryDefectRecordBySerialNumber(String serialNumber, String org) { private List<MesDefectRecord> queryDefectRecordBySerialNumber(String serialNumber, String org) {
@ -336,6 +360,15 @@ public class MesNcProcessingService implements IMesNcProcessingService {
} }
if (type == MesExtEnumUtil.NC_TYPE.NORMAL.getValue() || type == MesExtEnumUtil.NC_TYPE.RELEASE.getValue()) { if (type == MesExtEnumUtil.NC_TYPE.NORMAL.getValue() || type == MesExtEnumUtil.NC_TYPE.RELEASE.getValue()) {
String serialNumber = defectRecordList.get(0).getSerialNumber();
MesProduceSn sn = checkProduceSn(serialNumber, org);
sn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
sn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
ConvertBean.serviceModelUpdate(sn, AuthUtil.getSessionUser().getUserName());
produceSnRepository.save(sn);
MesMove move = new MesMove(); MesMove move = new MesMove();
move.setMatnr(part.getPartNo()); move.setMatnr(part.getPartNo());
move.setOrganizeCode(org); move.setOrganizeCode(org);
@ -359,4 +392,31 @@ public class MesNcProcessingService implements IMesNcProcessingService {
defectRecordRepository.saveAll(defectRecordList); defectRecordRepository.saveAll(defectRecordList);
} }
private MesProduceSn checkProduceSn(String serialNumber, String org) {
//根据扫描的条码查询条码是否存在
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getStringEqualPack(serialNumber, "productSn", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
MesProduceSn produceSn = produceSnRepository.getByProperty(packBean);
//若不存在则提示条码不存在
if (StringUtils.isEmpty(produceSn)) {
throw new ImppBusiException(String.format("【%s】此条码不存在请检查数据", serialNumber));
}
//根据条码状态判断 是不是已下线条码
//若不是已下线的条码则提示 条码状态 请选择已下线的条码
if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()),
MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription()));
}
//是否需要判断条码质量状态
if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()),
MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription()));
}
return produceSn;
}
} }

@ -244,13 +244,13 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
} }
//校验产品条码状态 必须是状态为已下线条码 //校验产品条码状态 必须是状态为已下线条码
if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) { if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", model.getSn(), produceSn.getSnStatus(), throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()),
MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())); MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription()));
} }
//校验产品质量状态 必须是状态为合格条码 //校验产品质量状态 必须是状态为合格条码
if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择状态为【%s】状态的条码", model.getSn(), produceSn.getQcStatus(), throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()),
MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())); MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription()));
} }
Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst();

@ -380,13 +380,14 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
//根据条码状态判断 是不是已下线条码 //根据条码状态判断 是不是已下线条码
//若不是已下线的条码则提示 条码状态 请选择已下线的条码 //若不是已下线的条码则提示 条码状态 请选择已下线的条码
if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) { if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())); throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()),
MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription()));
} }
//是否需要判断条码质量状态 //是否需要判断条码质量状态
if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) { if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getQcStatus(), throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()),
MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())); MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription()));
} }
return produceSn; return produceSn;
} }

@ -0,0 +1,133 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
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.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesEquipmentLogExtService implements IMesEquipmentLogExtService {
@Autowired
private MesEquipmentLogRepository equipmentLogRepository;
@Override
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
return equipmentLogRepository.findByHqlWhere(packBean);
}
@Override
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Long> clientHandleList) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || CollectionUtils.isEmpty(clientHandleList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean);
if (!StringUtils.isEmpty(needNewValue) && MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) DdlPreparedPack.getNumEqualPack(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, packBean);
return equipmentLogRepository.findByHqlWhere(packBean);
}
@Override
public void updateEquipmentLogList(String organizeCode, Integer equipId, List<Long> clientHandleList) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || CollectionUtils.isEmpty(clientHandleList)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean);
equipmentLogRepository.updateByProperties(new String[]{MesPcnExtConstWords.EQUIP_VARIABLE_STATUS}, new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()}, packBean);
}
@Override
public List<MesEquipVariableCfgCollectContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
if (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(equipmentVariableCfgList)) return null;
//封装数据变量接口逻辑、数据变量、设备LOG信息的嵌套对象集合
List<MesEquipVariableCfgCollectContext> collectContextList = generateEquipVariableCfgCollectLogContextList(equipmentVariableList, equipmentVariableCfgList);
//根据常变值分别获取设备ID分表的采集数据
Map<Long, MesEquipmentLog> needNewValue2Collect = getEquipmentLog(cellEquipContext, collectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue());
Map<Long, MesEquipmentLog> unNeedNewValue2Collect = getEquipmentLog(cellEquipContext, collectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
//修改常变值配置对应的设备ID分表的采集数据的状态为1
if (!CollectionUtils.isEmpty(needNewValue2Collect)) updateEquipmentLogList(cellEquipContext.getOrganizeCode(), cellEquipContext.getEquipId(), new ArrayList<>(needNewValue2Collect.keySet()));
for (MesEquipVariableCfgCollectContext equipVariableCfgCollectContext : collectContextList) {
if (null == equipVariableCfgCollectContext || CollectionUtils.isEmpty(equipVariableCfgCollectContext.getEquipVariableCollectContextList())) continue;
equipVariableCfgCollectContext.getEquipVariableCollectContextList().forEach(o -> o.copyValue(filterEquipmentLog(needNewValue2Collect, unNeedNewValue2Collect, o.getClientHandle(), equipVariableCfgCollectContext.getNeedNewValue())));
}
return collectContextList;
}
private List<MesEquipVariableCfgCollectContext> generateEquipVariableCfgCollectLogContextList(List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
List<MesEquipVariableCfgCollectContext> equipVariableCollectContextList = null;
Map<String, List<MesEquipmentVariable>> categoryLevelTwoMap = equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentVariable::getCategoryLevelTwo));
for (MesEquipmentVariableCfg equipmentVariableCfg : equipmentVariableCfgList) {
if (null == equipmentVariableCfg) continue;
MesEquipVariableCfgCollectContext equipVariableCfgCollect = new MesEquipVariableCfgCollectContext();
BeanUtils.copyProperties(equipmentVariableCfg, equipVariableCfgCollect);
equipVariableCfgCollect.equipVariableCollectContextList(categoryLevelTwoMap.get(equipmentVariableCfg.getCategoryLevelTwo()));
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
equipVariableCollectContextList.add(equipVariableCfgCollect);
}
return equipVariableCollectContextList;
}
private MesEquipmentLog filterEquipmentLog(Map<Long, MesEquipmentLog> needNewValue2Collect, Map<Long, MesEquipmentLog> unNeedNewValue2Collect, Integer clientHandle, Integer needNewValue) {
if (!StringUtils.isEmpty(needNewValue) && MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) return filterEquipmentLog(needNewValue2Collect, clientHandle);
else return filterEquipmentLog(unNeedNewValue2Collect, clientHandle);
}
private MesEquipmentLog filterEquipmentLog(Map<Long, MesEquipmentLog> collectMap, Integer clientHandle) {
return !CollectionUtils.isEmpty(collectMap) ? collectMap.get(Long.valueOf(clientHandle.toString())) : null;
}
private Map<Long, MesEquipmentLog> getEquipmentLog(MesCellEquipContext cellEquipContext, List<MesEquipVariableCfgCollectContext> equipVariableCollectContextList, Integer needNewValue) {
List<MesEquipVariableCfgCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(filterList)) return null;
List<MesEquipmentLog> equipmentLogList = getEquipmentLogList(cellEquipContext.getOrganizeCode(), cellEquipContext.getEquipId(), needNewValue, collectClientHandleList(filterList));
return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentLog::getId, o -> o));
}
private List<Long> collectClientHandleList(List<MesEquipVariableCfgCollectContext> equipVariableCollectContextList) {
List<Long> clientHandleList = null;
for (MesEquipVariableCfgCollectContext equipVariableCfgCollectContext : equipVariableCollectContextList) {
if (null == equipVariableCfgCollectContext || CollectionUtils.isEmpty(equipVariableCfgCollectContext.getClientHandleList())) continue;
if (CollectionUtils.isEmpty(clientHandleList)) clientHandleList = new ArrayList<>();
clientHandleList.addAll(equipVariableCfgCollectContext.getClientHandleList());
}
return CollectionUtils.isEmpty(clientHandleList) ? null : clientHandleList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
}
}

@ -0,0 +1,47 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Primary
@Service
public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVariableCfgRuleMatchDispatchService {
private Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, String strategyClass) {
return ((IMesEquipVariableCfgRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList);
}
@Override
public Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
switch (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.getByValue(variableCategory)) {
case PRODUCT_OK:
case PRODUCT_NOK:
case PRODUCT_SCRAP:
case PRODUCT_SUSPICIOUS:
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchCompareValueService");
case FIRST_MOULD_NO:
case MOULD_NO:
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchBackValueService");
//TODO CASE 数据变量接口逻辑根据变量类别实现策略
default:
return false;
}
}
}

@ -0,0 +1,48 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
@Slf4j
@Service
public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRuleMatchDispatchService {
@Override
public List<MesEquipVariableCollectContext> matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
List<MesEquipVariableCollectContext> backList = null;
for (MesEquipVariableCfgCollectContext collectContext : collectContextList) {
if (null == collectContext || CollectionUtils.isEmpty(collectContext.getEquipVariableCollectContextList())) continue;
for (MesEquipVariableCollectContext equipVariableCollectContext : collectContext.getEquipVariableCollectContextList()) {
if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue;
if (CollectionUtils.isEmpty(backList)) backList = new ArrayList<>();
backList.add(equipVariableCollectContext);
}
}
return backList;
}
}

@ -0,0 +1,79 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import lombok.extern.slf4j.Slf4j;
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.stream.Collectors;
/**
*
*/
@Slf4j
@Service
public class MesEvcRuleMatchCompareValueService implements IMesEquipVariableCfgRuleMatchDispatchService {
@Override
public Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
Map<String, List<MesEquipVariableCfgCollectContext>> ruleCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getRuleCategory));
for(Map.Entry<String, List<MesEquipVariableCfgCollectContext>> entry : ruleCategoryMap.entrySet()) {
if (null == entry) continue;
//任意一组规则全部匹配
if (matchEquipVariableCfgCollectContext(entry.getKey(), entry.getValue())) return true;
}
return false;
}
private Boolean matchEquipVariableCfgCollectContext(String ruleCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
for (MesEquipVariableCfgCollectContext collectContext : collectContextList) {
if (null == collectContext) continue;
//任意一个规则不匹配
if (!matchEquipVariableCfgCollectContext(collectContext)) return false;
}
return true;
}
private Boolean matchEquipVariableCfgCollectContext(MesEquipVariableCfgCollectContext collectContext) {
if (StringUtils.isEmpty(collectContext.getValue()) || CollectionUtils.isEmpty(collectContext.getEquipVariableCollectContextList())) return false;
//一个规则如果对应多个数据变量,则默认必须全部匹配
for (MesEquipVariableCollectContext equipVariableCollectContext : collectContext.getEquipVariableCollectContextList()) {
if (null == equipVariableCollectContext) continue;
if (StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) return false;
//比对值是否相等
if (!compareTo(collectContext.getValue(), equipVariableCollectContext.getEquipVariableValue())) return false;
}
return true;
}
private Boolean compareTo(String value1, String value2) {
return value1.toLowerCase().equals(value2.toLowerCase()) ? true : false;
}
}

@ -1,65 +1,124 @@
//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.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
//import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import lombok.extern.slf4j.Slf4j; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import org.springframework.beans.factory.annotation.Autowired; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
//import org.springframework.stereotype.Service; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
// import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
//import java.util.List; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
//import java.util.Map; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
// import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
///** import cn.estsh.i3plus.pojo.mes.model.StepResult;
// * @Description : 读头道模具号工步 import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
// * @Author : wangjie import com.alibaba.fastjson.JSONObject;
// **/ import lombok.extern.slf4j.Slf4j;
//@Slf4j import org.springframework.beans.factory.annotation.Autowired;
//@Service("mesFirstMouldNoReadStepService") import org.springframework.stereotype.Service;
//public class MesFirstMouldNoReadStepService extends BaseStepService { import org.springframework.util.CollectionUtils;
//
// @Autowired import java.util.List;
// private IMesProductionProcessContextStepService productionProcessContextStepService; import java.util.Map;
// import java.util.Optional;
// @Override
// public StepResult execute(StationRequestBean reqBean) { /**
// * @Description :
// StationResultBean resultBean = new StationResultBean(); * @Author : wangjie
// **/
// StepResult stepResult = StepResult.getSuccessComplete(); @Slf4j
// @Service("mesFirstMouldNoReadStepService")
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()); public class MesFirstMouldNoReadStepService extends BaseStepService {
//
// if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess()) @Autowired
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()).getSuccess()) @Autowired
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); private IMesEquipmentLogExtService equipmentLogExtService;
//
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess()) @Autowired
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
//
// if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess()) @Autowired
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); private IMesMouldMultiCavityService mouldMultiCavityService;
//
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); @Override
// public StepResult execute(StationRequestBean reqBean) {
// Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext);
// StationResultBean resultBean = new StationResultBean();
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
// StepResult stepResult = StepResult.getSuccessComplete();
//
// Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
// return stepResult;
// } MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//
// productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext);
//
//} //获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]头道模具号相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
List<MesEquipVariableCfgCollectContext> collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//读取头道模具号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), collectContextList);
//验证头道模具号的有效性
checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList);
//设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点
if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE);
productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, 1000L);
return stepResult;
}
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
List<MesMouldMultiCavity> mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), firstMouldNo);
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("当前设备[%s]与读取到的头道模具号[%s]未维护有效的一模多腔信息!", cellEquipContext.getEquipmentCode(), firstMouldNo));
//保存设备当前一轮工序的头道模具号与一模多腔信息
productionProcessContext.firstMouldNo(firstMouldNo).mouldCavityJson(mouldMultiCavityList);
return stepResult;
}
}

@ -0,0 +1,136 @@
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.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
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.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
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.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.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
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 com.alibaba.fastjson.JSONObject;
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;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesMouldNoReadStepService")
public class MesMouldNoReadStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesMouldMultiCavityService mouldMultiCavityService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]模具号相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
List<MesEquipVariableCfgCollectContext> collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//读取模具号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), collectContextList);
//验证模具号的有效性
checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList);
//设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点
if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE);
productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, 1000L);
return stepResult;
}
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
String mouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
if (StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) && !checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo).isCompleted()) return stepResult;
//保存设备当前一轮工序的模具号
productionProcessContext.mouldNo(mouldNo);
return stepResult;
}
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, String mouldNo) {
List<MesMouldMultiCavity> mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), mouldNo);
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("当前设备[%s]与读取到的模具号[%s]未维护有效的一模多腔信息!", cellEquipContext.getEquipmentCode(), mouldNo));
//保存设备当前一轮工序的头道模具号与一模多腔信息
productionProcessContext.firstMouldNo(mouldNo).mouldCavityJson(mouldMultiCavityList);
return stepResult;
}
}

@ -1,22 +1,31 @@
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.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; 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.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; 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.serviceimpl.fsm.BaseStepService; 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.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
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;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
@ -29,6 +38,12 @@ public class MesProductResultReadStepService extends BaseStepService {
@Autowired @Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService; private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
@ -36,42 +51,73 @@ public class MesProductResultReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean); Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
equipmentVariableCfgList = productionProcessContextStepService.filterEquipmentVariableCfgList(equipmentVariableCfgList, equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList,
MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue(), 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()); MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, //配置错误 抛出异常
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]获取加工结果相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue()).getSuccess()) if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue()).getSuccess())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<String> categoryLevelTwoList = productionProcessContextStepService.filterCategoryLevelTwoList(equipmentVariableCfgList); List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); 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())); if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息!", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
List<MesEquipVariableCfgCollectLogContext> collectContextList = productionProcessContextStepService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); List<MesEquipVariableCfgCollectContext> collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
Map<String, List<MesEquipVariableCfgCollectContext>> variableCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory));
matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap);
//保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果
if (stepResult.isCompleted()) productionProcessContext.productResult((String) stepResult.getObj());
productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, 1000L);
return stepResult;
}
return stepResult; //加工结果规则匹配:根据变量类别分组, 只要匹配一组即可; 在一组中根据规则类别分组, 相同规则类别的一组必须全部匹配, 任意一组规则类别匹配成功即可
private StepResult matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, Map<String, List<MesEquipVariableCfgCollectContext>> variableCategoryMap) {
for (Map.Entry<String, List<MesEquipVariableCfgCollectContext>> entry : variableCategoryMap.entrySet()) {
if (null == entry) continue;
if (!(Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue;
if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey()))
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription()));
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.obj(entry.getKey()), true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE,
MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue().equals(entry.getKey()) ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT,
String.format("%s", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey())));
} }
//设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.stateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE), false,
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode()));
}
} }

@ -1,17 +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.base.IEquipmentExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
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.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; 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.ext.mes.pcn.pojo.context.MesProductionProcessContext;
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.IFsmRouteDataService; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,16 +32,16 @@ import java.util.stream.Collectors;
public class MesProductionProcessContextStepService extends BaseStepService implements IMesProductionProcessContextStepService { public class MesProductionProcessContextStepService extends BaseStepService implements IMesProductionProcessContextStepService {
@Autowired @Autowired
private IProdOrgExtService prodOrgExtService; private IMesProdOrgExtService prodOrgExtService;
@Autowired @Autowired
private IEquipmentExtService equipmentExtService; private IMesEquipmentExtService equipmentExtService;
@Autowired @Autowired
private IFsmRouteDataService fsmRouteDataService; private IFsmRouteDataService fsmRouteDataService;
@Autowired @Override
private IEquipmentLogExtService equipmentLogExtService; public Boolean doCacheContext(StationRequestBean reqBean, Object o) { return saveFsmBusiData(reqBean.getOrganizeCode(), getFsmBusikey(reqBean, o.getClass().getSimpleName()), JSONObject.toJSONString(o)); }
@Override @Override
public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) { public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) {
@ -132,8 +131,19 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (!productionProcessContext.getSuccess()) return productionProcessContext; if (!productionProcessContext.getSuccess()) return productionProcessContext;
//获取当前工步的参数集合 return getCurCellEquipment(reqBean, productionProcessContext, getStepParams(reqBean));
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
}
@Override
public MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
return getCurCellEquipment(reqBean, getCellEquipmentList(reqBean), stepParamMap);
}
@Override
public MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
if (!productionProcessContext.getSuccess()) return productionProcessContext;
//获取当前工步的设备参数 //获取当前工步的设备参数
String equipmentCode = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.EQUIPMENT_CODE_UC)) ? stepParamMap.get().get(MesPcnExtConstWords.EQUIPMENT_CODE_UC).getParamValue() : null; String equipmentCode = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.EQUIPMENT_CODE_UC)) ? stepParamMap.get().get(MesPcnExtConstWords.EQUIPMENT_CODE_UC).getParamValue() : null;
@ -179,7 +189,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
} }
@Override @Override
public List<MesEquipmentVariableCfg> filterEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) { public List<MesEquipmentVariableCfg> collectEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) {
List<String> variableCategoryList = null == variableCategory ? null : Arrays.asList(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()); return (CollectionUtils.isEmpty(equipmentVariableCfgList) || CollectionUtils.isEmpty(variableCategoryList)) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && variableCategoryList.contains(o.getVariableCategory()))).collect(Collectors.toList());
} }
@ -188,11 +198,11 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) { public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) {
List<String> variableCategoryList = null == variableCategory ? null : Arrays.asList(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(); 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())); return (null != optional && optional.isPresent()) ? productionProcessContext : productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]变量类别%s的数据变量接口逻辑信息!", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType(), variableCategoryList.toString()));
} }
@Override @Override
public List<String> filterCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList) { public List<String> collectCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : 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()); (equipmentVariableCfgList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
} }
@ -253,136 +263,4 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
equipmentVariableList.stream().filter(o -> (null != o && categoryLevelTwoList.contains(o.getCategoryLevelTwo()) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList()); equipmentVariableList.stream().filter(o -> (null != o && categoryLevelTwoList.contains(o.getCategoryLevelTwo()) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList());
} }
@Override
public List<MesEquipVariableCfgCollectLogContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
//List<MesEquipVariableCfgCollectLogContext> collectContextList = generateEquipVariableCfgCollectLogContextList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
return null;
}
// 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());
// }
} }

@ -0,0 +1,58 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* -
*/
@Data
public class MesEquipVariableCfgCollectContext {
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("变量配置类型")
private String variableCfgType;
@ApiParam("变量类别")
private String variableCategory;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("规则类别")
private String ruleCategory;
@ApiParam("参考值")
private String value;
@ApiParam("是否常变值")
private Integer needNewValue;
@ApiParam("数据变量集合")
private List<MesEquipVariableCollectContext> equipVariableCollectContextList;
@ApiParam("数据变量OPC注册ID集合")
private List<Long> clientHandleList;
public MesEquipVariableCfgCollectContext equipVariableCollectContextList(List<MesEquipmentVariable> equipVariableList) {
if (CollectionUtils.isEmpty(equipVariableList)) return this;
this.equipVariableCollectContextList = new ArrayList<>();
this.clientHandleList = new ArrayList<>();
for (MesEquipmentVariable equipmentVariable : equipVariableList) {
if (null == equipmentVariable) continue;
MesEquipVariableCollectContext equipVariableCollectContext = new MesEquipVariableCollectContext(equipmentVariable.getId());
BeanUtils.copyProperties(equipmentVariable, equipVariableCollectContext);
equipVariableCollectContextList.add(equipVariableCollectContext);
clientHandleList.add(Long.valueOf(equipmentVariable.getClientHandle().toString()));
}
return this;
}
}

@ -1,31 +1,21 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context; package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils;
/** /**
* -LOG * -LOG
*/ */
@Data @Data
public class MesEquipVariableCfgCollectLogContext { public class MesEquipVariableCollectContext {
@ApiParam("组织代码") @ApiParam("组织代码")
private String organizeCode; private String organizeCode;
@ApiParam("变量类别") @ApiParam("设备变量ID")
private String variableCategory; private Long equipVariableId;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("规则类别")
private String ruleCategory;
@ApiParam("参考值")
private String value;
@ApiParam("是否常变值")
private Integer needNewValue;
@ApiParam("设备ID") @ApiParam("设备ID")
private Integer equipId; private Integer equipId;
@ -48,9 +38,15 @@ public class MesEquipVariableCfgCollectLogContext {
@ApiParam("tag地址") @ApiParam("tag地址")
private String tagAddress; private String tagAddress;
@ApiParam("变量配置类型")
private String variableCfgType;
@ApiParam("变量类型") @ApiParam("变量类型")
private Integer variableType; private Integer variableType;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("数据类型") @ApiParam("数据类型")
private Integer variableDataType; private Integer variableDataType;
@ -63,9 +59,6 @@ public class MesEquipVariableCfgCollectLogContext {
@ApiParam("读写类型") @ApiParam("读写类型")
private Integer readWrite; private Integer readWrite;
@ApiParam("设备变量ID")
private Long equipVariableId;
@ApiParam("设备变量名称") @ApiParam("设备变量名称")
private String equipVariableName; private String equipVariableName;
@ -81,11 +74,20 @@ public class MesEquipVariableCfgCollectLogContext {
@ApiParam("变量当前值") @ApiParam("变量当前值")
private String equipVariableValue; private String equipVariableValue;
@ApiParam("变量状态")
private String equipVariableStatus;
@ApiParam("设备质量") @ApiParam("设备质量")
private Integer quality; private Integer quality;
public MesEquipVariableCfgCollectLogContext(Long equipVariableId) { public MesEquipVariableCollectContext() {}
public MesEquipVariableCollectContext(Long equipVariableId) {
this.equipVariableId = equipVariableId; this.equipVariableId = equipVariableId;
} }
public void copyValue(MesEquipmentLog equipmentLog) {
if (null == equipmentLog) return;
BeanUtils.copyProperties(equipmentLog, this);
}
} }

@ -1,9 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context; package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -61,6 +58,14 @@ public class MesProductionProcessContext {
@ApiParam("设备变量集合信息([Json]List<MesEquipmentVariable>)") @ApiParam("设备变量集合信息([Json]List<MesEquipmentVariable>)")
private String equipVariableJson; private String equipVariableJson;
//-----------------根据业务执行情况必要时清理-----------------
@ApiParam("加工结果:成功/报废/可疑 【报废/可疑: 在保存逻辑条码时有特殊业务处理】")
private String productResult;
@ApiParam("头道模具号") @ApiParam("头道模具号")
private String firstMouldNo; private String firstMouldNo;
@ -70,6 +75,8 @@ public class MesProductionProcessContext {
@ApiParam("一模多腔信息") @ApiParam("一模多腔信息")
private String mouldCavityJson; private String mouldCavityJson;
//--------------------------------------------------------
@ApiParam("腔组明细信息") @ApiParam("腔组明细信息")
private String cavityGroupDetailJson; private String cavityGroupDetailJson;
@ -101,6 +108,12 @@ public class MesProductionProcessContext {
return this; return this;
} }
//手动赋结果
public MesProductionProcessContext success(Boolean success) {
this.success = success;
return this;
}
//上下文信息结果信息赋值后给工步使用 //上下文信息结果信息赋值后给工步使用
public MesProductionProcessContext message(String message) { public MesProductionProcessContext message(String message) {
this.success = false; this.success = false;
@ -242,4 +255,57 @@ public class MesProductionProcessContext {
return this; return this;
} }
//上下文赋值加工结果
public MesProductionProcessContext productResult(String productResult) {
this.equipVariableJson = productResult;
return this;
}
//上下文清除加工结果
public MesProductionProcessContext productResultClear() {
this.equipVariableJson = null;
return this;
}
//上下文赋值头道模具号
public MesProductionProcessContext firstMouldNo(String firstMouldNo) {
this.firstMouldNo = firstMouldNo;
return this;
}
//上下文清除头道模具号
public MesProductionProcessContext firstMouldNoClear() {
this.firstMouldNo = null;
return this;
}
//上下文赋值模具号
public MesProductionProcessContext mouldNo(String mouldNo) {
this.mouldNo = mouldNo;
return this;
}
//上下文清除模具号
public MesProductionProcessContext mouldNoClear() {
this.mouldNo = null;
return this;
}
//从上下文中取出一模多腔信息集合
public List<MesMouldMultiCavity> getMouldCavityList() {
return StringUtils.isEmpty(this.mouldCavityJson) ? null : JSONObject.parseArray(this.mouldCavityJson, MesMouldMultiCavity.class);
}
//上下文赋值一模多腔信息
public MesProductionProcessContext mouldCavityJson(List<MesMouldMultiCavity> mouldMultiCavityList) {
this.mouldCavityJson = !CollectionUtils.isEmpty(mouldMultiCavityList) ? JSONObject.toJSONString(mouldMultiCavityList) : null;
return this;
}
//上下文清除一模多腔信息
public MesProductionProcessContext mouldCavityJsonClear() {
this.mouldCavityJson = null;
return this;
}
} }

@ -52,8 +52,6 @@ public class MesPcnExtConstWords {
public static final String EQUIPMENT_CODE = "equipmentCode"; public static final String EQUIPMENT_CODE = "equipmentCode";
// 设备ID // 设备ID
public static final String EQUIP_ID = "equipId"; public static final String EQUIP_ID = "equipId";
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 变量类型 // 变量类型
public static final String VARIABLE_TYPE = "variableType"; public static final String VARIABLE_TYPE = "variableType";
// 二级变量 // 二级变量
@ -62,11 +60,16 @@ public class MesPcnExtConstWords {
public static final String VARIABLE_CFG_TYPE = "variableCfgType"; public static final String VARIABLE_CFG_TYPE = "variableCfgType";
// 变量状态 // 变量状态
public static final String EQUIP_VARIABLE_STATUS = "equipVariableStatus"; public static final String EQUIP_VARIABLE_STATUS = "equipVariableStatus";
// 模具号
public static final String MOULD_NO = "mouldNo";
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 读取失败睡眠毫秒数[工步参数]
public static final String READ_FAILURE_SLEEP = "READ_FAILURE_SLEEP";

Loading…
Cancel
Save