Merge branch 'uat-temp-wj-chongqingdaqu-prod-huaweiyun' into mes-test-merge-daxiaoxie

mes-test-merge-daxiaoxie
王杰 2 months ago
commit 5d4aafd24b

@ -10,6 +10,9 @@ import java.util.List;
public interface IMesEquipVariableCfgRuleMatchDispatchService {
@ApiOperation(value = "设备数据变量接口逻辑根据变量类别规则匹配")
Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList);
default Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) { return null; }
@ApiOperation(value = "设备数据变量接口逻辑根据变量类别规则匹配")
default Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase) { return null; }
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush;
import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue;
@ -10,6 +11,7 @@ import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* BUSI
@ -25,6 +27,21 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "获取展示组件MODULE_CONTENT内容")
List<List<StationKvBean>> getModuleContentContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, ? extends MesPart> getPartDataContext(StationRequestBean reqBean, Boolean isExt);
@ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map<String, MesPart>")
Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap);
@ApiOperation(value = "删除上下文零件数据信息")
void removePartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文加工结果")
String getProductResultContext(StationRequestBean reqBean);

@ -101,21 +101,6 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "存储设备的装配件清单")
Boolean dispatchAssemblyNosortCfgContext(StationRequestBean reqBean, List<MesProductionAssemblyNosortContext> assemblyNosortCfgList);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, ? extends MesPart> getPartDataContext(StationRequestBean reqBean, Boolean isExt);
@ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map<String, MesPart>")
Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap);
@ApiOperation(value = "删除上下文零件数据信息")
void removePartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取手动选择的腔数及工单信息上下文")
List<StationKvBean> getFunctionChooseCavityOrderContext(StationRequestBean reqBean);

@ -306,7 +306,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
@Override
public String getProdRuleIgnoreCfg(Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Long id, String equipmentCode, String dataSorce) {
if (CollectionUtils.isEmpty(prodRuleIgnoreCfgMap) || StringUtils.isEmpty(id) || StringUtils.isEmpty(dataSorce)) return null;
String key = new StringJoiner(MesPcnExtConstWords.AND).add(dataSorce).add(equipmentCode).add(id.toString()).toString();
String key = new StringJoiner(MesPcnExtConstWords.AND).add(dataSorce).add(equipmentCode.toUpperCase()).add(id.toString()).toString();
return prodRuleIgnoreCfgMap.containsKey(key) ? JSONObject.toJSONString(prodRuleIgnoreCfgMap.get(key)) : null;
}

@ -134,7 +134,7 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
List<MesProduceSn> produceSnList = getProduceSnList(organizeCode, productSnList);
//先排序再分组
return CollectionUtils.isEmpty(produceSnList) ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProduceSn::getProductSn));
return CollectionUtils.isEmpty(produceSnList) ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> o.getProductSn().toUpperCase()));
}

@ -235,7 +235,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
}
private MesRecyclablePackagePart getMesRecyclablePackagePart(List<MesRecyclablePackagePart> packagePartList, String packageTypeCode, String partNo) {
Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst();
Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().toUpperCase().equals(partNo.toUpperCase())).findFirst();
if (!packagePart.isPresent()) {
MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", packageTypeCode, partNo);
}

@ -17,12 +17,17 @@ import java.util.List;
@Service
public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVariableCfgRuleMatchDispatchService {
private Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, String strategyClass) {
return ((IMesEquipVariableCfgRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList);
private Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase, String strategyClass) {
return ((IMesEquipVariableCfgRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, isUpperCase);
}
@Override
public Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, true);
}
@Override
public Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase) {
switch (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.getByValue(variableCategory)) {
@ -33,7 +38,7 @@ public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVar
case READY_SIGNAL:
case MEMBRANE_SIGNAL:
case BYPASS:
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchCompareValueService");
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, isUpperCase, "mesEvcRuleMatchCompareValueService");
case FIRST_MOULD_NO:
case MOULD_NO:
case ASSEMBLY:
@ -41,7 +46,7 @@ public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVar
case WORK_ORDER:
case PRODUCTION_PART_NO:
case RECYCLABLE_PACKAGE:
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchBackValueService");
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, isUpperCase, "mesEvcRuleMatchBackValueService");
//TODO CASE 数据变量接口逻辑根据变量类别实现策略

@ -22,7 +22,7 @@ import java.util.List;
public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRuleMatchDispatchService {
@Override
public List<MesEquipVariableCollectContext> matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
public List<MesEquipVariableCollectContext> matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase) {
List<MesEquipVariableCollectContext> backList = null;
@ -34,7 +34,7 @@ public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRule
if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue;
if (StringUtils.isEmpty(filterSpecialChar(equipVariableCollectContext).getEquipVariableValue())) continue;
if (StringUtils.isEmpty(filterSpecialChar(equipVariableCollectContext, isUpperCase).getEquipVariableValue())) continue;
if (CollectionUtils.isEmpty(backList)) backList = new ArrayList<>();
@ -50,9 +50,9 @@ public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRule
//不过滤":"tesla零件号带冒号
//不过滤[)>字符
private MesEquipVariableCollectContext filterSpecialChar(MesEquipVariableCollectContext equipVariableCollectContext) {
private MesEquipVariableCollectContext filterSpecialChar(MesEquipVariableCollectContext equipVariableCollectContext, Boolean isUpperCase) {
equipVariableCollectContext.trimValue();
equipVariableCollectContext.trimValue(isUpperCase);
String realEquipVariableValue = equipVariableCollectContext.getEquipVariableValue();

@ -24,7 +24,7 @@ import java.util.stream.Collectors;
public class MesEvcRuleMatchCompareValueService implements IMesEquipVariableCfgRuleMatchDispatchService {
@Override
public Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
public Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase) {
Map<String, List<MesEquipVariableCfgCollectContext>> ruleCategoryMap = CollectionUtils.isEmpty(collectContextList) ? null : collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getRuleCategory));
@ -35,7 +35,7 @@ public class MesEvcRuleMatchCompareValueService implements IMesEquipVariableCfgR
if (null == entry) continue;
//任意一组规则全部匹配
if (matchEquipVariableCfgCollectContext(entry.getKey(), entry.getValue())) return true;
if (matchEquipVariableCfgCollectContext(entry.getValue(), isUpperCase)) return true;
}
@ -43,21 +43,21 @@ public class MesEvcRuleMatchCompareValueService implements IMesEquipVariableCfgR
}
private Boolean matchEquipVariableCfgCollectContext(String ruleCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
private Boolean matchEquipVariableCfgCollectContext(List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase) {
for (MesEquipVariableCfgCollectContext collectContext : collectContextList) {
if (null == collectContext) continue;
//任意一个规则不匹配
if (!matchEquipVariableCfgCollectContext(collectContext)) return false;
if (!matchEquipVariableCfgCollectContext(collectContext, isUpperCase)) return false;
}
return true;
}
private Boolean matchEquipVariableCfgCollectContext(MesEquipVariableCfgCollectContext collectContext) {
private Boolean matchEquipVariableCfgCollectContext(MesEquipVariableCfgCollectContext collectContext, Boolean isUpperCase) {
if (StringUtils.isEmpty(collectContext.getValue()) || CollectionUtils.isEmpty(collectContext.getEquipVariableCollectContextList())) return false;
@ -69,16 +69,16 @@ public class MesEvcRuleMatchCompareValueService implements IMesEquipVariableCfgR
if (StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) return false;
//比对值是否相等
if (!compareTo(collectContext.getValue(), equipVariableCollectContext.getEquipVariableValue(), equipVariableCollectContext.getDataType())) return false;
if (!compareTo(collectContext.getValue(), equipVariableCollectContext.getEquipVariableValue(), equipVariableCollectContext.getDataType(), isUpperCase)) return false;
}
return true;
}
private Boolean compareTo(String value1, String value2, Integer dataType) {
value1 = value1.toUpperCase();
value2 = value2.toUpperCase();
private Boolean compareTo(String value1, String value2, Integer dataType, Boolean isUpperCase) {
if (isUpperCase) value1 = value1.toUpperCase();
if (isUpperCase) value2 = value2.toUpperCase();
if (value1.equals(value2)) return true;
if (StringUtils.isEmpty(dataType) || dataType.compareTo(MesExtEnumUtil.VARIABLE_DATA_TYPE.VARIABLE_DATA_TYPE_40.getValue()) != 0) return false;
value1 = transferValueBoo(value1);

@ -138,7 +138,7 @@ public class MesNumberRuleMatchDispatchService implements IMesNumberRuleMatchDis
if (null == productionAssemblyContext) continue;
if (!StringUtils.isEmpty(productionAssemblyContext.getAssemblySn()) && productionAssemblyContext.getAssemblySn().equals(assemblySn)) return false;
if (!StringUtils.isEmpty(productionAssemblyContext.getAssemblySn()) && productionAssemblyContext.getAssemblySn().toUpperCase().equals(assemblySn.toUpperCase())) return false;
}

@ -77,7 +77,7 @@ public class MesNumberRuleMatchSnService implements IMesNumberRuleMatchDispatchS
return result;
}
if (!context.getAssemblyPartNo().equals(produceSn.getPartNo())) {
if (!context.getAssemblyPartNo().toUpperCase().equals(produceSn.getPartNo().toUpperCase())) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息零件号[%s]!", sn, produceSn.getPartNo()));
return result;
}

@ -88,7 +88,7 @@ public class MesNumberRuleMatchSortDoubleCheckService implements IMesNumberRuleM
return result;
}
if (!context.getAssemblyPartNo().equals(produceSn.getPartNo())) {
if (!context.getAssemblyPartNo().toUpperCase().equals(produceSn.getPartNo().toUpperCase())) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息零件号[%s]!", sn, produceSn.getPartNo()));
return result;
}
@ -113,7 +113,7 @@ public class MesNumberRuleMatchSortDoubleCheckService implements IMesNumberRuleM
Optional<MesProductionAssembly> optional = CollectionUtils.isEmpty(productionAssemblyList) ? null :
productionAssemblyList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()) == 0)).findFirst();
if (null != optional && optional.isPresent() && !optional.get().getProductSn().equals(context.getWorkOrderNo())) {
if (null != optional && optional.isPresent() && !optional.get().getProductSn().toUpperCase().equals(context.getWorkOrderNo().toUpperCase())) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("装配件条码[%s]已被加工单[%s]装配!", sn, optional.get().getProductSn()));
return result;
}

@ -92,11 +92,17 @@ public class MesTimeEfficientCfgMatchService implements IMesTimeEfficientCfgMatc
List<Object> filterList;
//时效性规则 零件号不为空或者为空 过滤数据
if (!StringUtils.isEmpty(timeliness.getPartNo()) && !StringUtils.isEmpty(timeliness.getCraftCode()))
filterList = productionRecordList.stream().filter(o -> o.getPartNo().equals(timeliness.getPartNo()) && o.getCraftCode().equals(timeliness.getCraftCode())).sorted(Comparator.comparing(MesProductionRecord::getCreateDatetime).reversed()).collect(Collectors.toList());
filterList = productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()) && !StringUtils.isEmpty(o.getCraftCode()) && !StringUtils.isEmpty(o.getCreateDatetime())
&& o.getPartNo().toUpperCase().equals(timeliness.getPartNo().toUpperCase()) && o.getCraftCode().toUpperCase().equals(timeliness.getCraftCode().toUpperCase())))
.sorted(Comparator.comparing(MesProductionRecord::getCreateDatetime).reversed()).collect(Collectors.toList());
else if (!StringUtils.isEmpty(timeliness.getCraftCode()))
filterList = productionRecordList.stream().filter(item -> item.getCraftCode().equals(timeliness.getCraftCode())).sorted(Comparator.comparing(MesProductionRecord::getCreateDatetime).reversed()).collect(Collectors.toList());
filterList = productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && !StringUtils.isEmpty(o.getCreateDatetime())
&& o.getCraftCode().toUpperCase().equals(timeliness.getCraftCode().toUpperCase())))
.sorted(Comparator.comparing(MesProductionRecord::getCreateDatetime).reversed()).collect(Collectors.toList());
else
filterList = produceSnList.stream().filter(item -> item.getPartNo().equals(timeliness.getPartNo())).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
filterList = produceSnList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()) && !StringUtils.isEmpty(o.getCreateDatetime())
&& o.getPartNo().toUpperCase().equals(timeliness.getPartNo().toUpperCase())))
.sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
if (CollectionUtils.isEmpty(filterList)) return backResultMap(resultMap, String.format("零件条码[%s]时效性零件号[%s]工艺[%s]验证失败,未查询到%s!",
productSn, timeliness.getPartNo(), !StringUtils.isEmpty(timeliness.getCraftCode()) ? timeliness.getCraftCode() : MesPcnExtConstWords.EMPTY, !StringUtils.isEmpty(timeliness.getCraftCode()) ? "加工记录信息" : "零件条码信息"));

