forked from I3-YF/i3plus-mes-pcn-yfai
根据读取条码生成条码;保存条码与工单对应关系;装配件获取匹配工单 三个工步 第一版提交
parent
3967b7acfd
commit
c06eb67236
@ -0,0 +1,111 @@
|
||||
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.MesEquipVariableCollectContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderReductionSource;
|
||||
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.MesWorkOrderReductionSourceRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 装配件获取匹配工单工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesBarcodeWithWorkOrderRelationFindStepService")
|
||||
public class MesBarcodeWithWorkOrderRelationFindStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderReductionSourceRepository workOrderReductionSourceRepository;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文扫/读信息:装配件条码
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
|
||||
//搜集装配件条码
|
||||
List<String> assemblySnList = CollectionUtils.isEmpty(equipVariableCollectContextList) ? null :
|
||||
equipVariableCollectContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipVariableValue()))).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
|
||||
|
||||
//没有待验证的装配件条码
|
||||
if (CollectionUtils.isEmpty(assemblySnList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前没有需要验证的装配件条码!");
|
||||
|
||||
try {
|
||||
//查询条码与工单对应关系【在前道工序中作为主条码写入次关系表】
|
||||
Map<String, List<MesWorkOrderReductionSource>> workOrderReductionSourceMap = getWorkOrderReductionSourceMap(reqBean.getOrganizeCode(), assemblySnList);
|
||||
if (CollectionUtils.isEmpty(workOrderReductionSourceMap))
|
||||
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("读取的装配件条码%s未获取到匹配工单!", assemblySnList.toString()));
|
||||
|
||||
//用于写入加工单
|
||||
equipVariableCollectContextList = new ArrayList<>();
|
||||
for (Map.Entry<String, List<MesWorkOrderReductionSource>> entry : workOrderReductionSourceMap.entrySet()) {
|
||||
if (null == entry) continue;
|
||||
//取最新的数据
|
||||
MesWorkOrderReductionSource workOrderReductionSource = entry.getValue().stream()
|
||||
.filter(o -> null != o).sorted(Comparator.comparing(MesWorkOrderReductionSource::getCreateDatetime).reversed()).collect(Collectors.toList()).get(0);
|
||||
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), workOrderReductionSource.getWorkOrderNo(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()));
|
||||
}
|
||||
|
||||
//保存上下文扫/读信息:加工单
|
||||
productionDispatchContextStepService.dispatchScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
|
||||
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("读取的装配件条码%s获取到匹配工单%s!",
|
||||
assemblySnList.toString(), equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString()),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
|
||||
//加工单验证工步 【非排序】
|
||||
stepResult = ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckNosortStepService")).executeInState(reqBean);
|
||||
|
||||
} finally {
|
||||
|
||||
//验证失败后, 删除上下文扫/读信息:装配件条码
|
||||
if (!stepResult.isCompleted()) productionDispatchContextStepService.removeScanAssemblySnContext(reqBean);
|
||||
|
||||
}
|
||||
|
||||
return stepResult;
|
||||
|
||||
}
|
||||
|
||||
//查询条码与工单对应关系【在前道工序中作为主条码写入次关系表】
|
||||
private Map<String, List<MesWorkOrderReductionSource>> getWorkOrderReductionSourceMap(String organizeCode, List<String> assemblySnList) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
if (assemblySnList.size() == 1) DdlPreparedPack.getStringEqualPack(assemblySnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean);
|
||||
else DdlPreparedPack.getInPackList(assemblySnList, MesPcnExtConstWords.PRODUCT_SN, packBean);
|
||||
List<MesWorkOrderReductionSource> workOrderReductionSourceList = workOrderReductionSourceRepository.findByHqlWhere(packBean);
|
||||
return CollectionUtils.isEmpty(workOrderReductionSourceList) ? null :
|
||||
workOrderReductionSourceList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderReductionSource::getProductSn));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,97 @@
|
||||
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.MesProdRuleContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderReductionSource;
|
||||
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.MesWorkOrderReductionSourceRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 保存条码与工单对应关系工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesBarcodeWithWorkOrderRelationSaveStepService")
|
||||
public class MesBarcodeWithWorkOrderRelationSaveStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderReductionSourceRepository workOrderReductionSourceRepository;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//获取上下文产品加工规则数据信息集合
|
||||
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
||||
if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!");
|
||||
|
||||
//获取上下文产出条码数据信息集合
|
||||
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
|
||||
if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!");
|
||||
|
||||
//验证产出条码是否匹配工单
|
||||
Optional<MesProductionPsOutContext> optional = productionPsOutContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getWorkOrderNo()))).findFirst();
|
||||
if (null != optional && optional.isPresent()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前产出零件条码信息未匹配工单,请重置工序解决!");
|
||||
|
||||
Map<Integer, MesProdRuleContext> prMap = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o));
|
||||
|
||||
productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveBarcodeWithWorkOrderRelation(reqBean, o, prMap.get(o.getForeignKey())));
|
||||
|
||||
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存条码与工单对应关系成功!");
|
||||
|
||||
}
|
||||
|
||||
private void saveBarcodeWithWorkOrderRelation(StationRequestBean reqBean, MesProductionPsOutContext productionPsOutContext, MesProdRuleContext prodRuleContext) {
|
||||
MesWorkOrderReductionSource workOrderReductionSource = new MesWorkOrderReductionSource();
|
||||
workOrderReductionSource.setWorkOrderNo(productionPsOutContext.getWorkOrderNo());
|
||||
workOrderReductionSource.setProductSn(productionPsOutContext.getProductSn());
|
||||
workOrderReductionSource.setPartNo(productionPsOutContext.getPartNo());
|
||||
workOrderReductionSource.setPartName(productionPsOutContext.getPartName());
|
||||
workOrderReductionSource.setAreaCode(reqBean.getAreaCode());
|
||||
workOrderReductionSource.setWorkCenterCode(reqBean.getWorkCenterCode());
|
||||
workOrderReductionSource.setProductionRecordId(prodRuleContext.getProductionRecordId());
|
||||
// workOrderReductionSource.setQty();
|
||||
// workOrderReductionSource.setSourceType(10);
|
||||
// workOrderReductionSource.setSourceStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
workOrderReductionSource.setOrganizeCode(reqBean.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(workOrderReductionSource, reqBean.getUserInfo());
|
||||
workOrderReductionSourceRepository.insert(workOrderReductionSource);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
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.pojo.context.MesEquipVariableCollectContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
|
||||
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.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 根据读取条码生成零件条码工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesProductSnGenerateByReadStepService")
|
||||
public class MesProductSnGenerateByReadStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文产品加工规则数据信息集合
|
||||
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
||||
if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!");
|
||||
|
||||
//获取上下文扫/读信息:主条码
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanProductSnContext(reqBean);
|
||||
|
||||
//没有待验证的主条码
|
||||
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前没有需要验证的主条码!");
|
||||
|
||||
//清除本次已获取得到的主条码信息
|
||||
productionDispatchContextStepService.removeScanProductSnContext(reqBean);
|
||||
|
||||
//搜集主条码值
|
||||
List<String> productSnList = equipVariableCollectContextList.stream().filter(
|
||||
o -> (null != o && !StringUtils.isEmpty(o.getEquipVariableValue()))).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isEmpty(productSnList) || productSnList.size() < prodRuleContextList.size()) {
|
||||
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
|
||||
String.format("当前读取到主条码个数[%s]不满足当前实际产品腔数[%s]", CollectionUtils.isEmpty(productSnList) ? MesPcnExtConstWords.ZERO : productSnList.size(), prodRuleContextList.size()));
|
||||
}
|
||||
|
||||
//封装上下文进料零件条码信息集合
|
||||
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
|
||||
Integer index = 0;
|
||||
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
|
||||
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getForeignKey())) continue;
|
||||
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), productSnList.get(index)).foreignKey(prodRuleContext.getForeignKey()));
|
||||
index ++;
|
||||
}
|
||||
|
||||
//保存进料主条码数据
|
||||
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList);
|
||||
|
||||
//调用生成零件条码工步
|
||||
return ((IStepService) SpringContextsUtil.getBean("mesProductSnGenerateStepService")).executeInState(reqBean);
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue