gongchunyi
5 小时以前 ada06626c3f81258e01837d09a10135f8ec3232f
src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
@@ -241,20 +241,12 @@
            throw new ServiceException("报工失败,数据存储失败");
        }
        ProductionProductInput productionProductInput = new ProductionProductInput();
        productionProductInput.setProductMainId(productionProductMain.getId());
        productionProductInput.setProductModelId(dto.getProductId());
        productionProductInput.setQuantity(dto.getQuantity());
        result = productionProductInputService.save(productionProductInput);
        if (!result) {
            throw new ServiceException("报工失败,生产产出存储失败");
        }
        ProductionProductOutput productionProductOutput = new ProductionProductOutput();
        productionProductOutput.setProductMainId(productionProductMain.getId());
        productionProductOutput.setProductModelId(dto.getProductId());
        productionProductOutput.setQuantity(dto.getQualifiedQuantity());
        productionProductOutput.setScrapQty(dto.getUnqualifiedQuantity());
        productionProductOutput.setTotalQuantity(dto.getQuantity());
        result = productionProductOutputService.save(productionProductOutput);
        if (!result) {
            throw new ServiceException("报工失败,生产产出存储失败");
@@ -276,19 +268,40 @@
            List<ProductionProductRouteItemParamDto> productionProductRouteItemParamDtoList = productRouteItemDto.getProductionProductRouteItemParamDtoList();
            if (productionProductRouteItemParamDtoList != null && !productionProductRouteItemParamDtoList.isEmpty()) {
                for (ProductionProductRouteItemParamDto productRouteItemParamDto : productionProductRouteItemParamDtoList) {
                    ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
                    BeanUtils.copyProperties(productRouteItemParamDto, paramEntity, "id");
                    paramEntity.setProductionProductRouteItemId(productRouteItemEntity.getId());
                    paramEntity.setOrderItemParamId(productRouteItemParamDto.getId());
                    if (paramEntity.getProductId() == null) {
                        ProductionOrderRouteItemParam productionOrderRouteItemParam = productionOrderRouteItemParamService.getById(productRouteItemParamDto.getId());
                        paramEntity.setParamName(productionOrderRouteItemParam.getParamName());
                        paramEntity.setParamType(productionOrderRouteItemParam.getParamType());
                        paramEntity.setParamFormat(productionOrderRouteItemParam.getParamFormat());
                        paramEntity.setValueMode(productionOrderRouteItemParam.getValueMode());
                    }
                    if (productRouteItemParamDto.getProductId() != null) {
                        // 如果有产品ID,则是投入物料,存入投入表
                        ProductionProductInput inputEntity = new ProductionProductInput();
                        inputEntity.setProductMainId(productionProductMain.getId());
                        inputEntity.setRouteItemId(productRouteItemEntity.getId());
                        inputEntity.setProductId(productRouteItemParamDto.getProductId());
                        inputEntity.setBomId(productRouteItemParamDto.getBomId());
                        BigDecimal qty = productRouteItemParamDto.getQuantity();
                        if (qty == null) {
                            qty = productRouteItemParamDto.getProductValue();
                        }
                        inputEntity.setQuantity(qty != null ? qty : BigDecimal.ZERO);
                        inputEntity.setUnit(productRouteItemParamDto.getUnit());
                        productionProductInputService.save(inputEntity);
                    } else {
                        // 否则是普通参数,存入参数表
                        ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
                        BeanUtils.copyProperties(productRouteItemParamDto, paramEntity, "id");
                        paramEntity.setProductionProductRouteItemId(productRouteItemEntity.getId());
                        paramEntity.setOrderItemParamId(productRouteItemParamDto.getId());
                    productionProductRouteItemParamService.save(paramEntity);
                        // 从订单参数表补全基础信息(名称、类型、单位等)
                        if (productRouteItemParamDto.getId() != null) {
                            ProductionOrderRouteItemParam orderParam = productionOrderRouteItemParamService.getById(productRouteItemParamDto.getId());
                            if (orderParam != null) {
                                paramEntity.setParamName(orderParam.getParamName());
                                paramEntity.setParamType(orderParam.getParamType());
                                paramEntity.setParamFormat(orderParam.getParamFormat());
                                paramEntity.setValueMode(orderParam.getValueMode());
                                paramEntity.setUnit(orderParam.getUnit());
                            }
                        }
                        productionProductRouteItemParamService.save(paramEntity);
                    }
                }
            }
@@ -481,13 +494,14 @@
        dto.setMaterialCode(productMaterialSkuDto.getMaterialCode());
        dto.setModel(productMaterialSkuDto.getModel());
        //  查询总的产出数量(这里把投入表弄成了产出总表)
        //  查询总的投入数量
        ProductionProductInput input = productionProductInputService.getOne(
                new LambdaQueryWrapper<ProductionProductInput>()
                        .eq(ProductionProductInput::getProductMainId, productMainId)
                        .isNull(ProductionProductInput::getRouteItemId)
                        .last("LIMIT 1"));
        if (input != null) {
            dto.setProductId(input.getProductModelId());
            dto.setProductId(input.getProductId());
            dto.setQuantity(input.getQuantity());
        }
@@ -497,6 +511,7 @@
                        .eq(ProductionProductOutput::getProductMainId, productMainId)
                        .last("LIMIT 1"));
        if (output != null) {
            dto.setQuantity(output.getTotalQuantity());
            dto.setQualifiedQuantity(output.getQuantity());
            dto.setUnqualifiedQuantity(output.getScrapQty());
        }
