From 3bdaa5708b94e64f813f70ede8ba0bbd1a3179ec Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 27 三月 2026 15:08:01 +0800
Subject: [PATCH] 成品检数据查询

---
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java |   15 +++
 src/main/resources/mapper/production/ProductionProductRouteItemMapper.xml   |    4 
 src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java           |    6 +
 src/main/java/com/ruoyi/quality/controller/QualityInspectController.java    |   25 ++++++
 src/main/java/com/ruoyi/quality/dto/ProcessPageDto.java                     |   11 ++
 src/main/resources/mapper/production/ProductOrderMapper.xml                 |   80 ++++++++++++++++++++
 src/main/java/com/ruoyi/quality/service/IQualityInspectService.java         |    6 +
 src/main/java/com/ruoyi/quality/dto/FinishedPageDto.java                    |   50 ++++++++++++
 src/main/java/com/ruoyi/quality/dto/FinishedRatioDto.java                   |   41 ++++++++++
 9 files changed, 233 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
index 84da613..44d6f62 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -8,6 +8,8 @@
 import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.pojo.ProcessRoute;
 import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.quality.dto.FinishedPageDto;
+import com.ruoyi.quality.dto.FinishedRatioDto;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -29,4 +31,8 @@
     Integer countPending(@Param("startDate") String startDate, @Param("endDate") String endDate);
 
     List<ProductOrderSourceDto> productOrderSource(@Param("orderId") Long orderId);
+
+    IPage<FinishedPageDto> finishedPage(Page page, @Param("c") FinishedPageDto finishedPageDto);
+
+    List<FinishedRatioDto> finishedRatio(@Param("productOrderId") Long productOrderId);
 }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
index 48a8d4f..1994c07 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -7,6 +7,7 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.quality.dto.FinishedPageDto;
 import com.ruoyi.quality.dto.ProcessPageDto;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.pojo.QualityInspect;
@@ -169,4 +170,28 @@
     public AjaxResult processDetails(ProcessPageDto processPageDto) {
         return AjaxResult.success(qualityInspectService.processDetails(processPageDto));
     }
+
+    /**
+     * 鎴愬搧妫�鍒嗛〉鏌ヨ
+     * @param page
+     * @param finishedPageDto
+     * @return
+     */
+    @GetMapping("/finishedPage")
+    @ApiOperation("鎴愬搧妫�鍒嗛〉鏌ヨ")
+    public AjaxResult finishedPage(Page page, FinishedPageDto finishedPageDto) {
+        return AjaxResult.success(qualityInspectService.finishedPage(page, finishedPageDto));
+    }
+
+    /**
+     * 鎴愬搧妫�-璁$畻瀹為檯鎶曞叆浜у嚭姣斾緥鍜屾爣鍑嗘姇鍏ヤ骇鍑烘瘮鐨勫亸宸巼
+     * 鏍规嵁bom鏉ョ畻
+     * @param finishedPageDto
+     * @return
+     */
+    @GetMapping("/finishedRatio")
+    @ApiOperation("鎴愬搧妫�-鏌ョ湅鏍囧噯鎶曞叆浜у嚭姣斾緥")
+    public AjaxResult finishedRatio(FinishedPageDto finishedPageDto) {
+        return AjaxResult.success(qualityInspectService.finishedRatio(finishedPageDto));
+    }
 }
