|
|
|
@ -3,10 +3,11 @@ 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.api.busi.IMesProductionProcessContextStepService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
|
|
|
|
@ -45,7 +46,7 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
|
|
|
|
|
private IMesProductionCustomContextStepService productionCustomContextStepService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IPartService partService;
|
|
|
|
|
private MesPartDataMapSaveStepService partDataMapSaveStepService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public StepResult guide(StationRequestBean reqBean) {
|
|
|
|
@ -78,61 +79,80 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
|
|
|
|
|
//获取手动选择的腔数及零件信息上下文
|
|
|
|
|
List<StationKvBean> chooseCavityPart = productionProcessContextStepService.getFunctionChooseCavityPartContext(reqBean);
|
|
|
|
|
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList = null;
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(chooseCavityPart) && StringUtils.isEmpty(scanInfo)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描产成零件!");
|
|
|
|
|
|
|
|
|
|
//从上下文中取出零件信息集合
|
|
|
|
|
Map<String, MesPart> partDataMap = productionProcessContextStepService.getPartDataContext(reqBean);
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList = null;
|
|
|
|
|
List<String> readList;
|
|
|
|
|
List<String> partNoList;
|
|
|
|
|
String suffix = null;
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(chooseCavityPart)) {
|
|
|
|
|
|
|
|
|
|
String cellMessageSorce = chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).findFirst().get().getValue();
|
|
|
|
|
List<String> chooseList = new ArrayList<>(Arrays.asList(chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.PART_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON)));
|
|
|
|
|
readList = new ArrayList<>(Arrays.asList(chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.PART_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON)));
|
|
|
|
|
|
|
|
|
|
//发送工步内容
|
|
|
|
|
scanInfo = chooseCavityPart.stream().filter(o -> (null != o && !o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).map(o -> o.getName() + MesPcnExtConstWords.SQUARE_BRACKETS_L + o.getValue() + MesPcnExtConstWords.SQUARE_BRACKETS_R).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
|
|
|
|
productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.getByValue(Integer.valueOf(cellMessageSorce)));
|
|
|
|
|
|
|
|
|
|
//零件编码去重
|
|
|
|
|
List<String> partNoList = chooseList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//验证上下文中取出零件信息集合是否读取信息中搜集零件编码
|
|
|
|
|
if (CollectionUtils.isEmpty(partDataMap) || !partDataMap.keySet().containsAll(partNoList)) partDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
|
|
|
|
|
//验证零件编码有效性
|
|
|
|
|
if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false);
|
|
|
|
|
|
|
|
|
|
//零件信息缺失 抛出异常
|
|
|
|
|
productionPartContextList = getProductionPartContext(reqBean, resultBean, partNoList, partDataMap, chooseList);
|
|
|
|
|
//验证失败,删除手动选择的腔数及零件信息上下文
|
|
|
|
|
if (CollectionUtils.isEmpty(partNoList) || !stepResult.isCompleted()) productionProcessContextStepService.removeFunctionChooseCavityPartContext(reqBean);
|
|
|
|
|
else suffix = String.format("%s:%s", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(Integer.valueOf(cellMessageSorce)), scanInfo);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
//获取上下文产出零件信息
|
|
|
|
|
productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
|
|
|
|
|
|
|
|
|
//搜集上下文产出零件编码
|
|
|
|
|
readList = CollectionUtils.isEmpty(productionPartContextList) ? new ArrayList<>() : productionPartContextList.stream().filter(o -> !StringUtils.isEmpty(o)).map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//合并当前扫描的零件编码
|
|
|
|
|
readList.add(scanInfo);
|
|
|
|
|
|
|
|
|
|
//零件编码去重
|
|
|
|
|
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 (stepResult.isCompleted()) suffix = String.format("%s:%s[%s]", MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getDescription(), !scanInfo.equals(productionProcessContext.getFinishCode()) ? "零件编码" : "空腔嘛", scanInfo);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//验证失败
|
|
|
|
|
if (!stepResult.isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
|
|
|
|
|
|
|
|
|
// stepResult.msg(String.format("当前%s%s!", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(Integer.valueOf(cellMessageSorce)), scanInfo));
|
|
|
|
|
return null;
|
|
|
|
|
//封装产出零件信息信息
|
|
|
|
|
if (CollectionUtils.isEmpty(productionPartContextList)) productionPartContextList = new ArrayList<>();
|
|
|
|
|
productionPartContextList = partDataMapSaveStepService.getProductionPartContext(reqBean, productionProcessContext, productionPartContextList, (Map<String, MesPart>) stepResult.getObj(), readList);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//验证是否全部为空腔
|
|
|
|
|
if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前产成零件信息全部为空腔,已清除当前的空腔数据!");
|
|
|
|
|
|
|
|
|
|
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, List<String> partNoList, Map<String, MesPart> partDataMap, List<String> chooseList) {
|
|
|
|
|
List<String> filterList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !partDataMap.containsKey(o))).collect(Collectors.toList());
|
|
|
|
|
//保存设备当前一轮工序的产出零件信息
|
|
|
|
|
productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
|
|
|
|
|
|
|
|
|
|
//扫描模式下判断当前是否满足设备腔数
|
|
|
|
|
if (CollectionUtils.isEmpty(chooseCavityPart)) {
|
|
|
|
|
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
|
|
|
|
if (cellEquipContext.getCavity().compareTo(productionPartContextList.size()) > 0) return stepDynamicsCompleteAndSendMsgReturn(
|
|
|
|
|
reqBean, resultBean.writeDbLog().scanInfo(scanInfo),
|
|
|
|
|
stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
|
|
|
|
|
String.format("当前%s验证成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", suffix, cellEquipContext.getCavity(), cellEquipContext.getCavity() - productionPartContextList.size()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//验证错误 抛出异常
|
|
|
|
|
if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(partDataMap) ? partNoList.toString() : filterList.toString()));
|
|
|
|
|
//存储展示组件MODULE_CONTENT内容
|
|
|
|
|
productionDispatchContextStepService.dispatchModuleContentContext(reqBean, partDataMapSaveStepService.getModuleContextData2PartNo(reqBean, productionPartContextList));
|
|
|
|
|
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
|
|
|
|
|
chooseList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o, partDataMap.get(o).getPartName())));
|
|
|
|
|
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(scanInfo), stepResult, String.format("当前%s验证成功!", suffix));
|
|
|
|
|
|
|
|
|
|
return productionPartContextList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|