@ -123,14 +123,14 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
//搜集装配件条码
String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
//未知腔数配置【工位参数】, 不验证装配件条码的个数
String cavityUnknownCfg = getCavityUnknownCfg(reqBean);
//未知腔数配置【工位参数】, 不验证装配件条码的个数, 默认非未知腔数=2
Boolean cavityUnknownCfg = checkWcpcMapIsMatch(reqBean, MesPcnExtConstWords.CAVITY_UNKNOWN_CFG);
//根据设备代码获取可复用条码的个数
Integer repeatAssemblySnCount = productionCustomContextStepService.getRepeatAssemblySnCount(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), cellEquipContext.getEquipmentCode());
Integer repeatAssemblySnAmount = repeatAssemblySnCount * (!CollectionUtils.isEmpty(curProductionPsInContextList) ? curProductionPsInContextList.size() : 1);
//非未知腔数,验证装配件条码个数是否匹配 腔数或者未匹配的主条码个数*每腔个数
if (StringUtils.isEmpty(cavityUnknownCfg) && (equipVariableCollectContextList.size() + repeatAssemblySnAmount) != (!CollectionUtils.isEmpty(curProductionPsInContextList) ? curProductionPsInContextList.size() : cellEquipContext.getCavity()) * cellEquipContext.getBindQty()) {
if (!cavityUnknownCfg && (equipVariableCollectContextList.size() + repeatAssemblySnAmount) != (!CollectionUtils.isEmpty(curProductionPsInContextList) ? curProductionPsInContextList.size() : cellEquipContext.getCavity()) * cellEquipContext.getBindQty()) {
String suffix = repeatAssemblySnAmount == 0 ? MesPcnExtConstWords.EMPTY : String.format(",可复用个数[%s]", repeatAssemblySnAmount);
if (!CollectionUtils.isEmpty(curProductionPsInContextList)) {
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toList()));
@ -159,10 +159,19 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
Optional<MesEquipVariableCollectContext> optional = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null != optional && optional.isPresent()) {
stepResult.msg(String.format("%s装配件条码%s匹配失败!%s", suffix, assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
suffix = String.format("%s装配件条码%s匹配失败!", suffix, assemblySn);
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
String.format("%s%s%s", suffix, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
stepResult.msg(String.format("%s%s", suffix, !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() : (
(StringUtils.isEmpty(stepResult.getObj()) || !checkWcpcMapIsMatch(reqBean, MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG)) ? MesPcnExtConstWords.EMPTY : (
(!stepResult.getObj().toString().contains(MesPcnExtConstWords.EXCLAMATION) ||
stepResult.getObj().toString().indexOf(MesPcnExtConstWords.EXCLAMATION) != stepResult.getObj().toString().lastIndexOf(MesPcnExtConstWords.EXCLAMATION)
) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()))
)
);
if (!CollectionUtils.isEmpty(curProductionPsInContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toList()));
@ -197,10 +206,9 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
}
//未知腔数配置【工位参数】
private String getCavityUnknownCfg(StationRequestBean reqBean) {
String cavityUnknownCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_UNKNOWN_CFG);
return (!StringUtils.isEmpty(cavityUnknownCfg) && cavityUnknownCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cavityUnknownCfg : null;
//【工位参数】
private Boolean checkWcpcMapIsMatch(StationRequestBean reqBean, String paramCode) {
return fsmCommonService.checkWcpcMapIsMatch(reqBean, paramCode, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
//获取设备下所有的装配件规则清单, 根据非排序加工规则ID分组
@ -211,7 +219,7 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
List<MesProductionAssemblyNosortContext> assemblyNosortCfgList = productionProcessContextStepService.findAssemblyNosortCfgList(reqBean);
//获取设备的装配件规则清单
if (CollectionUtils.isEmpty(assemblyNosortCfgList) || !assemblyNosortCfgList.get(0).getEquipmentCode().equals(cellEquipContext.getEquipmentCode())) {
if (CollectionUtils.isEmpty(assemblyNosortCfgList) || !assemblyNosortCfgList.get(0).getEquipmentCode().toUpperCase().equals(cellEquipContext.getEquipmentCode().toUpperCase())) {
assemblyNosortCfgList = assemblyExtService.getProductionAssemblyNosortContextList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), prodRuleIgnoreCfgMap);
if (CollectionUtils.isEmpty(assemblyNosortCfgList))
@ -229,7 +237,7 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
}
//生成零件号业务处理
private List<MesProdRuleContext> doHandleAssemblyGeneratePartNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext, String cavityUnknownCfg,
private List<MesProdRuleContext> doHandleAssemblyGeneratePartNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext, Boolean cavityUnknownCfg,
MesProductionProcessContext productionProcessContext, List<MesProductionPsInContext> productionPsInContextList, List<MesProdRuleContext> prodRuleContextList,
Map<Long, List<MesProductionAssemblyNosortContext>> assemblyNosortCfgMap, List<MesEquipVariableCollectContext> equipVariableCollectContextList,
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
@ -254,7 +262,7 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
if (CollectionUtils.isEmpty(productionAssemblyNosortContextList)) continue;
//没有未知腔数配置, 剔除装配件规则个数不等于每腔个数的数据
if (StringUtils.isEmpty(cavityUnknownCfg) && cellEquipContext.getBindQty().compareTo(productionAssemblyNosortContextList.size()) != 0) continue;
if (!cavityUnknownCfg && cellEquipContext.getBindQty().compareTo(productionAssemblyNosortContextList.size()) != 0) continue;
//收集未消费的临时数据
List<MesEquipVariableCollectContext> equipVariableCollectContextListTemp = DeepCloneUtil.deepCloneList(unConsumeList);
@ -404,7 +412,7 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.RESULT, true);
//根据进料零件号匹配产品加工规则
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && (StringUtils.isEmpty(prodRuleContext.getInPartNo()) || !prodRuleContext.getInPartNo().equals(productionPsInContext.getPartNo()))) {
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && (StringUtils.isEmpty(prodRuleContext.getInPartNo()) || !prodRuleContext.getInPartNo().toUpperCase().equals(productionPsInContext.getPartNo().toUpperCase()))) {
result.put(MesPcnExtConstWords.RESULT, false);
if (StringUtils.isEmpty(prodRuleContext.getInPartNo()))
result.put(MesPcnExtConstWords.MESSAGE, String.format("条码[%s]零件号[%s]匹配的加工规则ID[%s]信息未维护进料零件号!", productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), prodRuleContext.getPid()));

@ -159,10 +159,19 @@ public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService
Optional<MesEquipVariableCollectContext> optional = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null != optional && optional.isPresent()) {
stepResult.msg(String.format("%s装配件条码%s匹配失败!%s", suffix, assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
suffix = String.format("%s装配件条码%s匹配失败!", suffix, assemblySn);
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
String.format("%s%s%s", suffix, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
stepResult.msg(String.format("%s%s", suffix, !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() : (
(StringUtils.isEmpty(stepResult.getObj()) || !checkWcpcMapIsMatch(reqBean, MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG)) ? MesPcnExtConstWords.EMPTY : (
(!stepResult.getObj().toString().contains(MesPcnExtConstWords.EXCLAMATION) ||
stepResult.getObj().toString().indexOf(MesPcnExtConstWords.EXCLAMATION) != stepResult.getObj().toString().lastIndexOf(MesPcnExtConstWords.EXCLAMATION)
) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()))
)
);
if (!CollectionUtils.isEmpty(curProductionPsInContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toList()));
@ -205,7 +214,7 @@ public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService
List<MesProductionAssemblyNosortContext> assemblyNosortCfgList = productionProcessContextStepService.findAssemblyNosortCfgList(reqBean);
//获取设备的装配件规则清单
if (CollectionUtils.isEmpty(assemblyNosortCfgList) || !assemblyNosortCfgList.get(0).getEquipmentCode().equals(cellEquipContext.getEquipmentCode())) {
if (CollectionUtils.isEmpty(assemblyNosortCfgList) || !assemblyNosortCfgList.get(0).getEquipmentCode().toUpperCase().equals(cellEquipContext.getEquipmentCode().toUpperCase())) {
assemblyNosortCfgList = assemblyExtService.getProductionAssemblyNosortContextList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), prodRuleIgnoreCfgMap);
if (CollectionUtils.isEmpty(assemblyNosortCfgList))
@ -403,7 +412,7 @@ public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.RESULT, true);
//根据进料零件号匹配产品加工规则
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && (StringUtils.isEmpty(prodRuleContext.getInPartNo()) || !prodRuleContext.getInPartNo().equals(productionPsInContext.getPartNo()))) {
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && (StringUtils.isEmpty(prodRuleContext.getInPartNo()) || !prodRuleContext.getInPartNo().toUpperCase().equals(productionPsInContext.getPartNo().toUpperCase()))) {
result.put(MesPcnExtConstWords.RESULT, false);
if (StringUtils.isEmpty(prodRuleContext.getInPartNo()))
result.put(MesPcnExtConstWords.MESSAGE, String.format("条码[%s]零件号[%s]匹配的加工规则ID[%s]信息未维护进料零件号!", productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), prodRuleContext.getPid()));
@ -413,4 +422,9 @@ public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService
return result;
}
//【工位参数】
private Boolean checkWcpcMapIsMatch(StationRequestBean reqBean, String paramCode) {
return fsmCommonService.checkWcpcMapIsMatch(reqBean, paramCode, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
}

@ -154,10 +154,19 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), prodRuleContextList);
}
stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
suffix = String.format("装配件条码%s匹配失败!", assemblySn);
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
String.format("%s%s%s", suffix, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
stepResult.msg(String.format("%s%s", suffix, !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() : (
(StringUtils.isEmpty(stepResult.getObj()) || !checkWcpcMapIsMatch(reqBean, MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG)) ? MesPcnExtConstWords.EMPTY : (
(!stepResult.getObj().toString().contains(MesPcnExtConstWords.EXCLAMATION) ||
stepResult.getObj().toString().indexOf(MesPcnExtConstWords.EXCLAMATION) != stepResult.getObj().toString().lastIndexOf(MesPcnExtConstWords.EXCLAMATION)
) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()))
)
);
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), stepResult.getMsg());
@ -166,7 +175,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
private List<MesProdRuleContext> resetAssembly(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList) {
//是否支持混腔扫描[工位参数]
String cavityNosortCfg = getCavityNosortCfg(reqBean);
Boolean cavityNosortCfg = checkWcpcMapIsMatch(reqBean, MesPcnExtConstWords.CAVITY_NOSORT_CFG);
prodRuleContextList.forEach(o -> {
@ -174,7 +183,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = o.getNosortAssemblyDataContext();
if (!StringUtils.isEmpty(cavityNosortCfg) || hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) {
if (cavityNosortCfg || hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) {
productionAssemblyNosortContextList.forEach(i -> { if (i.getIsResetScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) i.assemblyStatusReset(); });
@ -189,10 +198,9 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
return prodRuleContextList;
}
//是否支持混腔扫描[工位参数]
private String getCavityNosortCfg(StationRequestBean reqBean) {
String cavityNosortCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG);
return (!StringUtils.isEmpty(cavityNosortCfg) && cavityNosortCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cavityNosortCfg : null;
//【工位参数】
private Boolean checkWcpcMapIsMatch(StationRequestBean reqBean, String paramCode) {
return fsmCommonService.checkWcpcMapIsMatch(reqBean, paramCode, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
//验证当前是否属于装配件跳过码

@ -140,10 +140,19 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
suffix = String.format("装配件条码%s匹配失败!", assemblySn);
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
String.format("%s%s%s", suffix, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
stepResult.msg(String.format("%s%s", suffix, !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() : (
(StringUtils.isEmpty(stepResult.getObj()) || !checkWcpcMapIsMatch(reqBean, MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG)) ? MesPcnExtConstWords.EMPTY : (
(!stepResult.getObj().toString().contains(MesPcnExtConstWords.EXCLAMATION) ||
stepResult.getObj().toString().indexOf(MesPcnExtConstWords.EXCLAMATION) != stepResult.getObj().toString().lastIndexOf(MesPcnExtConstWords.EXCLAMATION)
) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()))
)
);
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), stepResult.getMsg());
@ -330,4 +339,9 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
return false;
}
//【工位参数】
private Boolean checkWcpcMapIsMatch(StationRequestBean reqBean, String paramCode) {
return fsmCommonService.checkWcpcMapIsMatch(reqBean, paramCode, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
}

@ -65,7 +65,7 @@ public class MesAssemblyReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, 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).writeDbLog().checkRepeat(),

@ -181,7 +181,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//foreignKey有值代表已经匹配过产品加工规则
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
List<MesProdRuleNosortCfg> filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
List<MesProdRuleNosortCfg> filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo().toUpperCase()) : null;
if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) {
productionPartContextList.forEach(o -> o.busiCheckToDelete());
@ -267,7 +267,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//验证条码是否刚在当前工位下线
private Boolean checkIsOffline(MesProductionPsInContext productionPsInContext, StationRequestBean reqBean) {
if (StringUtils.isEmpty(productionPsInContext.getWorkCenterCode()) || StringUtils.isEmpty(productionPsInContext.getWorkCellCode()) || StringUtils.isEmpty(productionPsInContext.getProcessCode())) return false;
if (!productionPsInContext.getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !productionPsInContext.getWorkCellCode().equals(reqBean.getWorkCellCode()) || !productionPsInContext.getProcessCode().equals(reqBean.getProcessCode())) return false;
if (!productionPsInContext.getWorkCenterCode().toUpperCase().equals(reqBean.getWorkCenterCode().toUpperCase()) || !productionPsInContext.getWorkCellCode().toUpperCase().equals(reqBean.getWorkCellCode().toUpperCase()) || !productionPsInContext.getProcessCode().toUpperCase().equals(reqBean.getProcessCode().toUpperCase())) return false;
return true;
}
@ -301,7 +301,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
//获取匹配产出零件的所有加工规则
List<MesProdRuleNosortCfg> outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
List<MesProdRuleNosortCfg> outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo().toUpperCase()) : null;
MesProductionPsInContext productSn = null;
@ -323,10 +323,10 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) continue;
//验证进出一致
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && productionPsInContext.getPartNo().equals(productionPartContext.getPartNo())) {
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && productionPsInContext.getPartNo().toUpperCase().equals(productionPartContext.getPartNo().toUpperCase())) {
//进料工单必须与产出工单一致
if (!StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) && !StringUtils.isEmpty(productionPsInContext.getWorkOrderNo()) && !productionPsInContext.getWorkOrderNo().equals(productionPartContext.getWorkOrderNo())) {
if (!StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) && !StringUtils.isEmpty(productionPsInContext.getWorkOrderNo()) && !productionPsInContext.getWorkOrderNo().toUpperCase().equals(productionPartContext.getWorkOrderNo().toUpperCase())) {
if (productionPsInContext.getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) == 0) productionPsInContext.busiCheckToDelete();
else productionPsInContextList.forEach(o -> o.busiCheckToDelete());
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(productionPsInContext.getProductSn()), stepResult, String.format("主条码[%s]零件号[%s]关联的加工单[%s]与产出零件[%s]关联的加工单[%s]不一致!",
@ -399,7 +399,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//搜集进料零件号匹配的产品加工规则
private List<MesProdRuleNosortCfg> filterProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList, String partNo) {
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().equals(partNo))).collect(Collectors.toList());
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().toUpperCase().equals(partNo.toUpperCase()))).collect(Collectors.toList());
}
//搜集进料零件规则有值的产品加工规则
@ -409,7 +409,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//根据产出零件分组数据
private Map<String, List<MesProdRuleNosortCfg>> groupProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList) {
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo));
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> o.getOutPartNo().toUpperCase()));
}
//显示或者匹配装配件信息 公共调用
@ -433,6 +433,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
//获取前端置顶信息 【sourceId&MatchDatetime】
String topRowInfo = getTopRowInfo(allAssemblyList);
//是否显示规则列【工位参数】
Boolean isNeedShowMatchRule = checkIsNeedShowMatchRule(reqBean);
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
@ -467,10 +468,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
return CollectionUtils.isEmpty(allAssemblyList) ? null : new StringJoiner(MesPcnExtConstWords.AND).add(allAssemblyList.get(0).getSourceId().toString()).add(allAssemblyList.get(0).getMatchDatetime()).toString();
}
//未知腔数配置【工位参数】
//是否显示规则列【工位参数】
private Boolean checkIsNeedShowMatchRule(StationRequestBean reqBean) {
String assemblyShowMrCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG);
return (!StringUtils.isEmpty(assemblyShowMrCfg) && assemblyShowMrCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
return fsmCommonService.checkWcpcMapIsMatchTrue(reqBean, MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG);
}
private String getWorkOrderNo(Map<Integer, MesProductionPartContext> productionPartMap, Integer foreignKey) {

@ -265,8 +265,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
//装配件显示规则配置【工位参数】
private Boolean checkIsNeedShowMatchRule(StationRequestBean reqBean) {
String assemblyShowMrCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG);
return (!StringUtils.isEmpty(assemblyShowMrCfg) && assemblyShowMrCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
return fsmCommonService.checkWcpcMapIsMatchTrue(reqBean, MesPcnExtConstWords.ASSEMBLY_SHOW_MR_CFG);
}
//封装匹配当前设备的装配件信息

@ -131,10 +131,8 @@ public class MesCountDownShowStepService extends BaseStepService {
if (null != countDownCfgArr) return countDownCfgArr;
//获取工位参数
Map<String, String> wcpcMap = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean);
String countDownCfg = wcpcMap.containsKey(MesPcnExtConstWords.COUNT_DOWN_CFG) ? wcpcMap.get(MesPcnExtConstWords.COUNT_DOWN_CFG) : null;
//倒计时配置【工位参数】
String countDownCfg = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, MesPcnExtConstWords.COUNT_DOWN_CFG);
if (!StringUtils.isEmpty(countDownCfg)) countDownCfgArr = getCountDownCfgArr(countDownCfg);

