tags/yfai-pcn-ext-v1.0
王杰 11 months ago
parent c160012a19
commit 778de8b8fe

@ -41,8 +41,6 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (productSnList.size() == 1) DdlPreparedPack.getStringEqualPack(productSnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean);
else DdlPreparedPack.getInPackList(productSnList, MesPcnExtConstWords.PRODUCT_SN, packBean);
//根据创建时间倒叙查询零件条码
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
return produceSnRepository.findByHqlWhere(packBean);
}
@ -53,8 +51,7 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
List<MesProduceSn> produceSnList = getProduceSnList(organizeCode, productSnList);
//先排序再分组
return CollectionUtils.isEmpty(produceSnList) ? null :
produceSnList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.groupingBy(MesProduceSn::getProductSn));
return CollectionUtils.isEmpty(produceSnList) ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProduceSn::getProductSn));
}

@ -20,9 +20,7 @@ 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.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -42,7 +40,6 @@ public class MesProductSnCheckNosortStepService extends BaseStepService {
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -75,19 +72,13 @@ public class MesProductSnCheckNosortStepService extends BaseStepService {
//搜集主条码值
List<String> productSnList = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
//验证上下文中主条码的有效性
List<MesProduceSn> produceSnList = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList);
if (!stepResult.isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("验证失败!原因:%s!", stepResult.getMsg()));
//获取上下文的工位
MesWorkCell workCell = productionProcessContext.getWorkCell();
Map<String, MesProduceSn> produceSnMap = CollectionUtils.isEmpty(produceSnList) ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o));
//封装 读/扫主条件信息到进料主条码数据信息中
//验证上下文中主条码的有效性 封装 读/扫主条件信息到进料主条码数据信息中
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
if (!CollectionUtils.isEmpty(productSnList)) productSnList.stream().filter(o -> null != o).forEach(o -> createProductionPsInContext(workCell, produceSnMap, o, productionPsInContextList));
if (!checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, workCell, productSnList, productionPsInContextList).isCompleted())
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("验证失败!原因:%s!", stepResult.getMsg()));
//获取进料主条码数据信息
List<MesProductionPsInContext> productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean);
@ -105,42 +96,46 @@ public class MesProductSnCheckNosortStepService extends BaseStepService {
}
//获取进料主条码数据信息
private List<MesProduceSn> checkProduceSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<String> productSnList) {
private StepResult checkProduceSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
MesProductionProcessContext productionProcessContext, MesWorkCell workCell, List<String> productSnList, List<MesProductionPsInContext> productionPsInContextList) {
//根据零件条码查询零件条码信息
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), productSnList);
Map<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), productSnList);
for (String productSn : productSnList) {
if (StringUtils.isEmpty(productSn)) continue;
if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(productSn)) productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), productSn));
else createProductionPsInContext(reqBean, resultBean, stepResult, workCell, productSn, produceSnMap.get(productSn), productionPsInContextList);
}
return stepResult;
}
if (CollectionUtils.isEmpty(produceSnList)) return null;
private StepResult createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
MesWorkCell workCell, String productSn, List<MesProduceSn> produceSnList, List<MesProductionPsInContext> productionPsInContextList) {
//循环获取进料主条码数据信息
produceSnList.stream().filter(o -> null != o).forEach(o -> checkProduceSnValid(reqBean, stepResult, productionProcessContext, o));
String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
return !stepResult.isCompleted() ? null : produceSnList;
List<MesProduceSn> standardList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0)).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
}
List<MesProduceSn> unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList());
//获取进料主条码数据信息
private StepResult checkProduceSnValid(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProduceSn produceSn) {
if (!CollectionUtils.isEmpty(unknowList) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode()))))
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, productSn,
unknowList.stream().filter(o -> null != o).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
if (CollectionUtils.isEmpty(standardList)) productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), productSn).relateId(unknowList.get(0).getId()));
else {
if (MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != produceSn.getQcStatus())
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, produceSn.getProductSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
if (MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != standardList.get(0).getQcStatus())
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, productSn, MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(standardList.get(0).getQcStatus())));
if (MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() < produceSn.getSnStatus() ||
(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue() == produceSn.getSnStatus() && (!produceSn.getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !produceSn.getWorkCellCode().equals(reqBean.getWorkCellCode()))))
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, produceSn.getProductSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
if (MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() < standardList.get(0).getSnStatus())
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, productSn, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(standardList.get(0).getSnStatus())));
return stepResult;
productionPsInContextList.add(new MesProductionPsInContext(workCell, standardList.get(0)).relateId(CollectionUtils.isEmpty(unknowList) ? null : unknowList.get(0).getId()));
}
}
//封装 读/扫主条件信息到进料主条码数据信息中
private void createProductionPsInContext(MesWorkCell workCell, Map<String, MesProduceSn> produceSnMap, String productSn, List<MesProductionPsInContext> productionPsInContextList) {
MesProductionPsInContext productionPsInContext = new MesProductionPsInContext(workCell,
(!CollectionUtils.isEmpty(produceSnMap) && !StringUtils.isEmpty(productSn) && produceSnMap.containsKey(productSn)) ? produceSnMap.get(productSn) : null, productSn);
return stepResult;
productionPsInContextList.add(productionPsInContext);
}
}

