Explorar el Código

fix(national-motion-system): 修复场馆详情页面逻辑

- 修改了 AppSitePlaceMapper.xml 中的查询条件,排除 type 为 0 的记录
- 优化了 AppSitePriceRulesMapper.xml 中的查询逻辑,使用窗口函数获取最早时间段
- 在 DetailServiceImpl 中添加了用户信息查询,丰富了教练信息展示
- 调整了 PlaceInfoVO.InstructorVO 中的属性赋值顺序
SheepHy hace 2 semanas
padre
commit
a32cc01c46

+ 9 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java

@@ -9,6 +9,8 @@ import org.jeecg.modules.app.vo.CourseInfoVO;
 import org.jeecg.modules.app.vo.PlaceInfoVO;
 import org.jeecg.modules.system.app.entity.*;
 import org.jeecg.modules.system.app.mapper.*;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.jeecg.modules.system.util.PositionUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -43,6 +45,8 @@ public class DetailServiceImpl implements IDetailService {
     private AppSitePlaceMapper appSitePlaceMapper;
     @Resource
     private AppCategoryMapper appCategoryMapper;
+    @Resource
+    private SysUserMapper sysUserMapper;
 
     @Override
     public PlaceInfoVO getPlaceInfo(String id) {
@@ -54,14 +58,17 @@ public class DetailServiceImpl implements IDetailService {
         if (appInstructors != null) {
             for (AppInstructor instructor : appInstructors) {
                 PlaceInfoVO.InstructorVO vo = new PlaceInfoVO.InstructorVO();
-                BeanUtils.copyProperties(vo, instructor); // 注意参数顺序
+                BeanUtils.copyProperties(instructor,vo); // 注意参数顺序
+                SysUser sysUser = sysUserMapper.selectById(instructor.getUserId());
+                vo.setName(sysUser.getUsername()).setAvatar(sysUser.getAvatar());
                 instructorVOList.add(vo);
             }
         }
         placeInfo.setInstructorVOList(instructorVOList);
         if(appSite.getType() == 0){
             List<PlaceInfoVO.PlaceInfoMsgVO> placeInfoMsgVOS = new ArrayList<>();
-            appSitePlaceMapper.selectList(Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getSiteId, id)).forEach(appSitePlace -> {
+            appSitePlaceMapper.selectList(Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getSiteId, id)
+                    .eq(AppSitePlace::getType,0)).forEach(appSitePlace -> {
                 appSitePriceRulesMapper.selectList(Wrappers.<AppSitePriceRules>lambdaQuery()
                         .eq(AppSitePriceRules::getSitePlaceId, id)
                         .eq(AppSitePriceRules::getStatus, 0)

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

@@ -10,7 +10,7 @@
             b.selling_price
         FROM
             nm_site_place a
-                LEFT JOIN nm_site_peice_rules b ON a.id = b.site_place_id WHERE a.site_id = #{id} ORDER BY
+                LEFT JOIN nm_site_peice_rules b ON a.id = b.site_place_id WHERE a.site_id = #{id} AND a.type != 0 ORDER BY
             b.selling_price ASC
     </select>
 </mapper>

+ 45 - 50
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSitePriceRulesMapper.xml

@@ -3,57 +3,52 @@
 <mapper namespace="org.jeecg.modules.system.app.mapper.AppSitePriceRulesMapper">
     <select id="theGymnasiumIsCharteredInfo" resultType="org.jeecg.modules.app.vo.PlaceInfoVO$theGymnasiumIsCharteredInfoVO">
         WITH RECURSIVE dates AS (
+            SELECT
+                0 AS offset_day,
+                CURDATE() AS date_val,
+                DAYOFWEEK(CURDATE()) - 1 AS dow
+            UNION ALL
+            SELECT
+                offset_day + 1,
+                date_val + INTERVAL 1 DAY,
+            DAYOFWEEK(date_val + INTERVAL 1 DAY) - 1
+        FROM dates
+        WHERE offset_day &lt; 6
+            ),
+            earliest_slots AS (
         SELECT
-        0 AS offset_day,
-        CURDATE() AS date_val,
-        DAYOFWEEK(
-        CURDATE()) - 1 AS dow UNION ALL
+            sp.site_id,
+            r.start_time,
+            r.end_time,
+            r.selling_price,
+            r.day_of_week,
+            ROW_NUMBER() OVER (PARTITION BY r.day_of_week ORDER BY r.start_time) AS rn
+        FROM nm_site_peice_rules r
+            LEFT JOIN nm_site_place sp ON r.site_place_id = sp.id
+        WHERE r.view_status = 0
+          AND r.org_code = #{orgCode}
+          AND r.category_id = #{categoryId}
+            )
         SELECT
-        offset_day + 1,
-        date_val + INTERVAL 1 DAY,
-        DAYOFWEEK( date_val + INTERVAL 1 DAY ) - 1
-        FROM
-        dates
-        WHERE
-        offset_day &lt;6
-        ),
-        earliest_slots AS (
-        SELECT
-        r.id,
-        r.start_time,
-        r.end_time,
-        r.selling_price,
-        r.day_of_week
-        FROM
-        nm_site_peice_rules r
-        JOIN ( SELECT day_of_week, MIN( start_time ) AS min_start_time FROM nm_site_peice_rules WHERE view_status = 0 GROUP BY day_of_week ) AS grouped ON r.day_of_week = grouped.day_of_week
-        AND r.start_time = grouped.min_start_time
-        WHERE
-        r.view_status = 0
-        AND r.org_code = #{orgCode} AND r.category_id = #{categoryId}
-        ) SELECT
-        es.id,
-        es.start_time,
-        CONCAT( es.start_time, '-', es.end_time ) AS time_range,
-        es.selling_price,
-        CASE
-
-        WHEN dm.offset_day = 0 THEN
-        CONCAT( '今天(', DATE_FORMAT( dm.date_val, '%m-%d' ), ')' )
-        WHEN dm.offset_day = 1 THEN
-        CONCAT( '明天(', DATE_FORMAT( dm.date_val, '%m-%d' ), ')' )
-        WHEN dm.offset_day = 2 THEN
-        CONCAT( '后天(', DATE_FORMAT( dm.date_val, '%m-%d' ), ')' ) ELSE CONCAT(
-        ELT( dm.dow + 1, '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日' ),
-        '(',
-        DATE_FORMAT( dm.date_val, '%m-%d' ),
-        ')'
-        )
-        END AS date_label
-        FROM
-        earliest_slots es
-        JOIN ( SELECT offset_day, date_val, dow FROM dates ) AS dm ON es.day_of_week = dm.dow
-        ORDER BY
-        dm.offset_day;
+            es.site_id AS id,
+            es.start_time AS startTime,
+            CONCAT(es.start_time, '-', es.end_time) AS time_range,
+            es.selling_price AS sellingPrice,
+            CASE
+                WHEN dm.offset_day = 0 THEN CONCAT('今天(', DATE_FORMAT(dm.date_val, '%m-%d'), ')')
+                WHEN dm.offset_day = 1 THEN CONCAT('明天(', DATE_FORMAT(dm.date_val, '%m-%d'), ')')
+                WHEN dm.offset_day = 2 THEN CONCAT('后天(', DATE_FORMAT(dm.date_val, '%m-%d'), ')')
+                ELSE CONCAT(
+                        ELT(dm.dow + 1, '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'),
+                        '(', DATE_FORMAT(dm.date_val, '%m-%d'), ')'
+                     )
+                END AS date_label
+        FROM earliest_slots es
+                 JOIN (
+            SELECT offset_day, date_val, dow
+            FROM dates
+        ) AS dm ON es.day_of_week = dm.dow
+        WHERE es.rn = 1
+        ORDER BY dm.offset_day;
     </select>
 </mapper>