@ -143,7 +143,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
//读取的头道模具号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList(), false);
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {
@ -188,7 +188,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配
private Boolean checkCachedProductionPartValid(List<MesProductionPartContext> productionPartContextList, String equipmentCode, String firstMouldNo) {
return (!CollectionUtils.isEmpty(productionPartContextList) && productionPartContextList.get(0).getEquipmentCode().equals(equipmentCode) && productionPartContextList.get(0).getMouldNo().equals(firstMouldNo)) ? true : false;
return (!CollectionUtils.isEmpty(productionPartContextList) && productionPartContextList.get(0).getEquipmentCode().toUpperCase().equals(equipmentCode.toUpperCase()) && productionPartContextList.get(0).getMouldNo().toUpperCase().equals(firstMouldNo.toUpperCase())) ? true : false;
}
//封装展示组件MODULE_CONTENT内容
@ -204,7 +204,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//保存零件数据信息
public void savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter) {
//保存零件数据信息
partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, false, false);
partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, false, true, false);
}
//验证一模多腔信息

@ -5,16 +5,13 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.mes.pcn.websocket.StationWebSocket;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellExtendCfg;
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.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -51,8 +48,8 @@ public class MesManyCellTriggerJumpProcessStepService extends BaseStepService {
stepResult.unResetScanInfo();
//所有分屏强制跳过工序密码
String pwd = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.MANY_CELL_TRIGGER_JUMP_PROCESS_PWD);
if (StringUtils.isEmpty(pwd) || !pwd.equals(reqBean.getScanInfo())) return stepResult;
String pwd = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, MesPcnExtConstWords.MANY_CELL_TRIGGER_JUMP_PROCESS_PWD);
if (StringUtils.isEmpty(pwd) || !pwd.toUpperCase().equals(reqBean.getScanInfo().toUpperCase())) return stepResult;
StationResultBean resultBean = new StationResultBean();

@ -146,7 +146,7 @@ public class MesMouldNoReadStepService extends BaseStepService {
}
//读取的模具号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList(), false);
//没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || !StringUtils.isEmpty(isReadMultiCavityCfg))) {

@ -126,17 +126,19 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
}
//查询条码信息
Map<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList()));
String productSnUpper;
for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) {
productSnUpper = bindingDetail.getProductSn().toUpperCase();
//外协件
if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())) {
if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(productSnUpper)) {
for (int i = 0; i < bindingDetail.getQty(); i++) {
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), productSnUpper).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
}
recyclablePackageContextList.add(new MesProductionRecyclablePackageContext(recyclablePackageBinding,bindingDetail));
//自制件
} else {
recyclablePackageContextList.add(new MesProductionRecyclablePackageContext(recyclablePackageBinding,bindingDetail).setId(produceSnMap.get(bindingDetail.getProductSn()).iterator().next().getId()));
productSnCheckStepService.createProductionPsInContext(reqBean, stepResult, workCell, equipVariableCollectContextList.iterator().next(), produceSnMap.get(bindingDetail.getProductSn()), productionPsInContextList);
recyclablePackageContextList.add(new MesProductionRecyclablePackageContext(recyclablePackageBinding,bindingDetail).setId(produceSnMap.get(productSnUpper).iterator().next().getId()));
productSnCheckStepService.createProductionPsInContext(reqBean, stepResult, workCell, equipVariableCollectContextList.iterator().next(), produceSnMap.get(productSnUpper), productionPsInContextList);
}
}
//流程包含解绑工步[工步参数]

@ -169,18 +169,18 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;
//判断主条码的当前工艺是否包含在产品工艺路线中
Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst();
Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()))).findFirst();
if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent()))
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]",
message, suffix, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted();
//验证工艺对应工序最多经过1个: 当前主条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与主条码的当前工艺相同, 当前工位的工序与主条码的当前工序不相同
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode()))
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()) && !reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase()))
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]",
message, suffix, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted();
//判断条码是否在当前已完成的工序工位上重做
Boolean isPsProcessRepeat = null != optionalPs && optionalPs.isPresent() && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode());
Boolean isPsProcessRepeat = null != optionalPs && optionalPs.isPresent() && reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase());
List<MesProductionRecord> productionRecordList = null;
//验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数
if (isPsProcessRepeat) {
@ -188,7 +188,10 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn());
//条码+物料+工序+工艺搜集加工记录
List<MesProductionRecord> filterList = CollectionUtils.isEmpty(productionRecordList) ? null :
productionRecordList.stream().filter(o -> (null != o && o.getPartNo().equals(productionPsInContext.getPartNo()) && o.getProcessCode().equals(reqBean.getProcessCode()) && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).collect(Collectors.toList());
productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()) && !StringUtils.isEmpty(o.getProcessCode()) && !StringUtils.isEmpty(o.getCraftCode())
&& o.getPartNo().toUpperCase().equals(productionPsInContext.getPartNo().toUpperCase())
&& o.getProcessCode().toUpperCase().equals(reqBean.getProcessCode().toUpperCase())
&& o.getCraftCode().toUpperCase().equals(productionProcessContext.getCraftCode().toUpperCase()))).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(filterList) && filterList.size() >=
((!StringUtils.isEmpty(optionalPs.get().getRepeatTimes()) && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ZERO) > 0) ? optionalPs.get().getRepeatTimes() : MesPcnExtConstWords.ONE))
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]",
@ -196,7 +199,7 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
}
//判断当前工位的工序对应的工艺是否包含在产品工艺路线中
Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst();
Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionProcessContext.getCraftCode().toUpperCase()))).findFirst();
//根据当前工位对应的工艺 获取 所有前道工艺, 如果当前工位的工序对应工艺不在工艺路线明细内, 则默认所有明细均为所有前道工艺, 否则搜集当前工位工序对应工艺前面的所有前道工艺
List<MesCraftRouteDetail> beforeCellCraftList;
if (null == optionalCell || !optionalCell.isPresent()) beforeCellCraftList = craftRouteDetailList;
@ -228,7 +231,7 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
//当主条码存在已做工序 且 与当前工位的工序不一致时, 判断当前工位的工序是否已经存在加工记录
if (!CollectionUtils.isEmpty(productionRecordList)
&& !StringUtils.isEmpty(productionPsInContext.getProcessCode())
&& !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())
&& !reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase())
&& isExistProductionRecord(productionRecordMap2Process(productionRecordList), reqBean.getProcessCode())) {
return stepResult.isCompleted(false).msg(String.format("%s%s[%s]已经过当前工序[%s]", message, suffix, productionPsInContext.getProductSn(), reqBean.getProcessCode())).isCompleted();
}
@ -238,15 +241,15 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
}
private Map<String, List<MesProductionRecord>> productionRecordMap2Craft(List<MesProductionRecord> productionRecordList) {
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()))).collect(Collectors.groupingBy(MesProductionRecord::getCraftCode));
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()))).collect(Collectors.groupingBy(o -> o.getCraftCode().toUpperCase()));
}
private Map<String, List<MesProductionRecord>> productionRecordMap2Process(List<MesProductionRecord> productionRecordList) {
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProcessCode()))).collect(Collectors.groupingBy(MesProductionRecord::getProcessCode));
return CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProcessCode()))).collect(Collectors.groupingBy(o -> o.getProcessCode().toUpperCase()));
}
private Boolean isExistProductionRecord(Map<String, List<MesProductionRecord>> prMapByCraft, String craftCode) {
return (CollectionUtils.isEmpty(prMapByCraft) || !prMapByCraft.containsKey(craftCode)) ? false : true;
private Boolean isExistProductionRecord(Map<String, List<MesProductionRecord>> prMapByCraft, String code) {
return (CollectionUtils.isEmpty(prMapByCraft) || !prMapByCraft.containsKey(code.toUpperCase())) ? false : true;
}
}

@ -127,32 +127,32 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec
String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;
//判断产品条码的当前工艺是否包含在产品工艺路线中
Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst();
Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()))).findFirst();
if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent()))
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]",
message, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted();
//判断当前工位的工序对应的工艺是否包含在产品工艺路线中
Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst();
Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionProcessContext.getCraftCode().toUpperCase()))).findFirst();
if (null == optionalCell || !optionalCell.isPresent())
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]零件[%s]对应的产品工艺路线[%s]不包含当前工位[%s]对应的工艺[%s]工序[%s]",
message, productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())).isCompleted();
//验证工艺对应工序最多经过1个: 当前产品条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与产品条码的当前工艺相同, 当前工位的工序与产品条码的当前工序不相同
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode()))
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()) && !reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase()))
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]",
message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted();
//验证是否捆绑后道工艺: 如果当前工位的工艺与产品条码的当前工艺不一致的情况下, 根据产品条码的当前工艺获取在工艺路线明细的下一个工艺, 判断当前工位的工艺与下个工艺是否一致
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getIsBindNextCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode())) {
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getIsBindNextCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !productionProcessContext.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase())) {
Optional<MesCraftRouteDetail> optional = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalPs.get().getSeq()) > 0)).findFirst();
if (null != optionalCell && optionalCell.isPresent() && !productionProcessContext.getCraftCode().equals(optional.get().getCraftCode()))
if (null != optionalCell && optionalCell.isPresent() && !productionProcessContext.getCraftCode().toUpperCase().equals(optional.get().getCraftCode().toUpperCase()))
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]产品工艺路线[%s]捆绑后道工艺,上道工艺[%s]下道工艺[%s]当前工位工艺[%s]",
message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), optional.get().getCraftCode(), productionProcessContext.getCraftCode())).isCompleted();
}
//验证已完成工序最大重复次数: 如果当前工位的工序与产品条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数
if (null != optionalPs && optionalPs.isPresent() && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) {
if (null != optionalPs && optionalPs.isPresent() && reqBean.getProcessCode().toUpperCase().equals(productionPsInContext.getProcessCode().toUpperCase())) {
List<MesProductionRecord> productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), reqBean.getProcessCode(), productionProcessContext.getCraftCode());
if (!CollectionUtils.isEmpty(productionRecordList) && productionRecordList.size() >= ((!StringUtils.isEmpty(optionalPs.get().getRepeatTimes()) && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ZERO) > 0) ? optionalPs.get().getRepeatTimes() : MesPcnExtConstWords.ONE))
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]",
@ -163,7 +163,7 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec
List<MesCraftRouteDetail> beforeCellCraftList = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalCell.get().getSeq()) < 0)).collect(Collectors.toList());
//验证首工艺: 当前产品条码的工艺字段有值,并且当前工位的工艺不等于产品条码的当前工艺。 如果等于已经在【验证工艺对应工序最多经过1个】与【 验证已完成工序最大重复次数】 中验证通过,所以这边只考虑不相等
if (CollectionUtils.isEmpty(beforeCellCraftList) && !StringUtils.isEmpty(productionPsInContext.getCraftCode()) && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()))
if (CollectionUtils.isEmpty(beforeCellCraftList) && !StringUtils.isEmpty(productionPsInContext.getCraftCode()) && !productionProcessContext.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()))
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]已经过首道工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted();
//执行首道工艺 当前产品条码验证通过
@ -177,7 +177,7 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec
List<MesCraftRouteDetail> unCompleteCraftList;
if (StringUtils.isEmpty(productionPsInContext.getCraftCode())) unCompleteCraftList = beforeCellCraftList;
else {
Optional<MesCraftRouteDetail> optional = beforeCellCraftList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst();
Optional<MesCraftRouteDetail> optional = beforeCellCraftList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCraftCode()) && o.getCraftCode().toUpperCase().equals(productionPsInContext.getCraftCode().toUpperCase()))).findFirst();
if (null == optional || !optional.isPresent()) //在工位对应的工艺之前的所有前道工艺中未找到产品条码的当前工艺则表示产品条码已经过当前工艺
return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]已经过当前工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted();
unCompleteCraftList = beforeCellCraftList.stream().filter(o -> (null != o && o.getSeq().compareTo(optional.get().getSeq()) > 0)).collect(Collectors.toList());

