From 544afa4dabaccb0248bf0b6fcfdc7b9b6c2ea9f2 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 13 一月 2026 17:56:38 +0800
Subject: [PATCH] 合格率统计重构:根据物料属性分类返回对应的合格/不合格数据量

---
 inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java             |   26 ++
 inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml                          |  492 +++++++++++++++++++++++++++-----------------
 inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java                  |    3 
 inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java    |   28 ++
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java |   68 +++++
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java            |   17 +
 inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java          |   11 
 7 files changed, 438 insertions(+), 207 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
index 130e075..933df44 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
@@ -25,30 +25,44 @@
     private DataAnalysisService dataAnalysisService;
 
     /**
-     * 鏌ヨ鍘熸潗鏂欐煴鐘剁粺璁�
+     * 鏌ヨ鐗╂枡灞炴�ф煴鐘剁粺璁�
+     *
      * @param dataAnalysisDto
      * @return
      */
-    @ApiOperation(value = "鏌ヨ鍘熸潗鏂欐煴鐘剁粺璁�")
+    @ApiOperation(value = "鏌ヨ鐗╂枡灞炴�ф煴鐘剁粺璁�")
     @GetMapping("/getRawPassRateByBarChart")
     public Result getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto) {
         return Result.success(dataAnalysisService.getRawPassRateByBarChart(dataAnalysisDto));
     }
 
     /**
-     * 鏌ヨ鍘熸潗鏂欐煴鐘剁粺璁�
+     * 鏌ヨ鐗╂枡灞炴�ф煴鐘剁粺璁�
+     *
      * @param dataAnalysisDto
      * @return
      */
-    @ApiOperation(value = "鏌ヨ鍘熸潗鏂欏悎鏍肩巼楗肩姸鎬�")
+    @ApiOperation(value = "鏌ヨ鐗╂枡灞炴�у悎鏍肩巼楗肩姸鍥�")
     @GetMapping("/getRawPassRateByCake")
     public Result getRawPassRateByCake(DataAnalysisDto dataAnalysisDto) {
         return Result.success(dataAnalysisService.getRawPassRateByCake(dataAnalysisDto));
     }
 
+    /**
+     * 鏌ヨ鐗╂枡灞炴�у悎鏍肩巼琛ㄦ牸
+     *
+     * @param dataAnalysisDto
+     * @return
+     */
+    @ApiOperation(value = "鏌ヨ鐗╂枡灞炴�у悎鏍肩巼琛ㄦ牸")
+    @GetMapping("/getMaterialPropTable")
+    public Result getMaterialPropTable(DataAnalysisDto dataAnalysisDto) {
+        return Result.success(dataAnalysisService.getMaterialPropTable(dataAnalysisDto));
+    }
 
     /**
      * 鏌ヨ鍘熸潗鏂欓」
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -60,6 +74,7 @@
 
     /**
      * 鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -71,6 +86,7 @@
 
     /**
      * 鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽鍒楄〃
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -82,6 +98,7 @@
 
     /**
      * 鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽鍒楄〃
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -93,6 +110,7 @@
 
     /**
      * 鏌ヨ鍘熸潗鏂欓」妫�鍜屽巶瀹舵暟鎹姣�
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -104,6 +122,7 @@
 
     /**
      * 鏌ヨ鏈湀涓庝笂涓湀鍚堟牸鐜囧姣�
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -115,6 +134,7 @@
 
     /**
      * 鏌ヨ妫�楠岄」绫诲瀷楗煎浘
+     *
      * @param dataAnalysisDto
      * @return
      */
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java
index 437239b..a1910c6 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java
@@ -36,6 +36,9 @@
     @ApiModelProperty("鍒嗙粍绫诲瀷, 0: 榛樿鎸夌収鏍峰搧鍖哄垎 1: 鍚屼竴鍘傚, 鍚屼竴鍨嬪彿, 涓嶅悓鎵规, 2 : 鍚屼竴鍨嬪彿, 涓嶅悓鍘傚")
     private String groupType;
 
