离线版本

tags/yfai-pcn-ext-v2.3
王杰 8 months ago
parent 5830b0452b
commit 7767805389

@ -67,12 +67,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null; if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取排序FILE文件URL 【显示前道所有工序装配件工步不需要获取文件】 //获取排序FILE文件URL 【离线生产不需要获取文件】
Map<Long, String> fileMap = getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList)); Map<Long, String> fileMap = !prodRuleContext.getIsClosedCheck() ? getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList)) : null;
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>(); List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()))); workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()).isClosedCheck(prodRuleContext.getIsClosedCheck())));
return productionAssemblySortContextList; return productionAssemblySortContextList;
} }
@ -99,11 +99,22 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>(); List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getWorkCell(workCellMap, o.getWorkCellCode())).foreignKey(prodRuleContext.getForeignKey()))); workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(
new MesProductionAssemblySortContext()
.copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getIsCheckBindSeq(getWorkCell(workCellMap, o.getWorkCellCode()), prodRuleContext.getIsClosedCheck()))
.foreignKey(prodRuleContext.getForeignKey()).isClosedCheck(prodRuleContext.getIsClosedCheck())
)
);
return productionAssemblySortContextList; return productionAssemblySortContextList;
} }
//判断是否按序扫描【离线默认有序】
private Integer getIsCheckBindSeq(MesWorkCell workCell, Boolean isClosedCheck) {
if (isClosedCheck) return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
}
//【排序线】获取生产工单装配件清单 //【排序线】获取生产工单装配件清单
@Override @Override
public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, Boolean isShowAll) { public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, Boolean isShowAll) {

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
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.mes.bean.MesProductionAssemblyUnique; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -32,6 +33,16 @@ public class MesNumberRuleMatchAndUniqueService implements IMesNumberRuleMatchDi
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) return result; if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) return result;
if (!MesProductionAssemblyContext.class.isAssignableFrom(params[0].getClass())) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "参数匹配规则信息不是装配件匹配规则!");
return result;
}
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
List<MesProductionAssemblyUnique> productionAssemblyUniqueList = assemblyExtService.getProductionAssemblyUniqueList(organizeCode, sn); List<MesProductionAssemblyUnique> productionAssemblyUniqueList = assemblyExtService.getProductionAssemblyUniqueList(organizeCode, sn);
Optional<MesProductionAssemblyUnique> optional = CollectionUtils.isEmpty(productionAssemblyUniqueList) ? null : Optional<MesProductionAssemblyUnique> optional = CollectionUtils.isEmpty(productionAssemblyUniqueList) ? null :

@ -29,7 +29,6 @@ public class MesNumberRuleMatchCompareRangeService implements IMesNumberRuleMatc
} }
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0]; MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (StringUtils.isEmpty(context.getMaxValue()) || StringUtils.isEmpty(context.getMinValue())) { if (StringUtils.isEmpty(context.getMaxValue()) || StringUtils.isEmpty(context.getMinValue())) {
result.put(MesPcnExtConstWords.MESSAGE, "请检查匹配规则信息的[最大值/最小值]是否均维护!"); result.put(MesPcnExtConstWords.MESSAGE, "请检查匹配规则信息的[最大值/最小值]是否均维护!");
return result; return result;

@ -44,6 +44,10 @@ public class MesNumberRuleMatchSnService implements IMesNumberRuleMatchDispatchS
return result; return result;
} }
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(organizeCode, sn); List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(organizeCode, sn);
if (CollectionUtils.isEmpty(produceSnList)) { if (CollectionUtils.isEmpty(produceSnList)) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息不存在!", sn)); result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息不存在!", sn));

@ -44,6 +44,10 @@ public class MesNumberRuleMatchSortSnGmService implements IMesNumberRuleMatchDis
return result; return result;
} }
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
String productSn = customerSnTransformService.transformBarCodeGm(sn); String productSn = customerSnTransformService.transformBarCodeGm(sn);
if (productSn.length() == sn.length()) { if (productSn.length() == sn.length()) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("通用自制件条码固定长度为58位,零件条码[%s]长度[%s]位!", sn, sn.length())); result.put(MesPcnExtConstWords.MESSAGE, String.format("通用自制件条码固定长度为58位,零件条码[%s]长度[%s]位!", sn, sn.length()));
@ -54,6 +58,7 @@ public class MesNumberRuleMatchSortSnGmService implements IMesNumberRuleMatchDis
result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getStrategyClass())).matchNumberRule(organizeCode, sn, params); result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) result.put(MesPcnExtConstWords.MESSAGE, String.format("通用%s", result.get(MesPcnExtConstWords.MESSAGE))); if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) result.put(MesPcnExtConstWords.MESSAGE, String.format("通用%s", result.get(MesPcnExtConstWords.MESSAGE)));
else result.put(MesPcnExtConstWords.ASSEMBLY_SN, productSn);//落表需要使用转换后的条码
return result; return result;
} }