@ -124,11 +124,10 @@ public class MesProductSeqCheckNosortStepService extends MesProductSeqCheckStepS
//非排序顺序防错级别配置[工位参数]
private String getCheckProductSeqCfg(StationRequestBean reqBean) {
String checkProductSeqCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CHECK_PRODUCT_SEQ_CFG);
return (!StringUtils.isEmpty(checkProductSeqCfg) && checkProductSeqCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? checkProductSeqCfg : null;
return fsmCommonService.checkWcpcMapIsMatchValue(reqBean, MesPcnExtConstWords.CHECK_PRODUCT_SEQ_CFG, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
//前道工艺防错验证 【非排序】
//顺序防错验证 【非排序】
private Boolean doProductSeqCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext,
MesProductionPartContext productionPartContext, String checkProductSeqCfg, List<String> workOrderNoList) {

@ -105,7 +105,7 @@ public class MesProductSeqCheckSortStepService extends MesProductSeqCheckStepSer
}
//前道工艺防错验证 【排序】
//顺序防错验证 【排序】
private Boolean doProductSeqCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPartContext productionPartContext, Boolean isPushQueue) {
String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;

@ -132,7 +132,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
//获取上下文零件数据信息
List<String> partNoList = (prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false, false);
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false, true, false);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
@ -238,6 +238,9 @@ public class MesProductSnGenerateStepService extends BaseStepService {
//未知不同步
produceSnClone.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
//条码转大写
produceSnToUpperCase(produceSnClone);
if (StringUtils.isEmpty(produceSnClone.getId())) {
produceSnClone.setFid(UUID.randomUUID().toString());
produceSnClone = produceSnExtService.insert(produceSnClone);
@ -273,6 +276,13 @@ public class MesProductSnGenerateStepService extends BaseStepService {
}
private void produceSnToUpperCase(MesProduceSn produceSn) {
if (!StringUtils.isEmpty(produceSn.getProductSn())) produceSn.setProductSn(produceSn.getProductSn().toUpperCase());
if (!StringUtils.isEmpty(produceSn.getCustSn())) produceSn.setCustSn(produceSn.getCustSn().toUpperCase());
if (!StringUtils.isEmpty(produceSn.getWorkOrderNo())) produceSn.setWorkOrderNo(produceSn.getWorkOrderNo().toUpperCase());
if (!StringUtils.isEmpty(produceSn.getPartNo())) produceSn.setPartNo(produceSn.getPartNo().toUpperCase());
}
private GenSerialNoModel generateGenSerialNoModel(StationRequestBean reqBean, StationResultBean resultBean, String ruleCode, MesPart part) {
return new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()).partSnParam(part.getPartSnParam())
.putDataMap(MesPart.class.getSimpleName(), part).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());

@ -197,9 +197,9 @@ public class MesProductSnPrintNosortStepService extends BaseStepService {
String priter = null;
if (!CollectionUtils.isEmpty(workCellPartPrinterCfgList)) {
Optional<MesWorkCellPartPrinterCfg> optional = workCellPartPrinterCfgList.stream().filter(o -> (null != o
&& !StringUtils.isEmpty(o.getWorkCenterCode()) && o.getWorkCenterCode().equals(reqBean.getWorkCenterCode())
&& !StringUtils.isEmpty(o.getWorkCellCode()) && o.getWorkCellCode().equals(reqBean.getWorkCellCode())
&& !StringUtils.isEmpty(o.getPartNo()) && o.getPartNo().equals(partNo) && !StringUtils.isEmpty(o.getPrinterCode()))).findFirst();
&& !StringUtils.isEmpty(o.getWorkCenterCode()) && o.getWorkCenterCode().toUpperCase().equals(reqBean.getWorkCenterCode().toUpperCase())
&& !StringUtils.isEmpty(o.getWorkCellCode()) && o.getWorkCellCode().toUpperCase().equals(reqBean.getWorkCellCode().toUpperCase())
&& !StringUtils.isEmpty(o.getPartNo()) && o.getPartNo().toUpperCase().equals(partNo.toUpperCase()) && !StringUtils.isEmpty(o.getPrinterCode()))).findFirst();
if (null != optional && optional.isPresent()) priter = optional.get().getPrinterCode();
}
if (StringUtils.isEmpty(priter) && !CollectionUtils.isEmpty(partDataMap) && partDataMap.containsKey(partNo)) {
@ -214,7 +214,7 @@ public class MesProductSnPrintNosortStepService extends BaseStepService {
//获取上下文零件数据信息
List<String> partNoList = (prodRuleDataContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//保存零件数据信息
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false);
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true, false);
return stepResult.isCompleted() ? (Map<String, MesPart>) stepResult.getObj() : null;
}

@ -111,7 +111,7 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
Map<Integer, MesProdRuleContext> prodRuleContextMap = prodRuleContextList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o));
// 获取零件信息上下文
Map<String, MesPart> partDataContext = productionProcessContextStepService.getPartDataContext(reqBean);
Map<String, MesPart> partDataContext = productionDispatchContextStepService.getPartDataContext(reqBean);
//默认客户条码编码规则配置代码
String defaultCustMatchRule = getDefaultCustMatchRule(reqBean.getOrganizeCode());
@ -219,7 +219,7 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
// 根据工单号分组
return CollectionUtils.isEmpty(workOrderList) ? null :
workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y));
workOrderList.stream().collect(Collectors.toMap(o -> o.getWorkOrderNo().toUpperCase(), Function.identity(), (x, y) -> y));
}
//过滤打印配置信息

@ -67,7 +67,7 @@ public class MesProductSnReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, 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).writeDbLog().checkRepeat(),

@ -89,7 +89,7 @@ public class MesProductSnSaveStepService extends BaseStepService {
//获取上下文零件数据信息
List<String> partNoList = (productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false, false);
partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false, true, false);
//获取上下文加工结果
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);

@ -121,7 +121,7 @@ public class MesProductSnScanStepService extends BaseStepService {
if (StringUtils.isEmpty(scanInfo) && (scanedQty.compareTo(needQty) < 0 || StringUtils.isEmpty(isAllowJump) || isAllowJump)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描主条码!");
//是否支持混腔扫描[工位参数]
String cavityNosortCfg = getCavityNosortCfg(reqBean);
Boolean cavityNosortCfg = fsmCommonService.checkWcpcMapIsMatchTrue(reqBean, MesPcnExtConstWords.CAVITY_NOSORT_CFG);
//封装待验证的主条码信息
if (!scanInfo.equals(productionProcessContext.getFinishCode())) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, scanInfo, equipVariableCollectContextList, cavityNosortCfg);
@ -144,7 +144,7 @@ public class MesProductSnScanStepService extends BaseStepService {
String scanInfoName = !scanInfo.equals(productionProcessContext.getFinishCode()) ? "主条码" : "空腔码";
if (scanedQty.compareTo(needQty) < 0 && !StringUtils.isEmpty(cavityNosortCfg))
if (scanedQty.compareTo(needQty) < 0 && cavityNosortCfg)
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息%s[%s],已知腔数[%s],还需要再连续扫描[%s]次主条码!", scanInfoName, scanInfo, needQty, needQty - equipVariableCollectContextList.size()));
@ -161,12 +161,6 @@ public class MesProductSnScanStepService extends BaseStepService {
}
//是否支持混腔扫描[工位参数]
private String getCavityNosortCfg(StationRequestBean reqBean) {
String cavityNosortCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG);
return (!StringUtils.isEmpty(cavityNosortCfg) && cavityNosortCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cavityNosortCfg : null;
}
private Integer calcScanedQty(List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPsInContext> productionPsInContextList) {
return (CollectionUtils.isEmpty(equipVariableCollectContextList) ? MesPcnExtConstWords.ZERO : equipVariableCollectContextList.size()) + (CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.ZERO : productionPsInContextList.size());
}
@ -195,17 +189,11 @@ public class MesProductSnScanStepService extends BaseStepService {
Optional<MesProductionPsInContext> optional = CollectionUtils.isEmpty(productionPsInContextList) ? null :
productionPsInContextList.stream().filter(o -> (null != o && o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null == optional || !optional.isPresent()) return false;
//非排序是否允许强过, 默认不支持, 不支持返回null, 存在可以跳过的数据且支持跳过返回true
String isAllowJump = getIsAllowJump(reqBean);
//非排序是否允许强过【工位参数】, 默认不支持, 不支持返回null, 存在可以跳过的数据且支持跳过返回true
String isAllowJump = fsmCommonService.checkWcpcMapIsMatchValue(reqBean, MesPcnExtConstWords.IS_ALLOW_JUMP, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
return StringUtils.isEmpty(isAllowJump) ? null : true;
}
//非排序是否允许强过[工位参数]
private String getIsAllowJump(StationRequestBean reqBean) {
String isAllowJump = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.IS_ALLOW_JUMP);
return (!StringUtils.isEmpty(isAllowJump) && isAllowJump.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? isAllowJump : null;
}
//验证扫描信息属于工艺强过码 并且支持跳过,进行数据变更
private void updateProductionPsInContextList(StationRequestBean reqBean, List<MesProductionPsInContext> productionPsInContextList, String craftJumpCode) {
productionPsInContextList.forEach(o -> {
@ -234,11 +222,11 @@ public class MesProductSnScanStepService extends BaseStepService {
}
//封装扫/读信息:主条码信息
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, String scanInfo, List<MesEquipVariableCollectContext> equipVariableCollectContextList, String cavityNosortCfg) {
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, String scanInfo, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Boolean cavityNosortCfg) {
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, StringUtils.isEmpty(cavityNosortCfg) ? MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() : MesExtEnumUtil.CELL_MESSAGE_SOURCE.MANY.getValue()));
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, !cavityNosortCfg ? MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() : MesExtEnumUtil.CELL_MESSAGE_SOURCE.MANY.getValue()));
return equipVariableCollectContextList;

@ -67,7 +67,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, 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).writeDbLog().checkRepeat(),
@ -173,7 +173,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
List<String> readList = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
List<String> partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
if (!partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false).isCompleted()) {
if (!partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true, false).isCompleted()) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(),
String.format("当前未读取到设备[%s]有效的产出零件号,%s持续监听中...%s", cellEquipContext.getEquipmentName(), stepResult.getMsg(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,

@ -105,7 +105,7 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//验证零件编码有效性
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false);
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true, false);
//验证失败,删除手动选择的腔数及零件信息上下文
if (CollectionUtils.isEmpty(partNoList) || !stepResult.isCompleted()) productionProcessContextStepService.removeFunctionChooseCavityPartContext(reqBean);
@ -129,7 +129,7 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//验证零件编码有效性
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true);
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true, false);
if (stepResult.isCompleted()) suffix = String.format("%s:%s[%s]", MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getDescription(), !scanInfo.equals(productionProcessContext.getFinishCode()) ? "零件编码" : "空腔嘛", scanInfo);