diff --git a/src/main/java/com/ruoyi/quality/dto/FinishedPageDto.java b/src/main/java/com/ruoyi/quality/dto/FinishedPageDto.java
new file mode 100644
index 0000000..2288e79
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/FinishedPageDto.java
@@ -0,0 +1,50 @@
+package com.ruoyi.quality.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("璐ㄩ噺绠$悊---鎴愬搧妫�(鍙拌处)")
+public class FinishedPageDto {
+
+    @ApiModelProperty("鐢熶骇璁㈠崟id")
+    private Long productOrderId;
+
+    @ApiModelProperty(value = "鐘舵�侊紙1.寰呭紑濮嬨��2.杩涜涓��3.宸插畬鎴愩��4.宸插彇娑堬級")
+    private Integer status;
+
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
+    private String npsNo;
+
+    @ApiModelProperty(value = "浜у搧缂栫爜")
+    private String materialCode;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productName;
+
+    @ApiModelProperty(value = "瑙勬牸")
+    private String model;
+
+    @ApiModelProperty(value = "浜у搧绫诲瀷")
+    private String strength;
+
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟闇�姹傛暟閲�")
+    private BigDecimal needQuantity;
+
+    @ApiModelProperty("鎬诲悎鏍兼暟閲�")
+    private BigDecimal qualifiedQuantity;
+
+    @ApiModelProperty("鎬讳笉鍚堟牸鏁伴噺")
+    private BigDecimal unqualifiedQuantity;
+
+    @ApiModelProperty("鎬讳骇鍑烘暟閲�")
+    private BigDecimal quantity;
+
+}
diff --git a/src/main/java/com/ruoyi/quality/dto/FinishedRatioDto.java b/src/main/java/com/ruoyi/quality/dto/FinishedRatioDto.java
new file mode 100644
index 0000000..0b5eacb
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/FinishedRatioDto.java
@@ -0,0 +1,41 @@
+package com.ruoyi.quality.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("璐ㄩ噺绠$悊---鎴愬搧妫�(鏌ョ湅鏍囧噯鎶曞叆浜у嚭姣斾緥)")
+public class FinishedRatioDto {
+
+
+    @ApiModelProperty(value = "浜у搧缂栫爜")
+    private String materialCode;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productName;
+
+    @ApiModelProperty(value = "瑙勬牸")
+    private String model;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty(value = "瀹為檯鎶曞叆閲�")
+    private BigDecimal actualInputQuantity;
+
+    @ApiModelProperty(value = "瀹為檯浜у嚭閲�")
+    private BigDecimal actualOutputQuantity;
+
+    @ApiModelProperty("瀹為檯鎶曞叆浜у嚭姣斾緥")
+    private BigDecimal actualInputOutputRatio;
+
+    @ApiModelProperty("鏍囧噯鎶曞叆浜у嚭姣斾緥")
+    private BigDecimal standardInputOutputRatio;
+
+    @ApiModelProperty("瀹為檯涓庢爣鍑嗙殑鍋忓樊鐜�")
+    private BigDecimal deviationRate;
+
+}
diff --git a/src/main/java/com/ruoyi/quality/dto/ProcessPageDto.java b/src/main/java/com/ruoyi/quality/dto/ProcessPageDto.java
index 58202be..296debe 100644
--- a/src/main/java/com/ruoyi/quality/dto/ProcessPageDto.java
+++ b/src/main/java/com/ruoyi/quality/dto/ProcessPageDto.java
@@ -10,6 +10,7 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Data
@@ -17,7 +18,7 @@
 public class ProcessPageDto {
 
     @ApiModelProperty("鐢熶骇鎶ュ伐璁板綍鐨勫伐搴忚〃id")
-    private Long ProductionProductRouteItemId;
+    private Long productionProductRouteItemId;
 
     @ApiModelProperty(value = "鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -60,7 +61,11 @@
     @ApiModelProperty("浜у嚭鏁伴噺")
     private BigDecimal quantity;
 
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate startTime;
 
-    private LocalDateTime startTime;
-    private LocalDateTime endTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate endTime;
 }
diff --git a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
index 6f5f604..8265b25 100644
--- a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
+++ b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
@@ -6,6 +6,8 @@
 import com.ruoyi.production.dto.ProcessRouteItemParamDto;
 import com.ruoyi.production.pojo.ProductionOrderRouteItemParam;
 import com.ruoyi.production.pojo.ProductionProductRouteItemParam;
+import com.ruoyi.quality.dto.FinishedPageDto;
+import com.ruoyi.quality.dto.FinishedRatioDto;
 import com.ruoyi.quality.dto.ProcessPageDto;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.pojo.QualityInspect;
@@ -33,4 +35,8 @@
     IPage<ProcessPageDto> processPage(Page page, ProcessPageDto processPageDto);
 
     List<ProductionProductRouteItemParam> processDetails(ProcessPageDto processPageDto);
+
+    IPage<FinishedPageDto> finishedPage(Page page, FinishedPageDto finishedPageDto);
+
+    List<FinishedRatioDto> finishedRatio(FinishedPageDto finishedPageDto);
 }
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 0d48fc7..f58a625 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -15,10 +15,13 @@
 import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProcessRouteItemParamDto;
+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.ProductionProductRouteItemParam;
+import com.ruoyi.quality.dto.FinishedPageDto;
+import com.ruoyi.quality.dto.FinishedRatioDto;
 import com.ruoyi.quality.dto.ProcessPageDto;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
@@ -64,6 +67,8 @@
     private ProductionProductRouteItemMapper productionProductRouteItemMapper;
 
     private ProductionProductRouteItemParamMapper productionProductRouteItemParamMapper;
+
+    private ProductOrderMapper productOrderMapper;
 
     @Override
     public int add(QualityInspectDto qualityInspectDto) {
@@ -177,6 +182,16 @@
     }
 
     @Override
+    public IPage<FinishedPageDto> finishedPage(Page page, FinishedPageDto finishedPageDto) {
+        return productOrderMapper.finishedPage(page,finishedPageDto);
+    }
+
+    @Override
+    public List<FinishedRatioDto> finishedRatio(FinishedPageDto finishedPageDto) {
+        return productOrderMapper.finishedRatio(finishedPageDto.getProductOrderId());
+    }
+
+    @Override
     public int updateQualityInspect(QualityInspectDto qualityInspectDto) {
         if (ObjectUtils.isNotNull(qualityInspectDto.getQualityInspectParams())) {
             qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, qualityInspectDto.getId()));
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 4cd3372..b9193a0 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -151,4 +151,84 @@
         ORDER BY pp.apply_no
 
     </select>
+    <select id="finishedPage" resultType="com.ruoyi.quality.dto.FinishedPageDto">
+        select * from
+            (select po.id productOrderId,
+                    po.status,
+                    po.nps_no,
+                    sku.material_code,
+                    pm.product_name,
+                    sku.model,
+                    po.strength,
+                    po.quantity needQuantity,
+                    sum(ppo.quantity) qualifiedQuantity,
+                    sum(ppo.scrap_qty) unqualifiedQuantity,
+                    sum(ppo.quantity+ppo.scrap_qty) quantity
+            from product_order po
+            LEFT JOIN product_material_sku sku ON po.product_material_sku_id = sku.id
+            LEFT JOIN product_material pm ON sku.product_id = pm.id
+            LEFT JOIN production_product_main ppm ON ppm.product_order_id = po.id
+            LEFT JOIN production_product_output ppo ON ppo.product_main_id = ppm.id
+            group by po.id ,
+                    po.status,
+                    po.nps_no,
+                    sku.material_code,
+                    pm.product_name,
+                    sku.model,
+                    po.strength,
+                    po.quantity
+            order by po.id desc )A
+        <where>
+            <if test="c.npsNo != null and c.npsNo != ''">
+                AND A.nps_no LIKE CONCAT('%', #{c.npsNo}, '%')
+            </if>
+            <if test="c.productName != null and c.productName != ''">
+                AND A.product_name LIKE CONCAT('%', #{c.productName}, '%')
+            </if>
+            <if test="c.materialCode != null and c.materialCode != ''">
+                AND A.material_code LIKE CONCAT('%', #{c.materialCode}, '%')
+            </if>
+            <if test="c.model != null and c.model != ''">
+                AND A.model LIKE CONCAT('%', #{c.model}, '%')
+            </if>
+            <if test="c.strength != null and c.strength != ''">
+                AND A.strength = #{c.strength}
+            </if>
+        </where>
+    </select>
+    <select id="finishedRatio" resultType="com.ruoyi.quality.dto.FinishedRatioDto">
+        select A.material_code,
+               product_name,
+               model,
+               unit,
+               actualInputQuantity,
+               actualOutputQuantity,
+               actualInputQuantity / actualOutputQuantity actualInputOutputRatio,
+               unit_quantity standardInputOutputRatio,
+               (actualInputQuantity / actualOutputQuantity - unit_quantity)/unit_quantity  deviationRate
+        from (select
+               sku.material_code,
+               pm.product_name,
+               sku.model,
+               pprip.unit,
+               pos.unit_quantity,
+               sum(pprip.product_value) 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
+        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 pm ON sku.product_id = pm.id
+        left join production_order_structure pos ON pos.product_model_id = pprip.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
+        
+    </select>
 </mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductRouteItemMapper.xml b/src/main/resources/mapper/production/ProductionProductRouteItemMapper.xml
index a56128c..7416e9d 100644
--- a/src/main/resources/mapper/production/ProductionProductRouteItemMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductRouteItemMapper.xml
@@ -15,7 +15,7 @@
         <result column="tenant_id" property="tenantId"/>
     </resultMap>
     <select id="processPage" resultType="com.ruoyi.quality.dto.ProcessPageDto">
-        select ppri.id ProductionProductRouteItemId,
+        select ppri.id productionProductRouteItemId,
                ppri.create_time,
                ppm.product_no,
                po.nps_no,
@@ -59,7 +59,7 @@
                 AND po.strength = #{c.strength}
             </if>
             <if test="c.startTime != null and c.endTime != null">
-                AND po.create_time BETWEEN #{c.startTime} AND #{c.endTime}
+                AND ppri.create_time BETWEEN #{c.startTime} AND #{c.endTime} + INTERVAL 1 DAY - INTERVAL 1 MICROSECOND
             </if>
         order by ppri.id desc
     </select>

--
Gitblit v1.9.3