@ -18,14 +18,11 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository; import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Objects; import com.google.common.base.Objects;
@ -39,7 +36,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.StringJoiner; import java.util.StringJoiner;
import java.util.function.BinaryOperator;
/** /**
* @Description : * @Description :
@ -73,29 +69,35 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//获取上下文信息 //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); //配置错误 抛出异常
if (!productionProcessContext.getSuccess()) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
MesPcnException.throwBusiException(productionProcessContext.getMessage());
}
//获取班次信息,先查询缓存,缓存没有在查询数据库 //获取班次信息,先查询缓存,缓存没有在查询数据库
List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(reqBean);
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) { if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班"); MesPcnException.throwBusiException("请先开班!");
} }
// 发送班次班组和工单 // 发送班次班组和工单
StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext);
this.sendMessage(reqBean, resultBean); this.sendMessage(reqBean, resultBean);
//获取生产线的当前班组班次信息
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
// 整合班次加工数量 // 整合班次加工数量
List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean); List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean);
if (CollectionUtils.isEmpty(productionStatisticsContext)) { if (CollectionUtils.isEmpty(productionStatisticsContext)) {
productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工数", MesPcnExtConstWords.ZERO_STR), productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工数", MesPcnExtConstWords.ZERO_STR),
new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
} }
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell, mesProdShiftKvBean);
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext, productionProcessContext.getWorkCell(), mesProdShiftKvBean);
this.sendMessage(reqBean, shiftCountBean); this.sendMessage(reqBean, shiftCountBean);
//验证工位是否锁定 //验证工位是否锁定

@ -74,12 +74,9 @@ public class MesProductionSortModuleService extends BaseModuleService {
//获取班次信息,先查询缓存,缓存没有在查询数据库 //获取班次信息,先查询缓存,缓存没有在查询数据库
List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(reqBean);
//MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) { if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班"); MesPcnException.throwBusiException("请先开班!");
} }
// 发送班次班组和工单 // 发送班次班组和工单
StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext);
@ -93,9 +90,6 @@ public class MesProductionSortModuleService extends BaseModuleService {
reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
((IStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).executeInState(reqBean); ((IStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).executeInState(reqBean);
//设备BYPASS监控
//((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).executeInState(reqBean);
} }
private StationResultBean getStationResultBean(List<MesQueueOrderModel> mesQueueOrderModelList) { private StationResultBean getStationResultBean(List<MesQueueOrderModel> mesQueueOrderModelList) {
@ -132,7 +126,6 @@ public class MesProductionSortModuleService extends BaseModuleService {
packBean.setOrderByStr(" order by productSeq desc "); packBean.setOrderByStr(" order by productSeq desc ");
List<MesQueueOrder> queueOrderList = queueOrderRepository.findByHqlWherePage(packBean, pager); List<MesQueueOrder> queueOrderList = queueOrderRepository.findByHqlWherePage(packBean, pager);
//List<MesQueueOrderModel> queueOrderModels = new ArrayList<>();
if (!CollectionUtils.isEmpty(queueOrderList)) { if (!CollectionUtils.isEmpty(queueOrderList)) {
boolean isComplete = false; boolean isComplete = false;

@ -246,7 +246,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
MesProductionAssemblySortContext filter = (MesProductionAssemblySortContext) result.get(MesPcnExtConstWords.DATA); MesProductionAssemblySortContext filter = (MesProductionAssemblySortContext) result.get(MesPcnExtConstWords.DATA);
//前道防错 //前道防错
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) { if (!filter.getIsClosedCheck() && !StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))) { if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))); String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode())));
@ -255,7 +255,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
} }
//时效性验证 //时效性验证
if (!StringUtils.isEmpty(filter.getProductSnId())) { if (!filter.getIsClosedCheck() && !StringUtils.isEmpty(filter.getProductSnId())) {
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE10.getValue()); result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE10.getValue());
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) { if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
@ -269,8 +269,8 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
flag = true; flag = true;
//装配件清单该数据标记已装配 (如果是自制件赋值productSnId) //装配件清单该数据标记已装配(验证返回result里面是否存在assemblySn,存在特殊的规则会转换成新的条码) (如果是自制件赋值productSnId)
productionAssemblySortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId()); productionAssemblySortContext.assemblyStatus(!result.containsKey(MesPcnExtConstWords.ASSEMBLY_SN) ? equipVariableCollectContext.getEquipVariableValue() : (String) result.get(MesPcnExtConstWords.ASSEMBLY_SN)).productSnId(filter.getProductSnId());
break; break;
@ -294,7 +294,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
private Boolean isCheckBindSeq(MesProdRuleContext prodRuleContext, MesProductionAssemblySortContext productionAssemblySortContext) { private Boolean isCheckBindSeq(MesProdRuleContext prodRuleContext, MesProductionAssemblySortContext productionAssemblySortContext) {
if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true;
if (!StringUtils.isEmpty(productionAssemblySortContext.getIsSeqScan()) && productionAssemblySortContext.getIsSeqScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; if (!StringUtils.isEmpty(productionAssemblySortContext.getIsCheckBindSeq()) && productionAssemblySortContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true;
return false; return false;
} }

@ -63,12 +63,15 @@ public class MesAssemblyReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(),
stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
} }

@ -153,6 +153,7 @@ public class MesAssemblySaveSortStepService extends BaseStepService {
private void saveProductionAssemblyUnique(StationRequestBean reqBean, MesProductionAssemblySortContext productionAssemblySortContext) { private void saveProductionAssemblyUnique(StationRequestBean reqBean, MesProductionAssemblySortContext productionAssemblySortContext) {
if (productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) != 0 || StringUtils.isEmpty(productionAssemblySortContext.getAssemblySn())) return; if (productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) != 0 || StringUtils.isEmpty(productionAssemblySortContext.getAssemblySn())) return;
if (productionAssemblySortContext.getIsClosedCheck()) return;//离线生产不写[装配件规则唯一绑定记录表]
MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique();
BeanUtils.copyProperties(productionAssemblySortContext, productionAssemblyUnique, MesPcnExtConstWords.ID); BeanUtils.copyProperties(productionAssemblySortContext, productionAssemblyUnique, MesPcnExtConstWords.ID);
productionAssemblyUnique.setPid(productionAssemblySortContext.getId()); productionAssemblyUnique.setPid(productionAssemblySortContext.getId());

@ -31,7 +31,8 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
Map<String, MesWorkCell> workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean); Map<String, MesWorkCell> workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean);
MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey())
.isClosedCheck(mesOffLineOpen);
return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap); return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap);
} }

@ -11,6 +11,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -119,11 +120,18 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
//获取装配件信息(子类进行重写) //获取装配件信息(子类进行重写)
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext( MesProdRuleContext prodRuleContext = new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(productionProcessContext.getWorkCell().getIsSeqScan()) reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(getIsCheckBindSeq(productionProcessContext.getWorkCell()))
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey())
.isClosedCheck(mesOffLineOpen);
return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext); return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext);
} }
//判断是否按序扫描【离线默认有序】
private Integer getIsCheckBindSeq(MesWorkCell workCell) {
if (mesOffLineOpen) return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
}
//装配件清单列表标题 //装配件清单列表标题
private List<AttrBean> dataAttrList(List<MesProdRuleContext> prodRuleContextList, Boolean isNeedShowCell, Boolean isNeedShowMatchRule) { private List<AttrBean> dataAttrList(List<MesProdRuleContext> prodRuleContextList, Boolean isNeedShowCell, Boolean isNeedShowMatchRule) {
List<AttrBean> attrBeanList = new ArrayList<>(); List<AttrBean> attrBeanList = new ArrayList<>();

@ -53,12 +53,13 @@ public class MesEquipByPassReadStepService extends BaseStepService {
//获取上下文信息 //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
if (!productionProcessContext.getSuccess()) return stepResult.isCompleted(false); if (!productionProcessContext.getSuccess()) return stepResult.isCompleted(false);
//离线生产
if (mesOffLineOpen) return stepResult.isCompleted(false);
//当前工位使用的设备 //当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
if (null == cellEquipContext) return stepResult.isCompleted(false); if (null == cellEquipContext) return stepResult.isCompleted(false);
//获取生产过程上下文对象有异常信息 //获取生产过程上下文对象有异常信息

@ -68,6 +68,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容 //发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean); productionCustomContextStepService.sendStepContextMessage(reqBean);

@ -55,6 +55,9 @@ public class MesMembraneSignalReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容 //发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean); productionCustomContextStepService.sendStepContextMessage(reqBean);

@ -71,10 +71,13 @@ public class MesMouldNoReadStepService extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不读模具号
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数 //获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean); Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);

@ -186,7 +186,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//正常条码 //正常条码
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()));
return stepResult; return stepResult;
} }
@ -194,7 +194,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//未知条码【工序为空 代表新做的工序没有加工完成】 //未知条码【工序为空 代表新做的工序没有加工完成】
if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); productionPsInContextList.add(new MesProductionPsInContext(produceSnList.get(1)).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult; return stepResult;
} }
@ -208,7 +208,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
} }
//未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult; return stepResult;

@ -69,10 +69,13 @@ public class MesProductResultReadStepService extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不读加工结果
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数 //获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean); Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);

@ -151,7 +151,7 @@ public class MesProductSnCheckStepService extends BaseStepService {
//正常条码 //正常条码
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()));
return stepResult; return stepResult;
} }
@ -159,7 +159,7 @@ public class MesProductSnCheckStepService extends BaseStepService {
//未知条码【工序为空 代表新做的工序没有加工完成】 //未知条码【工序为空 代表新做的工序没有加工完成】
if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); productionPsInContextList.add(new MesProductionPsInContext(produceSnList.get(1)).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult; return stepResult;
} }
@ -173,7 +173,7 @@ public class MesProductSnCheckStepService extends BaseStepService {
} }
//未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult; return stepResult;

@ -65,12 +65,15 @@ public class MesProductSnReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(),
stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
} }

@ -73,7 +73,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(),
stepResult.isCompleted(false).msg(String.format("当前读取到设备的零件号匹配失败超过[%s]次!", endlessLoopReadTimes)), stepResult.isCompleted(false).msg(String.format("当前读取到设备的零件号匹配失败超过[%s]次!", endlessLoopReadTimes)),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
} }

@ -55,6 +55,9 @@ public class MesReadySignalReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容 //发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean); productionCustomContextStepService.sendStepContextMessage(reqBean);

@ -66,13 +66,16 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) if (StringUtils.isEmpty(endlessLoopReadTimes))
endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(),
stepResult.isCompleted(false).msg(String.format("当前读取到设备的可回用包装条码匹配失败超过[%s]次!", endlessLoopReadTimes)), stepResult.isCompleted(false).msg(String.format("当前读取到设备的可回用包装条码匹配失败超过[%s]次!", endlessLoopReadTimes)),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
} }

@ -1,158 +1,158 @@
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.IMesEquipVariableRwExtService; //import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; //import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
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.apiservice.serviceimpl.rulematch.strategy.AbstractWriteVariableService; //import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy.AbstractWriteVariableService;
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.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.serviceimpl.fsm.BaseStepService; //import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; //import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; //import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; //import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg; //import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; //import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; //import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; //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.repository.MesCavityGroupDetailCfgRepository; //import cn.estsh.i3plus.pojo.mes.repository.MesCavityGroupDetailCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository; //import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; //import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil; //import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
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 org.springframework.util.StringUtils; //import org.springframework.util.StringUtils;
//
import java.util.Comparator; //import java.util.Comparator;
import java.util.List; //import java.util.List;
import java.util.Map; //import java.util.Map;
import java.util.Optional; //import java.util.Optional;
import java.util.stream.Collectors; //import java.util.stream.Collectors;
//
/** ///**
* @Description : // * @Description : 腔组发送加工参数
* @Author : zxw // * @Author : zxw
**/ // **/
@Slf4j //@Slf4j
@Service("mesSendCavityGroupParamsCmdStepService") //@Service("mesSendCavityGroupParamsCmdStepService")
public class MesSendCavityGroupParamsCmdStepService extends BaseStepService { //public class MesSendCavityGroupParamsCmdStepService extends BaseStepService {
//
@Autowired // @Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService; // private IMesProductionProcessContextStepService productionProcessContextStepService;
//
@Autowired // @Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService; // private IMesProductionDispatchContextStepService productionDispatchContextStepService;
//
//
@Autowired // @Autowired
private IMesEquipVariableRwExtService equipVariableRwExtService; // private IMesEquipVariableRwExtService equipVariableRwExtService;
@Autowired // @Autowired
private MesEquipmentVariableRepository mesEquipmentVariableRepository; // private MesEquipmentVariableRepository mesEquipmentVariableRepository;
//
@Autowired // @Autowired
private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository; // private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository;
//
//
@Autowired // @Autowired
private MesCavityGroupDetailCfgRepository mesCavityGroupDetailCfgRepository; // private MesCavityGroupDetailCfgRepository mesCavityGroupDetailCfgRepository;
//
@Override // @Override
public StepResult execute(StationRequestBean reqBean) { // public StepResult execute(StationRequestBean reqBean) {
//
StationResultBean resultBean = new StationResultBean(); // StationResultBean resultBean = new StationResultBean();
//
StepResult stepResult = StepResult.getSuccessComplete(); // StepResult stepResult = StepResult.getSuccessComplete();
//
//获取工步参数 // //获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean); // Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//
//获取上下文信息 // //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); // MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap);
//
//当前工位使用的设备 // //当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); // MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
//获取腔组数据信息集合 // //获取腔组数据信息集合
List<MesCavityGroupDetailCfg> mesCavityGroupDetailCfgs = productionProcessContext.getCavityGroupDetailList(); // List<MesCavityGroupDetailCfg> mesCavityGroupDetailCfgs = productionProcessContext.getCavityGroupDetailList();
//
mesCavityGroupDetailCfgs = mesCavityGroupDetailCfgs.stream().sorted(Comparator.comparingInt(MesCavityGroupDetailCfg::getSeq)).collect(Collectors.toList()); // mesCavityGroupDetailCfgs = mesCavityGroupDetailCfgs.stream().sorted(Comparator.comparingInt(MesCavityGroupDetailCfg::getSeq)).collect(Collectors.toList());
//
if (CollectionUtils.isEmpty(mesCavityGroupDetailCfgs)) { // if (CollectionUtils.isEmpty(mesCavityGroupDetailCfgs)) {
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到腔组信息!"); // return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到腔组信息!");
} // }
sendEquipParamsCmd(reqBean, resultBean, stepResult, stepParamMap, cellEquipContext, mesCavityGroupDetailCfgs); // sendEquipParamsCmd(reqBean, resultBean, stepResult, stepParamMap, cellEquipContext, mesCavityGroupDetailCfgs);
//
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送腔组加工参数成功!"); // return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送腔组加工参数成功!");
} // }
//
/** // /**
* // * 发送加工参数
* @param reqBean // * @param reqBean
* @param resultBean // * @param resultBean
* @param stepResult // * @param stepResult
* @param stepParamMap // * @param stepParamMap
* @param cellEquipContext // * @param cellEquipContext
* @param mesCavityGroupDetailCfgs // * @param mesCavityGroupDetailCfgs
*/ // */
private void sendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, MesCellEquipContext cellEquipContext, List<MesCavityGroupDetailCfg> mesCavityGroupDetailCfgs) { // private void sendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, MesCellEquipContext cellEquipContext, List<MesCavityGroupDetailCfg> mesCavityGroupDetailCfgs) {
int index = 0; // int index = 0;
//
for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) { // for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) {
index ++; // index ++;
// 获取加工参数 // // 获取加工参数
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); // DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean); // DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean);
List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); // List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean);
for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {// // for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {//
String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); // String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule());
AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); // AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass));
//
DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); // DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean); // DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean);
MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean); // MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean);
if (mesEquipmentVariable == null) { // if (mesEquipmentVariable == null) {
continue; // continue;
} // }
execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), null, index); // execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), null, index);
} // }
} // }
} // }
//
//
private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean, // private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean,
String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index) { // String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index) {
//
equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, index); // equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, index);
//
//
} // }
//
//最大重试次数[工步参数] // //最大重试次数[工步参数]
private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) { // private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
Integer maxRetryTimes = null; // Integer maxRetryTimes = null;
try { // try {
maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; // maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null;
} catch (NumberFormatException e) { // } catch (NumberFormatException e) {
} // }
return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; // return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT;
} // }
//
private String getStrateClass(String value) { // private String getStrateClass(String value) {
//
String strategyClass = "commonWriteVariableService"; // String strategyClass = "commonWriteVariableService";
//
if (value.contains("orderNo")) { // if (value.contains("orderNo")) {
strategyClass = "OrderWriteVariableService"; // strategyClass = "OrderWriteVariableService";
} else if (value.contains("partNo")) { // } else if (value.contains("partNo")) {
strategyClass = "PartWriteVariableService"; // strategyClass = "PartWriteVariableService";
} else if (value.contains("sn")) { // } else if (value.contains("sn")) {
strategyClass = "SnWriteVariableService"; // strategyClass = "SnWriteVariableService";
} // }
return strategyClass; // return strategyClass;
} // }
} //}

