Browse Source

refactor(sql):优化课程信息查询逻辑- 修改字段名 NAME 为 name 以保持命名一致性
- 使用子查询计算课时数量,替换原有的 COUNT 函数
-通过 JOIN 和 GROUP_CONCAT 获取讲师姓名与头像列表- 移除不必要的 GROUP BY 子句- 清理无用的导入和冗余代码- 调整统计查询中的类型过滤条件,确保数据准确性

SheepHy 2 days ago
parent
commit
cbb42774fd

+ 5 - 12
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java

@@ -56,7 +56,6 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
@@ -476,12 +475,11 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
     /**
      * 创建订单
      *
-     * @param createOrderForm
      * @return 支付订单对象
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public UserPayForm createOrder(CreateOrderForm createOrderForm) throws IOException {
+    public UserPayForm createOrder(CreateOrderForm createOrderForm){
         //获取登录用户
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
@@ -511,8 +509,8 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
 
         List<AppCoursesVerificationRecord> appCoursesVerificationRecordList = new ArrayList<>();
 
-        String productKey = ""; // ORDER_TYPE_1_PRODUCT_N001
-        String stockKey = ""; // ORDER_TYPE_1_PRODUCT_STOCK_N001
+        String productKey; // ORDER_TYPE_1_PRODUCT_N001
+        String stockKey; // ORDER_TYPE_1_PRODUCT_STOCK_N001
 
         //订单内容
         switch (createOrderForm.getType()) {
@@ -702,10 +700,8 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
 
                     //订单总价(商品的售价总和)
                     BigDecimal sumPrice = BigDecimal.ZERO;
-                    ;
                     //团购优惠
                     BigDecimal tDiscounts = BigDecimal.ZERO;
-                    ;
 
                     for (int i = 1; i <= createOrderForm.getAmount(); i++) {
 
@@ -1401,8 +1397,8 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
 
         List<AppCoursesVerificationRecord> appCoursesVerificationRecordList = new ArrayList<>();
 
-        String productKey = ""; // ORDER_TYPE_1_PRODUCT_N001
-        String stockKey = ""; // ORDER_TYPE_1_PRODUCT_STOCK_N001
+        String productKey; // ORDER_TYPE_1_PRODUCT_N001
+        String stockKey; // ORDER_TYPE_1_PRODUCT_STOCK_N001
 
         //订单内容
         switch (createOrderForm.getType()) {
@@ -1613,10 +1609,8 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
 
                     //订单总价(商品的售价总和)
                     BigDecimal sumPrice = BigDecimal.ZERO;
-                    ;
                     //团购优惠
                     BigDecimal tDiscounts = BigDecimal.ZERO;
-                    ;
 
                     for (int i = 1; i <= createOrderForm.getAmount(); i++) {
 
@@ -2726,7 +2720,6 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
      **/
     @Transactional
     public AppOrder createOrder(List<String> id, int type, String userId, String userIds) {
-        //todo 保险 闸机待接入
         //订单类型;0场地1赛事2课程
         AppOrder appOrder = new AppOrder();
         switch (type) {

+ 28 - 24
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoursesMapper.xml

@@ -39,7 +39,7 @@
     <select id="getCourseInfo" resultType="org.jeecg.modules.app.vo.CourseInfoVO">
         SELECT
             a.id,
-            a.NAME,
+            a.name,
             a.original_price,
             a.selling_price,
             a.cover,
@@ -52,38 +52,42 @@
             a.start_time,
             a.end_time,
             a.category_id,
-            COUNT( c.id ) AS classHour,
+            c.class_hour_count AS classHour,
             a.limit_num,
             a.reminder,
             a.address_site_id,
             a.user_id AS instructorId,
-            d.realname AS instructorName,
-            d.avatar AS instructorAvatar,
+            d.instructor_names AS instructorName,
+            d.instructor_avatars AS instructorAvatar,
             b.longitude,
             b.latitude,
             a.background_image
-        FROM
-            nm_courses a
-                LEFT JOIN nm_site b ON a.site_id = b.id
-                LEFT JOIN nm_courses_price_rules c ON a.id = c.courses_id
-                LEFT JOIN sys_user d ON d.id = a.user_id
+        FROM nm_courses a
+                 LEFT JOIN nm_site b ON a.site_id = b.id
+                 LEFT JOIN (
+            SELECT courses_id, COUNT(id) AS class_hour_count
+            FROM nm_courses_price_rules
+            WHERE courses_id = #{id}
+            GROUP BY courses_id
+        ) c ON a.id = c.courses_id
+                 LEFT JOIN (
+            SELECT
+                su.course_id,
+                GROUP_CONCAT(DISTINCT su.realname SEPARATOR ',') AS instructor_names,
+                GROUP_CONCAT(DISTINCT su.avatar SEPARATOR ',') AS instructor_avatars
+            FROM (
+                     SELECT
+                         s.id AS course_id,
+                         u.realname,
+                         u.avatar
+                     FROM nm_courses s
+                              JOIN sys_user u ON FIND_IN_SET(u.id, s.user_id)
+                     WHERE s.id = #{id}
+                 ) su
+            GROUP BY su.course_id
+        ) d ON a.id = d.course_id
         WHERE a.del_flag = 0
           AND a.id = #{id}
-        GROUP BY
-            a.id,
-            a.NAME,
-            a.original_price,
-            a.selling_price,
-            a.cover,
-            a.video,
-            b.address,
-            a.start_time,
-            a.end_time,
-            a.limit_num,
-            a.reminder,
-            instructorId,
-            instructorName,
-            instructorAvatar;
     </select>
     <select id="findByCourseList" resultType="org.jeecg.modules.app.vo.course.CourseResponseVo">
         select b.`name`,e.name AS address,b.original_price,b.selling_price,b.cover

+ 3 - 3
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/StatisticsMapper.xml

@@ -10,13 +10,13 @@
         FROM nm_order_pro_info opi
                  JOIN nm_order o ON opi.order_code = o.order_code
                  JOIN nm_site s ON o.org_code = s.org_code
-        WHERE opi.type NOT IN (0,3, 4, 6)
+        WHERE opi.type NOT IN (0, 3, 4, 6)
             AND opi.order_status NOT IN (0, 3, 4, 5, 6)
             AND (
                   (#{type} = 1 AND DATE(opi.create_time) = CURDATE()) OR
             (#{type} = 2 AND YEARWEEK(opi.create_time, 1) = YEARWEEK(CURDATE(), 1)) OR
             (#{type} = 3 AND YEAR(opi.create_time) = YEAR(CURDATE()) AND MONTH(opi.create_time) = MONTH(CURDATE())) OR
-            (#{type} IS NULL OR #{type} NOT IN (1,2,3))
+            (#{type} IS NULL OR #{type} NOT IN (3,4,6))
             )
           AND s.org_code LIKE CONCAT(#{orgCode}, '%')
         GROUP BY product_name
@@ -38,7 +38,7 @@
             (#{type} = 1 AND opi.create_time >= CURDATE() AND opi.create_time &lt; CURDATE() + INTERVAL 1 DAY) OR
             (#{type} = 2 AND opi.create_time >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND opi.create_time &lt; DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL 7 DAY) OR
             (#{type} = 3 AND opi.create_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND opi.create_time &lt; DATE_FORMAT(CURDATE(), '%Y-%m-01') + INTERVAL 1 MONTH) OR
-            (#{type} IS NULL OR #{type} NOT IN (1,2,3))
+            (#{type} IS NULL OR #{type} NOT IN (3,4,6))
             )
           AND s.org_code LIKE CONCAT(#{orgCode}, '%')
         GROUP BY s.org_code