From 72b971c98c46531064d74b68fc8fe8864ed0b544 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 08 Nov 2022 09:04:56 +0800
Subject: [PATCH] 大屏溯源统计次数sql修改

---
 src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml |  223 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 205 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml b/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml
index bc60994..3090eb0 100644
--- a/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml
+++ b/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml
@@ -23,23 +23,32 @@
 
 
     <select id="selectProcessPage" resultMap="processResultMap">
-        SELECT p.strain_id,p.id,
-        p.land_id,sale_time,sale_num,strain_name,process_id,
-        SUM(p.process_num) as process_num,
+        SELECT DISTINCT p.id,
+        p.strain_id,
+        p.land_id,
+        p.sale_time,
+        p.sale_num,
+        strain_name,p.process_id,
+        p.parent_id,
+        p.process_num as process_num,
         m.machining_type AS processName,
-        m.machining_tp AS tpurl
+        m.machining_tp AS tpurl,
+        a.machining_type AS parentName
         FROM sys_process p
         LEFT JOIN sys_machining m ON m.id = p.process_id
         LEFT JOIN sys_land sl ON sl.id = p.land_id
         LEFT JOIN sys_strain strain ON p.strain_id = strain.id
+        LEFT JOIN sys_process_inv inv ON inv.product_id = p.process_id
+        LEFT JOIN (SELECT mm.id,mm.machining_type FROM sys_machining mm) a ON a.id = p.parent_id
         WHERE p.is_deleted = 0
         <if test="process.farmId!=null and process.farmId!=''">
-            and sl.farm_id = #{process.farmId}
+            AND (sl.farm_id = #{process.farmId} or (inv.fps_id = #{process.farmId} AND p.land_id IS NULL))
         </if>
-        <if test="process.strainId !=null and process.strainId !=''">
-            and p.strain_id = #{process.strainId}
+        <if test="process.kind !=null and process.kind !=''">
+            and (p.strain_id = #{process.kind} OR p.parent_id = #{process.kind})
         </if>
-        GROUP BY p.strain_id,m.machining_type,m.machining_tp,p.land_id,sale_time,sale_num,process_id,p.id ORDER BY p.create_time DESC
+        GROUP BY p.id
+        ORDER BY p.create_time DESC
     </select>
 
     <select id="stockCompare" resultType="boolean">
@@ -62,15 +71,193 @@
     </update>
 
     <select id="statistics" resultType="java.lang.Double">
-    SELECT SUM(p.process_num) AS sum
-    FROM sys_process p
-    LEFT JOIN sys_land land ON land.id = p.land_id
-    WHERE 1=1 AND p.is_deleted = 0
-    <if test="year!=null and year!=''">
-        and YEAR ( p.sale_time ) = #{year}
-    </if>
-    <if test="farmId!=null and farmId!=''">
-        and land.farm_id = #{farmId}
-    </if>
+        SELECT SUM(a.process_num)as sum FROM
+        (
+        SELECT DISTINCT p.process_num
+        FROM sys_process p
+        LEFT JOIN sys_land land ON land.id = p.land_id
+        LEFT JOIN sys_process_inv inv ON inv.product_id = p.process_id
+        WHERE 1=1 AND p.is_deleted = 0
+        <if test="year!=null and year!=''">
+            and YEAR ( p.sale_time ) = #{year}
+        </if>
+        <if test="farmId!=null and farmId!=''">
+            and (land.farm_id = #{farmId} or (inv.fps_id = #{farmId} AND p.land_id IS NULL))
+        </if>
+        ) a
+    </select>
+    <select id="statisticsMonth" resultType="java.util.Map">
+        SELECT
+        DAY(lefttable.date) time,
+        IFNULL( righttable.m, '0' ) AS num
+        FROM
+        (
+        SELECT
+        ADDDATE( y.FIRST, x.d - 1 ) AS date
+        FROM
+        (
+        SELECT
+        1 AS d UNION ALL
+        SELECT
+        2 UNION ALL
+        SELECT
+        3 UNION ALL
+        SELECT
+        4 UNION ALL
+        SELECT
+        5 UNION ALL
+        SELECT
+        6 UNION ALL
+        SELECT
+        7 UNION ALL
+        SELECT
+        8 UNION ALL
+        SELECT
+        9 UNION ALL
+        SELECT
+        10 UNION ALL
+        SELECT
+        11 UNION ALL
+        SELECT
+        12 UNION ALL
+        SELECT
+        13 UNION ALL
+        SELECT
+        14 UNION ALL
+        SELECT
+        15 UNION ALL
+        SELECT
+        16 UNION ALL
+        SELECT
+        17 UNION ALL
+        SELECT
+        18 UNION ALL
+        SELECT
+        19 UNION ALL
+        SELECT
+        20 UNION ALL
+        SELECT
+        21 UNION ALL
+        SELECT
+        22 UNION ALL
+        SELECT
+        23 UNION ALL
+        SELECT
+        24 UNION ALL
+        SELECT
+        25 UNION ALL
+        SELECT
+        26 UNION ALL
+        SELECT
+        27 UNION ALL
+        SELECT
+        28 UNION ALL
+        SELECT
+        29 UNION ALL
+        SELECT
+        30 UNION ALL
+        SELECT
+        31
+        ) x,
+        (
+        SELECT
+        CONCAT( #{year}, '-01' ) AS FIRST,
+        DAY ( LAST_DAY( str_to_date( concat( #{year}, '-01' ), '%Y-%m-%d' ) ) ) AS last
+        ) y
+        WHERE
+        x.d &lt;= y.last
+        AND ADDDATE( y.FIRST, x.d - 1 ) &lt;= CURDATE( )
+        ) AS lefttable
+        LEFT JOIN
+        (
+            SELECT
+                IFNULL( sum( middle.process_num ), 0 ) AS m,
+		        middle.gptime
+		    FROM
+		    (
+                SELECT DISTINCT
+                    process.process_num,
+                    DATE_FORMAT( process.sale_time, '%Y-%c-%d' ) AS gptime
+                 FROM
+                    sys_process process
+                left join sys_land sl on sl.id = process.land_id
+                LEFT JOIN sys_process_inv inv ON inv.product_id = process.process_id
+                WHERE
+                    DATE_FORMAT( process.sale_time, '%Y-%m' ) = #{year}
+                    and (sl.farm_id = #{farmId} OR ( inv.fps_id =  #{farmId} AND process.land_id IS NULL ))
+		    )middle GROUP BY middle.gptime
+        ) AS righttable ON DATE_FORMAT( lefttable.date, '%Y-%c-%d' ) = righttable.gptime
+        ORDER BY time
+
+    </select>
+
+    <select id="statisticsYear" resultType="java.util.Map">
+         select m.id time, IFNULL(b,0) num from
+                (
+                  select 1 as id union
+                    select 2 union
+                    select 3 union
+                    select 4 union
+                    select 5 union
+                    select 6 union
+                    select 7 union
+                    select 8 union
+                    select 9 union
+                    select 10 union
+                    select 11 union
+                    select 12
+                ) m
+                left join
+                (
+                    SELECT middle.a,SUM(middle.process_num) b FROM
+                         (
+                            select DISTINCT
+                                month(p.sale_time) a,
+                                p.process_num
+                            from sys_process p
+                            left join sys_land sl on sl.id = p.land_id
+                            LEFT JOIN sys_process_inv inv ON inv.product_id = p.process_id
+                            where
+                                year(p.sale_time) = #{year}
+                                and (sl.farm_id = #{farmId} OR ( inv.fps_id =  #{farmId} AND p.land_id IS NULL ))
+                        ) middle GROUP BY middle.a
+                ) n
+            on m.id = n.a
+            order by id
+    </select>
+
+    <select id="statisticsDay" resultType="java.util.Map">
+ select a.order_hour as time, ifnull(b.num, 0) as num
+        from (
+        SELECT 0 AS order_hour UNION ALL SELECT 1 AS order_hour UNION ALL
+        SELECT 2 AS order_hour UNION ALL SELECT 3 AS order_hour UNION ALL
+        SELECT 4 AS order_hour UNION ALL SELECT 5 AS order_hour UNION ALL
+        SELECT 6 AS order_hour UNION ALL SELECT 7 AS order_hour UNION ALL
+        SELECT 8 AS order_hour UNION ALL SELECT 9 AS order_hour UNION ALL
+        SELECT 10 AS order_hour UNION ALL SELECT 11 AS order_hour UNION ALL
+        SELECT 12 AS order_hour UNION ALL SELECT 13 AS order_hour UNION ALL
+        SELECT 14 AS order_hour UNION ALL SELECT 15 AS order_hour UNION ALL
+        SELECT 16 AS order_hour UNION ALL SELECT 17 AS order_hour UNION ALL
+        SELECT 18 AS order_hour UNION ALL SELECT 19 AS order_hour UNION ALL
+        SELECT 20 AS order_hour UNION ALL SELECT 21 AS order_hour UNION ALL
+        SELECT 22 AS order_hour UNION ALL SELECT 23 AS order_hour
+        ) as a
+        LEFT JOIN
+        (
+        SELECT middle.order_hour,SUM(middle.process_num) num FROM
+            (
+                SELECT DISTINCT
+                    HOUR(process.sale_time) AS order_hour,
+                    process.process_num
+                from sys_process process
+                left join sys_land sl on sl.id = process.land_id
+                LEFT JOIN sys_process_inv inv ON inv.product_id = process.process_id
+                WHERE
+                    process.sale_time >= str_to_date(concat(#{year},' 00:00:00'),'%Y-%m-%d %T')
+                    AND process.sale_time &lt;= str_to_date(concat(#{year},' 23:59:59'),'%Y-%m-%d %T')
+                    and (sl.farm_id = #{farmId} OR ( inv.fps_id =  #{farmId} AND process.land_id IS NULL ))
+            ) middle GROUP BY middle.order_hour
+        ) b ON a.order_hour=b.order_hour
+        ORDER BY a.order_hour
     </select>
 </mapper>

--
Gitblit v1.9.3