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

tags/yfai-pcn-ext-v2.3
jun 7 months ago
commit 62eecf9af4

@ -67,12 +67,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取排序FILE文件URL 【显示前道所有工序装配件工步不需要获取文件】
Map<Long, String> fileMap = getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList));
//获取排序FILE文件URL 【离线生产不需要获取文件】
Map<Long, String> fileMap = !prodRuleContext.getIsClosedCheck() ? getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList)) : null;
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;
}
@ -99,11 +99,22 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
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;
}
//判断是否按序扫描【离线默认有序】
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
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.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.pojo.mes.bean.MesProductionAssemblyUnique;
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 (!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);
Optional<MesProductionAssemblyUnique> optional = CollectionUtils.isEmpty(productionAssemblyUniqueList) ? null :

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

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

@ -44,6 +44,10 @@ public class MesNumberRuleMatchSortSnGmService implements IMesNumberRuleMatchDis
return result;
}
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
String productSn = customerSnTransformService.transformBarCodeGm(sn);
if (productSn.length() == 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);
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;
}

@ -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.tool.DdlPreparedPack;
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.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository;
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 com.alibaba.fastjson.JSONObject;
import com.google.common.base.Objects;
@ -39,7 +36,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import java.util.function.BinaryOperator;
/**
* @Description :
@ -73,29 +69,35 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell();
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
//配置错误 抛出异常
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);
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班");
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班!");
}
// 发送班次班组和工单
StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext);
this.sendMessage(reqBean, resultBean);
//获取生产线的当前班组班次信息
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
// 整合班次加工数量
List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean);
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()));
}
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell, mesProdShiftKvBean);
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext, productionProcessContext.getWorkCell(), mesProdShiftKvBean);
this.sendMessage(reqBean, shiftCountBean);
//验证工位是否锁定

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

@ -246,7 +246,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
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()))) {
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())));
@ -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());
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
@ -269,8 +269,8 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
flag = true;
//装配件清单该数据标记已装配 (如果是自制件赋值productSnId)
productionAssemblySortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId());
//装配件清单该数据标记已装配(验证返回result里面是否存在assemblySn,存在特殊的规则会转换成新的条码) (如果是自制件赋值productSnId)
productionAssemblySortContext.assemblyStatus(!result.containsKey(MesPcnExtConstWords.ASSEMBLY_SN) ? equipVariableCollectContext.getEquipVariableValue() : (String) result.get(MesPcnExtConstWords.ASSEMBLY_SN)).productSnId(filter.getProductSnId());
break;
@ -294,7 +294,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
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(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;
}

@ -63,12 +63,15 @@ public class MesAssemblyReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
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)),
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) {
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();
BeanUtils.copyProperties(productionAssemblySortContext, productionAssemblyUnique, MesPcnExtConstWords.ID);
productionAssemblyUnique.setPid(productionAssemblySortContext.getId());

@ -450,8 +450,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
//获取前端置顶ID
Long sourceId = getTopSourceId(allAssemblyList);
//获取前端置顶信息 【sourceId&MatchDatetime】
String topRowInfo = getTopRowInfo(allAssemblyList);
Boolean isNeedShowMatchRule = checkIsNeedShowMatchRule(reqBean);
@ -460,7 +460,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
//封装匹配当前设备的装配件信息
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, sourceId);
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, topRowInfo);
if (CollectionUtils.isEmpty(assemblyShowContextList)) continue;
//装配件清单列表标题
@ -480,11 +480,11 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
//获取前端置顶ID
private Long getTopSourceId(List<MesProductionAssemblyNosortContext> allAssemblyList) {
//获取前端置顶信息 【sourceId&MatchDatetime】
private String getTopRowInfo(List<MesProductionAssemblyNosortContext> allAssemblyList) {
if (CollectionUtils.isEmpty(allAssemblyList)) return null;
allAssemblyList = allAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getMatchDatetime()))).sorted(Comparator.comparing(MesProductionAssemblyNosortContext::getMatchDatetime).reversed()).collect(Collectors.toList());
return CollectionUtils.isEmpty(allAssemblyList) ? null : allAssemblyList.get(0).getSourceId();
return CollectionUtils.isEmpty(allAssemblyList) ? null : new StringJoiner(MesPcnExtConstWords.AND).add(allAssemblyList.get(0).getSourceId().toString()).add(allAssemblyList.get(0).getMatchDatetime()).toString();
}
//未知腔数配置【工位参数】
@ -498,13 +498,13 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
//封装匹配当前设备的装配件信息
private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList, Boolean isNeedShowMatchRule, Long sourceId) {
private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList, Boolean isNeedShowMatchRule, String topRowInfo) {
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null;
List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
for (MesProductionAssemblyContext item : productionAssemblyContextList) {
//不显示且不扫描/仅目视的不显示出来
if (null == item || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNoShow(item.getMatchType())) continue;
assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, sourceId));
assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, topRowInfo));
}
assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
@ -516,14 +516,15 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
//封装装配件信息
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, Long sourceId) {
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, String topRowInfo) {
MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
BeanUtils.copyProperties(productionAssemblyContext, assemblyShowContext);
if (isNeedShowMatchRule) assemblyShowContext.setMatchTypeName(showMatchRule(assemblyShowContext));
assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus()));
if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus())
assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor());
if (!StringUtils.isEmpty(sourceId) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && sourceId.compareTo(productionAssemblyContext.getSourceId()) == 0) assemblyShowContext.isTop();
if (!StringUtils.isEmpty(topRowInfo) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && !StringUtils.isEmpty(productionAssemblyContext.getMatchDatetime()) &&
topRowInfo.equals(new StringJoiner(MesPcnExtConstWords.AND).add(productionAssemblyContext.getSourceId().toString()).add(productionAssemblyContext.getMatchDatetime()).toString())) assemblyShowContext.isTop();
return assemblyShowContext;
}

@ -31,7 +31,8 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
Map<String, MesWorkCell> workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean);
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);
}

@ -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.pojo.base.enumutil.CommonEnumUtil;
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.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -25,10 +26,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@ -119,11 +117,18 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
//获取装配件信息(子类进行重写)
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(productionProcessContext.getWorkCell().getIsSeqScan())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
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())
.isClosedCheck(mesOffLineOpen);
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) {
List<AttrBean> attrBeanList = new ArrayList<>();
@ -204,8 +209,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//获取前端置顶ID
Long sourceId = getTopSourceId(allAssemblyList);
//获取前端置顶信息 【sourceId&MatchDatetime】
String topRowInfo = getTopRowInfo(allAssemblyList);
//装配件显示规则配置
Boolean isNeedShowMatchRule = checkIsNeedShowMatchRule(reqBean);
@ -218,7 +223,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
//封装匹配当前设备的装配件信息
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, sourceId);
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, topRowInfo);
if (CollectionUtils.isEmpty(assemblyShowContextList)) continue;
//装配件清单列表标题
@ -238,11 +243,11 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//获取前端置顶ID
private Long getTopSourceId(List<MesProductionAssemblySortContext> allAssemblyList) {
//获取前端置顶信息 【sourceId&MatchDatetime】
private String getTopRowInfo(List<MesProductionAssemblySortContext> allAssemblyList) {
if (CollectionUtils.isEmpty(allAssemblyList)) return null;
allAssemblyList = allAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getMatchDatetime()))).sorted(Comparator.comparing(MesProductionAssemblySortContext::getMatchDatetime).reversed()).collect(Collectors.toList());
return CollectionUtils.isEmpty(allAssemblyList) ? null : allAssemblyList.get(0).getSourceId();
return CollectionUtils.isEmpty(allAssemblyList) ? null : new StringJoiner(MesPcnExtConstWords.AND).add(allAssemblyList.get(0).getSourceId().toString()).add(allAssemblyList.get(0).getMatchDatetime()).toString();
}
//装配件显示规则配置【工位参数】
@ -252,13 +257,13 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//封装匹配当前设备的装配件信息
private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList, Boolean isNeedShowMatchRule, Long sourceId) {
private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList, Boolean isNeedShowMatchRule, String topRowInfo) {
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null;
List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
for (MesProductionAssemblyContext item : productionAssemblyContextList) {
//不显示且不扫描/仅目视的不显示出来
if (null == item || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNoShow(item.getMatchType())) continue;
assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, sourceId));
assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, topRowInfo));
}
assemblyShowContextList = sortAssemblyShowContextList(assemblyShowContextList);
@ -270,14 +275,16 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//封装装配件信息
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, Long sourceId) {
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, String topRowInfo) {
MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
BeanUtils.copyProperties(productionAssemblyContext, assemblyShowContext);
if (isNeedShowMatchRule) assemblyShowContext.setMatchTypeName(showMatchRule(assemblyShowContext));
assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus()));
if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus())
assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor());
if (!StringUtils.isEmpty(sourceId) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && sourceId.compareTo(productionAssemblyContext.getSourceId()) == 0) assemblyShowContext.isTop();
if (!StringUtils.isEmpty(topRowInfo) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && !StringUtils.isEmpty(productionAssemblyContext.getMatchDatetime()) &&
topRowInfo.equals(new StringJoiner(MesPcnExtConstWords.AND).add(productionAssemblyContext.getSourceId().toString()).add(productionAssemblyContext.getMatchDatetime()).toString())) assemblyShowContext.isTop();
return assemblyShowContext;
}

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

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

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

@ -71,10 +71,13 @@ public class MesMouldNoReadStepService extends BaseStepService {
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不读模具号
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数
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) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()));
productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()));
return stepResult;
}
@ -194,7 +194,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
//未知条码【工序为空 代表新做的工序没有加工完成】
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;
}
@ -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;

@ -69,10 +69,13 @@ public class MesProductResultReadStepService extends BaseStepService {
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不读加工结果
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数
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) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()));
productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()));
return stepResult;
}
@ -159,7 +159,7 @@ public class MesProductSnCheckStepService extends BaseStepService {
//未知条码【工序为空 代表新做的工序没有加工完成】
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;
}
@ -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;

@ -65,12 +65,15 @@ public class MesProductSnReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
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)),
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);
if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
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)),
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
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean);

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

@ -60,11 +60,16 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
@Override
public StepResult execute(StationRequestBean reqBean) {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送设备加工参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合
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);
@ -81,7 +86,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
//根据来源ID查询设备加工参数信息
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分组
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分组
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();
@ -124,7 +129,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
});
return StepResult.getSuccessComplete();
return stepResult;
}
//搜集加工参数关联ID集合

@ -60,11 +60,16 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
@Override
public StepResult execute(StationRequestBean reqBean) {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送设备加工参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合
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);
@ -81,7 +86,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
//根据来源ID查询设备加工参数信息
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分组
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分组
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();
@ -124,7 +129,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
});
return StepResult.getSuccessComplete();
return stepResult;
}
//搜集加工参数关联ID集合

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

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

@ -57,10 +57,13 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService {
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不保存工艺参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
// 获取上下文信息
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())));
//封装产成零件
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);
//封装产品条码
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));

@ -329,7 +329,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
// 获取上道工艺生产的条码并封装到进料上下文中
if (!CollectionUtils.isEmpty(produceSnList))
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));
});
}

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

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

@ -62,6 +62,9 @@ public class MesAssemblyShowContext implements Serializable {
@ApiParam("序号")
private Integer index;
@ApiParam("匹配时间")
public String matchDatetime;
@ApiParam(value = "是否置顶")
private Integer isTop = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();

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

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

@ -128,7 +128,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
public String createUser;
@ApiParam(name = "是否顺序扫描")
private Integer isSeqScan;
private Integer isCheckBindSeq;
@ApiParam(name = "是否保存到DB")
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) {
BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS);
@ -175,7 +175,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
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.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()); }
//赋值系统配置【离线开关】
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.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 io.swagger.annotations.ApiParam;
import lombok.Data;
@ -104,6 +106,10 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("工艺强过码")
private String craftJumpCode;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//默认否
@ApiParam("是否顺序防错")
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) {
BeanUtils.copyProperties(workOrder, this);
if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0);
@ -182,7 +188,14 @@ public class MesProductionPartContext implements Serializable {
return this;
}
//赋值系统配置【离线开关】
public MesProductionPartContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
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();
return this;
}

@ -64,6 +64,12 @@ public class MesProductionPsInContext implements Serializable {
@ApiParam(value ="工艺代码")
private String craftCode;
@ApiParam("生产线代码")
private String workCenterCode;
@ApiParam("工位代码")
private String workCellCode;
@ApiParam("工艺强过码")
private String craftJumpCode;
@ -74,6 +80,10 @@ public class MesProductionPsInContext implements Serializable {
@ApiParam("是否空腔")
private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//默认否
@ApiParam(name = "是否前道工艺防错")
private Integer isCheckCraft = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ -91,12 +101,28 @@ public class MesProductionPsInContext implements Serializable {
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) {
this.foreignKey = foreignKey;
return this;
}
//赋值系统配置【离线开关】
public MesProductionPsInContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
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();
return this;
}
@ -121,16 +147,6 @@ public class MesProductionPsInContext implements Serializable {
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() {
this.busiCheckToDelete = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return this;

Loading…
Cancel
Save