@ -221,7 +221,7 @@ public class MesProductionRecordGenerateStepService extends BaseStepService {
if (null == productionPsInContext) return false;
if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false;
if (null == productionPsOutContext) return false;
if (!productionPsInContext.getPartNo().equals(productionPsOutContext.getPartNo())) return false;
if (!productionPsInContext.getPartNo().toUpperCase().equals(productionPsOutContext.getPartNo().toUpperCase())) return false;
return true;
}

@ -68,7 +68,7 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
if (StringUtils.isEmpty(endlessLoopReadTimes))
endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT;
if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) {

@ -62,7 +62,7 @@ public class MesShippingQueueFindStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, 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),

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
@ -110,7 +109,7 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer
if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!");
//保存零件数据信息
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true, false).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//保存上下文产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
@ -154,17 +153,11 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer
private Boolean checkIsAllowJump(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
Optional<MesProductionPartContext> optional = CollectionUtils.isEmpty(productionPartContextList) ? null : productionPartContextList.stream().filter(o -> (null != o && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (null == optional || !optional.isPresent()) return false;
//非排序是否允许强过, 默认不支持, 不支持返回null, 存在可以跳过的数据且支持跳过返回true
String isAllowJump = getIsAllowJump(reqBean);
//非排序是否允许强过【工位参数】, 默认不支持, 不支持返回null, 存在可以跳过的数据且支持跳过返回true
String isAllowJump = fsmCommonService.checkWcpcMapIsMatchValue(reqBean, MesPcnExtConstWords.IS_ALLOW_JUMP, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
return StringUtils.isEmpty(isAllowJump) ? null : true;
}
//非排序是否允许强过[工位参数]
private String getIsAllowJump(StationRequestBean reqBean) {
String isAllowJump = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.IS_ALLOW_JUMP);
return (!StringUtils.isEmpty(isAllowJump) && isAllowJump.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? isAllowJump : null;
}
//验证扫描信息属于工艺强过码 并且支持强过,进行数据变更
private void updateProductionPartContextList(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, String craftJumpCode) {
productionPartContextList.forEach(o -> {

@ -124,7 +124,7 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
if (checkPartProdGroupCodeIsExistRepeat(reqBean, productionPartContextList, cachedProductionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "不支持生产相同的零件生产组的加工单,已清除当前的加工单数据!");
//保存零件数据信息
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true, false).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//保存上下文产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
@ -181,7 +181,7 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList,
List<MesProductionPsInContext> productionPsInContextList, List<MesProductionPsOutContext> productionPsOutContextList) {
//是否支持扫描完成状态的工单[工位参数]
String cfg = getAllowScanCompleteOrderCfg(reqBean);
Boolean allowCfg = fsmCommonService.checkWcpcMapIsMatchTrue(reqBean, MesPcnExtConstWords.ALLOW_SCAN_COMPLETE_ORDER_CFG);
//从上下文中取出生产线与工位对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
@ -207,9 +207,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
return stepResult.isCompleted(false).msg((String) itemMap.get(MesPcnExtConstWords.MESSAGE));
MesWorkOrder workOrder = (MesWorkOrder) itemMap.get(MesWorkOrder.class.getSimpleName());
if (StringUtils.isEmpty(cfg) && !MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus()))
if (!allowCfg && !MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
if (!StringUtils.isEmpty(cfg) && !MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus()))
if (allowCfg && !MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
@ -219,9 +219,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
MesProduceSn produceSn = (MesProduceSn) itemMap.get(MesProduceSn.class.getSimpleName());
if ((StringUtils.isEmpty(workCenter.getIsIgnoreQc()) || workCenter.getIsIgnoreQc().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) >= 0)
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]质量状态[%s]", workOrderNo, MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
if (StringUtils.isEmpty(cfg) && MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() <= produceSn.getSnStatus())
if (!allowCfg && MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() <= produceSn.getSnStatus())
return stepResult.isCompleted(false).msg(String.format("请检查工单产品条码信息,产品条码[%s]条码状态[%s]", produceSn.getProductSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
if (!StringUtils.isEmpty(cfg) && MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() < produceSn.getSnStatus())
if (allowCfg && MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() < produceSn.getSnStatus())
return stepResult.isCompleted(false).msg(String.format("请检查工单产品条码信息,产品条码[%s]条码状态[%s]", produceSn.getProductSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
MesQueueOrder queueOrder = (MesQueueOrder) itemMap.get(MesQueueOrder.class.getSimpleName());
@ -302,10 +302,4 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
return true;
}
//是否支持扫描完成状态的工单[工位参数]
private String getAllowScanCompleteOrderCfg(StationRequestBean reqBean) {
String cfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ALLOW_SCAN_COMPLETE_ORDER_CFG);
return (!StringUtils.isEmpty(cfg) && cfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cfg : null;
}
}

@ -116,7 +116,7 @@ public class MesWorkOrderCheckSortStepServiceBak extends MesWorkOrderCheckStepSe
if (checkPartProdGroupCodeIsExistRepeat(reqBean, productionPartContextList, cachedProductionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "不支持生产相同的零件生产组的加工单,已清除当前的加工单数据!");
//保存零件数据信息
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true, false).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
//保存上下文产出零件信息
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);

@ -219,7 +219,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
packProductionPartContextList(productionProcessContext, equipVariableCollectContextList, productionPartContextList, cutScheme, mesWorkOrderCutDetailList, workOrderList);
//保存 上下文 零件数据信息
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true, false, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, false, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
// 裁片方案成品配置
List<MesCutSchemeFg> mesCutSchemeFgList = workOrderCutService.queryCutSchemeFgList(cutScheme.getCutCode(), reqBean.getOrganizeCode());
@ -269,19 +269,19 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
if (labelTemplate == null)
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,零件号[%s]对应模板代码[%s]无效!", mesCutSchemeFg.getPartNo(), mesPackingDefine.getPackageTemplate()));
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo());
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo().toUpperCase());
mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies());
mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
mesPartContext.setPrinter(StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) ? mesPackingDefine.getPrinter() : cutScheme.getPackageSnPrinter());
mesPartContext.setLabelTemplate(StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) ? mesPackingDefine.getPackageTemplate() : cutScheme.getPackageLabelTemplateCode());
mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext);
partDataExtContext.put(mesCutSchemeFg.getPartNo().toUpperCase(), mesPartContext);
workOrderCutDetailModelList.add(workOrderCutDetailModel);
}
productionProcessContextStepService.dispatchPartDataContext(reqBean, partDataExtContext);
productionDispatchContextStepService.dispatchPartDataContext(reqBean, partDataExtContext);
productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, workOrderCutDetailModelList);
@ -322,11 +322,11 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
}
private static void packProductionPartContextList(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList, MesCutScheme cutScheme, List<MesWorkOrderCutDetail> mesWorkOrderCutDetailList, List<MesWorkOrder> workOrderList) {
Map<String, MesWorkOrderCutDetail> workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y));
Map<String, MesWorkOrderCutDetail> workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(o -> o.getWorkOrderNo().toUpperCase(), Function.identity(), (x, y) -> y));
workOrderList.stream().filter(o -> null != o).forEach(o -> {
MesProductionPartContext productionPartContext = new MesProductionPartContext()
.copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), workOrderCutDetailMap.get(o.getWorkOrderNo()).getCutWorkOrderNo(), equipVariableCollectContextList.get(0).getMessageSource())
.copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo().toUpperCase()).getQty(), workOrderCutDetailMap.get(o.getWorkOrderNo().toUpperCase()).getCutWorkOrderNo(), equipVariableCollectContextList.get(0).getMessageSource())
.isCheck(productionProcessContext.getWorkCell());
productionPartContext.setCutCode(cutScheme.getCutCode());
productionPartContextList.add(productionPartContext);