@ -60,11 +60,16 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送设备加工参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean(); StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合 //获取上下文加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前没有加工规则数据,跳过发送!"); if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前没有加工规则数据,跳过发送!");
//获取上下文信息 //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
@ -81,7 +86,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
//根据来源ID查询设备加工参数信息 //根据来源ID查询设备加工参数信息
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList); List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList);
if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!"); if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!");
//设备加工参数信息集合根据来源ID分组 //设备加工参数信息集合根据来源ID分组
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId)); Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId));
@ -95,7 +100,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
//设备加工参数信息集合根据数据变量ID分组 //设备加工参数信息集合根据数据变量ID分组
Map<Long, MesEquipmentVariable> evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o)); Map<Long, MesEquipmentVariable> evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o));
if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!"); if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!");
//当前工位使用的设备 //当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
@ -124,7 +129,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
}); });
return StepResult.getSuccessComplete(); return stepResult;
} }
//搜集加工参数关联ID集合 //搜集加工参数关联ID集合

@ -60,11 +60,16 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送设备加工参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean(); StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合 //获取上下文加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前没有加工规则数据,跳过发送!"); if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前没有加工规则数据,跳过发送!");
//获取上下文信息 //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
@ -81,7 +86,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
//根据来源ID查询设备加工参数信息 //根据来源ID查询设备加工参数信息
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList); List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList);
if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!"); if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!");
//设备加工参数信息集合根据来源ID分组 //设备加工参数信息集合根据来源ID分组
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId)); Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId));
@ -95,7 +100,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
//设备加工参数信息集合根据数据变量ID分组 //设备加工参数信息集合根据数据变量ID分组
Map<Long, MesEquipmentVariable> evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o)); Map<Long, MesEquipmentVariable> evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o));
if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!"); if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!");
//当前工位使用的设备 //当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
@ -124,7 +129,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
}); });
return StepResult.getSuccessComplete(); return stepResult;
} }
//搜集加工参数关联ID集合 //搜集加工参数关联ID集合