@ -90,7 +90,7 @@ public class MesProductSnCheckSortStepService extends BaseStepService {
//封装 读/扫主条件信息到进料主条码数据信息中
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
if (!CollectionUtils.isEmpty(productSnList)) productSnList.stream().filter(o -> null != o).forEach(o -> productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnMap.get(o).get(0), queueOrderMap.get(o).get(0).getId())));
if (!CollectionUtils.isEmpty(productSnList)) productSnList.stream().filter(o -> null != o).forEach(o -> productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnMap.get(o).get(0)).relateId(queueOrderMap.get(o).get(0).getId())));
//获取进料主条码数据信息
List<MesProductionPsInContext> productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean);

@ -163,6 +163,8 @@ public class MesProductSnReadStepService extends BaseStepService {
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前读取到设备[%s]主条码全部为空腔,持续监听中...", cellEquipContext.getEquipmentCode())),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
//根据读取条码分组数据
Map<String, List<MesEquipVariableCollectContext>> produceSnCollectMap = productSnList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCollectContext::getEquipVariableValue));

@ -28,8 +28,8 @@ public class MesProductionPsInContext implements Serializable {
@ApiParam("零件条码ID")
private Long id;
@ApiParam("队列ID")
private Long queueId;
@ApiParam("未知条码ID/队列ID")
private Long relateId;
@ApiParam("非排序进料零件条码/排序工单号")
private String productSn;
@ -106,16 +106,19 @@ public class MesProductionPsInContext implements Serializable {
return this;
}
public MesProductionPsInContext(MesWorkCell workCell, MesProduceSn produceSn, String productSn) {
if (null != produceSn) BeanUtils.copyProperties(produceSn, this);
else this.productSn = productSn;
if (!StringUtils.isEmpty(this.getId())) this.isCheck(workCell);
public MesProductionPsInContext relateId(Long relateId) {
this.relateId = relateId;
return this;
}
public MesProductionPsInContext(String organizeCode, String productSn) {
this.organizeCode = organizeCode;
this.productSn = productSn;
}
public MesProductionPsInContext(MesWorkCell workCell, MesProduceSn produceSn, Long queueId) {
if (null != produceSn) BeanUtils.copyProperties(produceSn, this);
if (!StringUtils.isEmpty(queueId)) this.queueId = queueId;
if (!StringUtils.isEmpty(this.getId())) this.isCheck(workCell);
public MesProductionPsInContext(MesWorkCell workCell, MesProduceSn produceSn) {
BeanUtils.copyProperties(produceSn, this);
this.isCheck(workCell);
}
}

Loading…
Cancel
Save