条码生成工步

tags/yfai-pcn-ext-v1.0
王杰 11 months ago
parent 3ee38c6e7a
commit 74d5cb101b

@ -321,13 +321,25 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) continue;
//验证进出一致, 进料工单必须与产出工单一致
if (!StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) && !StringUtils.isEmpty(productionPsInContext.getWorkOrderNo()) &&
productionPartContext.getPartNo().equals(productionPsInContext.getPartNo()) && !productionPsInContext.getWorkOrderNo().equals(productionPartContext.getWorkOrderNo())) {
if (productionPsInContext.getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) == 0) productionPsInContext.busiCheckToDelete();
else productionPsInContextList.forEach(o -> o.busiCheckToDelete());
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(productionPsInContext.getProductSn()), stepResult, String.format("主条码[%s]零件号[%s]关联的加工单[%s]与产出零件[%s]关联的加工单[%s]不一致",
productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), productionPsInContext.getWorkOrderNo(), productionPartContext.getPartNo(), productionPartContext.getWorkOrderNo()));
//验证进出一致
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && productionPsInContext.getPartNo().equals(productionPartContext.getPartNo())) {
//进料工单必须与产出工单一致
if (!StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) && !StringUtils.isEmpty(productionPsInContext.getWorkOrderNo()) && !productionPsInContext.getWorkOrderNo().equals(productionPartContext.getWorkOrderNo())) {
if (productionPsInContext.getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) == 0) productionPsInContext.busiCheckToDelete();
else productionPsInContextList.forEach(o -> o.busiCheckToDelete());
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(productionPsInContext.getProductSn()), stepResult, String.format("主条码[%s]零件号[%s]关联的加工单[%s]与产出零件[%s]关联的加工单[%s]不一致",
productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), productionPsInContext.getWorkOrderNo(), productionPartContext.getPartNo(), productionPartContext.getWorkOrderNo()));
}
//进料存在工单且已经过某工序生产, 不能匹配无工单的产出零件
if (StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) && !StringUtils.isEmpty(productionPsInContext.getWorkOrderNo()) && !StringUtils.isEmpty(productionPsInContext.getProcessCode())) {
if (productionPsInContext.getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) == 0) productionPsInContext.busiCheckToDelete();
else productionPsInContextList.forEach(o -> o.busiCheckToDelete());
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(productionPsInContext.getProductSn()), stepResult, String.format("主条码[%s]零件号[%s]已关联加工单[%s]且已经过工序[%s]工艺[%s],不支持匹配当前未关联加工单的产出零件[%s]",
productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), productionPsInContext.getWorkOrderNo(), productionPsInContext.getProcessCode(), productionPsInContext.getCraftCode(), productionPartContext.getPartNo()));
}
}
//时效性验证

