| | |
| | | |
| | | BigDecimal previousCompleteQty = |
| | | previousWorkOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : previousWorkOrder.getCompleteQuantity(); |
| | | if (currentReportedQty.add(reportQty).compareTo(previousCompleteQty) > 0) { |
| | | throw new ServiceException("本次报工数量超过上道工序可流转数量"); |
| | | } |
| | | // if (currentReportedQty.add(reportQty).compareTo(previousCompleteQty) > 0) { |
| | | // throw new ServiceException("本次报工数量超过上道工序可流转数量"); |
| | | // } |
| | | |
| | | List<ProductProcessRouteItem> previousItems = productProcessRouteItemMapper.selectList( |
| | | Wrappers.<ProductProcessRouteItem>lambdaQuery() |
| | |
| | | .filter(Objects::nonNull) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | } |
| | | if (productWorkOrder.getPlanQuantity() != null |
| | | && currentWorkOrderReportedQty.add(reportQty).compareTo(productWorkOrder.getPlanQuantity()) > 0) { |
| | | throw new ServiceException("本次报工数量超过工单可报数量"); |
| | | } |
| | | // if (productWorkOrder.getPlanQuantity() != null |
| | | // && currentWorkOrderReportedQty.add(reportQty).compareTo(productWorkOrder.getPlanQuantity()) > 0) { |
| | | // throw new ServiceException("本次报工数量超过工单可报数量"); |
| | | // } |
| | | |
| | | // 第五步:生成报工单号并确定报工人信息 |
| | | String productNo; |
| | |
| | | // 第七步-1:投入数量强制取前端传入的 bomInputQty |
| | | BigDecimal inputBaseQty = bomInputQty; |
| | | |
| | | // 第七步-2:光检外观和包装工序不扣减库存 |
| | | String currentProcessName = productProcess.getName() == null ? "" : productProcess.getName().trim(); |
| | | boolean shouldSkipStockDeduction = PROCESS_OPTICAL_INSPECTION.equals(currentProcessName) |
| | | || PROCESS_PACKAGING.equals(currentProcessName); |
| | | |
| | | for (ProductStructureDto productStructureDto : productStructureDtos) { |
| | | if (productStructureDto.getProductModelId() == null) { |
| | | throw new ServiceException("投入物料产品型号不能为空"); |
| | |
| | | productionProductInput.setProductMainId(productionProductMain.getId()); |
| | | productionProductInputMapper.insert(productionProductInput); |
| | | |
| | | stockUtils.substractStock( |
| | | productStructureDto.getProductModelId(), |
| | | needQty, |
| | | StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), |
| | | productionProductMain.getId(), |
| | | null, |
| | | null |
| | | ); |
| | | if (!shouldSkipStockDeduction) { |
| | | stockUtils.substractStock( |
| | | productStructureDto.getProductModelId(), |
| | | needQty, |
| | | StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), |
| | | productionProductMain.getId(), |
| | | null, |
| | | null |
| | | ); |
| | | } |
| | | } |
| | | |
| | | // 第八步:写产出记录并计算本次合格数量 |
| | |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | | } |