Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-pcn-ext-v1.0
jun 10 months ago
commit b599d1b07a

@ -142,7 +142,7 @@ public class MesAssemblySaveNosortStepService extends BaseStepService {
if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId()); if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId());
if (productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) if (productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)
productionCustomContextStepService.saveRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); productionCustomContextStepService.saveRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext);
} }

@ -91,7 +91,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
//匹配失败需要清除本次扫描/读取信息 //匹配失败需要清除本次扫描/读取信息
if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, productionPartContextList, productionPsInContextList)) return stepResult; if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList))
return stepResult.nextTriggerEvent(CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ORDER : (!StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ORDER : MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN));
if (prodRuleContextList.size() != initSize) { if (prodRuleContextList.size() != initSize) {
//保存上下文产品加工规则信息集合 //保存上下文产品加工规则信息集合
@ -168,7 +169,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey()))); copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey())));
} }
// 默认头道才有超工单 // 默认头道才有超工单
validSuperWorkOrder(reqBean, productionPartContextList,null,workCenter, stepResult, resultBean); validSuperWorkOrder(reqBean, productionPartContextList, null, workCenter, stepResult, resultBean);
return stepResult; return stepResult;
} }
@ -206,31 +207,21 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
double complateQty = mesWorkOrder.getCompleteQty() + productionPartContexts.size(); double complateQty = mesWorkOrder.getCompleteQty() + productionPartContexts.size();
double qty = mesWorkOrder.getQty(); double qty = mesWorkOrder.getQty();
// 如果预完成数量 小于等于工单数量,则直接过 // 如果预完成数量 小于等于工单数量,则直接过
if (complateQty <= qty) { if (complateQty <= qty) continue;
continue;
}
// 以下则是超工单逻辑 // 以下则是超工单逻辑
// 如果产线中没有配置超工单,则直接阻断 // 如果产线中没有配置超工单,则直接阻断
if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) { if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) {
productionPartContextList.forEach(o -> o.busiCheckToDelete()); productionPartContextList.forEach(o -> o.busiCheckToDelete());
if (!CollectionUtils.isEmpty(productionPsInContextList)) { if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete());
productionPsInContextList.forEach(o -> o.busiCheckToDelete()); return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],且未配置超工单!", workOrder, mesWorkOrder.getQty(), complateQty));
}
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
"请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],且未配置超工单",
workOrder, mesWorkOrder.getQty(), complateQty));
} }
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断 // 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
double rate = (complateQty - qty)/qty; double rate = (complateQty - qty)/qty;
if (rate > workCenter.getOrderRate()) { if (rate > workCenter.getOrderRate()) {
if (CollectionUtils.isEmpty(productionPsInContextList)) { productionPartContextList.forEach(o -> o.busiCheckToDelete());
productionPartContextList.forEach(o -> o.busiCheckToDelete()); if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete());
} else { return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],配置了超工单,但超过了比例[%s]!", workOrder, mesWorkOrder.getQty(), complateQty, workCenter.getOrderRate()));
productionPsInContextList.forEach(o -> o.busiCheckToDelete());
}
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
"请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],配置了超工单,但超过了比例[%s]",
workOrder, mesWorkOrder.getQty(), complateQty, workCenter.getOrderRate()));
} }
} }
return stepResult; return stepResult;
@ -484,12 +475,13 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
} }
//清除本次扫描/读取信息 有进料【只】需要清除进料,否则存在产出零件需要清除产出零件 【只需要清除被标记的数据】 //清除本次扫描/读取信息 有进料【只】需要清除进料,否则存在产出零件需要清除产出零件 【只需要清除被标记的数据】
private Boolean doBusiCheckToDelete(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) { private Boolean doBusiCheckToDelete(StationRequestBean reqBean, StepResult stepResult, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, if (!CollectionUtils.isEmpty(productionPsInContextList) && StringUtils.isEmpty(stepResult.getObj())) {
productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()));
else if (!CollectionUtils.isEmpty(productionPartContextList)) { } else if (!CollectionUtils.isEmpty(productionPartContextList)) {
productionDispatchContextStepService.saveProductionPartContext(reqBean, if (!StringUtils.isEmpty(stepResult.getObj())) productionDispatchContextStepService.deleteProductionPsInContext(reqBean);
productionPartContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); productionDispatchContextStepService.deleteProductionPartContext(reqBean);
productionDispatchContextStepService.deleteProdRuleDataContext(reqBean);
productionProcessContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); productionProcessContextStepService.deleteFunctionChooseCavityOrderContext(reqBean);
} }
return true; return true;