@@ -520,21 +535,44 @@
                List<ProductionProductRouteItemParam> paramList = productionProductRouteItemParamService.list(
                        new LambdaQueryWrapper<ProductionProductRouteItemParam>()
                                .eq(ProductionProductRouteItemParam::getProductionProductRouteItemId, routeItem.getId()));
                List<ProductionProductRouteItemParamDto> paramDtoList = new ArrayList<>();
                if (paramList != null && !paramList.isEmpty()) {
                    List<ProductionProductRouteItemParamDto> paramDtoList = paramList.stream().map(param -> {
                    paramDtoList.addAll(paramList.stream().map(param -> {
                        ProductionProductRouteItemParamDto paramDto = new ProductionProductRouteItemParamDto();
                        BeanUtils.copyProperties(param, paramDto);
                        if (paramDto.getProductId() != null) {
                            ProductMaterialSkuDto materialSkuDto = productMaterialService.selectProductByModelId(paramDto.getProductId());
                            productMaterialService.selectProductByModelId(paramDto.getProductId());
                        return paramDto;
                    }).collect(Collectors.toList()));
                }
                //  查询工序投入物料
                List<ProductionProductInput> routeItemInputList = productionProductInputService.list(
                        new LambdaQueryWrapper<ProductionProductInput>()
                                .eq(ProductionProductInput::getProductMainId, productMainId)
                                .eq(ProductionProductInput::getRouteItemId, routeItem.getId()));
                if (routeItemInputList != null && !routeItemInputList.isEmpty()) {
                    paramDtoList.addAll(routeItemInputList.stream().map(inputItem -> {
                        ProductionProductRouteItemParamDto paramDto = new ProductionProductRouteItemParamDto();
                        paramDto.setProductId(inputItem.getProductId());
                        paramDto.setBomId(inputItem.getBomId());
                        paramDto.setQuantity(inputItem.getQuantity());
                        paramDto.setProductValue(inputItem.getQuantity());
                        paramDto.setUnit(inputItem.getUnit());
                        ProductMaterialSkuDto materialSkuDto = productMaterialService.selectProductByModelId(inputItem.getProductId());
                        if (materialSkuDto != null) {
                            paramDto.setParamName(materialSkuDto.getProductName());
                            paramDto.setProductName(materialSkuDto.getProductName());
                            paramDto.setModel(materialSkuDto.getModel());
                            paramDto.setMaterialCode(materialSkuDto.getMaterialCode());
                            String strength = productBomService.strengthById(paramDto.getBomId());
                            paramDto.setStrength(strength);
                        }
                        String strength = productBomService.strengthById(inputItem.getBomId());
                        paramDto.setStrength(strength);
                        return paramDto;
                    }).collect(Collectors.toList());
                    }).collect(Collectors.toList()));
                }
                if (!paramDtoList.isEmpty()) {
                    routeItemDto.setProductionProductRouteItemParamDtoList(paramDtoList);
                }
@@ -627,10 +665,11 @@
        //  更新投入表
        ProductionProductInput input = productionProductInputService.getOne(new LambdaQueryWrapper<ProductionProductInput>()
                .eq(ProductionProductInput::getProductMainId, productMainId)
                .isNull(ProductionProductInput::getRouteItemId)
                .last("LIMIT 1"));
        if (input != null) {
            input.setProductModelId(dto.getProductId());
            input.setQuantity(dto.getQuantity());
            input.setProductId(dto.getProductId());
            input.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
            productionProductInputService.updateById(input);
        }
@@ -639,6 +678,7 @@
            oldOutput.setProductModelId(dto.getProductId());
            oldOutput.setQuantity(dto.getQualifiedQuantity());
            oldOutput.setScrapQty(dto.getUnqualifiedQuantity());
            oldOutput.setTotalQuantity(dto.getQuantity());
            productionProductOutputService.updateById(oldOutput);
        }