@ -47,10 +47,13 @@ public class MesSendInitializationCmdStepService extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送初始化指令
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数 //获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean); Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);

@ -47,10 +47,13 @@ public class MesSendProcessCmdStepService extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送允许加工指令
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数 //获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean); Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);

@ -57,10 +57,13 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService {
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不保存工艺参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
// 获取上下文信息 // 获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);

@ -219,11 +219,11 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
return stepResult.isCompleted(false).msg(String.format("请检查工单工位队列信息,加工单[%s]工位队列状态[%s]", workOrderNo, MesExtEnumUtil.QUEUE_ORDER_STATUS.valueOfDescription(queueOrder.getStatus()))); return stepResult.isCompleted(false).msg(String.format("请检查工单工位队列信息,加工单[%s]工位队列状态[%s]", workOrderNo, MesExtEnumUtil.QUEUE_ORDER_STATUS.valueOfDescription(queueOrder.getStatus())));
//封装产成零件 //封装产成零件
MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isCheck(productionProcessContext.getWorkCell()); MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isClosedCheck(mesOffLineOpen).isCheck(productionProcessContext.getWorkCell());
productionPartContextList.add(productionPartContext); productionPartContextList.add(productionPartContext);
//封装产品条码 //封装产品条码
productionPsInContextList.add(new MesProductionPsInContext(productionProcessContext.getWorkCell(), produceSn).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId())); productionPsInContextList.add(new MesProductionPsInContext(produceSn).isClosedCheck(mesOffLineOpen).isCheck(productionProcessContext.getWorkCell()).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId()));
//封装产出条码 //封装产出条码
productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn)); productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn));