+    @ApiModelProperty("鐗╂枡灞炴��")
+    private String materialProp;
+
     @ApiModelProperty("閫夋嫨鐨勬楠岄」鍚嶇О")
     private List<String> itemNames;
 
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
new file mode 100644
index 0000000..2e76cd1
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class MaterialPropTableDTO {
+
+    @ApiModelProperty(value = "淇敼鍚庢壒娆″彿")
+    private String updateBatchNo;
+
+    @ApiModelProperty(value = "鎶佃揪鐨勯噰璐暟閲�")
+    private BigDecimal qtyArrived;
+
+    @ApiModelProperty(value = "闆朵欢鎻忚堪")
+    private String partDesc;
+
+    @ApiModelProperty(value = "鍚堟牸鐘舵��")
+    private Integer inspectStatus;
+
+    @ApiModelProperty(value = "涓嬪彂鏃堕棿")
+    private Date sendTime;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
index 6cb9f0a..123c9fe 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
 import com.ruoyi.inspect.dto.DataAnalysisDto;
+import com.ruoyi.inspect.dto.MaterialPropTableDTO;
 import com.ruoyi.inspect.vo.RawMaterialSupplierVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -19,32 +20,39 @@
 public interface DataAnalysisMapper {
 
     /**
-     * 鑾峰彇鏈懆鐨勫師鏉愭枡淇℃伅
+     * 鑾峰彇鏈懆鐨勭墿鏂欏睘鎬т俊鎭�
+     *
      * @return
      */
     List<Map<String, Object>> getRawPassRateByBarChartByWeek(@Param("dto") DataAnalysisDto dataAnalysisDto);
 
     /**
-     * 鑾峰彇鏈湀鐨勫師鏉愭枡淇℃伅
+     * 鑾峰彇鏈湀鐨勭墿鏂欏睘鎬т俊鎭�
+     *
      * @return
      */
     List<Map<String, Object>> getRawPassRateByBarChartByDay(@Param("dto") DataAnalysisDto dataAnalysisDto);
 
     /**
-     * 鑾峰彇鏈勾鐨勫師鏉愭枡淇℃伅
+     * 鑾峰彇鏈勾鐨勭墿鏂欏睘鎬т俊鎭�
+     *
      * @return
      */
     List<Map<String, Object>> getRawPassRateByBarChartByYear(@Param("dto") DataAnalysisDto dataAnalysisDtor);
 
     /**
      * 鏌ョ湅鍘熸潗鏂欓ゼ鐘跺浘
+     *
      * @return
      */
     Map<String, Object> getRawPassRateByCake(@Param("dto") DataAnalysisDto dataAnalysisDto);
 
+    List<MaterialPropTableDTO> getMaterialPropTable(@Param("dto") DataAnalysisDto dataAnalysisDto);
+
 
     /**
      * 鏌ヨ妫�娴嬮」闆嗗悎
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -52,6 +60,7 @@
 
     /**
      * 鏌ヨ鎵�鏈夌殑
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -62,12 +71,14 @@
 
     /**
      * 鏌ヨ鏈湀涓庝笂鏈堝悎鏍肩巼瀵规瘮
+     *
      * @return
      */
     List<Map<String, Object>> getRawUpMonth();
 
     /**
      * 鏌ヨ妫�楠岄」绫诲瀷楗煎浘
+     *
      * @return
      */
     Map<String, Object> getOrderTypeCookie();
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java
index 20e4a0c..329880b 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java
@@ -3,6 +3,7 @@
 
 import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
 import com.ruoyi.inspect.dto.DataAnalysisDto;
+import com.ruoyi.inspect.dto.MaterialPropTableDTO;
 import com.ruoyi.inspect.vo.DeviationAnalyzeVo;
 import com.ruoyi.inspect.vo.RawProductAnalysisVo;
 
@@ -18,18 +19,24 @@
 public interface DataAnalysisService {
 
     /**
-     * 鏌ヨ鍘熸潗鏂欐煴鐘剁粺璁�
+     * 鏌ヨ鐗╂枡灞炴�ф煴鐘剁粺璁�
      * @return
      */
     List<Map<String, Object>> getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto);
 
     /**
-     * 鏌ヨ鍘熸潗鏂欏悎鏍肩巼楗肩姸鍥�
+     * 鏌ヨ鐗╂枡灞炴�у悎鏍肩巼楗肩姸鍥�
      * @param dataAnalysisDto
      * @return
      */
     Map<String, Object> getRawPassRateByCake(DataAnalysisDto dataAnalysisDto);
 
+    /**
+     * 鏌ヨ鐗╂枡灞炴�у悎鏍肩巼楗肩姸鍥�
+     * @param dataAnalysisDto
+     * @return
+     */
+    List<MaterialPropTableDTO> getMaterialPropTable(DataAnalysisDto dataAnalysisDto);
 
     /**
      * 鏌ヨ妫�楠岄」鍚嶇О
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
index 33b9b28..5a9ea09 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.constant.InsOrderTypeConstants;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.DataAnalysisDto;
+import com.ruoyi.inspect.dto.MaterialPropTableDTO;
 import com.ruoyi.inspect.dto.SampleProductRawAnalysisDto;
 import com.ruoyi.inspect.mapper.DataAnalysisMapper;
 import com.ruoyi.inspect.mapper.InsProductMapper;
@@ -43,7 +44,8 @@
     private InsProductMapper insProductMapper;
 
     /**
-     * 鏌ヨ鍘熸潗鏂欐煴鐘剁粺璁�
+     * 鏌ヨ鐗╂枡灞炴�ф煴鐘剁粺璁�
+     *
      * @return searchTime  鏃堕棿
      * @return passRate  鍚堟牸鐜�
      * @return sum  鎬绘暟
@@ -64,7 +66,8 @@
             DateTime endOfWeek = DateUtil.endOfWeek(now);
             dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
             dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
-            return dataAnalysisMapper.getRawPassRateByBarChartByWeek(dataAnalysisDto);
+            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByWeek(dataAnalysisDto);
+            return maps;
         } else if (dataAnalysisDto.getDateType().equals("2")) {
             // 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂达紙姣忔湀1鍙� 00:00:00锛�
             DateTime beginOfMonth = DateUtil.beginOfMonth(now);
@@ -72,7 +75,8 @@
             DateTime endOfMonth = DateUtil.endOfMonth(now);
             dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
             dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
-            return dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto);
+            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto);
+            return maps;
         } else if (dataAnalysisDto.getDateType().equals("3")) {
             // 鑾峰彇褰撳墠骞寸殑寮�濮嬫椂闂达紙姣忓勾1鏈�1鏃� 00:00:00锛�
             DateTime beginOfYear = DateUtil.beginOfYear(now);
@@ -80,7 +84,8 @@
             DateTime endOfYear = DateUtil.endOfYear(now);
             dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
             dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
-            return dataAnalysisMapper.getRawPassRateByBarChartByYear(dataAnalysisDto);
+            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByYear(dataAnalysisDto);
+            return maps;
         }
 
         return null;
@@ -88,9 +93,9 @@
 
     /**
      * 鏌ヨ鍘熸潗鏂欓ゼ鐘跺浘
+     *
      * @param dataAnalysisDto
-     * @return
-     * sum          : 鎬绘暟
+     * @return sum          : 鎬绘暟
      * unQualified  : 涓嶅悎鏍兼暟閲�
      * qualified  : 鍚堟牸鏁伴噺
      * passRate  : 鍚堟牸鐜�
@@ -125,12 +130,51 @@
             dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
             dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
         }
-        return dataAnalysisMapper.getRawPassRateByCake(dataAnalysisDto);
+
+        Map<String, Object> rawPassRateByCake = dataAnalysisMapper.getRawPassRateByCake(dataAnalysisDto);
+
+        return rawPassRateByCake;
     }
 
+    @Override
+    public List<MaterialPropTableDTO> getMaterialPropTable(DataAnalysisDto dataAnalysisDto) {
+        // 鏍煎紡鍖栧瓧娈�, 閬垮厤鎶ラ敊
+        this.formatDataAnalysisDto(dataAnalysisDto);
+        // 鑾峰彇褰撳墠鏃ユ湡
+        DateTime now = DateUtil.date();
+        if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) {
+
+        } else if (dataAnalysisDto.getDateType().equals("1")) {
+            // 鑾峰彇鏈懆鐨勫紑濮嬫椂闂达紙鍛ㄤ竴 00:00:00锛�
+            DateTime beginOfWeek = DateUtil.beginOfWeek(now);
+            // 鑾峰彇鏈懆鐨勭粨鏉熸椂闂达紙鍛ㄦ棩 23:59:59锛�
+            DateTime endOfWeek = DateUtil.endOfWeek(now);
+            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
+            dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
+        } else if (dataAnalysisDto.getDateType().equals("2")) {
+            // 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂达紙姣忔湀1鍙� 00:00:00锛�
+            DateTime beginOfMonth = DateUtil.beginOfMonth(now);
+            // 鑾峰彇褰撳墠鏈堢殑缁撴潫鏃堕棿锛堟湰鏈堟渶鍚庝竴澶� 23:59:59锛�
+            DateTime endOfMonth = DateUtil.endOfMonth(now);
+            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
+            dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
+        } else if (dataAnalysisDto.getDateType().equals("3")) {
+            // 鑾峰彇褰撳墠骞寸殑寮�濮嬫椂闂达紙姣忓勾1鏈�1鏃� 00:00:00锛�
+            DateTime beginOfYear = DateUtil.beginOfYear(now);
+            // 鑾峰彇褰撳墠骞寸殑缁撴潫鏃堕棿锛堟瘡骞�12鏈�31鏃� 23:59:59锛�
+            DateTime endOfYear = DateUtil.endOfYear(now);
+            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
+            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
+        }
+
+        List<MaterialPropTableDTO> rawPassRateByCake = dataAnalysisMapper.getMaterialPropTable(dataAnalysisDto);
+
+        return rawPassRateByCake;
+    }
 
     /**
      * 鏌ヨ妫�楠岄」鍚嶇О
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -151,6 +195,7 @@
 
     /**
      * 鏌ヨ鍘熸潗鏂欓」妫�鍒嗘瀽
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -202,6 +247,7 @@
 
     /**
      * 鏌ヨ妫�娴嬮」鍒嗘瀽鍒楄〃
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -214,6 +260,7 @@
 
     /**
      * 鏌ヨ椤规鍒嗘瀽鍚堟牸鐜�
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -386,6 +433,7 @@
 
     /**
      * 鏌ヨ鏈湀涓庝笂鏈堝悎鏍肩巼瀵规瘮
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -396,6 +444,7 @@
 
     /**
      * 鏌ヨ妫�楠岄」绫诲瀷楗煎浘
+     *
      * @param dataAnalysisDto
      * @return
      */
@@ -406,6 +455,7 @@
 
     /**
      * 璁$畻杩斿洖鏁版嵁
+     *
      * @param lastValues
      * @return
      */
@@ -473,6 +523,7 @@
 
     /**
      * 璁$畻鏋佸樊
+     *
      * @param lastValues
      * @return
      */
@@ -509,6 +560,7 @@
 
     /**
      * 璁$畻骞冲潎鍊�
+     *
      * @param values
      * @return
      */
@@ -531,6 +583,7 @@
 
     /**
      * 璁$畻鏍囧噯鍋忓樊
+     *
      * @return
      */
     private static BigDecimal computeStandardDeviation(List<String> lastValues) {
@@ -588,6 +641,7 @@
 
     /**
      * *****鏍煎紡鍖栧瓧娈�****
+     *
      * @param dataAnalysisDto
      */
     private void formatDataAnalysisDto(DataAnalysisDto dataAnalysisDto) {
diff --git a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
index 6e4e410..3c19453 100644
--- a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
+++ b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -1,195 +1,304 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ruoyi.inspect.mapper.DataAnalysisMapper">
-    <!-- 鑾峰彇鏈懆鐨勫師鏉愭枡淇℃伅 -->
+
+    <!-- 鑾峰彇鏈懆鐨勭墿鏂欏睘鎬т俊鎭� -->
     <select id="getRawPassRateByBarChartByWeek" resultType="java.util.Map">
-        WITH RECURSIVE AllWeeks AS (SELECT 1 AS week
-                                     UNION ALL
-                                     SELECT week + 1
-                                     FROM AllWeeks
-                                     WHERE week &lt; 7)
-        SELECT COALESCE(sub.sum, 0)      AS sum,
-               CASE am.week
-                   WHEN 1 THEN '鏄熸湡鏃�'
-                   WHEN 2 THEN '鏄熸湡涓�'
-                   WHEN 3 THEN '鏄熸湡浜�'
-                   WHEN 4 THEN '鏄熸湡涓�'
-                   WHEN 5 THEN '鏄熸湡鍥�'
-                   WHEN 6 THEN '鏄熸湡浜�'
-                   WHEN 7 THEN '鏄熸湡鍏�'
-                END                   AS searchTime,
-               COALESCE(sub.passRate, 0) AS passRate
+        WITH RECURSIVE AllWeeks AS (
+        SELECT 1 AS week
+        UNION ALL
+        SELECT week + 1 FROM AllWeeks WHERE week &lt; 7
+        )
+        SELECT
+        COALESCE(sub.qualified, 0) AS qualified,
+        COALESCE(sub.unQualified, 0) AS unQualified,
+        CASE am.week
+        WHEN 1 THEN '鏄熸湡鏃�'
+        WHEN 2 THEN '鏄熸湡涓�'
+        WHEN 3 THEN '鏄熸湡浜�'
+        WHEN 4 THEN '鏄熸湡涓�'
+        WHEN 5 THEN '鏄熸湡鍥�'
+        WHEN 6 THEN '鏄熸湡浜�'
+        WHEN 7 THEN '鏄熸湡鍏�'
+        END AS searchTime
         FROM AllWeeks am
-                 LEFT JOIN (select COUNT(*)                 sum,
-                                   DAYOFWEEK(io1.send_time) searchTime,
-                                   ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
-                                         100,
-                                         2)                 passRate
-                            from ifs_inventory_quantity iiq
-                                     LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
-                                and io1.order_type = #{dto.orderType}
-                                and io1.state != -1
-                                     left join (select is2.ins_order_id,
-                                                       is2.sample_type,
-                                                       is2.model,
-                                                       is2.sample
-                                                from ins_sample is2
-                                                group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
-                            where iiq.is_finish = 1
-                              and iiq.inspect_status not in (0, 3)
-                              and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
-        <if test="dto.sampleName != null and dto.sampleName != ''">
-            and ins.sample like concat('%', #{dto.sampleName}, '%')
+        LEFT JOIN (
+        SELECT
+        DAYOFWEEK(io1.send_time) AS week,
+        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified
+        FROM ifs_inventory_quantity iiq
+        INNER JOIN ins_order io1
+        ON io1.ifs_inventory_id = iiq.id
+        LEFT JOIN (
+        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
+        FROM ins_sample
+        GROUP BY ins_order_id
+        ) ins ON ins.ins_order_id = io1.id
+        WHERE
+        iiq.is_finish = 1
+        AND iiq.inspect_status IN (1, 2)
+        AND io1.order_type = #{dto.orderType}
+        AND io1.state != -1
+        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+
+        <if test="dto.materialProp != null and dto.materialProp.trim() != ''">
+            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
         </if>
-        <if test="dto.modelName != null and dto.modelName != ''">
-            and ins.model like concat('%', #{dto.modelName}, '%')
+        <if test="dto.sampleName != null and dto.sampleName.trim() != ''">
+            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
         </if>
-        <if test="dto.supplierName != null and dto.supplierName != ''">
-            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
+        <if test="dto.modelName != null and dto.modelName.trim() != ''">
+            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
         </if>
-                            GROUP BY DAYOFWEEK(io1.send_time)
-                            having searchTime is not null) sub ON am.week = sub.searchTime
-        WHERE am.week BETWEEN 1 AND 7
+        <if test="dto.supplierName != null and dto.supplierName.trim() != ''">
+            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
+        </if>
+
+        GROUP BY DAYOFWEEK(io1.send_time)
+        ) sub ON am.week = sub.week
         ORDER BY am.week
+
     </select>
 
-    <!-- 鑾峰彇鏈湀鐨勫師鏉愭枡淇℃伅 -->
+
+    <!-- 鑾峰彇鏈湀鐨勭墿鏂欏睘鎬т俊鎭� -->
+    <!-- 鑾峰彇鏈湀鐨勭墿鏂欏睘鎬т俊鎭紙鎸夊ぉ锛岃ˉ鍏ㄦ棩鏈燂級 -->
     <select id="getRawPassRateByBarChartByDay" resultType="java.util.Map">
-        select COUNT(*)                         sum,
-               DATE_FORMAT(io1.send_time, '%Y-%m-%d') searchTime,
-               ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100,
-                     2)                         passRate
-        from ifs_inventory_quantity iiq
-                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
-            and io1.order_type = #{dto.orderType}
-            and io1.state != -1
-                 left join (select is2.ins_order_id,
-                                   is2.sample_type,
-                                   is2.model,
-                                   is2.sample
-                            from ins_sample is2
-                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
-        where iiq.is_finish = 1
-          and iiq.inspect_status not in (0, 3)
-        and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
+        WITH RECURSIVE AllDays AS (
+        SELECT DATE(#{dto.beginDate}) AS day
+        UNION ALL
+        SELECT DATE_ADD(day, INTERVAL 1 DAY)
+        FROM AllDays
+        WHERE day &lt; DATE(#{dto.endDate})
+        )
+        SELECT
+        DATE_FORMAT(ad.day,'%Y-%m-%d') AS searchTime,
+        COALESCE(sub.qualified,0) AS qualified,
+        COALESCE(sub.unQualified,0) AS unQualified,
+        CASE
+        WHEN COALESCE(sub.total,0) = 0 THEN 0
+        ELSE ROUND(sub.qualified / sub.total * 100, 2)
+        END AS passRate
+        FROM AllDays ad
+        LEFT JOIN (
+        SELECT
+        DATE(io1.send_time) AS day,
+        COUNT(*) AS total,
+        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified
+        FROM ifs_inventory_quantity iiq
+        LEFT JOIN ins_order io1
+        ON io1.ifs_inventory_id = iiq.id
+        AND io1.order_type = #{dto.orderType}
+        AND io1.state != -1
+        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+        LEFT JOIN (
+        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
+        FROM ins_sample
+        GROUP BY ins_order_id
+        ) ins ON ins.ins_order_id = io1.id
+        WHERE
+        iiq.is_finish = 1
+        AND iiq.inspect_status IN (1,2)
+
+        <if test="dto.materialProp != null and dto.materialProp != ''">
+            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
+        </if>
         <if test="dto.sampleName != null and dto.sampleName != ''">
-            and ins.sample like concat('%', #{dto.sampleName}, '%')
+            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
         </if>
         <if test="dto.modelName != null and dto.modelName != ''">
-            and ins.model like concat('%', #{dto.modelName}, '%')
+            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
         </if>
         <if test="dto.supplierName != null and dto.supplierName != ''">
-            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
+            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
         </if>
-        GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m-%d')
-        having searchTime is not null
-        order by searchTime
+
+        GROUP BY DATE(io1.send_time)
+        ) sub ON ad.day = sub.day
+        ORDER BY ad.day
     </select>
 
-    <!-- 鑾峰彇鏈勾鐨勫師鏉愭枡淇℃伅 -->
+
+    <!-- 鑾峰彇鏈勾鐨勭墿鏂欏睘鎬т俊鎭� -->
+    <!-- 鑾峰彇鏈勾鐨勭墿鏂欏睘鎬т俊鎭� -->
     <select id="getRawPassRateByBarChartByYear" resultType="java.util.Map">
-        WITH RECURSIVE AllMonths AS (SELECT 1 AS month
-                                     UNION ALL
-                                     SELECT month + 1
-                                     FROM AllMonths
-                                     WHERE month &lt; 12)
-        SELECT COALESCE(sub.sum, 0)      AS sum,
-               CASE am.month
-                   WHEN 1 THEN '1鏈�'
-                   WHEN 2 THEN '2鏈�'
-                   WHEN 3 THEN '3鏈�'
-                   WHEN 4 THEN '4鏈�'
-                   WHEN 5 THEN '5鏈�'
-                   WHEN 6 THEN '6鏈�'
-                   WHEN 7 THEN '7鏈�'
-                   WHEN 8 THEN '8鏈�'
-                   WHEN 9 THEN '9鏈�'
-                   WHEN 10 THEN '10鏈�'
-                   WHEN 11 THEN '11鏈�'
-                   WHEN 12 THEN '12鏈�'
-                END                   AS searchTime,
-               COALESCE(sub.passRate, 0) AS passRate
+        WITH RECURSIVE AllMonths AS (
+        SELECT 1 AS month
+        UNION ALL
+        SELECT month + 1 FROM AllMonths WHERE month
+        &lt;
+        12
+        )
+        SELECT
+        CASE am.month
+        WHEN 1 THEN '1鏈�'
+        WHEN 2 THEN '2鏈�'
+        WHEN 3 THEN '3鏈�'
+        WHEN 4 THEN '4鏈�'
+        WHEN 5 THEN '5鏈�'
+        WHEN 6 THEN '6鏈�'
+        WHEN 7 THEN '7鏈�'
+        WHEN 8 THEN '8鏈�'
+        WHEN 9 THEN '9鏈�'
+        WHEN 10 THEN '10鏈�'
+        WHEN 11 THEN '11鏈�'
+        WHEN 12 THEN '12鏈�'
+        END AS searchTime,
+        COALESCE(sub.qualified,0) AS qualified,
+        COALESCE(sub.unQualified,0) AS unQualified,
+        CASE
+        WHEN COALESCE(sub.total,0) = 0 THEN 0
+        ELSE ROUND(sub.qualified / sub.total * 100, 2)
+        END AS passRate
         FROM AllMonths am
-                 LEFT JOIN (select COUNT(*)                         sum,
-                                   DATE_FORMAT(io1.send_time, '%m') searchTime,
-                                   ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) /
-                                         COUNT(*) * 100,
-                                         2)                         passRate
-                            from ifs_inventory_quantity iiq
-                                     LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
-                                and io1.order_type = #{dto.orderType}
-                                and io1.state != -1
-                                     left join (select is2.ins_order_id,
-                                                       is2.sample_type,
-                                                       is2.model,
-                                                       is2.sample
-                                                from ins_sample is2
-                                                group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
-                            where iiq.is_finish = 1
-                              and iiq.inspect_status not in (0, 3)
-                              and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
+        LEFT JOIN (
+        SELECT
+        MONTH(io1.send_time) AS month,
+        COUNT(*) AS total,
+        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified
+        FROM ifs_inventory_quantity iiq
+        LEFT JOIN ins_order io1
+        ON io1.ifs_inventory_id = iiq.id
+        AND io1.order_type = #{dto.orderType}
+        AND io1.state != -1
+        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+        LEFT JOIN (
+        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
+        FROM ins_sample
+        GROUP BY ins_order_id
+        ) ins ON ins.ins_order_id = io1.id
+        WHERE
+        iiq.is_finish = 1
+        AND iiq.inspect_status IN (1,2)
+
+        <if test="dto.materialProp != null and dto.materialProp != ''">
+            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
+        </if>
         <if test="dto.sampleName != null and dto.sampleName != ''">
-            and ins.sample like concat('%', #{dto.sampleName}, '%')
+            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
         </if>
         <if test="dto.modelName != null and dto.modelName != ''">
-            and ins.model like concat('%', #{dto.modelName}, '%')
+            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
         </if>
         <if test="dto.supplierName != null and dto.supplierName != ''">
-            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
+            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
         </if>
-                            GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m')
-                            having searchTime is not null) sub ON am.month = sub.searchTime
-        WHERE am.month BETWEEN 1 AND 12
+
+        GROUP BY MONTH(io1.send_time)
+        ) sub ON am.month = sub.month
         ORDER BY am.month
     </select>
 
-    <!-- 鏌ョ湅鍘熸潗鏂欓ゼ鐘跺浘 -->
+
+    <!-- 鏌ョ湅鐗╂枡灞炴�чゼ鐘跺浘 -->
     <select id="getRawPassRateByCake" resultType="java.util.Map">
-        select COUNT(*)                                                                                             sum,
-               (COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END))                               qualified,
-               (COUNT(*) - SUM(CASE WHEN inspect_status = 1 THEN 1 ELSE 0 END))                                     unQualified,
-               ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100,
-                     2) AS passRate
-        from ifs_inventory_quantity iiq
-                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
-            and io1.order_type = #{dto.orderType}
-            and io1.state != -1
-                 left join (select is2.ins_order_id,
-                                   is2.sample_type,
-                                   is2.model,
-                                   is2.sample
-                            from ins_sample is2
-                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
-        where iiq.is_finish = 1
-          and iiq.inspect_status not in (0, 3)
-          and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
+        SELECT
+        COUNT(*) AS sum,
+        /* 鍚堟牸 */
+        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
+        /* 涓嶅悎鏍� */
+        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified,
+        ROUND(
+        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END)
+        / COUNT(*) * 100,
+        2
+        ) AS passRate
+        FROM ifs_inventory_quantity iiq
+        INNER JOIN ins_order io1
+        ON io1.ifs_inventory_id = iiq.id
+        LEFT JOIN (
+        SELECT
+        is2.ins_order_id,
+        MAX(is2.sample_type) AS sample_type,
+        MAX(is2.model) AS model,
+        MAX(is2.sample) AS sample
+        FROM ins_sample is2
+        GROUP BY is2.ins_order_id
+        ) ins ON ins.ins_order_id = io1.id
+        WHERE
+        iiq.is_finish = 1
+        AND iiq.inspect_status IN (1, 2)
+        AND io1.order_type = #{dto.orderType}
+        AND io1.state != -1
+        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+
+        <if test="dto.materialProp != null and dto.materialProp.trim() != ''">
+            AND IFNULL(iiq.material_prop, '') LIKE CONCAT('%', #{dto.materialProp}, '%')
+        </if>
+        <if test="dto.sampleName != null and dto.sampleName.trim() != ''">
+            AND IFNULL(ins.sample, '') LIKE CONCAT('%', #{dto.sampleName}, '%')
+        </if>
+        <if test="dto.modelName != null and dto.modelName.trim() != ''">
+            AND IFNULL(ins.model, '') LIKE CONCAT('%', #{dto.modelName}, '%')
+        </if>
+        <if test="dto.supplierName != null and dto.supplierName.trim() != ''">
+            AND IFNULL(iiq.supplier_name, '') LIKE CONCAT('%', #{dto.supplierName}, '%')
+        </if>
+    </select>
+
+    <select id="getMaterialPropTable" resultType="com.ruoyi.inspect.dto.MaterialPropTableDTO">
+        SELECT
+        iiq.update_batch_no AS updateBatchNo, -- 淇敼鍚庢壒娆″彿
+        iiq.qty_arrived AS qtyArrived, -- 鎶佃揪鐨勯噰璐暟閲�
+        iiq.part_desc AS partDesc, -- 闆朵欢鎻忚堪
+        iiq.inspect_status AS inspectStatus, -- 鍚堟牸鐘舵��
+        io1.send_time AS sendTime -- 涓嬪彂鏃堕棿
+        FROM ifs_inventory_quantity iiq
+        INNER JOIN ins_order io1
+        ON io1.ifs_inventory_id = iiq.id
+        AND io1.order_type = #{dto.orderType}
+        AND io1.state != -1
+        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+        LEFT JOIN (
+        SELECT
+        ins_order_id,
+        MAX(sample) AS sample,
+        MAX(model) AS model
+        FROM ins_sample
+        GROUP BY ins_order_id
+        ) ins ON ins.ins_order_id = io1.id
+        WHERE
+        iiq.is_finish = 1
+        AND iiq.inspect_status IN (1,2)
+
+        <if test="dto.materialProp != null and dto.materialProp != ''">
+            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
+        </if>
+
         <if test="dto.sampleName != null and dto.sampleName != ''">
-            and ins.sample like concat('%', #{dto.sampleName}, '%')
+            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
         </if>
+
         <if test="dto.modelName != null and dto.modelName != ''">
-            and ins.model like concat('%', #{dto.modelName}, '%')
+            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
         </if>
+
         <if test="dto.supplierName != null and dto.supplierName != ''">
-            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
+            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
         </if>
+
+        ORDER BY io1.send_time DESC
     </select>
 
     <select id="getRawProductAnalysisAllSample" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
         select iiq.*,
-               io1.entrust_code,
-               io1.id     enter_order_id,
-               ins.id     sample_id,
-               ins.sample_type,
-               ins.sample sample_name,
-               ins.model  sample_model,
-               io1.send_time
+        io1.entrust_code,
+        io1.id enter_order_id,
+        ins.id sample_id,
+        ins.sample_type,
+        ins.sample sample_name,
+        ins.model sample_model,
+        io1.send_time
         from ifs_inventory_quantity iiq
-                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
-            and io1.order_type = #{dto.orderType}
-            and io1.state != -1
-                 left join ins_sample  ins on ins.ins_order_id = io1.id
+        LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
+        and io1.order_type = #{dto.orderType}
+        and io1.state != -1
+        left join ins_sample ins on ins.ins_order_id = io1.id
         where iiq.is_finish = 1
-          and iiq.inspect_status not in (0, 3)
+        and iiq.inspect_status not in (0, 3)
         <if test="dto.beginDate != null and dto.beginDate != '' and dto.endDate != null and dto.endDate != ''">
             and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
         </if>
@@ -207,29 +316,29 @@
     <!-- 鏌ヨ妫�娴嬮」闆嗗悎 -->
     <select id="getRawProductAnalysisList" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
         select iiq.*,
-               io1.entrust_code,
-               io1.id     enter_order_id,
-               ins.id     sample_id,
-               ins.sample_type,
-               ins.sample sample_name,
-               ins.model  sample_model,
-               u.name     user_name,
-               io1.send_time
+        io1.entrust_code,
+        io1.id enter_order_id,
+        ins.id sample_id,
+        ins.sample_type,
+        ins.sample sample_name,
+        ins.model sample_model,
+        u.name user_name,
+        io1.send_time
         from ifs_inventory_quantity iiq
-                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
-            and io1.order_type = #{dto.orderType}
-            and io1.state != -1
-                 left join user u on io1.create_user = u.id
-                 left join (select is2.ins_order_id,
-                                   is2.sample_type,
-                                   is2.sample_code,
-                                   is2.model,
-                                   is2.sample,
-                                   is2.id
-                            from ins_sample is2
-                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
+        LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
+        and io1.order_type = #{dto.orderType}
+        and io1.state != -1
+        left join user u on io1.create_user = u.id
+        left join (select is2.ins_order_id,
+        is2.sample_type,
+        is2.sample_code,
+        is2.model,
+        is2.sample,
+        is2.id
+        from ins_sample is2
+        group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
         where iiq.is_finish = 1
-          and iiq.inspect_status not in (0, 3)
+        and iiq.inspect_status not in (0, 3)
         <if test="dto.beginDate != null and dto.beginDate != '' and dto.endDate != null and dto.endDate != ''">
             and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
         </if>
@@ -244,26 +353,26 @@
         </if>
     </select>
     <select id="getItemValueByOrderIds" resultType="com.ruoyi.inspect.vo.RawMaterialSupplierVo">
-        select io2.id                   orderId,
-               io2.entrust_code,
-               ins.sample,
-               ins.model,
-               iiq.supplier_name,
-               (select ip.`last_value`
-                from ins_product ip
-                where concat(ip.inspection_item, ip.inspection_item_subclass) = #{itemName}
-                  and ip.ins_sample_id = ins.id
-                limit 1) lastValue
+        select io2.id orderId,
+        io2.entrust_code,
+        ins.sample,
+        ins.model,
+        iiq.supplier_name,
+        (select ip.`last_value`
+        from ins_product ip
+        where concat(ip.inspection_item, ip.inspection_item_subclass) = #{itemName}
+        and ip.ins_sample_id = ins.id
+        limit 1) lastValue
         from ins_order io2
-                 left join ifs_inventory_quantity iiq on io2.ifs_inventory_id = iiq.id
-                 left join (select is2.ins_order_id,
-                                   is2.sample_type,
-                                   is2.sample_code,
-                                   is2.model,
-                                   is2.sample,
-                                   is2.id
-                            from ins_sample is2
-                            group by is2.ins_order_id) ins on ins.ins_order_id = io2.id
+        left join ifs_inventory_quantity iiq on io2.ifs_inventory_id = iiq.id
+        left join (select is2.ins_order_id,
+        is2.sample_type,
+        is2.sample_code,
+        is2.model,
+        is2.sample,
+        is2.id
+        from ins_sample is2
+        group by is2.ins_order_id) ins on ins.ins_order_id = io2.id
         where io2.id in
         <foreach collection="insOrderIds" index="index" open="(" separator="," close=")" item="val">
             #{val}
@@ -272,7 +381,7 @@
 
     <!-- 鏌ヨ鏈湀涓庝笂鏈堝悎鏍肩巼瀵规瘮 -->
     <select id="getRawUpMonth" resultType="java.util.Map">
-        select DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') as month,
+        select DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') as                           month,
                (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
                              100,
                              2) passRate
@@ -282,10 +391,11 @@
                     and io1.state != -1
                 where iiq.is_finish = 1
                   and iiq.inspect_status not in (0, 3)
-                  and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH), '%Y-%m-%d %H:%i:%s')
+                  and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH),
+                                                         '%Y-%m-%d %H:%i:%s')
                     and DATE_FORMAT(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), '%Y-%m-%d 23:59:59'))) passRate
         UNION ALL
-        select DATE_FORMAT(CURRENT_DATE, '%Y-%m') as month,
+        select DATE_FORMAT(CURRENT_DATE, '%Y-%m') as                            month,
                (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
                              100,
                              2) passRate

--
Gitblit v1.9.3