فهرست منبع

feat(app): 新增课程购买和体育馆包场相关功能

- 在 AppCourses 实体中添加库存字段
- 在 CourseInfoVO 中添加经纬度信息
- 新增课程库存校验方法
- 实现课程购买和体育馆包场的预览页接口
- 更新相关 mapper 和 service 接口
SheepHy 1 هفته پیش
والد
کامیت
0e490a10e4
11فایلهای تغییر یافته به همراه146 افزوده شده و 11 حذف شده
  1. 3 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java
  2. 29 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IOrderService.java
  3. 2 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java
  4. 18 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java
  5. 4 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/CourseInfoVO.java
  6. 69 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/OrderVO.java
  7. 10 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/PlaceInfoVO.java
  8. 3 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppCourses.java
  9. 3 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoursesMapper.xml
  10. 3 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSiteMapper.xml
  11. 2 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSitePlaceMapper.xml

+ 3 - 3
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java

@@ -25,13 +25,13 @@ public class OrderController {
      * @Author SheepHy
      * @Description 学校场地预约-预览页
      * @Date 10:10 2025/7/14
-     * @Param
-     * @return
+     * @Param placeId startTime
+     * @return Result<OrderVO.PreviewOrderPlaceSchool>
      **/
     @Operation(summary="学校场地预约-预览页")
     @GetMapping("/previewOrderPlaceSchool")
     public Result<OrderVO.PreviewOrderPlaceSchool> previewOrderPlaceSchool(@RequestParam("placeId") @Schema(description = "场地ID")String placeId,
-                                                                           @RequestParam("startTime") @Schema(description = "当前选择日期(时分秒)")Date startTime){
+                                                                           @RequestParam("startTime") @Schema(description = "当前选择日期(年月日)")Date startTime){
         return Result.ok(appOrderService.previewOrderPlaceSchool(placeId,startTime));
     }
 }

+ 29 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IOrderService.java

@@ -15,12 +15,39 @@ public interface IOrderService {
      **/
 //    String createOrderPlaceSchool(String name);
 
+    /**
+     * @Author SheepHy
+     * @Description 课程库存校验
+     * @Date 16:22 2025/7/14
+     * @Param courseId 课程ID
+     * @return boolean
+     **/
+    boolean checkCourseInventory(String courseId);
+
     /**
      * @Author SheepHy
      * @Description 学校场地预约-预览页
      * @Date 10:10 2025/7/14
-     * @Param
-     * @return
+     * @Param placeId startTime
+     * @return OrderVO.PreviewOrderPlaceSchool {@link OrderVO.PreviewOrderPlaceSchool}
      **/
     OrderVO.PreviewOrderPlaceSchool previewOrderPlaceSchool(String placeId, Date startTime);
+
+    /**
+     * @Author SheepHy
+     * @Description 课程购买-预览页(学校课程、体育馆课程、教练课程)
+     * @Date 15:43 2025/7/14
+     * @Param courseId
+     * @return OrderVO.PreviewOrderCourseSchool {@link OrderVO.PreviewOrderCourse}
+     **/
+    OrderVO.PreviewOrderCourse previewOrderCourse(String courseId);
+
+    /**
+     * @Author SheepHy
+     * @Description 体育馆包场-预览页
+     * @Date 16:13 2025/7/14
+     * @Param placeId
+     * @return OrderVO.PreviewOrderPlaceGymnasiumChartered {@link OrderVO.PreviewOrderPlaceGymnasiumChartered}
+     **/
+    OrderVO.PreviewOrderPlaceGymnasiumChartered previewOrderPlaceGymnasiumChartered(String placeId);
 }

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

@@ -104,7 +104,8 @@ public class DetailServiceImpl implements IDetailService {
                         .setSellingPrice(appSitePriceRulesMapper.selectOne(Wrappers.<AppSitePriceRules>lambdaQuery()
                                 .eq(AppSitePriceRules::getSitePlaceId, appSitePlace.getId())
                                 .last("limit 1").orderByDesc(AppSitePriceRules::getSellingPrice)).getSellingPrice())
-                        .setCategory(getCategoryName(appSitePlace.getCategoryId()));
+                        .setCategory(getCategoryName(appSitePlace.getCategoryId()))
+                        .setCover(appSitePlace.getCover());
                 placeInfoMsgVOS.add(placeInfoMsgVO);
             });
             placeInfo.setPlaceInfoMsgVO(placeInfoMsgVOS);

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