@ -159,7 +159,7 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
//foreignKey有值代表已经匹配过产品加工规则
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
List<MesProdRuleNosortCfg> filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
List<MesProdRuleNosortCfg> filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo().toUpperCase()) : null;
if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) {
productionPartContextList.forEach(o -> o.busiCheckToDelete());
@ -188,7 +188,7 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService
//根据产出零件分组数据
private Map<String, List<MesProdRuleNosortCfg>> groupProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList) {
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null :
prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo));
prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> o.getOutPartNo().toUpperCase()));
}
}

@ -2,7 +2,8 @@ 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.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
@ -12,12 +13,13 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutPackage;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
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.MesWorkOrderCutPackageRepository;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import lombok.extern.slf4j.Slf4j;
@ -70,7 +72,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
// 获取产成零件信息
Map<String, MesPartContext> partDataContext = productionProcessContextStepService.getPartDataExtContext(reqBean);
Map<String, MesPartContext> partDataContext = productionDispatchContextStepService.getPartDataExtContext(reqBean);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
@ -138,7 +140,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
Double qty, List<MesWorkOrderCutPackage> workOrderCutPackages,
List<MesWorkOrderCutDetailModel> newWorkOrderCutFgDataContextList) {
MesPartContext mesPartContext = partDataContext.get(workOrderCutDetailModel.getPartNo());
MesPartContext mesPartContext = partDataContext.get(workOrderCutDetailModel.getPartNo().toUpperCase());
String nowTime = TimeTool.getNowTime(false);
MesWorkOrderCutPackage cutPackage = new MesWorkOrderCutPackage();
ConvertBean.serviceModelInitialize(cutPackage, reqBean.getUserInfo());
@ -180,7 +182,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
} catch (ImppBusiException e) {
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail());
} catch (Exception e) {
String webMsg = String.format("零件编码[%s]编码规则代码[%s]生成零件条码%s", part.getPartNo(), ruleCode, fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode()));
String webMsg = String.format("零件编码[%s]编码规则代码[%s]生成裁片工单包装条码%s", part.getPartNo(), ruleCode, fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode()));
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.ERROR.getValue()), webMsg, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true);
foundExThrowNoShowMsg();

@ -13,6 +13,7 @@ import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
@ -73,6 +74,9 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -109,7 +113,7 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
Map<String, MesProdRuleContext> prodRuleContextMapByOutPartNo = prodRuleContextList.stream().collect(Collectors.toMap(MesProdRuleContext::getOutPartNo, Function.identity(), (x, y) -> y));
// 获取产成零件信息
Map<String, MesPart> partDataContext = productionProcessContextStepService.getPartDataContext(reqBean);
Map<String, MesPart> partDataContext = productionDispatchContextStepService.getPartDataContext(reqBean);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
@ -128,7 +132,7 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
MesPart part = partDataContext.get(mesProductionPartContext.getPartNo());
MesProdRuleContext mesProdRuleContext = prodRuleContextMapByOutPartNo.get(part.getPartNo());
MesProdRuleContext mesProdRuleContext = prodRuleContextMapByOutPartNo.get(mesProductionPartContext.getPartNo());
MesProduceSn produceSn = new MesProduceSn();
ConvertBean.serviceModelInitialize(produceSn, reqBean.getUserInfo());
@ -139,7 +143,7 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
produceSn.setCraftCode(productionProcessContext.getCraftCode());
produceSn.setCustSn(produceSn.getCustSn());
produceSn.setSerialNumber(doGenerateSerialNo(reqBean, resultBean, MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE, part));
produceSn.setSerialNumber(snowflakeIdMaker.nextId() + MesPcnExtConstWords.EMPTY);
produceSn.setQty(mesProductionPartContext.getCutQty());
produceSn.setWorkOrderNo(mesProductionPartContext.getWorkOrderNo());

@ -67,11 +67,16 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService {
private static Map<String, ReentrantLock> lockMap = new ConcurrentHashMap<>();
@Override
public void title(StationRequestBean reqBean) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
}
@Override
public StepResult init(StationRequestBean reqBean) {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, 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),

@ -64,7 +64,7 @@ public class MesWorkOrderReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScanThenBackValue(reqBean, 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).writeDbLog().checkRepeat(),

@ -222,7 +222,7 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
//根据设备代码获取可复用条码的个数
@Override
public Integer getRepeatAssemblySnCount(String organizeCode, String workCenterCode, String workCellCode, String equipmentCode) {
String countStr = getFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), equipmentCode);
String countStr = getFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), equipmentCode.toUpperCase());
return !StringUtils.isEmpty(countStr) ? Integer.valueOf(countStr) : MesPcnExtConstWords.ZERO;
}
@ -231,8 +231,8 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
public Boolean dispatchRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, MesProductionAssemblyContext productionAssemblyContext) {
String repeatKey = productionAssemblyContext.repeatKeyToString();
if (StringUtils.isEmpty(getRepeatAssemblySn(organizeCode, workCenterCode, workCellCode, repeatKey))) {
Integer count = getRepeatAssemblySnCount(organizeCode, workCenterCode, workCellCode, productionAssemblyContext.getEquipmentCode()) + 1;
dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), productionAssemblyContext.getEquipmentCode(), count.toString());
Integer count = getRepeatAssemblySnCount(organizeCode, workCenterCode, workCellCode, productionAssemblyContext.getEquipmentCode().toUpperCase()) + 1;
dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), productionAssemblyContext.getEquipmentCode().toUpperCase(), count.toString());
}
return dispatchFsmBusiData(organizeCode, getRepeatAssemblySnContextKey(organizeCode, workCenterCode, workCellCode), repeatKey, productionAssemblyContext.getAssemblySn());
}

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush;
import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue;
@ -20,6 +21,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
/**
@ -58,6 +60,41 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference<List<List<StationKvBean>>>() {});
}
//获取上下文零件数据信息
@Override
public Map<String, MesPart> getPartDataContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, ? extends MesPart> getPartDataContext(StationRequestBean reqBean, Boolean isExt) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ?
(!isExt ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {})) : null;
}
//保存上下文零件数据信息 [JSON]Map<String, MesPart>
@Override
public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap) {
if (CollectionUtils.isEmpty(partDataMap)) return false;
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap));
}
//删除上下文零件数据信息
@Override
public void removePartDataContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
}
//获取上下文加工结果
@Override
public String getProductResultContext(StationRequestBean reqBean) {

@ -156,11 +156,11 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
public MesProductionProcessContext productionPwdContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.PRODUCTION_PWD_CFG, reqBean.getOrganizeCode());
Map<String, List<MesConfig>> cfgKeyMap = CollectionUtils.isEmpty(configList) ? null : configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgKey()))).collect(Collectors.groupingBy(MesConfig::getCfgKey));
return productionProcessContext.finishCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CAVITY_FINISH_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CAVITY_FINISH_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CAVITY_FINISH_CODE)
.craftJumpCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CRAFT_JUMP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CRAFT_JUMP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CRAFT_JUMP_CODE)
.assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)
.assemblyCavitySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)
.sortSuspiciousCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.SORT_SUSPICIOUS_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.SORT_SUSPICIOUS_CODE).get(0).getCfgValue() : MesPcnExtConstWords.SORT_SUSPICIOUS_CODE);
return productionProcessContext.finishCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CAVITY_FINISH_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CAVITY_FINISH_CODE).get(0).getCfgValue().toUpperCase() : MesPcnExtConstWords.CAVITY_FINISH_CODE)
.craftJumpCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CRAFT_JUMP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CRAFT_JUMP_CODE).get(0).getCfgValue().toUpperCase() : MesPcnExtConstWords.CRAFT_JUMP_CODE)
.assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue().toUpperCase() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)
.assemblyCavitySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE).get(0).getCfgValue().toUpperCase() : MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)
.sortSuspiciousCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.SORT_SUSPICIOUS_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.SORT_SUSPICIOUS_CODE).get(0).getCfgValue().toUpperCase() : MesPcnExtConstWords.SORT_SUSPICIOUS_CODE);
}
//验证组织模型有效性
@ -389,41 +389,6 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_NOSORT_CFG_CONTEXT, JSONObject.toJSONString(assemblyNosortCfgList));
}
//获取上下文零件数据信息
@Override
public Map<String, MesPart> getPartDataContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, ? extends MesPart> getPartDataContext(StationRequestBean reqBean, Boolean isExt) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ?
(!isExt ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {})) : null;
}
//保存上下文零件数据信息 [JSON]Map<String, MesPart>
@Override
public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap) {
if (CollectionUtils.isEmpty(partDataMap)) return false;
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap));
}
//删除上下文零件数据信息
@Override
public void removePartDataContext(StationRequestBean reqBean) {
removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
}
//获取手动选择的腔数及工单信息上下文
@Override
public List<StationKvBean> getFunctionChooseCavityOrderContext(StationRequestBean reqBean) {
@ -638,8 +603,8 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
public Map<String, List<MesProdRuleIgnoreCfg>> getProdRuleIgnoreCfgContextMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
List<MesProdRuleIgnoreCfg> prodRuleIgnoreCfgList = getProdRuleIgnoreCfgContext(reqBean, productionProcessContext);
return CollectionUtils.isEmpty(prodRuleIgnoreCfgList) ? null :
prodRuleIgnoreCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDataSource()) && !StringUtils.isEmpty(o.getSourceId())))
.collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getDataSource().toString()).add(o.getEquipmentCode()).add(o.getSourceId().toString()).toString()));
prodRuleIgnoreCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDataSource()) && !StringUtils.isEmpty(o.getEquipmentCode()) && !StringUtils.isEmpty(o.getSourceId())))
.collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getDataSource().toString()).add(o.getEquipmentCode().toUpperCase()).add(o.getSourceId().toString()).toString()));
}
//处理排序线推单配置上下文, 返回推送工位类型对应的配置信息

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
@ -23,6 +23,7 @@ import org.springframework.util.StringUtils;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -33,45 +34,25 @@ import java.util.stream.Collectors;
public class MesPartDataMapSaveStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IPartService partService;
//保存零件数据信息
public StepResult savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter, Boolean isSave, Boolean isExt) {
public StepResult savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isSave, Boolean isExt) {
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, isSave, isExt);
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, true, isSave, isExt);
}
//保存零件数据信息
public StepResult savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter, Boolean isSave) {
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<String> partNoList, Boolean isBackError, Boolean isSave, Boolean isExt) {
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, isSave, false);
}
//保存零件数据信息
public StepResult savePartDataMap2PPC(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, Boolean isBackError, Boolean isFilter) {
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, true, false);
}
//保存零件数据信息
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<String> partNoList, Boolean isBackError, Boolean isFilter) {
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, isFilter, true, false);
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError, true, isSave, isExt);
}
@ -83,8 +64,10 @@ public class MesPartDataMapSaveStepService extends BaseStepService {
if (!isBackError) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.getMsg());
}
partNoList = partNoList.stream().map(o -> o.toUpperCase()).collect(Collectors.toList());
//从上下文中取出零件信息集合
Map<String, ? extends MesPart> partDataMap = productionProcessContextStepService.getPartDataContext(reqBean, isExt);
Map<String, ? extends MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean, isExt);
//验证上下文中取出零件信息集合是否匹配当前搜集的零件编码
if (!CollectionUtils.isEmpty(partDataMap) && partDataMap.keySet().containsAll(partNoList)) return stepResult.obj(partDataMap);
@ -126,7 +109,7 @@ public class MesPartDataMapSaveStepService extends BaseStepService {
//保存上下文零件数据信息
if (!CollectionUtils.isEmpty(finalPartList) && CollectionUtils.isEmpty(filterList)) {
if (isSave) productionProcessContextStepService.dispatchPartDataContext(reqBean, !isExt ? finalPartDataMap : finalPartDataExtMap);
if (isSave) productionDispatchContextStepService.dispatchPartDataContext(reqBean, !isExt ? finalPartDataMap : finalPartDataExtMap);
return stepResult.obj(!isExt ? finalPartDataMap : finalPartDataExtMap);
}
@ -160,6 +143,7 @@ public class MesPartDataMapSaveStepService extends BaseStepService {
}
private MesProductionPartContext getProductionPartContextByPartNo(StationRequestBean reqBean, String partNo, MesProductionProcessContext productionProcessContext, Map<String, MesPart> partDataMap) {
partNo = partNo.toUpperCase();
if (!partNo.equals(productionProcessContext.getFinishCode())) return new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), partNo, partDataMap.get(partNo).getPartName());
return new MesProductionPartContext().isFinishCode();
}
@ -189,8 +173,8 @@ public class MesPartDataMapSaveStepService extends BaseStepService {
private Map<String, MesPartContext> getPartMap(List<MesPart> partList) {
partList = CollectionUtils.isEmpty(partList) ? null :
partList.stream().distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesPart::getPartNo))), ArrayList::new));
return CollectionUtils.isEmpty(partList) ? null : partList.stream().filter(o -> null != o).collect(Collectors.toMap(MesPart::getPartNo, o -> new MesPartContext(o)));
partList.stream().distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getPartNo().toUpperCase()))), ArrayList::new));
return CollectionUtils.isEmpty(partList) ? null : partList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> o.getPartNo().toUpperCase(), o -> new MesPartContext(o)));
}
}

@ -137,10 +137,10 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
if (null == productionPsInContext) return false;
if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false;
if (null != productionPartContext) {
if (!productionPsInContext.getPartNo().equals(productionPartContext.getPartNo())) return false;
if (!productionPsInContext.getPartNo().toUpperCase().equals(productionPartContext.getPartNo().toUpperCase())) return false;
else return true;
} else {
if (!productionPsInContext.getPartNo().equals(prodRuleContext.getOutPartNo())) return false;
if (!productionPsInContext.getPartNo().toUpperCase().equals(prodRuleContext.getOutPartNo().toUpperCase())) return false;
else return true;
}
}

@ -112,6 +112,8 @@ public class BarCodeUtils {
return os;
}
//不过滤":"tesla零件号带冒号
//不过滤[)>字符
public static String removePatternSpecialCharacter(String barCode) {
if (StringUtils.isEmpty(barCode)) return MesPcnExtConstWords.EMPTY;
return StringUtils.removePattern(barCode, "[^A-Z^a-z0-9_^\\s^\\-^/^\\.^\\[^\\)^\\>^\\:]");

@ -131,8 +131,9 @@ public class MesEquipVariableCollectContext implements Serializable {
return this;
}
public MesEquipVariableCollectContext trimValue() {
public MesEquipVariableCollectContext trimValue(Boolean isUpperCase) {
if (!StringUtils.isEmpty(this.equipVariableValue)) this.equipVariableValue = this.equipVariableValue.trim();
if (!StringUtils.isEmpty(this.equipVariableValue) && isUpperCase) this.equipVariableValue = this.equipVariableValue.toUpperCase();
return this;
}

@ -134,6 +134,8 @@ public class MesProdRuleContext implements Serializable {
public MesProdRuleContext copy(MesProdRuleNosortCfg prodRuleNosortCfg) {
BeanUtils.copyProperties(prodRuleNosortCfg, this);
this.pid = prodRuleNosortCfg.getId();
if (!StringUtils.isEmpty(this.inPartNo)) this.inPartNo = this.inPartNo.toUpperCase();
if (!StringUtils.isEmpty(this.outPartNo)) this.outPartNo = this.outPartNo.toUpperCase();
return this;
}

@ -130,10 +130,10 @@ public class MesProductionAssemblyContext implements Serializable {
public String repeatKeyToString() {
if (StringUtils.isEmpty(this.equipmentCode) || StringUtils.isEmpty(this.matchType) || (StringUtils.isEmpty(this.matchRule) && StringUtils.isEmpty(this.assemblyPartNo))) return null;
return String.format("%s:%s&%s:%s&%s:%s&%s:%s",
MesPcnExtConstWords.EQUIPMENT_CODE, this.equipmentCode,
MesPcnExtConstWords.EQUIPMENT_CODE, this.equipmentCode.toUpperCase(),
MesPcnExtConstWords.MATCH_TYPE, this.matchType,
MesPcnExtConstWords.MATCH_RULE, StringUtils.isEmpty(this.matchRule) ? MesPcnExtConstWords.EMPTY : this.matchRule,
MesPcnExtConstWords.ASSEMBLY_PART_NO, StringUtils.isEmpty(this.assemblyPartNo) ? MesPcnExtConstWords.EMPTY : this.assemblyPartNo);
MesPcnExtConstWords.ASSEMBLY_PART_NO, StringUtils.isEmpty(this.assemblyPartNo) ? MesPcnExtConstWords.EMPTY : this.assemblyPartNo.toUpperCase());
}
}

@ -139,13 +139,14 @@ public class MesProductionPartContext implements Serializable {
//根据一模多腔赋值
public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) {
BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID);
this.partNo = this.partNo.toUpperCase();
return messageSource(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue());
}
//根据零件信息赋值
public MesProductionPartContext copyPartNo(String organizeCode, String partNo, String partName) {
this.organizeCode = organizeCode;
this.partNo = partNo;
this.partNo = partNo.toUpperCase();
this.partName = partName;
return messageSource(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue());
}
@ -155,6 +156,8 @@ public class MesProductionPartContext implements Serializable {
if (null != workOrder) {
BeanUtils.copyProperties(workOrder, this);
if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0);
this.workOrderNo = this.workOrderNo.toUpperCase();
this.partNo = this.partNo.toUpperCase();
} else this.isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return messageSource(messageSource);
}
@ -164,8 +167,10 @@ public class MesProductionPartContext implements Serializable {
if (null != workOrder) {
BeanUtils.copyProperties(workOrder, this);
if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0);
this.setCutQty(cutQty);
this.setCutWorkOrderNo(cutWorkOrderNo);
this.workOrderNo = this.workOrderNo.toUpperCase();
this.partNo = this.partNo.toUpperCase();
this.cutWorkOrderNo = cutWorkOrderNo.toUpperCase();
this.cutQty = cutQty;
} else this.isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return messageSource(messageSource);
}

@ -107,6 +107,10 @@ public class MesProductionPsInContext implements Serializable {
public MesProductionPsInContext(MesProduceSn produceSn) {
BeanUtils.copyProperties(produceSn, this);
if (!StringUtils.isEmpty(this.productSn)) this.productSn = this.productSn.toUpperCase();
if (!StringUtils.isEmpty(this.custSn)) this.custSn = this.custSn.toUpperCase();
if (!StringUtils.isEmpty(this.workOrderNo)) this.workOrderNo = this.workOrderNo.toUpperCase();
if (!StringUtils.isEmpty(this.partNo)) this.partNo = this.partNo.toUpperCase();
}
public MesProductionPsInContext foreignKey(Integer foreignKey) {

@ -1,49 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.io.Serializable;
/**
* -
*/
@Data
public class MesScanMonitorDetailContext implements Serializable {
private static final long serialVersionUID = -7678933218854960945L;
@ApiParam("扫描/读取信息")
private String scanInfo;
@ApiParam("日志类型")
private Integer logType;
@ApiParam("日志内容")
private String message;
@ApiParam("信息类型")
private Integer messageType;
public MesScanMonitorDetailContext() {}
public MesScanMonitorDetailContext(Integer logType) {
this.logType = logType;
}
public MesScanMonitorDetailContext scanInfo(String scanInfo) {
this.scanInfo = scanInfo;
return this;
}
public MesScanMonitorDetailContext message(String message) {
this.message = message;
return this;
}
public MesScanMonitorDetailContext messageType(Integer messageType) {
this.messageType = messageType;
return this;
}
}

@ -612,6 +612,8 @@ public class MesPcnExtConstWords {
public static final String DECIMAL_POINT = ".";
// #
public static final String WELL_NO = "#";
// !
public static final String EXCLAMATION = "!";
// 自动初始化工位按钮URL
public static final String AUTO_INIT_WORK_CELL_MODULE_URL = "AUTO_INIT_WORK_CELL_MODULE_URL";
@ -619,9 +621,6 @@ public class MesPcnExtConstWords {
// 分表配置
public static final String MES_SHARDING_TABLES_OBJECT_CFG = "MES_SHARDING_TABLES_OBJECT_CFG";
//过程条码默认生成规则
public static final String DEFAULT_SERIAL_NUMBER_RULE = "DEFAULT_SERIAL_NUMBER_RULE";
// 定制页面名称
public static final String CUSTOM_PAGE_NAME = "CUSTOM_PAGE_NAME";

Loading…
Cancel
Save