@ -123,7 +123,8 @@ public class MesProductSnCheckNosortStepService extends BaseStepService {
unknowList.stream().filter(o -> null != o).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
if (CollectionUtils.isEmpty(standardList))
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(unknowList.get(0).getId()));
productionPsInContextList.add(new MesProductionPsInContext(
reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(unknowList.get(0).getId(), unknowList.get(0).getProcessCode(), unknowList.get(0).getCraftCode()));
else {
if (MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != standardList.get(0).getQcStatus())
@ -132,7 +133,9 @@ public class MesProductSnCheckNosortStepService extends BaseStepService {
if (MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() < standardList.get(0).getSnStatus())
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(standardList.get(0).getSnStatus())));
productionPsInContextList.add(new MesProductionPsInContext(workCell, standardList.get(0)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(CollectionUtils.isEmpty(unknowList) ? null : unknowList.get(0).getId()));
MesProductionPsInContext productionPsInContext = new MesProductionPsInContext(workCell, standardList.get(0)).messageSource(equipVariableCollectContext.getMessageSource());
if (!CollectionUtils.isEmpty(unknowList)) productionPsInContext.relateId(unknowList.get(0).getId(), unknowList.get(0).getProcessCode(), unknowList.get(0).getCraftCode());
productionPsInContextList.add(productionPsInContext);
}

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

@ -145,24 +145,25 @@ public class MesProductSnGenerateStepService extends BaseStepService {
MesPart part = partMap.get(prodRuleContext.getOutPartNo());
//加工规则中进料零件与产出零件是否一致
Boolean isSamePart = isSamePart(prodRuleContext.getInPartNo(), prodRuleContext.getOutPartNo());
//进出一致, 无需生成
if (isSamePart) return new MesProductionPsOutContext().copy(produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), null != productionPsInContext ? productionPsInContext.getId() : null), prodRuleContext.getForeignKey());
//判断存在主条码的时候是否此前已生成当前工位的未知条码
MesProduceSn produceSn = (null == productionPsInContext || StringUtils.isEmpty(productionPsInContext.getRelateId())) ? null : produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getRelateId());
if (null == produceSn) produceSn = new MesProduceSn();
produceSn.setProductSn((null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())) ? productionPsInContext.getProductSn() : doGererateSerialNo(reqBean, resultBean, getProduceSnNumberRule(reqBean, resultBean, part), part));
produceSn.setSerialNumber(doGererateSerialNo(reqBean, resultBean, MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE, part));
Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext);
MesProduceSn produceSn;
//进出一致, 不累计工单完成数量 在显示装配件工步中已经验证了 进出一致 进出存在工单则必须一致
if (isSamePart) produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getId());
//未知条码
else if (null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getRelateId())) produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getRelateId());
//生成新条码
else produceSn = new MesProduceSn();
if (StringUtils.isEmpty(produceSn.getProductSn())) {
produceSn.setProductSn((null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())) ? productionPsInContext.getProductSn() : doGererateSerialNo(reqBean, resultBean, getProduceSnNumberRule(reqBean, resultBean, part), part));
produceSn.setCustSn(produceSn.getProductSn());
}
produceSn.setCustSn(produceSn.getProductSn());
if (StringUtils.isEmpty(produceSn.getSerialNumber())) produceSn.setSerialNumber(doGererateSerialNo(reqBean, resultBean, MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE, part));
produceSn.setQty(new Double(1));
//未知状态的需要重置工单相关字段
produceSn.setWorkOrderNo((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getWorkOrderNo() : null);
produceSn.setCustCode((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getCustCode() : null);
produceSn.setCustPartNo((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getCustPartNo() : null);
@ -184,21 +185,21 @@ public class MesProductSnGenerateStepService extends BaseStepService {
produceSn.setShiftCode(prodShiftContext.getShiftCode());
produceSn.setShiftGroup(prodShiftContext.getShiftGroup());
produceSn.setPrintCount(MesPcnExtConstWords.ZERO);
produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
if (StringUtils.isEmpty(produceSn.getPrintCount())) produceSn.setPrintCount(MesPcnExtConstWords.ZERO);
if (StringUtils.isEmpty(produceSn.getPrintStatus())) produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
produceSn.setOrganizeCode(reqBean.getOrganizeCode());
if (StringUtils.isEmpty(produceSn.getId())) ConvertBean.serviceModelInitialize(produceSn, reqBean.getUserInfo());
else ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo());
produceSn.setInWorkCenterTime(produceSn.getModifyDatetime());
if (StringUtils.isEmpty(produceSn.getInWorkCenterTime())) produceSn.setInWorkCenterTime(produceSn.getModifyDatetime());
produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10));
if (StringUtils.isEmpty(produceSn.getId())) produceSn = produceSnRepository.insert(produceSn);
else produceSnRepository.save(produceSn);
return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(produceSn.getWorkOrderNo());
return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(!StringUtils.isEmpty(produceSn.getWorkOrderNo()) && !isSamePart);
}
@ -220,9 +221,12 @@ public class MesProductSnGenerateStepService extends BaseStepService {
return part.getProductMatchRule();
}
private Boolean isSamePart(String inPartNo, String outPartNo) {
if (!StringUtils.isEmpty(inPartNo) && inPartNo.equals(outPartNo)) return true;
else return false;
private Boolean isSamePart(MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext) {
if (null == productionPsInContext) return false;
if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false;
if (null == productionPartContext) return false;
if (!productionPsInContext.getPartNo().equals(productionPartContext.getPartNo())) return false;
return true;
}
}

@ -105,8 +105,15 @@ public class MesProductionPsInContext implements Serializable {
return this;
}
public MesProductionPsInContext relateId(Long relateId) {
public MesProductionPsInContext relateId(Long relateId, String processCode, String craftCode) {
this.relateId = relateId;
if (!StringUtils.isEmpty(processCode)) this.processCode = processCode;
if (!StringUtils.isEmpty(craftCode)) this.craftCode = craftCode;
return this;
}
public MesProductionPsInContext queueId(Long queueId) {
this.relateId = queueId;
return this;
}

@ -38,8 +38,8 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa
return this;
}
public MesProductionPsOutContext isCalcCompleteQty(String workOrderNo) {
if (!StringUtils.isEmpty(workOrderNo)) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
public MesProductionPsOutContext isCalcCompleteQty(Boolean isCalcCompleteQty) {
if (isCalcCompleteQty) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return this;
}

Loading…
Cancel
Save