diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 438a58e..7728324 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -914,7 +914,21 @@ public class MesWorkOrderService extends BaseMesService implements double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getReportedQty()); mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); if (mesWorkOrder.getReportedQty() > mesWorkOrder.getQty()) { - MesException.throwMesBusiException("工单报工数量大于工单数量【%s】,不允许报工", mesWorkOrder.getQty()); + //查询产线信息 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(), "workCenterCode", ddlPackBean); + MesWorkCenter workCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); + // 以下则是超工单逻辑 + // 如果产线中没有配置超工单,则直接阻断 + if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) { + MesException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty()); + } + // 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断 + double rate = (mesWorkOrder.getReportedQty() - mesWorkOrder.getQty())/mesWorkOrder.getQty(); + if (rate > workCenter.getOrderRate()) { + MesException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate()); + } + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) { mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else {