@ -329,7 +329,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
// 获取上道工艺生产的条码并封装到进料上下文中 // 获取上道工艺生产的条码并封装到进料上下文中
if (!CollectionUtils.isEmpty(produceSnList)) if (!CollectionUtils.isEmpty(produceSnList))
produceSnList.stream().filter(o -> null != o).forEach(o -> { produceSnList.stream().filter(o -> null != o).forEach(o -> {
productionPsInContextList.add(new MesProductionPsInContext(workCell, o).cutCode(cutScheme.getCutCode())); productionPsInContextList.add(new MesProductionPsInContext(o).isCheck(workCell).cutCode(cutScheme.getCutCode()));
productionPsOutContextList.add(new MesProductionPsOutContext().copy(o)); productionPsOutContextList.add(new MesProductionPsOutContext().copy(o));
}); });
} }

@ -62,12 +62,15 @@ public class MesWorkOrderReadStepService extends BaseStepService {
@Override @Override
public StepResult init(StationRequestBean reqBean) { public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) {
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(),
stepResult.isCompleted(false).msg(String.format("当前读取到设备的加工单匹配失败超过[%s]次!", endlessLoopReadTimes)), stepResult.isCompleted(false).msg(String.format("当前读取到设备的加工单匹配失败超过[%s]次!", endlessLoopReadTimes)),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
} }

