|
|
@ -153,8 +153,8 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
//零件信息
|
|
|
|
//零件信息
|
|
|
|
MesPart part = partDataMap.get(prodRuleContext.getOutPartNo());
|
|
|
|
MesPart part = partDataMap.get(prodRuleContext.getOutPartNo());
|
|
|
|
|
|
|
|
|
|
|
|
//加工规则中进料零件与产出零件是否一致
|
|
|
|
//验证进料零件与产出零件是否一致
|
|
|
|
Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext);
|
|
|
|
Boolean isSamePart = isSamePart(productionPsInContext, productionPartContext, prodRuleContext);
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty());
|
|
|
|
Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty());
|
|
|
|
|
|
|
|
|
|
|
@ -173,15 +173,18 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
produceSn.setCustSn(produceSn.getProductSn());
|
|
|
|
produceSn.setCustSn(produceSn.getProductSn());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(produceSn.getSerialNumber()))
|
|
|
|
if (StringUtils.isEmpty(produceSn.getSerialNumber())) {
|
|
|
|
produceSn.setSerialNumber(doGererateSerialNo(reqBean, resultBean,
|
|
|
|
produceSn.setSerialNumber(doGererateSerialNo(reqBean, resultBean, generateGenSerialNoModel(reqBean, resultBean, MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE, part)));
|
|
|
|
generateGenSerialNoModel(reqBean, resultBean, MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE, part)));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
produceSn.setQty(new Double(1));
|
|
|
|
produceSn.setQty(new Double(1));
|
|
|
|
|
|
|
|
|
|
|
|
produceSn.setWorkOrderNo((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getWorkOrderNo() : null);
|
|
|
|
if (!StringUtils.isEmpty(prodRuleContext.getWorkOrderNo())) produceSn.setWorkOrderNo(prodRuleContext.getWorkOrderNo());
|
|
|
|
produceSn.setCustCode((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getCustCode() : null);
|
|
|
|
|
|
|
|
produceSn.setCustPartNo((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getCustPartNo() : null);
|
|
|
|
if (null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) {
|
|
|
|
|
|
|
|
produceSn.setCustCode(productionPartContext.getCustCode());
|
|
|
|
|
|
|
|
produceSn.setCustPartNo(productionPartContext.getCustPartNo());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
produceSn.setAreaCode(reqBean.getAreaCode());
|
|
|
|
produceSn.setAreaCode(reqBean.getAreaCode());
|
|
|
|
produceSn.setWorkCenterCode(reqBean.getWorkCenterCode());
|
|
|
|
produceSn.setWorkCenterCode(reqBean.getWorkCenterCode());
|
|
|
@ -219,7 +222,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
produceSn = produceSnExtService.insert(produceSn);
|
|
|
|
produceSn = produceSnExtService.insert(produceSn);
|
|
|
|
} else produceSnExtService.updateNoSync(produceSn);
|
|
|
|
} else produceSnExtService.updateNoSync(produceSn);
|
|
|
|
|
|
|
|
|
|
|
|
MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty(isCellNoCalcQty, produceSn.getWorkOrderNo(), isSamePart, productionPartContext, productionPsInContext));
|
|
|
|
MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty(isCellNoCalcQty, isSamePart, productionPartContext));
|
|
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- MesProduceSn:{} --- MesProductionPsOutContext:{}",
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- MesProduceSn:{} --- MesProductionPsOutContext:{}",
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
@ -253,13 +256,17 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
return part.getProductMatchRule();
|
|
|
|
return part.getProductMatchRule();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//加工规则中进料零件与产出零件是否一致
|
|
|
|
//验证进料零件与产出零件是否一致
|
|
|
|
private Boolean isSamePart(MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext) {
|
|
|
|
private Boolean isSamePart(MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext, MesProdRuleContext prodRuleContext) {
|
|
|
|
if (null == productionPsInContext) return false;
|
|
|
|
if (null == productionPsInContext) return false;
|
|
|
|
if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false;
|
|
|
|
if (StringUtils.isEmpty(productionPsInContext.getPartNo())) return false;
|
|
|
|
if (null == productionPartContext) return false;
|
|
|
|
if (null != productionPartContext) {
|
|
|
|
if (!productionPsInContext.getPartNo().equals(productionPartContext.getPartNo())) return false;
|
|
|
|
if (!productionPsInContext.getPartNo().equals(productionPartContext.getPartNo())) return false;
|
|
|
|
return true;
|
|
|
|
else return true;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (!productionPsInContext.getPartNo().equals(prodRuleContext.getOutPartNo())) return false;
|
|
|
|
|
|
|
|
else return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
//工位是否不累计工单完成数
|
|
|
@ -268,20 +275,12 @@ public class MesProductSnGenerateStepService extends BaseStepService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//判断是否累计工单完成数
|
|
|
|
//判断是否累计工单完成数
|
|
|
|
private Boolean isCalcCompleteQty(Boolean isCellNoCalcQty, String workOrderNo, Boolean isSamePart, MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext) {
|
|
|
|
private Boolean isCalcCompleteQty(Boolean isCellNoCalcQty, Boolean isSamePart, MesProductionPartContext productionPartContext) {
|
|
|
|
|
|
|
|
//工位不消耗工单完成数
|
|
|
|
if (isCellNoCalcQty) return false;
|
|
|
|
if (isCellNoCalcQty) return false;
|
|
|
|
if (StringUtils.isEmpty(workOrderNo)) return false;
|
|
|
|
//未选工单场景
|
|
|
|
if (checkIsSameWorkOrder(isSamePart, productionPartContext, productionPsInContext)) return false;
|
|
|
|
if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) return false;
|
|
|
|
return true;
|
|
|
|
return isSamePart ? false : true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//进出一致的情况下判断进出是否都存在工单
|
|
|
|
|
|
|
|
private Boolean checkIsSameWorkOrder(Boolean isSamePart, MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext) {
|
|
|
|
|
|
|
|
if (!isSamePart) return false;
|
|
|
|
|
|
|
|
//进出零件一致则无需验证进出的对象为空
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || StringUtils.isEmpty(productionPsInContext.getWorkOrderNo())) return false;
|
|
|
|
|
|
|
|
//无需验证进出的工单是否一致,在匹配加工规则的时候已经验证了必须一致
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|