doc/ÄþÏÄ-ÖÐÊ¢½¨²Ä.sql
@@ -417,4 +417,33 @@ DROP TABLE IF EXISTS product_structure_instance; ALTER TABLE `product-inventory-management-zsjc`.`production_product_route_item_param` MODIFY COLUMN `order_item_param_id` bigint NULL DEFAULT NULL COMMENT 'ç产订åç»å®çå·¥èºè·¯çº¿å·¥åº--åæ°è¡¨ID' AFTER `production_product_route_item_id`; MODIFY COLUMN `order_item_param_id` bigint NULL DEFAULT NULL COMMENT 'ç产订åç»å®çå·¥èºè·¯çº¿å·¥åº--åæ°è¡¨ID' AFTER `production_product_route_item_id`; CREATE TABLE `production_product_input` ( `id` bigint NOT NULL AUTO_INCREMENT, `product_main_id` bigint NOT NULL COMMENT 'æ¥å·¥å主表ID', `route_item_id` bigint DEFAULT NULL COMMENT 'å ³èå ·ä½çæ¥å·¥å·¥åºID (对åºååæ°è¡¨çå ³èID)', `product_id` bigint NOT NULL COMMENT '产å/ç©æID', `bom_id` bigint DEFAULT NULL COMMENT 'BOM ID', `quantity` decimal(30, 15) NOT NULL COMMENT 'æå ¥æ°é (对åºåproduct_value)', `unit` varchar(20) DEFAULT NULL COMMENT 'åä½', `create_user` bigint DEFAULT NULL COMMENT 'å½å ¥äºº', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'å½å ¥æ¶é´', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', `tenant_id` bigint NOT NULL COMMENT 'ç§æ·ID', PRIMARY KEY (`id`) USING BTREE, KEY `idx_main_id` (`product_main_id`), KEY `idx_product_id` (`product_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT ='ç产æ¥å·¥ç©ææå ¥è¡¨'; ALTER TABLE `production_product_route_item_param` DROP COLUMN `product_id`, DROP COLUMN `bom_id`, DROP COLUMN `product_value`, DROP COLUMN `dict_code`; ALTER TABLE `product-inventory-management-zsjc`.`production_product_output` ADD COLUMN `total_quantity` decimal(20, 15) NULL COMMENT 'æ»æ°é' AFTER `scrap_qty`; src/main/java/com/ruoyi/production/dto/ProductionProductRouteItemParamDto.java
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; /** * <br> @@ -27,6 +28,18 @@ @ApiModelProperty("ç©æç¼ç ") private String materialCode; @ApiModelProperty("产åID") private Long productId; @ApiModelProperty("BOM ID") private Long bomId; @ApiModelProperty("æå ¥æ°é") private BigDecimal quantity; @ApiModelProperty("ç©æå¼") private BigDecimal productValue; @ApiModelProperty("强度") private String strength; src/main/java/com/ruoyi/production/dto/ProductionRecordDto.java
@@ -57,10 +57,10 @@ @ApiModelProperty(value = "æ´æ°æ¶é´") private LocalDateTime updateTime; @ApiModelProperty("åæ ¼æ°é") @ApiModelProperty("åæ ¼æ°é/äº§åºæ¹é") private BigDecimal qualifiedQuantity; @ApiModelProperty("ä¸åæ ¼æ°é") @ApiModelProperty("ä¸åæ ¼æ°é/ä¸åæ ¼æ¹é") private BigDecimal unqualifiedQuantity; @ApiModelProperty("äº§åºæ°é") src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -14,20 +14,37 @@ @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "æ¥å·¥id") @ApiModelProperty(value = "æ¥å·¥å主表ID") private Long productMainId; @ApiModelProperty(value = "产åid") private Long productModelId; @ApiModelProperty(value = "å ³èå ·ä½çæ¥å·¥å·¥åºID") private Long routeItemId; @ApiModelProperty(value = "æ°é") @ApiModelProperty(value = "产å/ç©æID") @TableField("product_id") private Long productId; @ApiModelProperty(value = "BOM ID") private Long bomId; @ApiModelProperty(value = "æå ¥æ°é") private BigDecimal quantity; @ApiModelProperty(value = "å建æ¶é´") @ApiModelProperty(value = "åä½") private String unit; @ApiModelProperty(value = "å½å ¥äºº") private Long createUser; @ApiModelProperty(value = "å½å ¥æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } } src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -20,7 +20,7 @@ @ApiModelProperty(value = "产åid") private Long productModelId; @ApiModelProperty(value = "åæ ¼æ°é") @ApiModelProperty(value = "åæ ¼æ°é/äº§åºæ¹é") private BigDecimal quantity; @ApiModelProperty(value = "å建æ¶é´") @@ -31,6 +31,9 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "ä¸åæ ¼æ°é") @ApiModelProperty(value = "ä¸åæ ¼æ°é/ä¸åæ ¼æ¹é") private BigDecimal scrapQty; @ApiModelProperty(value = "æ»æ°é") private BigDecimal totalQuantity; } src/main/java/com/ruoyi/production/pojo/ProductionProductRouteItemParam.java
@@ -64,15 +64,6 @@ @ApiModelProperty(value = "åæ°å¼") private String paramValue; @ApiModelProperty(value = "产åID") private Long productId; @ApiModelProperty(value = "产åæå ¥å¼") private BigDecimal productValue; @ApiModelProperty(value = "BOM ID") private Long bomId; @ApiModelProperty(value = "åä½") private String unit; @@ -82,25 +73,21 @@ @ApiModelProperty(value = "åæ°æåº") private Integer sourceSort; @ApiModelProperty(value = "产åç±»å") private Long dictCode; @ApiModelProperty(value = "ä¸ä¼ è ") private Long createUser; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @TableField(value = "create_time", fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹è ") private Long updateUser; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) @TableField(value = "tenant_id", fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -123,14 +123,16 @@ productStructureDtos.add(productStructureDto); } for (ProductStructureDto productStructureDto : productStructureDtos) { ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); productionProductInput.setProductId(productStructureDto.getProductModelId()); BigDecimal unitQty = productStructureDto.getUnitQuantity() != null ? productStructureDto.getUnitQuantity() : BigDecimal.ZERO; BigDecimal mainQty = dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO; productionProductInput.setQuantity(unitQty.multiply(mainQty)); productionProductInput.setUnit(productStructureDto.getUnit()); productionProductInput.setProductMainId(productionProductMain.getId()); productionProductInput.setRouteItemId(productProcessRouteItem.getId()); productionProductInputMapper.insert(productionProductInput); stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId()); } /*æ°å¢æ¥å·¥äº§åºè¡¨*/ ProductionProductOutput productionProductOutput = new ProductionProductOutput(); 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); } } src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
@@ -3,9 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProcessRouteItemParamDto; import com.ruoyi.production.pojo.ProductionOrderRouteItemParam; import com.ruoyi.production.pojo.ProductionProductRouteItemParam; import com.ruoyi.production.dto.ProductionProductRouteItemParamDto; import com.ruoyi.quality.dto.FinishedPageDto; import com.ruoyi.quality.dto.FinishedRatioDto; import com.ruoyi.quality.dto.ProcessPageDto; @@ -34,7 +32,7 @@ IPage<ProcessPageDto> processPage(Page page, ProcessPageDto processPageDto); List<ProductionProductRouteItemParam> processDetails(ProcessPageDto processPageDto); List<ProductionProductRouteItemParamDto> processDetails(ProcessPageDto processPageDto); IPage<FinishedPageDto> finishedPage(Page page, FinishedPageDto finishedPageDto); src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -9,17 +9,20 @@ import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; import com.ruoyi.common.utils.HackLoopTableRenderPolicy; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.dto.ProcessRouteItemParamDto; import com.ruoyi.production.dto.ProductMaterialSkuDto; import com.ruoyi.production.dto.ProductionProductRouteItemParamDto; import com.ruoyi.production.mapper.ProductOrderMapper; import com.ruoyi.production.mapper.ProductionProductRouteItemMapper; import com.ruoyi.production.mapper.ProductionProductRouteItemParamMapper; import com.ruoyi.production.pojo.ProductionOrderRouteItemParam; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.pojo.ProductionProductRouteItemParam; import com.ruoyi.production.service.ProductBomService; import com.ruoyi.production.service.ProductMaterialService; import com.ruoyi.production.service.ProductionProductInputService; import com.ruoyi.quality.dto.FinishedPageDto; import com.ruoyi.quality.dto.FinishedRatioDto; import com.ruoyi.quality.dto.ProcessPageDto; @@ -42,6 +45,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -52,23 +56,29 @@ public class QualityInspectServiceImpl extends ServiceImpl<QualityInspectMapper, QualityInspect> implements IQualityInspectService { private final StockUtils stockUtils; private QualityInspectMapper qualityInspectMapper; private final QualityInspectMapper qualityInspectMapper; private IQualityInspectParamService qualityInspectParamService; private final IQualityInspectParamService qualityInspectParamService; private QualityTestStandardMapper qualityTestStandardMapper; private final QualityTestStandardMapper qualityTestStandardMapper; private QualityUnqualifiedMapper qualityUnqualifiedMapper; private final QualityUnqualifiedMapper qualityUnqualifiedMapper; private SalesLedgerProductMapper salesLedgerProductMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; private ProcurementRecordService procurementRecordService; private final ProcurementRecordService procurementRecordService; private ProductionProductRouteItemMapper productionProductRouteItemMapper; private final ProductionProductRouteItemMapper productionProductRouteItemMapper; private ProductionProductRouteItemParamMapper productionProductRouteItemParamMapper; private final ProductionProductRouteItemParamMapper productionProductRouteItemParamMapper; private ProductOrderMapper productOrderMapper; private final ProductOrderMapper productOrderMapper; private final ProductionProductInputService productionProductInputService; private final ProductMaterialService productMaterialService; private final ProductBomService productBomService; @Override public int add(QualityInspectDto qualityInspectDto) { @@ -177,8 +187,54 @@ } @Override public List<ProductionProductRouteItemParam> processDetails(ProcessPageDto processPageDto) { return productionProductRouteItemParamMapper.processDetails(processPageDto.getProductionProductRouteItemId()); public List<ProductionProductRouteItemParamDto> processDetails(ProcessPageDto processPageDto) { List<ProductionProductRouteItemParamDto> resultList = new ArrayList<>(); // 1. æ¥è¯¢æ®éåæ° List<ProductionProductRouteItemParam> paramList = productionProductRouteItemParamMapper.processDetails(processPageDto.getProductionProductRouteItemId()); if (paramList != null && !paramList.isEmpty()) { resultList.addAll(paramList.stream().map(param -> { ProductionProductRouteItemParamDto dto = new ProductionProductRouteItemParamDto(); BeanUtils.copyProperties(param, dto); return dto; }).collect(Collectors.toList())); } // 2. æ¥è¯¢ç©ææå ¥ // 注æï¼æåæ£çæ¶åå¯è½æ²¡æå ·ä½åæ¡æ¥å·¥è®°å½IDï¼æä»¥æåæ£è¯¦æ å¯è½éè¦æè®¢åæ¥è¯¢ï¼ // ä½è¿éçprocessDetailsæ¯âè¿ç¨æ£è¯¦æ âï¼é常æå ·ä½æ¥å·¥è®°å½ã // æ ¹æ®æ¥å·¥è®°å½ ID æ¥æ¾å¯¹åºç ProductMainId Long routeItemId = processPageDto.getProductionProductRouteItemId(); if (routeItemId != null) { List<ProductionProductInput> inputList = productionProductInputService.list(Wrappers.<ProductionProductInput>lambdaQuery() .eq(ProductionProductInput::getRouteItemId, routeItemId)); if (inputList != null && !inputList.isEmpty()) { for (ProductionProductInput input : inputList) { ProductionProductRouteItemParamDto dto = new ProductionProductRouteItemParamDto(); dto.setProductId(input.getProductId()); dto.setBomId(input.getBomId()); dto.setQuantity(input.getQuantity()); dto.setProductValue(input.getQuantity()); dto.setUnit(input.getUnit()); // å¡«å ç©æä¿¡æ¯ ProductMaterialSkuDto materialSkuDto = productMaterialService.selectProductByModelId(input.getProductId()); if (materialSkuDto != null) { dto.setParamName(materialSkuDto.getProductName()); dto.setProductName(materialSkuDto.getProductName()); dto.setModel(materialSkuDto.getModel()); dto.setMaterialCode(materialSkuDto.getMaterialCode()); } String strength = productBomService.strengthById(input.getBomId()); dto.setStrength(strength); resultList.add(dto); } } } return resultList; } @Override src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -210,25 +210,23 @@ sku.material_code, pm.product_name, sku.model, pprip.unit, ppi.unit, pos.unit_quantity, sum(pprip.product_value) actualInputQuantity, sum(ppi.quantity) actualInputQuantity, sum(ppo.quantity+ppo.scrap_qty) actualOutputQuantity from production_product_route_item_param pprip left join production_product_route_item ppri on ppri.id=pprip.production_product_route_item_id left join production_product_main ppm on ppm.id=ppri.product_main_id from production_product_input ppi left join production_product_main ppm on ppm.id=ppi.product_main_id left join production_product_output ppo on ppm.id=ppo.product_main_id left join product_material_sku sku ON pprip.product_id = sku.id left join product_material_sku sku ON ppi.product_id = sku.id left join product_material pm ON sku.product_id = pm.id left join production_order_structure pos ON pos.product_model_id = pprip.product_id left join production_order_structure pos ON pos.product_model_id = ppi.product_id where ppm.product_order_id = #{productOrderId} and pos.order_id = #{productOrderId} and pprip.order_item_param_id is null group by sku.material_code, pm.product_name, sku.model, pos.unit_quantity, pprip.unit)A ppi.unit)A </select> </mapper> src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -5,11 +5,17 @@ <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductInput"> <id property="id" column="id"/> <result property="productMainId" column="product_main_id"/> <result property="productModelId" column="product_model_id"/> <result property="routeItemId" column="route_item_id"/> <result property="productId" column="product_id"/> <result property="bomId" column="bom_id"/> <result property="quantity" column="quantity"/> <result property="tenantId" column="tenant_id"/> <result property="unit" column="unit"/> <result property="createUser" column="create_user"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> <result property="tenantId" column="tenant_id"/> </resultMap> <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto"> select ppi.*, pm.model as model, src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -23,13 +23,12 @@ pms.material_code as materialCode, pm.product_name as productName, pms.model as productModelName, IFNULL(ppi.quantity, 0) as totalQuantity, IFNULL(ppo.total_quantity, 0) as totalQuantity, IFNULL(ppo.scrap_qty, 0) as scrapQty, IFNULL(ppo.quantity, 0) as quantity from production_product_main ppm left join production_product_output ppo on ppo.product_main_id = ppm.id left join production_product_input ppi on ppi.product_main_id = ppm.id left join product_order po on po.id = ppm.product_order_id left join product_order_plan pop on po.id = pop.product_order_id left join production_plan pp on pop.production_plan_id = pp.id src/main/resources/mapper/production/ProductionProductRouteItemParamMapper.xml
@@ -14,13 +14,9 @@ <result column="min_value" property="minValue"/> <result column="max_value" property="maxValue"/> <result column="param_value" property="paramValue"/> <result column="product_id" property="productId"/> <result column="bom_id" property="bomId"/> <result column="product_value" property="productValue"/> <result column="unit" property="unit"/> <result column="is_required" property="isRequired"/> <result column="source_sort" property="sourceSort"/> <result column="dict_code" property="dictCode"/> <result column="create_user" property="createUser"/> <result column="create_time" property="createTime"/> <result column="update_user" property="updateUser"/> @@ -31,7 +27,7 @@ select pprip.* from production_product_route_item_param pprip where pprip.production_product_route_item_id = #{productionProductRouteItemId} and pprip.order_item_param_id is not null and pprip.order_item_param_id is not null </select> </mapper>