@ -1,172 +1,172 @@
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.IMesProductionDispatchContextStepService; //import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
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.api.busi.IWriteVariableService; //import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteVariableService;
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.MesProdRuleContext; //import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; //import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
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.serviceimpl.fsm.BaseStepService; //import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; //import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; //import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; //import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; //import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; //import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; //import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; //import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
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.repository.MesEquipmentProdParamCfgRepository; //import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; //import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; //import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
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 org.springframework.util.StringUtils; //import org.springframework.util.StringUtils;
//
import java.util.*; //import java.util.*;
import java.util.stream.Collectors; //import java.util.stream.Collectors;
//
/** ///**
* @Description : // * @Description : 发送客户端主条码
* @Author : zxw // * @Author : zxw
**/ // **/
@Slf4j //@Slf4j
@Service("mesWriteMainBarcodeCmdStepService") //@Service("mesWriteMainBarcodeCmdStepService")
public class MesWriteMainBarcodeCmdStepService extends BaseStepService { //public class MesWriteMainBarcodeCmdStepService extends BaseStepService {
//
@Autowired // @Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService; // private IMesProductionProcessContextStepService productionProcessContextStepService;
//
@Autowired // @Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService; // private IMesProductionDispatchContextStepService productionDispatchContextStepService;
//
@Autowired // @Autowired
private IWriteVariableService writeVariableService; // private IWriteVariableService writeVariableService;
//
@Autowired // @Autowired
private MesEquipmentVariableRepository mesEquipmentVariableRepository; // private MesEquipmentVariableRepository mesEquipmentVariableRepository;
//
@Autowired // @Autowired
private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository; // private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository;
//
//
@Override // @Override
public StepResult execute(StationRequestBean reqBean) { // public StepResult execute(StationRequestBean reqBean) {
//
StationResultBean resultBean = new StationResultBean(); // StationResultBean resultBean = new StationResultBean();
//
StepResult stepResult = StepResult.getSuccessComplete(); // StepResult stepResult = StepResult.getSuccessComplete();
//
//获取工步参数 // //获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean); // Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//
//获取上下文信息 // //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); // MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap);
//
//当前工位使用的设备 // //当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); // MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
//获取上下文加工规则数据信息集合 // //获取上下文加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); // List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//
if (CollectionUtils.isEmpty(prodRuleContextList)) { // if (CollectionUtils.isEmpty(prodRuleContextList)) {
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到加工规则,无需发送加工参数!"); // return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到加工规则,无需发送加工参数!");
} // }
List<MesEquipmentVariable> mesEquipmentVariableList = new ArrayList<>(); // List<MesEquipmentVariable> mesEquipmentVariableList = new ArrayList<>();
List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgList = new ArrayList<>(); // List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgList = new ArrayList<>();
Map<Integer, List<MesEquipmentProdParamCfg>> mesEquipmentVariableMap = getMesEquipmentProdParamCfgs(reqBean, prodRuleContextList, mesEquipmentProdParamCfgList); // Map<Integer, List<MesEquipmentProdParamCfg>> mesEquipmentVariableMap = getMesEquipmentProdParamCfgs(reqBean, prodRuleContextList, mesEquipmentProdParamCfgList);
// 过滤掉非条码的 // // 过滤掉非条码的
mesEquipmentVariableMap = filterMsg(mesEquipmentVariableMap); // mesEquipmentVariableMap = filterMsg(mesEquipmentVariableMap);
//
mesEquipmentVariableMap.forEach((k, v) -> { // mesEquipmentVariableMap.forEach((k, v) -> {
v.stream().forEach(mesEquipmentProdParamCfg -> { // v.stream().forEach(mesEquipmentProdParamCfg -> {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(); // DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); // DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean);
MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); // MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean);
if (mesEquipmentVariable == null) { // if (mesEquipmentVariable == null) {
return; // return;
} // }
mesEquipmentVariableList.add(mesEquipmentVariable); // mesEquipmentVariableList.add(mesEquipmentVariable);
mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg); // mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg);
execSendEquipParamsCmd(reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), k, stepParamMap); // execSendEquipParamsCmd(reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), k, stepParamMap);
}); // });
}); // });
//
//
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送加工参数成功!"); // return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送加工参数成功!");
} // }
//
/** // /**
* // * 根据排序和非排序 获取对应的加工参数
* @param reqBean // * @param reqBean
* @param prodRuleContextList // * @param prodRuleContextList
* @param mesEquipmentProdParamCfgList // * @param mesEquipmentProdParamCfgList
* @return // * @return
*/ // */
private Map<Integer, List<MesEquipmentProdParamCfg>> getMesEquipmentProdParamCfgs(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList, List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgList) { // private Map<Integer, List<MesEquipmentProdParamCfg>> getMesEquipmentProdParamCfgs(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList, List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgList) {
//
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); // MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//
Map<Integer, List<MesEquipmentProdParamCfg>> map = new HashMap<>(); // Map<Integer, List<MesEquipmentProdParamCfg>> map = new HashMap<>();
for (MesProdRuleContext mesProdRuleContext : prodRuleContextList) { // for (MesProdRuleContext mesProdRuleContext : prodRuleContextList) {
List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs= new ArrayList<>(); // List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs= new ArrayList<>();
//从上下文中取出生产线对象 // //从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); // MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
// 获取加工参数 // // 获取加工参数
if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()){ // if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()){
//
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); // DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(mesProdRuleContext.getPid(), "sourceId", ddlPackBean); // DdlPreparedPack.getNumEqualPack(mesProdRuleContext.getPid(), "sourceId", ddlPackBean);
mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); // mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean);
} else { // } else {
MesWorkCenter mesWorkCenter = new MesWorkCenter(); // MesWorkCenter mesWorkCenter = new MesWorkCenter();
mesWorkCenter.setWorkCenterCode(reqBean.getWorkCenterCode()); // mesWorkCenter.setWorkCenterCode(reqBean.getWorkCenterCode());
List<MesProductionAssemblyContext> assemblyDataContext = mesProdRuleContext.getAssemblyDataContext(mesWorkCenter); // List<MesProductionAssemblyContext> assemblyDataContext = mesProdRuleContext.getAssemblyDataContext(mesWorkCenter);
List<Long> sourceIds = assemblyDataContext.stream().map(MesProductionAssemblyContext::getSourceId).collect(Collectors.toList()); // List<Long> sourceIds = assemblyDataContext.stream().map(MesProductionAssemblyContext::getSourceId).collect(Collectors.toList());
//
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); // DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getInPackList(sourceIds, "sourceId", ddlPackBean); // DdlPreparedPack.getInPackList(sourceIds, "sourceId", ddlPackBean);
mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); // mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean);
} // }
if (!CollectionUtils.isEmpty(mesEquipmentProdParamCfgs)) { // if (!CollectionUtils.isEmpty(mesEquipmentProdParamCfgs)) {
mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgs.stream().distinct().collect(Collectors.toList()); // mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgs.stream().distinct().collect(Collectors.toList());
} // }
map.put(mesProdRuleContext.getForeignKey(), mesEquipmentProdParamCfgs); // map.put(mesProdRuleContext.getForeignKey(), mesEquipmentProdParamCfgs);
} // }
return map; // return map;
} // }
//
private void execSendEquipParamsCmd(StationRequestBean reqBean, // private void execSendEquipParamsCmd(StationRequestBean reqBean,
String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) { // String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
//最大重试次数[工步参数] // //最大重试次数[工步参数]
Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); // Integer maxRetryTimes = getMaxRetryTimes(stepParamMap);
//
writeVariableService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, null, maxRetryTimes); // writeVariableService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, null, maxRetryTimes);
} // }
//
//最大重试次数[工步参数] // //最大重试次数[工步参数]
private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) { // private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
Integer maxRetryTimes = null; // Integer maxRetryTimes = null;
try { // try {
maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; // maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null;
} catch (NumberFormatException e) { // } catch (NumberFormatException e) {
} // }
return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : 3; // return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : 3;
} // }
//
private Map<Integer, List<MesEquipmentProdParamCfg>> filterMsg(Map<Integer, List<MesEquipmentProdParamCfg>> map){ // private Map<Integer, List<MesEquipmentProdParamCfg>> filterMsg(Map<Integer, List<MesEquipmentProdParamCfg>> map){
//
if (CollectionUtils.isEmpty(map)) { // if (CollectionUtils.isEmpty(map)) {
return null; // return null;
} // }
map.forEach((k,v) -> { // map.forEach((k,v) -> {
v = v.stream().filter(cfg -> StringUtils.isEmpty(cfg.getMatchRule()) && cfg.getMatchRule() // v = v.stream().filter(cfg -> StringUtils.isEmpty(cfg.getMatchRule()) && cfg.getMatchRule()
.toUpperCase().startsWith("BARCODE")).collect(Collectors.toList()); }); // .toUpperCase().startsWith("BARCODE")).collect(Collectors.toList()); });
return map; // return map;
} // }
} //}

@ -13,6 +13,7 @@ import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -170,6 +171,12 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (isCheckProcess && StringUtils.isEmpty(productionProcessContext.getProcessCode())) return productionProcessContext.message(String.format("请检查工序信息,生产线[%s]工位[%s]对应工序代码[%s]的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode())); if (isCheckProcess && StringUtils.isEmpty(productionProcessContext.getProcessCode())) return productionProcessContext.message(String.format("请检查工序信息,生产线[%s]工位[%s]对应工序代码[%s]的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()));
if (mesOffLineOpen) {
//离线生产发送设备质量信息[BAD=Red]
this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(MesExtEnumUtil.COLOR.RED.getValue()));
if (productionProcessContext.getWorkCenter().getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) return productionProcessContext.message("离线生产仅支持排序生产线!");
}
return productionProcessContext; return productionProcessContext;
} }

@ -48,8 +48,10 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
@Override @Override
public Boolean doProcessComplete(StationRequestBean requestBean) { public Boolean doProcessComplete(StationRequestBean requestBean) {
//补DB日志 [获取开模ID赋值scanInfo] [获取上下文产出条码数据信息集合赋值resultList] //补DB日志 [获取开模ID赋值scanInfo] [获取上下文产出条码数据信息集合赋值resultList]
writeDbLogService.doRestoreDbLog(requestBean, new StationResultBean().restoreDbLog(). if (!mesOffLineOpen) {
scanInfo(productionProcessContextStepService.getScanMonitorContextMouldRecordId(requestBean)).resultList(productionDispatchContextStepService.getProductionPsOutContext(requestBean))); writeDbLogService.doRestoreDbLog(requestBean, new StationResultBean()
.restoreDbLog().scanInfo(productionProcessContextStepService.getScanMonitorContextMouldRecordId(requestBean)).resultList(productionDispatchContextStepService.getProductionPsOutContext(requestBean)));
}
//清除上下文中的所有业务数据 //清除上下文中的所有业务数据
productionDispatchContextStepService.flushProductionDispatchContext(requestBean); productionDispatchContextStepService.flushProductionDispatchContext(requestBean);
//发送工序完成音 //发送工序完成音

@ -60,6 +60,10 @@ public class MesProdRuleContext implements Serializable {
@ApiParam(name = "是否验证装配件扫描顺序") @ApiParam(name = "是否验证装配件扫描顺序")
private Integer isCheckBindSeq; private Integer isCheckBindSeq;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//-------以下非排序属性------------- //-------以下非排序属性-------------
@ApiParam("非排序产品加工规则ID") @ApiParam("非排序产品加工规则ID")
@ -130,6 +134,12 @@ public class MesProdRuleContext implements Serializable {
return this; return this;
} }
//赋值系统配置【离线开关】
public MesProdRuleContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
//非排序无须使用工位的字段,直接使用非排序产品加工规则的字段; //非排序无须使用工位的字段,直接使用非排序产品加工规则的字段;
//排序使用工位的字段, 如果是显示前道所有装配件场景下在装配件清单中单独标记各个工位的装配件是否需要顺序扫描 //排序使用工位的字段, 如果是显示前道所有装配件场景下在装配件清单中单独标记各个工位的装配件是否需要顺序扫描
public MesProdRuleContext isCheckBindSeq(Integer isSeqScan) { public MesProdRuleContext isCheckBindSeq(Integer isSeqScan) {

@ -122,4 +122,8 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("匹配时间") @ApiParam("匹配时间")
public String matchDatetime; public String matchDatetime;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
public Boolean isClosedCheck = false;
} }

@ -128,7 +128,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
public String createUser; public String createUser;
@ApiParam(name = "是否顺序扫描") @ApiParam(name = "是否顺序扫描")
private Integer isSeqScan; private Integer isCheckBindSeq;
@ApiParam(name = "是否保存到DB") @ApiParam(name = "是否保存到DB")
private Integer isSaveDb = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); private Integer isSaveDb = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ -158,7 +158,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
} }
//末道工位 //末道工位
public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly, MesWorkCell workCell) { public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly, Integer isCheckBindSeq) {
if (null != workOrderAssembly) { if (null != workOrderAssembly) {
BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS); BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS);
@ -175,7 +175,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
this.paRemark = productionAssembly.getRemark(); this.paRemark = productionAssembly.getRemark();
} }
if (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) this.isSeqScan = workCell.getIsSeqScan(); this.isCheckBindSeq = isCheckBindSeq;
if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO; if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO;
if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO; if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO;
@ -247,4 +247,10 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
private void matchDatetime() { this.matchDatetime = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()); } private void matchDatetime() { this.matchDatetime = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()); }
//赋值系统配置【离线开关】
public MesProductionAssemblySortContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
} }

@ -2,7 +2,9 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -104,6 +106,10 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("工艺强过码") @ApiParam("工艺强过码")
private String craftJumpCode; private String craftJumpCode;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//默认否 //默认否
@ApiParam("是否顺序防错") @ApiParam("是否顺序防错")
private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ -152,7 +158,7 @@ public class MesProductionPartContext implements Serializable {
} }
//根据工单信息、裁片工单明细赋值 //根据工单信息、裁片工单明细赋值
public MesProductionPartContext copyPartNo(MesWorkOrder workOrder, Double cutQty, String cutWorkOrderNo, Integer messageSource) { public MesProductionPartContext copyPartNo(MesWorkOrder workOrder, Double cutQty, String cutWorkOrderNo, Integer messageSource) {
if (null != workOrder) { if (null != workOrder) {
BeanUtils.copyProperties(workOrder, this); BeanUtils.copyProperties(workOrder, this);
if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0); if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0);
@ -182,7 +188,14 @@ public class MesProductionPartContext implements Serializable {
return this; return this;
} }
//赋值系统配置【离线开关】
public MesProductionPartContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
public MesProductionPartContext isCheck(MesWorkCell workCell) { public MesProductionPartContext isCheck(MesWorkCell workCell) {
if (isClosedCheck) return this;
if(!StringUtils.isEmpty(workCell.getIsCheckSeq()) && workCell.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckSeq = workCell.getIsCheckSeq(); if(!StringUtils.isEmpty(workCell.getIsCheckSeq()) && workCell.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckSeq = workCell.getIsCheckSeq();
return this; return this;
} }

@ -64,6 +64,12 @@ public class MesProductionPsInContext implements Serializable {
@ApiParam(value ="工艺代码") @ApiParam(value ="工艺代码")
private String craftCode; private String craftCode;
@ApiParam("生产线代码")
private String workCenterCode;
@ApiParam("工位代码")
private String workCellCode;
@ApiParam("工艺强过码") @ApiParam("工艺强过码")
private String craftJumpCode; private String craftJumpCode;
@ -74,6 +80,10 @@ public class MesProductionPsInContext implements Serializable {
@ApiParam("是否空腔") @ApiParam("是否空腔")
private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//默认否 //默认否
@ApiParam(name = "是否前道工艺防错") @ApiParam(name = "是否前道工艺防错")
private Integer isCheckCraft = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); private Integer isCheckCraft = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ -91,12 +101,28 @@ public class MesProductionPsInContext implements Serializable {
public MesProductionPsInContext() {} public MesProductionPsInContext() {}
public MesProductionPsInContext(String organizeCode, String productSn) {
this.organizeCode = organizeCode;
this.productSn = productSn;
}
public MesProductionPsInContext(MesProduceSn produceSn) {
BeanUtils.copyProperties(produceSn, this);
}
public MesProductionPsInContext foreignKey(Integer foreignKey) { public MesProductionPsInContext foreignKey(Integer foreignKey) {
this.foreignKey = foreignKey; this.foreignKey = foreignKey;
return this; return this;
} }
//赋值系统配置【离线开关】
public MesProductionPsInContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
public MesProductionPsInContext isCheck(MesWorkCell workCell) { public MesProductionPsInContext isCheck(MesWorkCell workCell) {
if (isClosedCheck) return this;
if(!StringUtils.isEmpty(workCell.getIsCheckCraft()) && workCell.getIsCheckCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckCraft = workCell.getIsCheckCraft(); if(!StringUtils.isEmpty(workCell.getIsCheckCraft()) && workCell.getIsCheckCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckCraft = workCell.getIsCheckCraft();
return this; return this;
} }
@ -121,16 +147,6 @@ public class MesProductionPsInContext implements Serializable {
return this; return this;
} }
public MesProductionPsInContext(String organizeCode, String productSn) {
this.organizeCode = organizeCode;
this.productSn = productSn;
}
public MesProductionPsInContext(MesWorkCell workCell, MesProduceSn produceSn) {
BeanUtils.copyProperties(produceSn, this);
this.isCheck(workCell);
}
public MesProductionPsInContext busiCheckToDelete() { public MesProductionPsInContext busiCheckToDelete() {
this.busiCheckToDelete = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); this.busiCheckToDelete = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return this; return this;

Loading…
Cancel
Save