ソースを参照

bugId-1202 数据逻辑修改

zhangchen 1 ヶ月 前
コミット
0c62482d29
1 ファイル変更254 行追加104 行削除
  1. 254 104
      alien-entity/src/main/resources/mapper/ManagementInfoMapper.xml

+ 254 - 104
alien-entity/src/main/resources/mapper/ManagementInfoMapper.xml

@@ -291,46 +291,59 @@
         FROM
         life_user_order `order`
         LEFT JOIN store_info store ON store.id = `order`.store_id
+        left join order_coupon_middle ocm on ocm.order_id  = `order`.id
         WHERE
-        `status` = 2
+        `order`.`status` = 2
         <if test="dataTime != null and dataTime != ''">
             AND
-            `order`.used_time > #{dataTime}
+            ocm.used_time > #{dataTime}
         </if>
         GROUP BY
         store.id) all_data
     </select>
     <select id="getOrderQuantity" resultType="shop.alien.entity.store.vo.ManagementInfoVo">
+        select count(*) count from (
         SELECT
             IFNULL(COUNT( 1 ) ,0) AS count
         FROM
-            life_user_order
+            life_user_order `order`
+        left join order_coupon_middle ocm on ocm.order_id  = `order`.id
         WHERE
-            ( `status` in (1, 2)
+            ( `order`.`status` = 1
             <if test="dataTime != null and dataTime != ''">
                 AND
-                buy_time > #{dataTime}
+                `order`.pay_time > #{dataTime}
             </if>
-             )
+             ) or
+        ( `order`.`status` = 2
+        <if test="dataTime != null and dataTime != ''">
+            AND
+            ocm.used_time > #{dataTime}
+        </if>
+        )
+        GROUP BY
+        `order`.id ) all_data
     </select>
     <select id="getTradingVolume" resultType="shop.alien.entity.store.vo.ManagementInfoVo">
+       select  IFNULL(ROUND(sum(all_data.profit_a), 2 ),0) profit from (
         SELECT
-            IFNULL(ROUND( sum( final_price ), 2 ),0) AS profit
+            IFNULL(ROUND( `order`.final_price , 2 ),0) AS profit_a
         FROM
-            life_user_order
+            life_user_order `order`
+        left join order_coupon_middle ocm on ocm.order_id  = `order`.id
         WHERE
-            ( `status` = 2
+            ( `order`.`status` = 2
                 <if test="dataTime != null and dataTime != ''">
                     AND
-                    used_time > #{dataTime}
+                    ocm.used_time > #{dataTime}
                 </if>
             )
-           OR ( `status` = 1
+           OR ( `order`.`status` = 1
             <if test="dataTime != null and dataTime != ''">
                 AND
-                buy_time > #{dataTime}
+                `order`.pay_time > #{dataTime}
             </if>
-            )
+            ) ) all_data
     </select>
     <select id="getQueryNetProfitDay" resultType="shop.alien.entity.store.vo.ManagementInfoVo">
         -- 使用递归 CTE 生成 1 到 23 的小时序列
@@ -340,20 +353,29 @@
         SELECT hour_num + 1
         FROM hours
         WHERE hour_num &lt; 23
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0 and o.status = 2
+        <if test="dataTime != null and dataTime != ''">
+            AND ocm.used_time >= #{dataTime}
+        </if>
         )
+
         SELECT
         concat(h.hour_num,":00") AS hour_num,
-        COALESCE(ROUND(SUM(o.final_price) * 0.04, 2), 0) AS profit
+        COALESCE(ROUND(SUM(o.final_price) * (IFNULL(o.commission_rate, 3)/100), 2), 0) AS profit
         FROM
         hours h
-        LEFT JOIN
-        life_user_order o
-        ON
-        h.hour_num = HOUR(o.used_time)
-        AND o.`status` = 1
-        <if test="dataTime != null and dataTime != ''">
-            AND o.used_time >= #{dataTime}
-        </if>
+        LEFT JOIN order_data o ON h.hour_num = HOUR(o.used_time)
+
         GROUP BY
         h.hour_num
         ORDER BY