@@ -660,27 +700,48 @@
            final Long routeItemId = routeItemEntity.getId();
            //  处理工序参数: 先删除该工序下所有旧参数,再重新插入传入的参数
            //  处理工序参数及投入: 先删除该工序下所有旧参数和旧投入,再重新插入传入的数据
            productionProductRouteItemParamService.remove(new LambdaQueryWrapper<ProductionProductRouteItemParam>()
                    .eq(ProductionProductRouteItemParam::getProductionProductRouteItemId, routeItemId));
            productionProductInputService.remove(new LambdaQueryWrapper<ProductionProductInput>()
                    .eq(ProductionProductInput::getProductMainId, productMainId)
                    .eq(ProductionProductInput::getRouteItemId, routeItemId));
            List<ProductionProductRouteItemParamDto> paramDtoList = routeItemDto.getProductionProductRouteItemParamDtoList();
            if (paramDtoList != null && !paramDtoList.isEmpty()) {
                for (ProductionProductRouteItemParamDto paramDto : paramDtoList) {
                    ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
                    BeanUtils.copyProperties(paramDto, paramEntity, "id");
                    paramEntity.setProductionProductRouteItemId(routeItemId);
                    if (paramEntity.getProductId() == null && paramDto.getId() != null) {
                        ProductionOrderRouteItemParam orderParam = productionOrderRouteItemParamService.getById(paramDto.getId());
                        if (orderParam != null) {
                            paramEntity.setOrderItemParamId(orderParam.getId());
                            paramEntity.setParamName(orderParam.getParamName());
                            paramEntity.setParamType(orderParam.getParamType());
                            paramEntity.setParamFormat(orderParam.getParamFormat());
                            paramEntity.setValueMode(orderParam.getValueMode());
                    if (paramDto.getProductId() != null) {
                        // 投入物料
                        ProductionProductInput inputEntity = new ProductionProductInput();
                        inputEntity.setProductMainId(productMainId);
                        inputEntity.setRouteItemId(routeItemId);
                        inputEntity.setProductId(paramDto.getProductId());
                        inputEntity.setBomId(paramDto.getBomId());
                        BigDecimal qty = paramDto.getQuantity();
                        if (qty == null) {
                            qty = paramDto.getProductValue();
                        }
                        inputEntity.setQuantity(qty != null ? qty : BigDecimal.ZERO);
                        inputEntity.setUnit(paramDto.getUnit());
                        productionProductInputService.save(inputEntity);
                    } else {
                        // 普通参数
                        ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
                        BeanUtils.copyProperties(paramDto, paramEntity, "id");
                        paramEntity.setProductionProductRouteItemId(routeItemId);
                        if (paramDto.getId() != null) {
                            ProductionOrderRouteItemParam orderParam = productionOrderRouteItemParamService.getById(paramDto.getId());
                            if (orderParam != null) {
                                paramEntity.setOrderItemParamId(orderParam.getId());
                                paramEntity.setParamName(orderParam.getParamName());
                                paramEntity.setParamType(orderParam.getParamType());
                                paramEntity.setParamFormat(orderParam.getParamFormat());
                                paramEntity.setValueMode(orderParam.getValueMode());
                                paramEntity.setUnit(orderParam.getUnit());
                            }
                        }
                        productionProductRouteItemParamService.save(paramEntity);
                    }
                    productionProductRouteItemParamService.save(paramEntity);
                }
            }