|
|
@ -24,12 +24,12 @@ import java.util.*;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description : 生成零件号工步 【非排序】
|
|
|
|
* @Description : 非排序无显示装配件匹配工步【倒推非排序产品加工规则】
|
|
|
|
* @Author : wangjie
|
|
|
|
* @Author : wangjie
|
|
|
|
**/
|
|
|
|
**/
|
|
|
|
@Slf4j
|
|
|
|
@Slf4j
|
|
|
|
@Service("mesAssemblyGeneratePartNoStepService2")
|
|
|
|
@Service("mesAssemblyMatchNosortRetrodictStepService")
|
|
|
|
public class MesAssemblyGeneratePartNoStepService2 extends BaseStepService {
|
|
|
|
public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService {
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private IFsmCommonService fsmCommonService;
|
|
|
|
private IFsmCommonService fsmCommonService;
|
|
|
@ -124,15 +124,19 @@ public class MesAssemblyGeneratePartNoStepService2 extends BaseStepService {
|
|
|
|
//未知腔数配置【工位参数】, 不验证装配件条码的个数
|
|
|
|
//未知腔数配置【工位参数】, 不验证装配件条码的个数
|
|
|
|
String cavityUnknownCfg = getCavityUnknownCfg(reqBean);
|
|
|
|
String cavityUnknownCfg = getCavityUnknownCfg(reqBean);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//根据设备代码获取可复用条码的个数
|
|
|
|
|
|
|
|
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() != (!CollectionUtils.isEmpty(curProductionPsInContextList) ? curProductionPsInContextList.size() : cellEquipContext.getCavity()) * cellEquipContext.getBindQty()) {
|
|
|
|
if (StringUtils.isEmpty(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)) {
|
|
|
|
if (!CollectionUtils.isEmpty(curProductionPsInContextList)) {
|
|
|
|
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toList()));
|
|
|
|
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toList()));
|
|
|
|
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN),
|
|
|
|
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN),
|
|
|
|
String.format("当前装配件条码个数[%s]不满足主条码个数[%s]每腔个数[%s]配置!", equipVariableCollectContextList.size(), curProductionPsInContextList.size(), cellEquipContext.getBindQty()));
|
|
|
|
String.format("当前装配件条码个数[%s]%s不满足主条码个数[%s]每腔个数[%s]配置!", equipVariableCollectContextList.size(), suffix, curProductionPsInContextList.size(), cellEquipContext.getBindQty()));
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY),
|
|
|
|
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY),
|
|
|
|
String.format("当前装配件条码个数[%s]不满足腔数[%s]每腔个数[%s]配置!", equipVariableCollectContextList.size(), cellEquipContext.getCavity(), cellEquipContext.getBindQty()));
|
|
|
|
String.format("当前装配件条码个数[%s]%s不满足腔数[%s]每腔个数[%s]配置!", equipVariableCollectContextList.size(), suffix, cellEquipContext.getCavity(), cellEquipContext.getBindQty()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -249,54 +253,48 @@ public class MesAssemblyGeneratePartNoStepService2 extends BaseStepService {
|
|
|
|
|
|
|
|
|
|
|
|
if (null == productionAssemblyNosortContext) continue;
|
|
|
|
if (null == productionAssemblyNosortContext) continue;
|
|
|
|
|
|
|
|
|
|
|
|
//非扫描模式 或者 扫描模式情况下非可复用件
|
|
|
|
for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextListTemp) {
|
|
|
|
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) != 0 ||
|
|
|
|
|
|
|
|
StringUtils.isEmpty(productionAssemblyNosortContext.getIsRepeat()) || productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextListTemp) {
|
|
|
|
//已被消费
|
|
|
|
|
|
|
|
if (null == equipVariableCollectContext || equipVariableCollectContext.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue;
|
|
|
|
|
|
|
|
|
|
|
|
//已被消费
|
|
|
|
//匹配规则
|
|
|
|
if (null == equipVariableCollectContext || equipVariableCollectContext.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue;
|
|
|
|
Map<String, Object> result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext);
|
|
|
|
|
|
|
|
|
|
|
|
//匹配规则
|
|
|
|
//匹配失败
|
|
|
|
Map<String, Object> result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext);
|
|
|
|
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
|
|
|
|
|
|
|
|
String msg = (String) result.get(MesPcnExtConstWords.MESSAGE);
|
|
|
|
//匹配失败
|
|
|
|
stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg));
|
|
|
|
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
|
|
|
|
continue;
|
|
|
|
String msg = (String) result.get(MesPcnExtConstWords.MESSAGE);
|
|
|
|
}
|
|
|
|
stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg));
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA);
|
|
|
|
MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA);
|
|
|
|
|
|
|
|
|
|
|
|
//前道防错
|
|
|
|
//前道防错
|
|
|
|
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
|
|
|
|
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
|
|
|
|
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
|
|
|
|
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
|
|
|
|
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
|
|
|
|
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
|
|
|
|
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
|
|
|
|
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//时效性验证
|
|
|
|
//时效性验证
|
|
|
|
if (!StringUtils.isEmpty(filter.getProductSnId())) {
|
|
|
|
if (!StringUtils.isEmpty(filter.getProductSnId())) {
|
|
|
|
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
|
|
|
|
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
|
|
|
|
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
|
|
|
|
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
|
|
|
|
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), result.get(MesPcnExtConstWords.MESSAGE)));
|
|
|
|
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), result.get(MesPcnExtConstWords.MESSAGE)));
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//装配件清单该数据标记已装配
|
|
|
|
//装配件清单该数据标记已装配
|
|
|
|
productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId());
|
|
|
|
productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId());
|
|
|
|
|
|
|
|
|
|
|
|
//临时数据标记已消费
|
|
|
|
|
|
|
|
equipVariableCollectContext.isConsume();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
//临时数据标记已消费
|
|
|
|
|
|
|
|
equipVariableCollectContext.isConsume();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|