@@ -366,17 +388,26 @@
         SELECT hour_num + INTERVAL 1 DAY
         FROM date_sequence
         WHERE hour_num &lt; DATE_SUB(#{dataTime}, INTERVAL WEEKDAY(#{dataTime}) DAY) + INTERVAL 6 DAY
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0 and o.status = 2
         )
         SELECT
         DATE_FORMAT(ds.hour_num, '%c-%d') AS hour_num,
-        COALESCE(ROUND(SUM(luo.final_price) * 0.04, 2), 0) AS profit
+        COALESCE(ROUND(SUM(o.final_price) * (IFNULL(o.commission_rate, 3)/100), 2), 0) AS profit
         FROM
         date_sequence ds
-        LEFT JOIN
-        life_user_order luo
-        ON
-        luo.used_time >= ds.hour_num AND luo.used_time &lt; ds.hour_num + INTERVAL 1 DAY
-        AND luo.`status` = 1
+        LEFT JOIN order_data o ON
+        o.used_time >= ds.hour_num
+        AND o.used_time &lt; ds.hour_num + INTERVAL 1 DAY
         GROUP BY
         ds.hour_num
         ORDER BY
@@ -389,17 +420,25 @@
         SELECT DATE_ADD(hour_num, INTERVAL 1 DAY)
         FROM date_sequence
         WHERE DATE_ADD(hour_num, INTERVAL 1 DAY)  &lt;= LAST_DAY(#{dataTime})
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0 and o.status = 2
         )
         SELECT
         DATE_FORMAT(ds.hour_num, '%c-%d') AS hour_num,
-        COALESCE(ROUND(SUM(luo.final_price) * 0.04, 2), 0) AS profit
+        COALESCE(ROUND(SUM(o.final_price) * (IFNULL(o.commission_rate, 3)/100), 2), 0) AS profit
         FROM
         date_sequence ds
-        LEFT JOIN
-        life_user_order luo
-        ON
-        luo.used_time >= ds.hour_num AND luo.used_time &lt; DATE_ADD(ds.hour_num, INTERVAL 1 DAY)
-        AND luo.`status` = 1
+        LEFT JOIN order_data o ON
+        o.used_time >= ds.hour_num AND o.used_time &lt; DATE_ADD(ds.hour_num, INTERVAL 1 DAY)
         GROUP BY
         ds.hour_num
         ORDER BY
@@ -412,18 +451,26 @@
         SELECT hour_num + 1
         FROM month_sequence
         WHERE hour_num &lt; 12
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0 and o.status = 2
         )
         SELECT
         CONCAT(ms.hour_num,'月') AS hour_num,
-        COALESCE(ROUND(SUM(luo.final_price) * 0.04, 2), 0) AS profit
+        COALESCE(ROUND(SUM(o.final_price) * (IFNULL(o.commission_rate, 3)/100), 2), 0) AS profit
         FROM
         month_sequence ms