@ -163,8 +163,12 @@ public class MesProductResultReadStepService extends BaseStepService {
productionCustomContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); productionCustomContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//设备加工失败 //设备加工失败
if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) {
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), stepResult, String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription())); this.sendMessage(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
return stepResult.isCompleted(false);
}
//设备加工成功/零件报废/设备加工可疑 均返回true; 零件报废/设备加工可疑标记错误信息 //设备加工成功/零件报废/设备加工可疑 均返回true; 零件报废/设备加工可疑标记错误信息
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), stepResult.obj(entry.getKey()), true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), stepResult.obj(entry.getKey()), true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE,
MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue().equals(entry.getKey()) ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue().equals(entry.getKey()) ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT,

@ -114,7 +114,6 @@ public class MesProductSnSaveStepService extends BaseStepService {
produceSn.setCraftCode(productionProcessContext.getCraftCode()); produceSn.setCraftCode(productionProcessContext.getCraftCode());
//TODO 获取下个工艺代码 //TODO 获取下个工艺代码
//produceSn.setNextCraftCode(); //produceSn.setNextCraftCode();
//TODO 重新覆盖打印模版
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());

@ -29,30 +29,35 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
@Autowired @Autowired
private IFsmCommonService fsmCommonService; private IFsmCommonService fsmCommonService;
//工序开始
@Override @Override
public Boolean doProcessStart(StationRequestBean requestBean) { public Boolean doProcessStart(StationRequestBean requestBean) {
//保存上下文工位扫描监控信息 //保存上下文工位扫描监控信息
return productionProcessContextStepService.saveScanMonitorContext(requestBean); productionProcessContextStepService.saveScanMonitorContext(requestBean);
//清除工步客制化区域数据【装配件清单】
this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()));
return true;
} }
//工序结束
@Override @Override
public Boolean doProcessComplete(StationRequestBean requestBean) { public Boolean doProcessComplete(StationRequestBean requestBean) {
//执行跳过工序二开实现逻辑 //清除上下文中的所有业务数据
doJumpProcess(requestBean); productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean);
//发送工序完成音 //发送工序完成音
this.sendMessage(requestBean, new StationResultBean().resultObj(MesPcnExtConstWords.PROCESS_COMPLETE).busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue())); this.sendMessage(requestBean, new StationResultBean().resultObj(MesPcnExtConstWords.PROCESS_COMPLETE).busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue()));
return true; return true;
} }
//重置工序
@Override @Override
public Boolean doJumpProcess(StationRequestBean requestBean) { public Boolean doJumpProcess(StationRequestBean requestBean) {
//清除上下文中的所有业务数据 //清除上下文中的所有业务数据
productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean); productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean);
//清除工步客制化区域数据【装配件清单】
this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()));
return true; return true;
} }
//客户端下线
@Override @Override
public Boolean doOffLine(StationRequestBean requestBean) { public Boolean doOffLine(StationRequestBean requestBean) {
//删除当前状态点 //删除当前状态点
@ -64,14 +69,13 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
return true; return true;
} }
//工位流程重置 【父类已经调用: 删除当前状态点; 清除工位工序流程; TASK_COMPLETE】
@Override @Override
public Boolean fsmReset(StationRequestBean requestBean) { public Boolean fsmReset(StationRequestBean requestBean) {
//清除上下文中的所有业务数据 //清除上下文中的所有业务数据
productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean); productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean);
//清除上下文中的所有基础数据 //清除上下文中的所有基础数据
productionProcessContextStepService.doFlushProductionProcessContext(requestBean); productionProcessContextStepService.doFlushProductionProcessContext(requestBean);
//清除工步客制化区域数据【装配件清单】
this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()));
return true; return true;
} }

@ -26,7 +26,7 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
private Integer isRepeat; private Integer isRepeat;
@ApiParam(value = "是否可复用条码是否写入上下文进行复用") @ApiParam(value = "是否可复用条码是否写入上下文进行复用")
private Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); private Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
@ApiParam(value = "是否忽略回车") @ApiParam(value = "是否忽略回车")
private Integer isIgnoreEntry; private Integer isIgnoreEntry;
@ -60,7 +60,7 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
if (!StringUtils.isEmpty(assemblySn)) { if (!StringUtils.isEmpty(assemblySn)) {
this.assemblySn = assemblySn; this.assemblySn = assemblySn;
this.isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); this.isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue();
} }

Loading…
Cancel
Save