@@ -21,6 +21,14 @@ public class OrderServiceImpl implements IOrderService {
     private AppSitePlaceMapper appSitePlaceMapper;
     @Resource
     private AppSitePriceRulesMapper appSitePriceRulesMapper;
+    @Resource
+    private AppC appCourseMapper;
+
+    @Override
+    public boolean checkCourseInventory(String courseId) {
+        return false;
+    }
+
     @Override
     public OrderVO.PreviewOrderPlaceSchool previewOrderPlaceSchool(String placeId, Date startTime) {
         LocalDate localDate = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
@@ -33,4 +41,14 @@ public class OrderServiceImpl implements IOrderService {
                 .setTimeSlot(timeSlot);
         return previewOrderPlaceSchool;
     }
+
+    @Override
+    public OrderVO.PreviewOrderCourse previewOrderCourse(String courseId) {
+        return null;
+    }
+
+    @Override
+    public OrderVO.PreviewOrderPlaceGymnasiumChartered previewOrderPlaceGymnasiumChartered(String placeId) {
+        return null;
+    }
 }

+ 4 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/CourseInfoVO.java

@@ -58,6 +58,10 @@ public class CourseInfoVO {
     private String instructorName;
     @Schema(description = "教练头像")
     private String instructorAvatar;
+    @Schema(description ="经度")
+    private BigDecimal longitude;
+    @Schema(description ="纬度")
+    private BigDecimal latitude;
 
     @Data
     @Accessors(chain = true)

+ 69 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/OrderVO.java

@@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -43,4 +44,72 @@ public class OrderVO {
 
     }
 
+    @Data
+    @Accessors(chain = true)
+    @EqualsAndHashCode(callSuper = false)
+    @Schema(description="课程购买-预览页")
+    public static class PreviewOrderCourse {
+        @Schema(description = "课程ID")
+        private String id;
+        @Schema(description = "课程名称")
+        private String name;
+        @Schema(description = "课程图片")
+        private String cover;
+        @Schema(description = "商品总价")
+        private BigDecimal totalPrice;
+        @Schema(description = "优惠")
+        private BigDecimal discountPrice;
+        @Schema(description = "小计")
+        private BigDecimal subtotal;
+        @Schema(description = "合计")
+        private BigDecimal total;
+        @Schema(description = "总优惠")
+        private BigDecimal totalDiscount;
+        @Schema(description = "提交金额")
+        private BigDecimal amount;
+        @Schema(description = "提示")
+        private String reminder;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    @EqualsAndHashCode(callSuper = false)
+    @Schema(description="体育馆包场-预览页")
+    public static class PreviewOrderPlaceGymnasiumChartered {
+        @Schema(description = "场地ID")
+        private String placeId;
+        @Schema(description = "体育馆包场提前退款时间;单位:分钟")
+        private int earlyRefundTime;
+        @Schema(description = "门店名称")
+        private String storeName;
+        @Schema(description = "场地名称")
+        private String placeName;
+        @Schema(description = "商品总价")
+        private BigDecimal totalPrice;
+        @Schema(description = "小计")
+        private BigDecimal subtotal;
+        @Schema(description = "购买人手机号")
+        private String mobile;
+        @Schema(description = "提示")
+        private String reminder;
+        @Schema(description = "退改规则")
+        private String refundRule;
+        @Schema(description="体育馆包场-时间段-预览页")
+        private List<PreviewOrderTimePeriod> timePeriod;
+
+    }
+    @Data
+    @Accessors(chain = true)
+    @EqualsAndHashCode(callSuper = false)
+    @Schema(description="体育馆包场-时间段-预览页")
+    public static class PreviewOrderTimePeriod{
+        @Schema(description = "时间段ID")
+        private String id;
+        @Schema(description = "时间段名称")
+        private String name;
+        @Schema(description = "开始时间")
+        private Date startTime;
+        @Schema(description = "结束时间")
+        private Date endTime;
+    }
 }

+ 10 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/PlaceInfoVO.java

@@ -43,6 +43,10 @@ public class PlaceInfoVO {
     private String video;
     @Schema(description = "场地简约返回参数")
     private Object placeInfoMsgVO;
+    @Schema(description ="经度")
+    private BigDecimal longitude;
+    @Schema(description ="纬度")
+    private BigDecimal latitude;
     @Schema(description = "教练简约返回参数")
     private List<InstructorVO> instructorVOList;
     @Data
@@ -50,8 +54,12 @@ public class PlaceInfoVO {
     @EqualsAndHashCode(callSuper = false)
     @Schema(description="场地简约返回参数-学校")
     public static class PlaceInfoMsgVO{
+        @Schema(description = "场地ID")
+        private String id;
         @Schema(description = "场地名称")
         private String name;
+        @Schema(description = "图片")
+        private String cover;
         @Schema(description = "销售数量")
         private int sales;
         @Schema(description = "类目")
@@ -70,6 +78,8 @@ public class PlaceInfoVO {
         private String id;
         @Schema(description = "场地名称")
         private String name;
+        @Schema(description = "图片")
+        private String cover;
         @Schema(description = "销售数量")
         private int sales;
         @Schema(description = "原价")

+ 3 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppCourses.java

@@ -13,8 +13,6 @@ import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * @Description: 课程/培训表
@@ -114,6 +112,9 @@ public class AppCourses implements Serializable {
     @Excel(name = "上架状态;0上架 1下架", width = 15)
     @Schema(description = "上架状态;0上架 1下架")
     private java.lang.Integer rackingStatus;
+    @Excel(name = "库存", width = 15)
+    @Schema(description = "库存")
+    private java.lang.Integer inventory;
     /**视频*/
     @Excel(name = "视频", width = 15)
     @Schema(description = "视频")

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

@@ -55,7 +55,9 @@
             a.reminder,
             a.user_id AS instructorId,
             d.username AS instructorName,
-            d.avatar AS instructorAvatar
+            d.avatar AS instructorAvatar,
+            b.longitude,
+            b.latitude
         FROM
             nm_courses a
                 LEFT JOIN nm_site b ON a.site_id = b.id

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

@@ -71,7 +71,9 @@
             a.teaching_day,
             a.no_teaching_day,
             b.mobile AS phone,
-            a.video
+            a.video,
+            a.longitude,
+            a.latitude
         FROM
             nm_site a
                 LEFT JOIN sys_depart b ON a.tenant_id = b.id

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

@@ -19,7 +19,8 @@
             a.name,
             a.advance_time,
             MIN(b.original_price) AS original_price,
-            MAX(b.selling_price) AS selling_price
+            MAX(b.selling_price) AS selling_price,
+            a.cover
         FROM
             nm_site_place a
                 LEFT JOIN nm_site_price_rules b ON a.id = b.site_place_id