-        LEFT JOIN
-        life_user_order luo
-        ON
-        MONTH(luo.used_time) = ms.hour_num
-        AND YEAR(luo.used_time) = YEAR(#{dataTime})
-        AND luo.`status` = 1
+        LEFT JOIN order_data o ON
+        MONTH(o.used_time) = ms.hour_num
+        AND YEAR(o.used_time) = YEAR(#{dataTime})
         GROUP BY
         ms.hour_num
         ORDER BY
@@ -436,16 +483,28 @@
         SELECT hour_num + 1
         FROM hours
         WHERE hour_num &lt; 23
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
         )
         SELECT
         concat(h.hour_num,":00") AS hour_num,
         COALESCE(ROUND(SUM(o.final_price), 2), 0) AS profit
         FROM
         hours h
-        LEFT JOIN
-        life_user_order o
-        ON ( h.hour_num = HOUR( o.used_time ) AND ( o.`status` = 1 AND o.used_time >= #{dataTime} ) )
-        OR ( h.hour_num = HOUR( o.buy_time ) AND ( o.`status` = 0 AND o.buy_time >= #{dataTime} ) )
+        LEFT JOIN order_data o
+        ON ( h.hour_num = HOUR( o.used_time ) AND ( o.`status` = 2 AND o.used_time >= #{dataTime} ) )
+        OR ( h.hour_num = HOUR( o.pay_time ) AND ( o.`status` = 1 AND o.pay_time >= #{dataTime} ) )
         GROUP BY
         h.hour_num
         ORDER BY
@@ -458,22 +517,35 @@
             SELECT hour_num + INTERVAL 1 DAY
         FROM date_sequence
         WHERE hour_num &lt; DATE_SUB(#{dataTime}, INTERVAL WEEKDAY(#{dataTime}) DAY) + INTERVAL 6 DAY
-            )
+            ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
+        )
         SELECT
             DATE_FORMAT(ds.hour_num, '%c-%d') AS hour_num,
-            COALESCE(ROUND(SUM(luo.final_price), 2), 0) AS profit
+            COALESCE(ROUND(SUM(o.final_price), 2), 0) AS profit
         FROM
             date_sequence ds
                 LEFT JOIN
-            life_user_order luo
+        order_data o
             ON
-                (luo.used_time >= ds.hour_num
-                AND luo.used_time &lt; ds.hour_num + INTERVAL 1 DAY
-                AND luo.`status` = 1 )
+                (o.used_time >= ds.hour_num
+                AND o.used_time &lt; ds.hour_num + INTERVAL 1 DAY
+                AND o.`status` = 2 )
             OR
-                (luo.buy_time >= ds.hour_num
-                AND luo.buy_time &lt; ds.hour_num + INTERVAL 1 DAY
-                AND luo.`status` = 0 )
+                (o.pay_time >= ds.hour_num
+                AND o.pay_time &lt; ds.hour_num + INTERVAL 1 DAY
+                AND o.`status` = 1 )
         GROUP BY
             ds.hour_num
         ORDER BY
@@ -486,22 +558,35 @@
             SELECT DATE_ADD(hour_num, INTERVAL 1 DAY)
             FROM date_sequence
             WHERE DATE_ADD(hour_num, INTERVAL 1 DAY)  &lt;= LAST_DAY(#{dataTime})
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
         )
         SELECT
             DATE_FORMAT(ds.hour_num, '%c-%d') AS hour_num,
-            COALESCE(ROUND(SUM(luo.final_price), 2), 0) AS profit
+            COALESCE(ROUND(SUM(o.final_price), 2), 0) AS profit
         FROM
             date_sequence ds
-                LEFT JOIN
-            life_user_order luo
+            LEFT JOIN
+            order_data o
             ON
-                (luo.used_time >= ds.hour_num
-                AND luo.used_time &lt; DATE_ADD( ds.hour_num, INTERVAL 1 DAY )
-                AND luo.`status` = 1 )
+                (o.used_time >= ds.hour_num
+                AND o.used_time &lt; DATE_ADD( ds.hour_num, INTERVAL 1 DAY )
+                AND o.`status` = 2 )
             OR
-                (luo.buy_time >= ds.hour_num
-                AND luo.buy_time &lt; DATE_ADD( ds.hour_num, INTERVAL 1 DAY )
-                AND luo.`status` = 0 )
+                (o.pay_time >= ds.hour_num
+                AND o.pay_time &lt; DATE_ADD( ds.hour_num, INTERVAL 1 DAY )
+                AND o.`status` = 1 )
         GROUP BY
             ds.hour_num
         ORDER BY
@@ -514,22 +599,35 @@
             SELECT hour_num + 1
             FROM month_sequence
             WHERE hour_num &lt; 12
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
         )
         SELECT
             CONCAT(ms.hour_num,'月') AS hour_num,
-            COALESCE(ROUND(SUM(luo.final_price), 2), 0) AS profit
+            COALESCE(ROUND(SUM(o.final_price), 2), 0) AS profit
         FROM
             month_sequence ms
-                LEFT JOIN
-            life_user_order luo
+        LEFT JOIN
+        order_data o
             ON
-                (MONTH( luo.used_time ) = ms.hour_num
-                    AND YEAR( luo.used_time ) = YEAR( #{dataTime} )
-                    AND luo.`status` = 1 )
+                (MONTH( o.used_time ) = ms.hour_num
+                    AND YEAR( o.used_time ) = YEAR( #{dataTime} )
+                    AND o.`status` = 1 )
             OR
-                (MONTH( luo.buy_time ) = ms.hour_num
-                    AND YEAR( luo.buy_time ) = YEAR( #{dataTime} )
-                    AND luo.`status` = 0 )
+                (MONTH( o.pay_time ) = ms.hour_num
+                    AND YEAR( o.pay_time ) = YEAR( #{dataTime} )
+                    AND o.`status` = 0 )
         GROUP BY
             ms.hour_num
         ORDER BY
@@ -562,6 +660,19 @@
             UNION ALL SELECT 21
             UNION ALL SELECT 22
             UNION ALL SELECT 23
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
         )
 -- 主查询,左连接小时序列和原查询结果
         SELECT
@@ -571,21 +682,21 @@
             hours h
                 LEFT JOIN (
                 SELECT
-                    HOUR(CASE WHEN `status` = 1 THEN used_time ELSE buy_time END) AS hour_of_day,
+                    HOUR(CASE WHEN  oa.`status` = 1 THEN  oa.used_time ELSE  oa.pay_time END) AS hour_of_day,
                     COUNT(*) AS order_count
                 FROM
-                    life_user_order
+                  order_data oa
                 WHERE
                     (
-                    `status` = 1
-                  AND used_time > #{dataTime}
+                  oa.`status` = 2
+                  AND oa.used_time > #{dataTime}
                     )
                    OR (
-                    `status` = 0
-                  AND buy_time > #{dataTime}
+                    oa.`status` = 1
+                  AND oa.pay_time > #{dataTime}
                     )
                 GROUP BY
-                    HOUR(CASE WHEN `status` = 1 THEN used_time ELSE buy_time END)
+                    HOUR(CASE WHEN  oa.`status` = 2 THEN  oa.used_time ELSE  oa.pay_time END)
             ) orders ON h.hour_of_day = orders.hour_of_day
         ORDER BY
             h.hour_of_day;
@@ -597,19 +708,32 @@
             SELECT hour_num + INTERVAL 1 DAY
         FROM date_sequence
         WHERE hour_num &lt; DATE_SUB(#{dataTime}, INTERVAL WEEKDAY(#{dataTime}) DAY) + INTERVAL 6 DAY
-            )
+            ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
+        )
         SELECT
             DATE_FORMAT(ds.hour_num, '%c-%d') AS hour_num,
-            COALESCE(count(luo.id), 0) AS profit
+            COALESCE(count(o.id), 0) AS profit
         FROM
             date_sequence ds
                 LEFT JOIN
-            life_user_order luo
+        order_data o
             ON
-               (luo.used_time >= ds.hour_num AND luo.used_time &lt; ds.hour_num + INTERVAL 1 DAY
-                   AND luo.`status` = 1)  or
-               (luo.buy_time >= ds.hour_num AND luo.buy_time &lt; ds.hour_num + INTERVAL 1 DAY
-                   AND luo.`status` = 0)
+               (o.used_time >= ds.hour_num AND o.used_time &lt; ds.hour_num + INTERVAL 1 DAY
+                   AND o.`status` = 2)  or
+               (o.pay_time >= ds.hour_num AND o.pay_time &lt; ds.hour_num + INTERVAL 1 DAY
+                   AND o.`status` = 1)
         GROUP BY
             ds.hour_num
         ORDER BY
@@ -622,19 +746,32 @@
             SELECT DATE_ADD(hour_num, INTERVAL 1 DAY)
             FROM date_sequence
             WHERE DATE_ADD(hour_num, INTERVAL 1 DAY)  &lt;= LAST_DAY(#{dataTime})
+        ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
         )
         SELECT
             DATE_FORMAT(ds.hour_num, '%c-%d') AS hour_num,
-            COALESCE(count(luo.id), 0) AS profit
+            COALESCE(count(o.id), 0) AS profit
         FROM
             date_sequence ds
                 LEFT JOIN
-            life_user_order luo
+        order_data o
                 ON
-                (luo.used_time >= ds.hour_num AND luo.used_time &lt; ds.hour_num + INTERVAL 1 DAY
-                   AND luo.`status` = 1)  or
-               (luo.buy_time >= ds.hour_num AND luo.buy_time &lt; ds.hour_num + INTERVAL 1 DAY
-                   AND luo.`status` = 0)
+                (o.used_time >= ds.hour_num AND o.used_time &lt; ds.hour_num + INTERVAL 1 DAY
+                   AND o.`status` = 2)  or
+               (o.pay_time >= ds.hour_num AND o.pay_time &lt; ds.hour_num + INTERVAL 1 DAY
+                   AND o.`status` = 1)
         GROUP BY
             ds.hour_num
         ORDER BY
@@ -650,29 +787,42 @@
             SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL
             SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
             ) seq
-            )
+            ),
+        order_data AS (
+        SELECT
+        o.id,
+        si.commission_rate,
+        o.final_price,
+        ocm.used_time,
+        o.pay_time,
+        o.status
+        FROM life_user_order o
+        LEFT JOIN order_coupon_middle ocm ON ocm.order_id = o.id
+        LEFT JOIN store_info si ON si.id = o.store_id
+        WHERE o.delete_flag = 0
+        )
         SELECT
-            CONCAT(MONTH(STR_TO_DATE(m.MONTH, '%Y-%m')),'月') AS hour_num,
+            m.MONTH AS hour_num,
             COALESCE(orders.order_count, 0) AS profit
         FROM
             months m
                 LEFT JOIN (
                 SELECT
-                    DATE_FORMAT(CASE WHEN `status` = 1 THEN used_time ELSE buy_time END, '%Y-%m') AS month,
+                    DATE_FORMAT(CASE WHEN oa.`status` = 1 THEN oa.used_time ELSE oa.pay_time END, '%Y-%m') AS month,
         COUNT(*) AS order_count
                 FROM
-                    life_user_order
+              order_data oa
                 WHERE
                     (
-                    `status` = 1
-                  AND used_time > #{dataTime}
+                    oa.`status` = 2
+                  AND oa.used_time > #{dataTime}
                     )
                    OR (
-                    `status` = 0
-                  AND buy_time > #{dataTime}
+                    oa.`status` = 1
+                  AND pay_time > #{dataTime}
                     )
                 GROUP BY
-                    DATE_FORMAT(CASE WHEN `status` = 1 THEN used_time ELSE buy_time END, '%Y-%m')
+                    DATE_FORMAT(CASE WHEN `status` = 2 THEN used_time ELSE pay_time END, '%Y-%m')
             ) orders ON m.month = orders.month
         ORDER BY
             m.month;
@@ -690,15 +840,15 @@
         FROM
         life_user_order
         WHERE
-        ( `status` = 1 AND used_time >= #{startTime} AND used_time &lt; #{endTime})
-        OR ( `status` = 0  AND buy_time >= #{startTime} AND buy_time &lt; #{endTime})
+        ( `status` = 7 AND finish_time >= #{startTime} AND finish_time &lt; #{endTime})
+        OR ( `status` = 1  AND pay_time >= #{startTime} AND pay_time &lt; #{endTime})
         GROUP BY
         store_id
         LIMIT 10
         ) statistic
         LEFT JOIN store_info store ON store.id = statistic.store_id
         ORDER BY
-        profit DESC
+        profit DESC limit 10
     </select>
     <select id="getStorePlatformProfitDetails" resultType="shop.alien.entity.store.vo.ManagementInfoVo">
         SELECT