Selaa lähdekoodia

Merge branch 'master' of http://git.zonelife.cn:3000/huangyang/national-motion-backend

zhangxin 2 viikkoa sitten
vanhempi
commit
6e7b3b9c8d
65 muutettua tiedostoa jossa 1269 lisäystä ja 579 poistoa
  1. 1 0
      national-motion-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  2. 30 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/AppHomeController.java
  3. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/CommonAppController.java
  4. 3 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/GetPlaceListDTO.java
  5. 15 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/SearchDTO.java
  6. 21 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IAppHomeService.java
  7. 161 21
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/AppHomeServiceImpl.java
  8. 16 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/PlaceInfoVO.java
  9. 22 5
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/SearchVO.java
  10. 20 30
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCategoryController.java
  11. 44 62
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCoursesController.java
  12. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCoursesPriceRulesController.java
  13. 30 32
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppGameController.java
  14. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppGamePriceRulesController.java
  15. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppInsureController.java
  16. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppInsureNumberController.java
  17. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppOrderController.java
  18. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppOrderProductController.java
  19. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppOrderUserController.java
  20. 0 182
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppProductCategoryController.java
  21. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppSiteController.java
  22. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppSitePriceRulesController.java
  23. 30 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCategoryDTO.java
  24. 3 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCoursesDTO.java
  25. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppGameDTO.java
  26. 37 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppOrderDTO.java
  27. 29 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppOrderUserDTO.java
  28. 9 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppSitePriceRulesDTO.java
  29. 27 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/BasePageDTO.java
  30. 4 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppCategory.java
  31. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppCourses.java
  32. 13 11
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppGame.java
  33. 13 5
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrder.java
  34. 0 85
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppProductCategory.java
  35. 3 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppSearchHot.java
  36. 8 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppSite.java
  37. 40 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/OrderTypeEnum.java
  38. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/SiteTypeEnum.java
  39. 0 17
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppCoureseMapper.java
  40. 25 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppCoursesMapper.java
  41. 12 4
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppGameMapper.java
  42. 12 4
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppInstructorMapper.java
  43. 0 17
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppProductCategoryMapper.java
  44. 11 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppSiteMapper.java
  45. 0 5
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoureseMapper.xml
  46. 38 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoursesMapper.xml
  47. 29 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppGameMapper.xml
  48. 34 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppInstructorMapper.xml
  49. 0 5
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppProductCategoryMapper.xml
  50. 29 5
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSiteMapper.xml
  51. 7 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppCategoryService.java
  52. 27 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppCoureseService.java
  53. 4 4
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppGameService.java
  54. 28 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppOrderService.java
  55. 0 14
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppProductCategoryService.java
  56. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppSiteService.java
  57. 82 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppCategoryServiceImpl.java
  58. 101 4
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppCoureseServiceImpl.java
  59. 59 4
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppGameServiceImpl.java
  60. 39 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppOrderServiceImpl.java
  61. 0 19
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppProductCategoryServiceImpl.java
  62. 44 14
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppSiteServiceImpl.java
  63. 42 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/utils/OrderCodeGenerator.java
  64. 34 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/AppCategoryVO.java
  65. 9 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/AppSiteVO.java

+ 1 - 0
national-motion-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -100,6 +100,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/auth/2step-code", "anon");//登录验证码
         filterChainDefinitionMap.put("/sys/common/static/**", "anon");//图片预览 &下载文件不限制token
         filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览
+        filterChainDefinitionMap.put("/app/home/**", "anon");//APP首页接口
 
         filterChainDefinitionMap.put("/app/user/**", "anon");//小程序相关
 

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

@@ -7,12 +7,14 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.app.dto.GetPlaceListDTO;
+import org.jeecg.modules.app.dto.SearchDTO;
 import org.jeecg.modules.app.service.IAppHomeService;
 import org.jeecg.modules.app.service.IUserService;
 import org.jeecg.modules.app.vo.HomeVO;
 import org.jeecg.modules.app.vo.MsgInfoVO;
 import org.jeecg.modules.app.vo.MsgVO;
 import org.jeecg.modules.app.vo.PlaceVO;
+import org.jeecg.modules.system.app.entity.AppSearchHot;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -29,7 +31,7 @@ public class AppHomeController {
     private IUserService userService;
 
     @GetMapping("/homeInfo")
-    @Operation(summary = "查询首页轮播图")
+    @Operation(summary = "首页基础数据查询")
     public Result<HomeVO> homeInfo() {
         return Result.ok(appHomeService.homeInfo());
     }
@@ -66,8 +68,33 @@ public class AppHomeController {
      * @return
      **/
     @PostMapping("/getPlaceList")
-    @Operation(summary = "场地列表查询")
-    public Result<Page<PlaceVO>> getPlaceList(@RequestBody GetPlaceListDTO getPlaceListDTO){
+    @Operation(summary = "场地列表查询 词典CODE:venue_type")
+    public Result<Page<PlaceVO>> getPlaceList(@RequestBody(required = true) GetPlaceListDTO getPlaceListDTO){
         return Result.ok(appHomeService.getPlaceList(getPlaceListDTO));
     }
+
+    /**
+     * @Author SheepHy
+     * @Description 全局搜索
+     * @Date 10:37 2025/7/4
+     * @Param
+     * @return
+     **/
+    @PostMapping("/search")
+    @Operation(summary = "全局搜索 词典CODE:search_type")
+    public Result<Object> search(@RequestBody SearchDTO searchDTO){
+        return Result.ok(appHomeService.search(searchDTO));
+    }
+
+    /**
+     * @Author SheepHy
+     * @Description 热词查询
+     * @Date 17:12 2025/7/7
+     * @return List<AppSearchHot>
+     **/
+    @GetMapping("/getHotSearch")
+    @Operation(summary = "热词查询")
+    public Result<List<AppSearchHot>> getHotSearch(){
+        return Result.ok(appHomeService.getHotSearch());
+    }
 }

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

@@ -27,7 +27,7 @@ public class CommonAppController {
      * @param dictCode 要查询的key
      * @return
      */
-    @Operation(description="根据字典code查询字典项")
+    @Operation(summary="根据字典code查询字典项")
     @GetMapping("/getDictItems")
     public List<DictModel> getDictItems(@RequestParam("dictCode") String dictCode) {
         return sysBaseApi.getDictItems(dictCode);

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

@@ -10,11 +10,11 @@ import lombok.experimental.Accessors;
 @EqualsAndHashCode(callSuper = false)
 @Schema(description="场地分页查询入参DTO")
 public class GetPlaceListDTO {
-    @Schema(description ="页码")
+    @Schema(description ="页码", example = "1")
     private long size;
-    @Schema(description ="当前页")
+    @Schema(description ="当前页", example = "10")
     private long current;
-    @Schema(description ="筛选类型")
+    @Schema(description ="筛选类型", example = "0-1")
     private String venueType;
     @Schema(description ="经度")
     private double longitude;

+ 15 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/SearchDTO.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="全局搜索入参DTO")
+public class SearchDTO  extends GetPlaceListDTO{
+    @Schema(description ="关键字")
+    private String keyword;
+}

+ 21 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IAppHomeService.java

@@ -2,9 +2,13 @@ package org.jeecg.modules.app.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.app.dto.GetPlaceListDTO;
+import org.jeecg.modules.app.dto.SearchDTO;
 import org.jeecg.modules.app.vo.AppBannerVO;
 import org.jeecg.modules.app.vo.HomeVO;
 import org.jeecg.modules.app.vo.PlaceVO;
+import org.jeecg.modules.system.app.entity.AppSearchHot;
+
+import java.util.List;
 
 public interface IAppHomeService {
 
@@ -24,4 +28,21 @@ public interface IAppHomeService {
      * @return
      **/
     Page<PlaceVO> getPlaceList(GetPlaceListDTO getPlaceListDTO);
+
+    /**
+     * @Author SheepHy
+     * @Description 全局搜索
+     * @Date 10:37 2025/7/4
+     * @Param
+     * @return
+     **/
+    Object search(SearchDTO searchDTO);
+
+    /**
+     * @Author SheepHy
+     * @Description 热词查询
+     * @Date 17:12 2025/7/7
+     * @return List<AppSearchHot>
+     **/
+    List<AppSearchHot> getHotSearch();
 }

+ 161 - 21
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/AppHomeServiceImpl.java

@@ -3,11 +3,13 @@ package org.jeecg.modules.app.service.impl;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.app.dto.GetPlaceListDTO;
+import org.jeecg.modules.app.dto.SearchDTO;
 import org.jeecg.modules.app.service.IAppHomeService;
 import org.jeecg.modules.app.vo.*;
 import org.jeecg.modules.system.app.entity.AppBanner;
-import org.jeecg.modules.system.app.entity.AppCourese;
+import org.jeecg.modules.system.app.entity.AppCourses;
 import org.jeecg.modules.system.app.entity.AppInstructor;
+import org.jeecg.modules.system.app.entity.AppSearchHot;
 import org.jeecg.modules.system.app.mapper.*;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.entity.SysUser;
@@ -29,7 +31,7 @@ public class AppHomeServiceImpl implements IAppHomeService {
     @Resource
     private AppBannerMapper appBannerMapper;
     @Resource
-    private AppCoureseMapper appCoureseMapper;
+    private AppCoursesMapper appCoursesMapper;
     @Resource
     private AppInstructorMapper appInstructorMapper;
     @Resource
@@ -40,6 +42,10 @@ public class AppHomeServiceImpl implements IAppHomeService {
     private AppSiteMapper appSiteMapper;
     @Resource
     private AppCategoryMapper appCategoryMapper;
+    @Resource
+    private AppGameMapper appGameMapper;
+    @Resource
+    private AppSearchHotMapper appSearchHotMapper;
 
     @Override
     public HomeVO homeInfo() {
@@ -48,17 +54,17 @@ public class AppHomeServiceImpl implements IAppHomeService {
                 .eq(AppBanner::getDelFlag, 0).eq(AppBanner::getIsEnabled,1));
 
         // 精品课程(最多3个)
-        List<AppCourese> appCoureseFine = appCoureseMapper.selectList(Wrappers.<AppCourese>lambdaQuery()
-                .eq(AppCourese::getPriceType, 0).last("LIMIT 3"));
+        List<AppCourses> appCoursesFine = appCoursesMapper.selectList(Wrappers.<AppCourses>lambdaQuery()
+                .eq(AppCourses::getPriceType, 0).last("LIMIT 3"));
 
         // 免费课程(最多3个)
-        List<AppCourese> appCoureseFree = appCoureseMapper.selectList(Wrappers.<AppCourese>lambdaQuery()
-                .eq(AppCourese::getPriceType, 1).last("LIMIT 3"));
+        List<AppCourses> appCoursesFree = appCoursesMapper.selectList(Wrappers.<AppCourses>lambdaQuery()
+                .eq(AppCourses::getPriceType, 1).last("LIMIT 3"));
 
         // 合并课程信息
         List<CoureseVO> courseVO = new ArrayList<>();
-        courseVO.addAll(convertToCoureseVOList(appCoureseFine));
-        courseVO.addAll(convertToCoureseVOList(appCoureseFree));
+        courseVO.addAll(convertToCoureseVOList(appCoursesFine));
+        courseVO.addAll(convertToCoureseVOList(appCoursesFree));
 
         // 获取好评率最高的两个教练 ID
         List<String> topInstructorUserIds = sysUserMapper.getUserIdListByRoleId(INSTRUCTOR).stream()
@@ -92,8 +98,8 @@ public class AppHomeServiceImpl implements IAppHomeService {
                             .eq(SysDepart::getOrgCode, sysUser.getOrgCode())).getDepartName());
 
             // 获取该教练的课程(最多取2个)
-            List<AppCourese> courses = appCoureseMapper.selectList(
-                    Wrappers.<AppCourese>lambdaQuery().eq(AppCourese::getUserId, userId).last("LIMIT 2"));
+            List<AppCourses> courses = appCoursesMapper.selectList(
+                    Wrappers.<AppCourses>lambdaQuery().eq(AppCourses::getUserId, userId).last("LIMIT 2"));
 
             List<InstructorVO.CourseInfoVO> courseInfoVOS = courses.stream()
                     .map(course -> {
@@ -125,10 +131,10 @@ public class AppHomeServiceImpl implements IAppHomeService {
      * @Author SheepHy
      * @Description 合并课程信息
      * @Date 9:14 2025/7/4
-     * @Param appCoureseList {@link List<AppCourese>}
+     * @Param appCoureseList {@link List<AppCourses>}
      * @return List<CoureseVO> {@link List<CoureseVO>}
      **/
-    private List<CoureseVO> convertToCoureseVOList(List<AppCourese> appCoureseList) {
+    private List<CoureseVO> convertToCoureseVOList(List<AppCourses> appCoureseList) {
         return appCoureseList.stream()
                 .map(courese -> new CoureseVO()
                         .setId(courese.getId()).setCover(courese.getCover())
@@ -142,18 +148,13 @@ public class AppHomeServiceImpl implements IAppHomeService {
         Page<PlaceVO> page = new Page<>(getPlaceListDTO.getCurrent(), getPlaceListDTO.getSize());
         Page<PlaceVO> placeList = appSiteMapper.getPlaceList(page, getPlaceListDTO.getVenueType());
         placeList.getRecords().forEach(placeVO -> {
-            List<String> list = new ArrayList<>();
-            String[] split = placeVO.getCategoryId().split(",");
-            Arrays.stream(split).forEach(id -> {
-                list.add(appCategoryMapper.selectById(id).getName());
-            });
             //todo 待申请第三方地图接口
             placeVO.setKm(0.0)
-                    .setCategory(list);
+                    .setCategory(getCategoryName(placeVO.getCategoryId()));
         });
-        if(getPlaceListDTO.getVenueType().equals("1")
-                || getPlaceListDTO.getVenueType().equals("2")
-                || getPlaceListDTO.getVenueType().equals("3")){
+        if(getPlaceListDTO.getVenueType().equals("0-2")
+                || getPlaceListDTO.getVenueType().equals("1-1")
+                || getPlaceListDTO.getVenueType().equals("2-1")){
             // 按 km 升序排序(从近到远)
             placeList.getRecords().sort((p1, p2) -> {
                 Double km1 = p1.getKm();
@@ -163,4 +164,143 @@ public class AppHomeServiceImpl implements IAppHomeService {
         }
         return placeList;
     }
+
+    @Override
+    public Object search(SearchDTO searchDTO) {
+        AppSearchHot appSearchHot = appSearchHotMapper.selectOne(Wrappers.<AppSearchHot>lambdaQuery()
+                .eq(AppSearchHot::getSearchContent, searchDTO.getKeyword())
+                .last("LIMIT 1"));
+        if(null == appSearchHot){
+            appSearchHotMapper.insert(new AppSearchHot()
+                    .setSearchContent(searchDTO.getKeyword())
+                    .setSearchCount(1)
+                    .setIsActive(1)
+                    .setIsRecommend(0));
+        }else {
+            appSearchHotMapper.updateById(appSearchHot.setSearchCount(appSearchHot.getSearchCount() + 1));
+        }
+        switch (searchDTO.getVenueType().charAt(0)) {
+            case '0':
+                    return convertSearchPlaceVOPage(searchDTO);
+            case '1':
+                    return convertSearchTrainVOPage(searchDTO);
+            case '2':
+                    return convertSearchCompetitionVOPage(searchDTO);
+            case '3':
+                    return convertSearchInstructorVOPage(searchDTO);
+        }
+        return new Page<>();
+    }
+
+    @Override
+    public List<AppSearchHot> getHotSearch() {
+        return appSearchHotMapper.selectList(Wrappers.<AppSearchHot>lambdaQuery()
+                .last("LIMIT 10").orderByDesc(AppSearchHot::getSearchCount));
+    }
+
+    /**
+     * @Author SheepHy
+     * @Description 全局搜索场地分页查询
+     * @Date 11:05 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchPlaceVO>
+     **/
+    private Page<SearchVO.SearchPlaceVO> convertSearchPlaceVOPage(SearchDTO searchDTO) {
+        Page<SearchVO.SearchPlaceVO> page = new Page<>(searchDTO.getCurrent(), searchDTO.getSize());
+        Page<SearchVO.SearchPlaceVO> searchPlaceVOPage = appSiteMapper.convertSearchPlaceVOPage(page, searchDTO);
+        searchPlaceVOPage.getRecords().forEach(placeVO -> {
+            //todo 待申请第三方地图接口
+            placeVO.setKm(0.0)
+                    .setCategory(getCategoryName(placeVO.getCategoryId()));
+        });
+        if(searchDTO.getVenueType().equals("0-2")
+                || searchDTO.getVenueType().equals("1-1")
+                || searchDTO.getVenueType().equals("2-1")){
+            // 按 km 升序排序(searchDTO)
+            searchPlaceVOPage.getRecords().sort((p1, p2) -> {
+                Double km1 = p1.getKm();
+                Double km2 = p2.getKm();
+                return km1.compareTo(km2);
+            });
+        }
+        return searchPlaceVOPage;
+    }
+    /**
+     * @Author SheepHy
+     * @Description 根据类目ID获取完整的类目名称
+     * @Date 13:31 2025/7/7
+     * @Param categoryId 类目ID
+     * @return List<String>
+     **/
+    private List<String> getCategoryName(String categoryId) {
+        List<String> list = new ArrayList<>();
+        if(null != categoryId){
+            String[] split = categoryId.split(",");
+            Arrays.stream(split).forEach(id -> {
+                list.add(appCategoryMapper.selectById(id).getName());
+            });
+        }
+        return list;
+    }
+
+    /**
+     * @Author SheepHy
+     * @Description 培训课程分页查询
+     * @Date 13:37 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchTrainVO>
+     **/
+    private Page<SearchVO.SearchTrainVO> convertSearchTrainVOPage(SearchDTO searchDTO) {
+        Page<SearchVO.SearchTrainVO> page = new Page<>(searchDTO.getCurrent(), searchDTO.getSize());
+        Page<SearchVO.SearchTrainVO> searchTrainVOPage = appCoursesMapper.convertSearchTrainVOPage(page, searchDTO);
+        searchTrainVOPage.getRecords().forEach(trainVO -> {
+            //todo 待申请第三方地图接口
+            trainVO.setKm(0.0);
+        });
+        return searchTrainVOPage;
+    }
+
+    /**
+     * @Author SheepHy
+     * @Description 赛事分页查询
+     * @Date 14:04 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchRaceVO>
+     **/
+    private Page<SearchVO.SearchRaceVO> convertSearchCompetitionVOPage(SearchDTO searchDTO) {
+        Page<SearchVO.SearchRaceVO> page = new Page<>(searchDTO.getCurrent(), searchDTO.getSize());
+        Page<SearchVO.SearchRaceVO> searchCompetitionVOPage = appGameMapper.convertSearchCompetitionVOPage(page, searchDTO);
+        searchCompetitionVOPage.getRecords().forEach(competitionVO -> {
+            //todo 待申请第三方地图接口
+            competitionVO.setKm(0.0);
+        });
+        return page;
+    }
+    
+    /** 
+     * @Author SheepHy
+     * @Description //TODO 
+     * @Date 14:43 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchInstructorVO>
+     **/
+    private Page<SearchVO.SearchInstructorVO> convertSearchInstructorVOPage(SearchDTO searchDTO) {
+        Page<SearchVO.SearchInstructorVO> page = new Page<>(searchDTO.getCurrent(), searchDTO.getSize());
+        Page<SearchVO.SearchInstructorVO> searchInstructorVOPage = appInstructorMapper.convertSearchInstructorVOPage(page, searchDTO);
+        searchInstructorVOPage.getRecords().forEach(instructorVO -> {
+            // 获取该教练的课程(最多取2个)
+            List<AppCourses> courses = appCoursesMapper.selectList(
+                    Wrappers.<AppCourses>lambdaQuery().eq(AppCourses::getUserId, instructorVO.getUserId()).last("LIMIT 2"));
+            List<SearchVO.SearchCoursesVO> courseInfoVOS = courses.stream()
+                    .map(course -> {
+                        SearchVO.SearchCoursesVO vo = new SearchVO.SearchCoursesVO();
+                        BeanUtils.copyProperties(vo, course);
+                        return vo;
+                    })
+                    .collect(Collectors.toList());
+            instructorVO.setKm(0.0)
+                    .setCourseList(courseInfoVOS);
+        });
+        return searchInstructorVOPage;
+    }
 }

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

@@ -0,0 +1,16 @@
+package org.jeecg.modules.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="场地详情返回参数")
+public class PlaceInfoVO {
+    @Schema(description = "场地id")
+    private String id;
+
+}

+ 22 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/SearchVO.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
@@ -37,6 +38,8 @@ public class SearchVO{
         private String orgName;
         @Schema(description = "擅长说明")
         private String excelMsg;
+        @Schema(description = "km")
+        private double km;
         @Schema(description = "教学理念")
         private String teachingPhilosophy;
         @Schema(description = "好评率")
@@ -44,9 +47,13 @@ public class SearchVO{
         @Schema(description = "订单数")
         private String orderCount;
         @Schema(description = "授课人数")
-        private String teachingCount;
+        private String classesNumber;
+        @Schema(description = "课程列表ID")
+        private String categoryId;
+        @Schema(hidden = true)
+        private String userId;
         @Schema(description = "课程列表")
-        private List<CourseInfoVO> courseList;
+        private List<SearchCoursesVO> courseList;
     }
     @Data
     @Accessors(chain = true)
@@ -86,6 +93,10 @@ public class SearchVO{
         private java.util.Date startTime;
         @Schema(description = "结束时间")
         private java.util.Date endTime;
+        @Schema(description = "距离(KM)")
+        private double km;
+        @Schema(description = "赛事是否结束")
+        private boolean isRegistrationOpen;
     }
 
     @Data
@@ -105,6 +116,8 @@ public class SearchVO{
         private BigDecimal originalPrice;
         @Schema(description = "课程售价")
         private BigDecimal sellingPrice;
+        @Schema(description = "销售数量")
+        private int sales;
         @Schema(description = "好评率")
         private BigDecimal goodRate;
         @Schema(description = "评论数")
@@ -115,6 +128,10 @@ public class SearchVO{
         private String address;
         @Schema(description = "距离(KM)")
         private double km;
+        @Schema(description = "课程开始时间")
+        private Date startTime;
+        @Schema(description = "课程结束时间")
+        private Date endTime;
     }
 
     @Data
@@ -138,14 +155,14 @@ public class SearchVO{
         private List<String> category;
         @Schema(hidden = true)
         private String categoryId;
-        @Schema(description = "全局搜索产品信息返回参数")
-        private List<SearchCoureseVO> searchCoureseList;
+        @Schema(description = "是否有票")
+        private boolean ticketWhether;
     }
     @Data
     @Accessors(chain = true)
     @EqualsAndHashCode(callSuper = false)
     @Schema(description="全局搜索产品信息返回参数")
-    public static class SearchCoureseVO{
+    public static class SearchCoursesVO{
         @Schema(description = "id")
         private String id;
         @Schema(description = "名称")

+ 20 - 30
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCategoryController.java

@@ -10,10 +10,14 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.app.dto.AppCategoryDTO;
 import org.jeecg.modules.system.app.entity.AppCategory;
 import org.jeecg.modules.system.app.service.IAppCategoryService;
 
@@ -22,6 +26,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
+import org.jeecg.modules.system.app.vo.AppCategoryVO;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -46,7 +51,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="运动类型表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appCategory")
+@RequestMapping("/app/appCategory")
 @Slf4j
 public class AppCategoryController extends JeecgController<AppCategory, IAppCategoryService> {
 	@Autowired
@@ -55,56 +60,42 @@ public class AppCategoryController extends JeecgController<AppCategory, IAppCate
 	/**
 	 * 分页列表查询
 	 *
-	 * @param appCategory
-	 * @param pageNo
-	 * @param pageSize
-	 * @param req
+	 * @param dto
 	 * @return
 	 */
 	//@AutoLog(value = "运动类型表-分页列表查询")
 	@Operation(summary="运动类型表-分页列表查询")
 	@GetMapping(value = "/list")
-	public Result<IPage<AppCategory>> queryPageList(AppCategory appCategory,
-								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-								   HttpServletRequest req) {
-
-
-        QueryWrapper<AppCategory> queryWrapper = QueryGenerator.initQueryWrapper(appCategory, req.getParameterMap());
-		Page<AppCategory> page = new Page<AppCategory>(pageNo, pageSize);
-		IPage<AppCategory> pageList = appCategoryService.page(page, queryWrapper);
-		return Result.OK(pageList);
+	public Result<IPage<AppCategoryVO>> queryPageList(AppCategoryDTO dto) {
+		return Result.OK(appCategoryService.queryCategoryList(dto));
 	}
 	
 	/**
 	 *   添加
 	 *
-	 * @param appCategory
+	 * @param appCategoryVO
 	 * @return
 	 */
 	@AutoLog(value = "运动类型表-添加")
 	@Operation(summary="运动类型表-添加")
-	@RequiresPermissions("org.jeecg.modules.app:nm_category:add")
+//	@RequiresPermissions("org.jeecg.modules.app:nm_category:add")
 	@PostMapping(value = "/add")
-	public Result<String> add(@RequestBody AppCategory appCategory) {
-		appCategoryService.save(appCategory);
-
-		return Result.OK("添加成功!");
+	public Result<String> add(@RequestBody AppCategoryVO appCategoryVO) {
+		return appCategoryService.saveCategory(appCategoryVO)?Result.OK("添加成功!") :Result.error("添加失败!");
 	}
 	
 	/**
 	 *  编辑
 	 *
-	 * @param appCategory
+	 * @param appCategoryDTO
 	 * @return
 	 */
 	@AutoLog(value = "运动类型表-编辑")
 	@Operation(summary="运动类型表-编辑")
-	@RequiresPermissions("org.jeecg.modules.app:nm_category:edit")
+//	@RequiresPermissions("org.jeecg.modules.app:nm_category:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody AppCategory appCategory) {
-		appCategoryService.updateById(appCategory);
-		return Result.OK("编辑成功!");
+	public Result<String> edit(@RequestBody AppCategoryDTO appCategoryDTO) {
+		return appCategoryService.editCategory(appCategoryDTO)?Result.OK("操作成功!") :Result.error("操作失败!");
 	}
 	
 	/**
@@ -115,11 +106,10 @@ public class AppCategoryController extends JeecgController<AppCategory, IAppCate
 	 */
 	@AutoLog(value = "运动类型表-通过id删除")
 	@Operation(summary="运动类型表-通过id删除")
-	@RequiresPermissions("org.jeecg.modules.app:nm_category:delete")
+//	@RequiresPermissions("org.jeecg.modules.app:nm_category:delete")
 	@DeleteMapping(value = "/delete")
 	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		appCategoryService.removeById(id);
-		return Result.OK("删除成功!");
+		return appCategoryService.deleteCategory(id)?Result.OK("操作成功!"):Result.error("操作失败!");
 	}
 	
 	/**
@@ -130,7 +120,7 @@ public class AppCategoryController extends JeecgController<AppCategory, IAppCate
 	 */
 	@AutoLog(value = "运动类型表-批量删除")
 	@Operation(summary="运动类型表-批量删除")
-	@RequiresPermissions("org.jeecg.modules.app:nm_category:deleteBatch")
+//	@RequiresPermissions("org.jeecg.modules.app:nm_category:deleteBatch")
 	@DeleteMapping(value = "/deleteBatch")
 	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
 		this.appCategoryService.removeByIds(Arrays.asList(ids.split(",")));

+ 44 - 62
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCoureseController.java → national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCoursesController.java

@@ -1,20 +1,15 @@
 package org.jeecg.modules.system.app.controller;
 
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.query.QueryRuleEnum;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.system.app.entity.AppCourese;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.dto.AppCoursesDTO;
+import org.jeecg.modules.system.app.entity.AppCourses;
 import org.jeecg.modules.system.app.service.IAppCoureseService;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,18 +17,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import org.jeecg.common.aspect.annotation.AutoLog;
@@ -46,11 +33,11 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="课程/培训表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appCourese")
+@RequestMapping("/app/appCourese")
 @Slf4j
-public class AppCoureseController extends JeecgController<AppCourese, IAppCoureseService> {
+public class AppCoursesController extends JeecgController<AppCourses, IAppCoureseService> {
 	@Autowired
-	private IAppCoureseService appCoureseService;
+	private IAppCoureseService appCoursesService;
 	
 	/**
 	 * 分页列表查询
@@ -64,47 +51,47 @@ public class AppCoureseController extends JeecgController<AppCourese, IAppCoures
 	//@AutoLog(value = "课程/培训表-分页列表查询")
 	@Operation(summary="课程/培训表-分页列表查询")
 	@GetMapping(value = "/list")
-	public Result<IPage<AppCourese>> queryPageList(AppCourese appCourese,
-								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-								   HttpServletRequest req) {
+	public Result<IPage<AppCourses>> queryPageList(AppCourses appCourese,
+												   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+												   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+												   HttpServletRequest req) {
+
 
+        QueryWrapper<AppCourses> queryWrapper = QueryGenerator.initQueryWrapper(appCourese, req.getParameterMap());
+		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
-        QueryWrapper<AppCourese> queryWrapper = QueryGenerator.initQueryWrapper(appCourese, req.getParameterMap());
-		Page<AppCourese> page = new Page<AppCourese>(pageNo, pageSize);
-		IPage<AppCourese> pageList = appCoureseService.page(page, queryWrapper);
+		queryWrapper.eq("org_code",loginUser.getOrgCode());
+		Page<AppCourses> page = new Page<AppCourses>(pageNo, pageSize);
+		IPage<AppCourses> pageList = appCoursesService.page(page, queryWrapper);
 		return Result.OK(pageList);
 	}
 	
 	/**
 	 *   添加
 	 *
-	 * @param appCourese
+	 * @param appCoursesDTO
 	 * @return
 	 */
 	@AutoLog(value = "课程/培训表-添加")
 	@Operation(summary="课程/培训表-添加")
 	@RequiresPermissions("org.jeecg.modules.app:nm_courese:add")
 	@PostMapping(value = "/add")
-	public Result<String> add(@RequestBody AppCourese appCourese) {
-		appCoureseService.save(appCourese);
-
-		return Result.OK("添加成功!");
+	public Result<String> add(@RequestBody AppCoursesDTO appCoursesDTO) {
+		return appCoursesService.saveWitchPriceRules(appCoursesDTO)?Result.OK("添加成功!"):Result.error("添加失败!");
 	}
 	
 	/**
 	 *  编辑
 	 *
-	 * @param appCourese
+	 * @param appCoursesDTO
 	 * @return
 	 */
 	@AutoLog(value = "课程/培训表-编辑")
 	@Operation(summary="课程/培训表-编辑")
 	@RequiresPermissions("org.jeecg.modules.app:nm_courese:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody AppCourese appCourese) {
-		appCoureseService.updateById(appCourese);
-		return Result.OK("编辑成功!");
+	public Result<String> edit(@RequestBody AppCoursesDTO appCoursesDTO) {
+		return appCoursesService.editWitchPriceRules(appCoursesDTO)?Result.OK("操作成功!"):Result.error("操作失败!");
 	}
 	
 	/**
@@ -118,24 +105,23 @@ public class AppCoureseController extends JeecgController<AppCourese, IAppCoures
 	@RequiresPermissions("org.jeecg.modules.app:nm_courese:delete")
 	@DeleteMapping(value = "/delete")
 	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		appCoureseService.removeById(id);
-		return Result.OK("删除成功!");
+		return appCoursesService.deleteWitchPriceRulesById(id)?Result.OK("操作成功!"):Result.error("操作失败!");
 	}
 	
-	/**
-	 *  批量删除
-	 *
-	 * @param ids
-	 * @return
-	 */
-	@AutoLog(value = "课程/培训表-批量删除")
-	@Operation(summary="课程/培训表-批量删除")
-	@RequiresPermissions("org.jeecg.modules.app:nm_courese:deleteBatch")
-	@DeleteMapping(value = "/deleteBatch")
-	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		this.appCoureseService.removeByIds(Arrays.asList(ids.split(",")));
-		return Result.OK("批量删除成功!");
-	}
+//	/**
+//	 *  批量删除
+//	 *
+//	 * @param ids
+//	 * @return
+//	 */
+//	@AutoLog(value = "课程/培训表-批量删除")
+//	@Operation(summary="课程/培训表-批量删除")
+//	@RequiresPermissions("org.jeecg.modules.app:nm_courese:deleteBatch")
+//	@DeleteMapping(value = "/deleteBatch")
+//	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+//		this.appCoursesService.removeByIds(Arrays.asList(ids.split(",")));
+//		return Result.OK("批量删除成功!");
+//	}
 	
 	/**
 	 * 通过id查询
@@ -146,12 +132,8 @@ public class AppCoureseController extends JeecgController<AppCourese, IAppCoures
 	//@AutoLog(value = "课程/培训表-通过id查询")
 	@Operation(summary="课程/培训表-通过id查询")
 	@GetMapping(value = "/queryById")
-	public Result<AppCourese> queryById(@RequestParam(name="id",required=true) String id) {
-		AppCourese appCourese = appCoureseService.getById(id);
-		if(appCourese==null) {
-			return Result.error("未找到对应数据");
-		}
-		return Result.OK(appCourese);
+	public Result<AppCoursesDTO> queryById(@RequestParam(name="id",required=true) String id) {
+		return Result.OK(appCoursesService.queryWitchPriceRulesById(id));
 	}
 
     /**
@@ -162,8 +144,8 @@ public class AppCoureseController extends JeecgController<AppCourese, IAppCoures
     */
     @RequiresPermissions("org.jeecg.modules.app:nm_courese:exportXls")
     @RequestMapping(value = "/exportXls")
-    public ModelAndView exportXls(HttpServletRequest request, AppCourese appCourese) {
-        return super.exportXls(request, appCourese, AppCourese.class, "课程/培训表");
+    public ModelAndView exportXls(HttpServletRequest request, AppCourses appCourese) {
+        return super.exportXls(request, appCourese, AppCourses.class, "课程/培训表");
     }
 
     /**
@@ -176,7 +158,7 @@ public class AppCoureseController extends JeecgController<AppCourese, IAppCoures
     @RequiresPermissions("org.jeecg.modules.app:nm_courese:importExcel")
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-        return super.importExcel(request, response, AppCourese.class);
+        return super.importExcel(request, response, AppCourses.class);
     }
 
 }

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="课程价格规则表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appCoursesPriceRules")
+@RequestMapping("/app/appCoursesPriceRules")
 @Slf4j
 public class AppCoursesPriceRulesController extends JeecgController<AppCoursesPriceRules, IAppCoursesPriceRulesService> {
 	@Autowired

+ 30 - 32
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppGameController.java

@@ -10,10 +10,14 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.app.dto.AppGameDTO;
 import org.jeecg.modules.system.app.entity.AppGame;
 import org.jeecg.modules.system.app.service.IAppGameService;
 
@@ -46,7 +50,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="赛事表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appGame")
+@RequestMapping("/app/appGame")
 @Slf4j
 public class AppGameController extends JeecgController<AppGame, IAppGameService> {
 	@Autowired
@@ -71,6 +75,8 @@ public class AppGameController extends JeecgController<AppGame, IAppGameService>
 
 
         QueryWrapper<AppGame> queryWrapper = QueryGenerator.initQueryWrapper(appGame, req.getParameterMap());
+		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		queryWrapper.eq("org_code",loginUser.getOrgCode());
 		Page<AppGame> page = new Page<AppGame>(pageNo, pageSize);
 		IPage<AppGame> pageList = appGameService.page(page, queryWrapper);
 		return Result.OK(pageList);
@@ -79,32 +85,29 @@ public class AppGameController extends JeecgController<AppGame, IAppGameService>
 	/**
 	 *   添加
 	 *
-	 * @param appGame
+	 * @param gameDTO
 	 * @return
 	 */
 	@AutoLog(value = "赛事表-添加")
 	@Operation(summary="赛事表-添加")
 	@RequiresPermissions("org.jeecg.modules.app:nm_game:add")
 	@PostMapping(value = "/add")
-	public Result<String> add(@RequestBody AppGame appGame) {
-		appGameService.save(appGame);
-
-		return Result.OK("添加成功!");
+	public Result<String> add(@RequestBody AppGameDTO gameDTO) {
+		return appGameService.saveWitchPriceRules(gameDTO)? Result.OK("操作成功!"): Result.error("操作失败!");
 	}
 	
 	/**
 	 *  编辑
 	 *
-	 * @param appGame
+	 * @param gameDTO
 	 * @return
 	 */
 	@AutoLog(value = "赛事表-编辑")
 	@Operation(summary="赛事表-编辑")
 	@RequiresPermissions("org.jeecg.modules.app:nm_game:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody AppGame appGame) {
-		appGameService.updateById(appGame);
-		return Result.OK("编辑成功!");
+	public Result<String> edit(@RequestBody AppGameDTO gameDTO) {
+		return appGameService.editWitchPriceRules(gameDTO)? Result.OK("操作成功!"): Result.error("操作失败!");
 	}
 	
 	/**
@@ -118,24 +121,23 @@ public class AppGameController extends JeecgController<AppGame, IAppGameService>
 	@RequiresPermissions("org.jeecg.modules.app:nm_game:delete")
 	@DeleteMapping(value = "/delete")
 	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		appGameService.removeById(id);
-		return Result.OK("删除成功!");
+		return appGameService.deleteWitchPriceRulesById(id)? Result.OK("操作成功!"): Result.error("操作失败!");
 	}
 	
-	/**
-	 *  批量删除
-	 *
-	 * @param ids
-	 * @return
-	 */
-	@AutoLog(value = "赛事表-批量删除")
-	@Operation(summary="赛事表-批量删除")
-	@RequiresPermissions("org.jeecg.modules.app:nm_game:deleteBatch")
-	@DeleteMapping(value = "/deleteBatch")
-	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		this.appGameService.removeByIds(Arrays.asList(ids.split(",")));
-		return Result.OK("批量删除成功!");
-	}
+//	/**
+//	 *  批量删除
+//	 *
+//	 * @param ids
+//	 * @return
+//	 */
+//	@AutoLog(value = "赛事表-批量删除")
+//	@Operation(summary="赛事表-批量删除")
+//	@RequiresPermissions("org.jeecg.modules.app:nm_game:deleteBatch")
+//	@DeleteMapping(value = "/deleteBatch")
+//	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+//		this.appGameService.removeByIds(Arrays.asList(ids.split(",")));
+//		return Result.OK("批量删除成功!");
+//	}
 	
 	/**
 	 * 通过id查询
@@ -146,12 +148,8 @@ public class AppGameController extends JeecgController<AppGame, IAppGameService>
 	//@AutoLog(value = "赛事表-通过id查询")
 	@Operation(summary="赛事表-通过id查询")
 	@GetMapping(value = "/queryById")
-	public Result<AppGame> queryById(@RequestParam(name="id",required=true) String id) {
-		AppGame appGame = appGameService.getById(id);
-		if(appGame==null) {
-			return Result.error("未找到对应数据");
-		}
-		return Result.OK(appGame);
+	public Result<AppGameDTO> queryById(@RequestParam(name="id",required=true) String id) {
+		return Result.OK(appGameService.queryWitchPriceRulesById(id));
 	}
 
     /**

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="赛事价格规则表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appGamePriceRules")
+@RequestMapping("/app/appGamePriceRules")
 @Slf4j
 public class AppGamePriceRulesController extends JeecgController<AppGamePriceRules, IAppGamePriceRulesService> {
 	@Autowired

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="保险表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appInsure")
+@RequestMapping("/app/appInsure")
 @Slf4j
 public class AppInsureController extends JeecgController<AppInsure, IAppInsureService> {
 	@Autowired

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="保单表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appInsureNumber")
+@RequestMapping("/app/appInsureNumber")
 @Slf4j
 public class AppInsureNumberController extends JeecgController<AppInsureNumber, IAppInsureNumberService> {
 	@Autowired

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="订单表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appOrder")
+@RequestMapping("/app/appOrder")
 @Slf4j
 public class AppOrderController extends JeecgController<AppOrder, IAppOrderService> {
 	@Autowired

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="订单产品明细")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appOrderProduct")
+@RequestMapping("/app/appOrderProduct")
 @Slf4j
 public class AppOrderProductController extends JeecgController<AppOrderProduct, IAppOrderProductService> {
 	@Autowired

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

@@ -46,7 +46,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="订单人员详细表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appOrderUser")
+@RequestMapping("/app/appOrderUser")
 @Slf4j
 public class AppOrderUserController extends JeecgController<AppOrderUser, IAppOrderUserService> {
 	@Autowired

+ 0 - 182
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppProductCategoryController.java

@@ -1,182 +0,0 @@
-package org.jeecg.modules.system.app.controller;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.query.QueryRuleEnum;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.system.app.entity.AppProductCategory;
-import org.jeecg.modules.system.app.service.IAppProductCategoryService;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.extern.slf4j.Slf4j;
-
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-import org.jeecg.common.system.base.controller.JeecgController;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Operation;
-import org.jeecg.common.aspect.annotation.AutoLog;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
- /**
- * @Description: 产品类目表
- * @Author: jeecg-boot
- * @Date:   2025-07-03
- * @Version: V1.0
- */
-@Tag(name="产品类目表")
-@RestController
-@RequestMapping("/org/jeecg/modules/app/appProductCategory")
-@Slf4j
-public class AppProductCategoryController extends JeecgController<AppProductCategory, IAppProductCategoryService> {
-	@Autowired
-	private IAppProductCategoryService appProductCategoryService;
-	
-	/**
-	 * 分页列表查询
-	 *
-	 * @param appProductCategory
-	 * @param pageNo
-	 * @param pageSize
-	 * @param req
-	 * @return
-	 */
-	//@AutoLog(value = "产品类目表-分页列表查询")
-	@Operation(summary="产品类目表-分页列表查询")
-	@GetMapping(value = "/list")
-	public Result<IPage<AppProductCategory>> queryPageList(AppProductCategory appProductCategory,
-								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-								   HttpServletRequest req) {
-
-
-        QueryWrapper<AppProductCategory> queryWrapper = QueryGenerator.initQueryWrapper(appProductCategory, req.getParameterMap());
-		Page<AppProductCategory> page = new Page<AppProductCategory>(pageNo, pageSize);
-		IPage<AppProductCategory> pageList = appProductCategoryService.page(page, queryWrapper);
-		return Result.OK(pageList);
-	}
-	
-	/**
-	 *   添加
-	 *
-	 * @param appProductCategory
-	 * @return
-	 */
-	@AutoLog(value = "产品类目表-添加")
-	@Operation(summary="产品类目表-添加")
-	@RequiresPermissions("org.jeecg.modules.app:nm_product_category:add")
-	@PostMapping(value = "/add")
-	public Result<String> add(@RequestBody AppProductCategory appProductCategory) {
-		appProductCategoryService.save(appProductCategory);
-
-		return Result.OK("添加成功!");
-	}
-	
-	/**
-	 *  编辑
-	 *
-	 * @param appProductCategory
-	 * @return
-	 */
-	@AutoLog(value = "产品类目表-编辑")
-	@Operation(summary="产品类目表-编辑")
-	@RequiresPermissions("org.jeecg.modules.app:nm_product_category:edit")
-	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody AppProductCategory appProductCategory) {
-		appProductCategoryService.updateById(appProductCategory);
-		return Result.OK("编辑成功!");
-	}
-	
-	/**
-	 *   通过id删除
-	 *
-	 * @param id
-	 * @return
-	 */
-	@AutoLog(value = "产品类目表-通过id删除")
-	@Operation(summary="产品类目表-通过id删除")
-	@RequiresPermissions("org.jeecg.modules.app:nm_product_category:delete")
-	@DeleteMapping(value = "/delete")
-	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		appProductCategoryService.removeById(id);
-		return Result.OK("删除成功!");
-	}
-	
-	/**
-	 *  批量删除
-	 *
-	 * @param ids
-	 * @return
-	 */
-	@AutoLog(value = "产品类目表-批量删除")
-	@Operation(summary="产品类目表-批量删除")
-	@RequiresPermissions("org.jeecg.modules.app:nm_product_category:deleteBatch")
-	@DeleteMapping(value = "/deleteBatch")
-	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		this.appProductCategoryService.removeByIds(Arrays.asList(ids.split(",")));
-		return Result.OK("批量删除成功!");
-	}
-	
-	/**
-	 * 通过id查询
-	 *
-	 * @param id
-	 * @return
-	 */
-	//@AutoLog(value = "产品类目表-通过id查询")
-	@Operation(summary="产品类目表-通过id查询")
-	@GetMapping(value = "/queryById")
-	public Result<AppProductCategory> queryById(@RequestParam(name="id",required=true) String id) {
-		AppProductCategory appProductCategory = appProductCategoryService.getById(id);
-		if(appProductCategory==null) {
-			return Result.error("未找到对应数据");
-		}
-		return Result.OK(appProductCategory);
-	}
-
-    /**
-    * 导出excel
-    *
-    * @param request
-    * @param appProductCategory
-    */
-    @RequiresPermissions("org.jeecg.modules.app:nm_product_category:exportXls")
-    @RequestMapping(value = "/exportXls")
-    public ModelAndView exportXls(HttpServletRequest request, AppProductCategory appProductCategory) {
-        return super.exportXls(request, appProductCategory, AppProductCategory.class, "产品类目表");
-    }
-
-    /**
-      * 通过excel导入数据
-    *
-    * @param request
-    * @param response
-    * @return
-    */
-    @RequiresPermissions("org.jeecg.modules.app:nm_product_category:importExcel")
-    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-        return super.importExcel(request, response, AppProductCategory.class);
-    }
-
-}

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppSiteController.java

@@ -4,8 +4,11 @@ import java.util.Arrays;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.system.app.dto.AppSiteDTO;
 import org.jeecg.modules.system.app.entity.AppSite;
 import org.jeecg.modules.system.app.entity.AppSitePriceRules;
@@ -61,6 +64,8 @@ public class AppSiteController extends JeecgController<AppSite, IAppSiteService>
 								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
 								   HttpServletRequest req) {
         QueryWrapper<AppSite> queryWrapper = QueryGenerator.initQueryWrapper(appSite, req.getParameterMap());
+		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		queryWrapper.eq("org_code",loginUser.getOrgCode());
 		Page<AppSite> page = new Page<AppSite>(pageNo, pageSize);
 		IPage<AppSite> pageList = appSiteService.page(page, queryWrapper);
 		return Result.OK(pageList);

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

@@ -29,7 +29,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  */
 @Tag(name="场地价格规则表")
 @RestController
-@RequestMapping("/org/jeecg/modules/app/appSitePriceRules")
+@RequestMapping("/app/appSitePriceRules")
 @Slf4j
 public class AppSitePriceRulesController extends JeecgController<AppSitePriceRules, IAppSitePriceRulesService> {
 	@Autowired

+ 30 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCategoryDTO.java

@@ -0,0 +1,30 @@
+package org.jeecg.modules.system.app.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * @author DM
+ * @date 2025/7/7 15:41
+ * @description
+ */
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="运动类目入参DTO")
+public class AppCategoryDTO extends BasePageDTO{
+    @Schema(description ="id")
+    private String id;
+    @Schema(description ="名称", example = "篮球")
+    private String name;
+    @Schema(description ="排序", example = "1")
+    private int sort;
+}

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

@@ -7,7 +7,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
-import org.jeecg.modules.system.app.entity.AppCourese;
+import org.jeecg.modules.system.app.entity.AppCourses;
 import org.jeecg.modules.system.app.entity.AppCoursesPriceRules;
 
 import java.util.List;
@@ -22,8 +22,9 @@ import java.util.List;
 @EqualsAndHashCode(callSuper = false)
 @AllArgsConstructor
 @NoArgsConstructor
+@Schema(description="课程入参DTO")
 public class AppCoursesDTO {
-    private AppCourese  course;
+    private AppCourses course;
     @ArraySchema(schema = @Schema(implementation = AppCoursesPriceRules.class), minItems = 1)
     private List<AppCoursesPriceRules> priceRulesList;
 }

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppGameDTO.java

@@ -22,7 +22,7 @@ import java.util.List;
 @EqualsAndHashCode(callSuper = false)
 @AllArgsConstructor
 @NoArgsConstructor
-@Schema(description = "场地入参DTO")
+@Schema(description = "赛事入参DTO")
 public class AppGameDTO {
     private AppGame game;
     @ArraySchema(schema = @Schema(implementation = AppGamePriceRules.class), minItems = 1)

+ 37 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppOrderDTO.java

@@ -0,0 +1,37 @@
+package org.jeecg.modules.system.app.dto;
+
+import io.swagger.v3.oas.annotations.media.ArraySchema;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.system.app.entity.AppOrder;
+import org.jeecg.modules.system.app.entity.AppOrderProduct;
+import org.jeecg.modules.system.app.entity.AppOrderUser;
+
+import java.util.List;
+
+/**
+ * @author DM
+ * @date 2025/7/7 14:29
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="订单入参DTO")
+public class AppOrderDTO {
+    private AppOrder order;
+    @ArraySchema(schema = @Schema(implementation = AppOrderProduct.class), minItems = 1)
+    /**
+     * 订单中产品id列表
+     */
+    @Schema(description = "订单中产品id列表")
+    private List<String> orderProductList;
+    @ArraySchema(schema = @Schema(implementation = AppOrderUserDTO.class), minItems = 1)
+    private List<AppOrderUserDTO> orderUserList;
+}

+ 29 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppOrderUserDTO.java

@@ -0,0 +1,29 @@
+package org.jeecg.modules.system.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @author DM
+ * @date 2025/7/7 20:01
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="订单人员入参DTO")
+public class AppOrderUserDTO {
+    /**人员名称*/
+    @Schema(description = "人员名称")
+    private String name;
+    /**身份证*/
+    @Schema(description = "身份证")
+    private String idNumber;
+}

+ 9 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppSitePriceRulesDTO.java

@@ -0,0 +1,9 @@
+package org.jeecg.modules.system.app.dto;
+
+/**
+ * @author DM
+ * @date 2025/7/7 17:39
+ * @description
+ */
+public class AppSitePriceRulesDTO {
+}

+ 27 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/BasePageDTO.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.system.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * @author DM
+ * @date 2025/7/7 16:17
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="分页入参DTO")
+public class BasePageDTO {
+    @Schema(description = "当前页码", example = "1")
+    private Long pageNum = 1L;
+
+    @Schema(description = "每页条数", example = "10")
+    private Long pageSize = 10L;
+}

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

@@ -49,6 +49,10 @@ public class AppCategory implements Serializable {
 	@Excel(name = "名称", width = 15)
     @Schema(description = "名称")
     private String name;
+	/**顺序*/
+	@Excel(name = "顺序", width = 15)
+    @Schema(description = "顺序")
+    private Integer sort;
 	/**乐观锁*/
 	@Excel(name = "乐观锁", width = 15)
     @Schema(description = "乐观锁")

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

@@ -23,11 +23,11 @@ import java.util.Date;
  * @Version: V1.0
  */
 @Data
-@TableName("nm_courese")
+@TableName("nm_courses")
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
 @Schema(description="课程/培训表")
-public class AppCourese implements Serializable {
+public class AppCourses implements Serializable {
     private static final long serialVersionUID = 1L;
 
 	/**id*/

+ 13 - 11
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppGame.java

@@ -1,23 +1,19 @@
 package org.jeecg.modules.system.app.entity;
 
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableLogic;
-import org.jeecg.common.constant.ProvinceCityArea;
-import org.jeecg.common.util.SpringContextUtils;
-import lombok.Data;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.jeecgframework.poi.excel.annotation.Excel;
-import org.jeecg.common.aspect.annotation.Dict;
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
 
 /**
  * @Description: 赛事表
@@ -109,6 +105,12 @@ public class AppGame implements Serializable {
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @Schema(description = "结束时间")
     private Date endTime;
+    /**报名截止时间*/
+    @Excel(name = "报名截止时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "报名截止时间")
+    private Date applicationEndTime;
 	/**排序*/
 	@Excel(name = "排序", width = 15)
     @Schema(description = "排序")

+ 13 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrder.java

@@ -37,7 +37,15 @@ public class AppOrder implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @Schema(description = "id")
     private String id;
-	/**部门id*/
+	/**订单号*/
+	@Excel(name = "订单号", width = 15)
+    @Schema(description = "订单号")
+    private String orderCode;
+    /**订单类型*/
+    @Excel(name = "订单类型", width = 15)
+    @Schema(description = "订单类型")
+    private Integer type;
+    /**部门id*/
 	@Excel(name = "部门id", width = 15)
     @Schema(description = "部门id")
     private String orgCode;
@@ -53,10 +61,10 @@ public class AppOrder implements Serializable {
 	@Excel(name = "用户id", width = 15)
     @Schema(description = "用户id")
     private String userId;
-	/**成员*/
-	@Excel(name = "成员", width = 15)
-    @Schema(description = "员")
-    private String people;
+    /**订单人员信息表ids*/
+    @Excel(name = "订单人员", width = 15)
+    @Schema(description = "订单人员")
+    private String peoples;
 	/**原订单总价*/
 	@Excel(name = "原订单总价", width = 15)
     @Schema(description = "原订单总价")

+ 0 - 85
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppProductCategory.java

@@ -1,85 +0,0 @@
-package org.jeecg.modules.system.app.entity;
-
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import org.jeecg.common.constant.ProvinceCityArea;
-import org.jeecg.common.util.SpringContextUtils;
-import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.jeecgframework.poi.excel.annotation.Excel;
-import org.jeecg.common.aspect.annotation.Dict;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * @Description: 产品类目表
- * @Author: jeecg-boot
- * @Date:   2025-07-03
- * @Version: V1.0
- */
-@Data
-@TableName("nm_product_category")
-@Accessors(chain = true)
-@EqualsAndHashCode(callSuper = false)
-@Schema(description="产品类目表")
-public class AppProductCategory implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-	/**id*/
-	@TableId(type = IdType.ASSIGN_ID)
-    @Schema(description = "id")
-    private String id;
-	/**部门id*/
-	@Excel(name = "部门id", width = 15)
-    @Schema(description = "部门id")
-    private String orgCode;
-	/**租户id*/
-	@Excel(name = "租户id", width = 15)
-    @Schema(description = "租户id")
-    private String tenantId;
-	/**场地*/
-	@Excel(name = "场地", width = 15)
-    @Schema(description = "场地")
-    private String productId;
-	/**运动类型*/
-	@Excel(name = "运动类型", width = 15)
-    @Schema(description = "运动类型")
-    private String categoryId;
-	/**乐观锁*/
-	@Excel(name = "乐观锁", width = 15)
-    @Schema(description = "乐观锁")
-    private Integer revision;
-	/**创建人;创建人*/
-    @Schema(description = "创建人;创建人")
-    private String createBy;
-	/**创建时间;创建时间*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @Schema(description = "创建时间;创建时间")
-    private Date createTime;
-	/**更新人;更新人*/
-    @Schema(description = "更新人;更新人")
-    private String updateBy;
-	/**更新时间;更新时间*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @Schema(description = "更新时间;更新时间")
-    private Date updateTime;
-	/**系统状态;状态(0-正常,1-冻结)*/
-	@Excel(name = "系统状态;状态(0-正常,1-冻结)", width = 15)
-    @Schema(description = "系统状态;状态(0-正常,1-冻结)")
-    private Integer status;
-	/**删除标志;删除状态(0-正常,1-已删除)*/
-	@Excel(name = "删除标志;删除状态(0-正常,1-已删除)", width = 15)
-    @Schema(description = "删除标志;删除状态(0-正常,1-已删除)")
-    @TableLogic
-    private Integer delFlag;
-}

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

@@ -28,13 +28,13 @@ public class AppSearchHot implements Serializable {
     @Schema(description = "id")
     private String id;
     @Schema(description = "搜索次数")
-    private String searchCount;
+    private int searchCount;
     @Schema(description = "搜索内容")
     private String searchContent;
     @Schema(description = "是否启用")
-    private String isActive;
+    private int isActive;
     @Schema(description = "是否推荐")
-    private String isRecommend;
+    private int isRecommend;
     @Schema(description = "关联分类ID")
     private String categoryId;
     @Schema(description = "最后一次搜索用户ID")

+ 8 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppSite.java

@@ -89,6 +89,14 @@ public class AppSite implements Serializable {
 	@Excel(name = "适用人数", width = 15)
     @Schema(description = "适用人数")
     private Integer usableCount;
+	/**不可用时间 星期*/
+	@Excel(name = "不可用时间 星期", width = 15)
+    @Schema(description = "不可用时间 星期")
+    private String downTime;
+	/**购买限制*/
+	@Excel(name = "购买限制", width = 15)
+    @Schema(description = "购买限制")
+    private Integer buyLimit;
  	/**设施/信息*/
 	@Excel(name = "设施/信息", width = 15)
     @Schema(description = "设施/信息")

+ 40 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/OrderTypeEnum.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.system.app.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum OrderTypeEnum {
+    //    0学校 1包场 2不固定场
+    /**
+     * 场地
+     */
+    SITE(0, "场地"),
+    /**
+     * 赛事
+     */
+    GAME(1, "赛事"),
+    /**
+     * 课程
+     */
+    COURSES(2, "课程");
+    final int code;
+    final String name;
+    OrderTypeEnum(int code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+    public int getCode() {
+        return code;
+    }
+    public String getName() {
+        return name;
+    }
+    public static OrderTypeEnum getByCode(int code) {
+        for (OrderTypeEnum value : values()) {
+            if (value.code == code) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/SiteTypeEnum.java

@@ -8,8 +8,8 @@ public enum SiteTypeEnum {
     SCHOOL(0, "学校"),
     PACKAGE(1, "包场"),
     UNFIXED(2, "不固定场");
-    int code;
-    String name;
+    final int code;
+    final String name;
     SiteTypeEnum(int code, String name) {
         this.code = code;
         this.name = name;

+ 0 - 17
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppCoureseMapper.java

@@ -1,17 +0,0 @@
-package org.jeecg.modules.system.app.mapper;
-
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.system.app.entity.AppCourese;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * @Description: 课程/培训表
- * @Author: jeecg-boot
- * @Date:   2025-07-03
- * @Version: V1.0
- */
-public interface AppCoureseMapper extends BaseMapper<AppCourese> {
-
-}

+ 25 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppCoursesMapper.java

@@ -0,0 +1,25 @@
+package org.jeecg.modules.system.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.app.dto.SearchDTO;
+import org.jeecg.modules.app.vo.SearchVO;
+import org.jeecg.modules.system.app.entity.AppCourses;
+
+/**
+ * @Description: 课程/培训表
+ * @Author: jeecg-boot
+ * @Date:   2025-07-03
+ * @Version: V1.0
+ */
+public interface AppCoursesMapper extends BaseMapper<AppCourses> {
+    /**
+     * @Author SheepHy
+     * @Description 培训课程分页查询
+     * @Date 13:37 2025/7/7
+     * @Param
+     * @return
+     **/
+    Page<SearchVO.SearchTrainVO> convertSearchTrainVOPage(@Param("page")Page<SearchVO.SearchTrainVO> page,@Param("searchDTO")SearchDTO searchDTO);
+}

+ 12 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppGameMapper.java

@@ -1,10 +1,11 @@
 package org.jeecg.modules.system.app.mapper;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.app.dto.SearchDTO;
+import org.jeecg.modules.app.vo.SearchVO;
 import org.jeecg.modules.system.app.entity.AppGame;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * @Description: 赛事表
@@ -13,5 +14,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @Version: V1.0
  */
 public interface AppGameMapper extends BaseMapper<AppGame> {
-
+    /**
+     * @Author SheepHy
+     * @Description 赛事分页查询
+     * @Date 14:04 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchRaceVO>
+     **/
+    Page<SearchVO.SearchRaceVO> convertSearchCompetitionVOPage(@Param("page")Page<SearchVO.SearchRaceVO> page,@Param("searchDTO")SearchDTO searchDTO);
 }

+ 12 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppInstructorMapper.java

@@ -1,10 +1,11 @@
 package org.jeecg.modules.system.app.mapper;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.app.dto.SearchDTO;
+import org.jeecg.modules.app.vo.SearchVO;
 import org.jeecg.modules.system.app.entity.AppInstructor;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * @Description: 教练表
@@ -13,5 +14,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @Version: V1.0
  */
 public interface AppInstructorMapper extends BaseMapper<AppInstructor> {
-
+    /**
+     * @Author SheepHy
+     * @Description //TODO
+     * @Date 14:43 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchInstructorVO>
+     **/
+    Page<SearchVO.SearchInstructorVO> convertSearchInstructorVOPage(@Param("page")Page<SearchVO.SearchInstructorVO> page,@Param("searchDTO")SearchDTO searchDTO);
 }

+ 0 - 17
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppProductCategoryMapper.java

@@ -1,17 +0,0 @@
-package org.jeecg.modules.system.app.mapper;
-
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.system.app.entity.AppProductCategory;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * @Description: 产品类目表
- * @Author: jeecg-boot
- * @Date:   2025-07-03
- * @Version: V1.0
- */
-public interface AppProductCategoryMapper extends BaseMapper<AppProductCategory> {
-
-}

+ 11 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppSiteMapper.java

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.app.dto.SearchDTO;
 import org.jeecg.modules.app.vo.PlaceVO;
+import org.jeecg.modules.app.vo.SearchVO;
 import org.jeecg.modules.system.app.entity.AppSite;
 
 /**
@@ -24,4 +26,13 @@ public interface AppSiteMapper extends BaseMapper<AppSite> {
      **/
     Page<PlaceVO> getPlaceList(@Param("page")IPage<PlaceVO> page, @Param("venueType")String venueType);
 
+    /**
+     * @Author SheepHy
+     * @Description 全局搜索场地分页查询
+     * @Date 11:05 2025/7/7
+     * @Param searchDTO {@link SearchDTO}
+     * @return Page<SearchVO.SearchPlaceVO>
+     **/
+    Page<SearchVO.SearchPlaceVO> convertSearchPlaceVOPage(@Param("page")Page<SearchVO.SearchPlaceVO> page,@Param("searchDTO")SearchDTO searchDTO);
+
 }

+ 0 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoureseMapper.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.jeecg.modules.system.app.mapper.AppCoureseMapper">
-
-</mapper>

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

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.app.mapper.AppCoursesMapper">
+    <select id="convertSearchTrainVOPage" resultType="org.jeecg.modules.app.vo.SearchVO$SearchTrainVO">
+        SELECT
+            a.id,
+            a.`name`,
+            b.address,
+            a.cover,
+            a.original_price,
+            a.selling_price,
+            COALESCE(d.sales, 0) AS sales,
+            a.good_rate,
+            a.start_time,
+            a.end_time
+        FROM
+            nm_courses a
+                LEFT JOIN nm_site b ON a.tenant_id = b.tenant_id
+                LEFT JOIN (
+                SELECT
+                    product_id,
+                    COUNT(id) AS sales
+                FROM
+                    nm_order_product
+                GROUP BY
+                    product_id
+            ) d ON a.id = d.product_id WHERE 1 = 1
+        <if test="searchDTO.keyword != null and searchDTO.keyword == ''">
+            AND (a.name LIKE CONCAT('%',#{searchDTO.keyword},'%') OR a.address LIKE CONCAT('%',#{searchDTO.keyword},'%'))
+        </if>
+        <if test="searchDTO.venueType != null and searchDTO.venueType == '1-2'">
+            ORDER BY  a.good_rate DESC
+        </if>
+        <if test="searchDTO.venueType != null and searchDTO.venueType == '1-3'">
+            ORDER BY sales DESC
+        </if>
+    </select>
+</mapper>

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

@@ -1,5 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.system.app.mapper.AppGameMapper">
-
+    <select id="convertSearchCompetitionVOPage" resultType="org.jeecg.modules.app.vo.SearchVO$SearchRaceVO" parameterType="org.jeecg.modules.app.dto.SearchDTO">
+        SELECT
+            a.id,
+            a.cover,
+            a.type,
+            COALESCE(g.min_original_price, 0) AS original_price,
+            COALESCE(g.min_selling_price, 0) AS selling_price,
+            a.address,
+            CASE
+                WHEN a.application_end_time >= NOW() THEN TRUE
+                ELSE FALSE
+                END AS isRegistrationOpen
+        FROM
+            nm_game a
+                LEFT JOIN (
+                SELECT
+                    game_id,
+                    MIN(original_price) AS min_original_price,
+                    MIN(selling_price) AS min_selling_price
+                FROM nm_game_peice_rules
+                GROUP BY game_id
+            ) g ON a.id = g.game_id
+        WHERE
+            a.end_time > NOW()
+        <if test="searchDTO.keyword != null and searchDTO.keyword == ''">
+            AND (a.name LIKE CONCAT('%',#{searchDTO.keyword},'%') OR a.address LIKE CONCAT('%',#{searchDTO.keyword},'%'))
+        </if>
+        ORDER BY a.end_time ASC;
+    </select>
 </mapper>

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

@@ -1,5 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.system.app.mapper.AppInstructorMapper">
-
+    <select id="convertSearchInstructorVOPage" resultType="org.jeecg.modules.app.vo.SearchVO$SearchInstructorVO">
+        SELECT
+            a.id,
+            b.realname AS name,
+            b.avatar,
+            c.depart_name AS orgName,
+            a.excel_msg,
+            a.teaching_philosophy,
+            a.good_rate,
+            a.classes_number,
+            b.id AS userId,
+            COUNT( DISTINCT d.user_id, c2.id ) AS orderCount
+        FROM
+            nm_instructor a
+                LEFT JOIN sys_user b ON a.user_id = b.id
+                LEFT JOIN sys_depart c ON b.org_code = c.org_code
+                LEFT JOIN nm_courses d ON a.user_id = d.user_id
+                LEFT JOIN nm_order_product c2 ON d.user_id = c2.product_id
+        WHERE 1=1
+        <if test="searchDTO.keyword != null and searchDTO.keyword == ''">
+            AND (b.realname LIKE CONCAT('%',#{searchDTO.keyword},'%') OR c.depart_name LIKE CONCAT('%',#{searchDTO.keyword},'%'))
+        </if>
+        GROUP BY
+            a.id,
+            b.realname,
+            b.avatar,
+            userId,
+            c.depart_name,
+            a.excel_msg,
+            a.teaching_philosophy,
+            a.good_rate,
+            a.classes_number
+        ORDER BY orderCount DESC
+    </select>
 </mapper>

+ 0 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppProductCategoryMapper.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.jeecg.modules.system.app.mapper.AppProductCategoryMapper">
-
-</mapper>

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

@@ -17,20 +17,44 @@
                 ELSE 0
                 END AS ticketWhether
         FROM nm_site a LEFT JOIN sys_depart b ON a.tenant_id = b.id WHERE 1=1
-        <if test="venueType != null and venueType == 0">
+        <if test="venueType != null and venueType == '0-1'">
             ORDER BY  a.good_rate DESC
         </if>
-        <if test="venueType != null and venueType == 1">
+        <if test="venueType != null and venueType == '1-1'">
             AND b.org_category = 2
         </if>
-        <if test="venueType != null and venueType == 2">
+        <if test="venueType != null and venueType == '1-2'">
             AND b.org_category = 2 ORDER BY  a.good_rate DESC
         </if>
-        <if test="venueType != null and venueType == 3">
+        <if test="venueType != null and venueType == '2-1'">
             AND b.org_category = 3
         </if>
-        <if test="venueType != null and venueType == 4">
+        <if test="venueType != null and venueType == '2-2'">
             AND b.org_category = 3 ORDER BY  a.good_rate DESC
         </if>
     </select>
+
+    <select id="convertSearchPlaceVOPage" resultType="org.jeecg.modules.app.vo.SearchVO$SearchPlaceVO" parameterType="org.jeecg.modules.app.dto.SearchDTO">
+        SELECT
+        a.id,
+        a.name,
+        a.good_rate AS goodRate,
+        a.address,
+        a.category_id,
+        CASE
+        WHEN EXISTS (
+        SELECT SUM(inventory)
+        FROM nm_site_peice_rules
+        WHERE site_id = a.id
+        ) THEN 1
+        ELSE 0
+        END AS ticketWhether
+        FROM nm_site a LEFT JOIN sys_depart b ON a.tenant_id = b.id WHERE 1=1
+        <if test="searchDTO.keyword != null and searchDTO.keyword == ''">
+            AND (a.name LIKE CONCAT('%',#{searchDTO.keyword},'%') OR a.address LIKE CONCAT('%',#{searchDTO.keyword},'%'))
+        </if>
+        <if test="searchDTO.venueType != null and searchDTO.venueType == '0-2'">
+            ORDER BY  a.good_rate DESC
+        </if>
+    </select>
 </mapper>

+ 7 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppCategoryService.java

@@ -1,7 +1,10 @@
 package org.jeecg.modules.system.app.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.modules.system.app.dto.AppCategoryDTO;
 import org.jeecg.modules.system.app.entity.AppCategory;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.app.vo.AppCategoryVO;
 
 /**
  * @Description: 运动类型表
@@ -10,5 +13,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IAppCategoryService extends IService<AppCategory> {
+    Boolean saveCategory(AppCategoryVO appCategoryVO);
+    Boolean editCategory(AppCategoryDTO appCategoryVO);
+    Boolean deleteCategory(String id);
+    IPage<AppCategoryVO> queryCategoryList(AppCategoryDTO appCategoryDTO);
 
 }

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

@@ -1,6 +1,7 @@
 package org.jeecg.modules.system.app.service;
 
-import org.jeecg.modules.system.app.entity.AppCourese;
+import org.jeecg.modules.system.app.dto.AppCoursesDTO;
+import org.jeecg.modules.system.app.entity.AppCourses;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -9,6 +10,30 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Date:   2025-07-03
  * @Version: V1.0
  */
-public interface IAppCoureseService extends IService<AppCourese> {
+public interface IAppCoureseService extends IService<AppCourses> {
+    /**
+     * 保存课程
+     * @param appCoursesDTO
+     * @return
+     */
+    Boolean saveWitchPriceRules(AppCoursesDTO appCoursesDTO);
+    /**
+     * 修改课程
+     * @param appCoursesDTO
+     * @return
+     */
+    Boolean editWitchPriceRules(AppCoursesDTO appCoursesDTO);
+    /**
+     * 通过id查询课程
+     * @param id
+     * @return
+     */
+    AppCoursesDTO queryWitchPriceRulesById(String id);
+    /**
+     * 删除课程
+     * @param id
+     * @return
+     */
+    Boolean deleteWitchPriceRulesById(String id);
 
 }

+ 4 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppGameService.java

@@ -13,25 +13,25 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAppGameService extends IService<AppGame> {
     /**
-     * 保存场地
+     * 保存赛事
      * @param gameDTO
      * @return
      */
     Boolean saveWitchPriceRules(AppGameDTO gameDTO);
     /**
-     * 修改场地
+     * 修改赛事
      * @param gameDTO
      * @return
      */
         Boolean editWitchPriceRules(AppGameDTO gameDTO);
     /**
-     * 通过id查询场地
+     * 通过id查询赛事
      * @param id
      * @return
      */
     AppGameDTO queryWitchPriceRulesById(String id);
     /**
-     * 删除场地
+     * 删除赛事
      * @param id
      * @return
      */

+ 28 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppOrderService.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.system.app.service;
 
+import org.jeecg.modules.system.app.dto.AppOrderDTO;
 import org.jeecg.modules.system.app.entity.AppOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -10,5 +11,32 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IAppOrderService extends IService<AppOrder> {
+    /**
+     * 添加订单表
+     * @param appOrderDTO
+     * @return
+     */
+    Boolean saveWitchProduct(AppOrderDTO appOrderDTO);
+
+    /**
+     * 修改订单表
+     * @param appOrderDTO
+     * @return
+     */
+    Boolean editWitchProduct(AppOrderDTO appOrderDTO);
+
+    /**
+     * 删除订单表
+     * @param id
+     * @return
+     */
+    Boolean deleteWitchProductById(String id);
+
+    /**
+     * 查询订单详情
+     * @param id
+     * @return
+     */
+    AppOrderDTO queryWitchProductById(String id);
 
 }

+ 0 - 14
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppProductCategoryService.java

@@ -1,14 +0,0 @@
-package org.jeecg.modules.system.app.service;
-
-import org.jeecg.modules.system.app.entity.AppProductCategory;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * @Description: 产品类目表
- * @Author: jeecg-boot
- * @Date:   2025-07-03
- * @Version: V1.0
- */
-public interface IAppProductCategoryService extends IService<AppProductCategory> {
-
-}

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppSiteService.java

@@ -1,8 +1,11 @@
 package org.jeecg.modules.system.app.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.modules.system.app.dto.AppCategoryDTO;
 import org.jeecg.modules.system.app.dto.AppSiteDTO;
 import org.jeecg.modules.system.app.entity.AppSite;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.app.vo.AppCategoryVO;
 
 /**
  * @Description: 场地表
@@ -37,4 +40,6 @@ public interface IAppSiteService extends IService<AppSite> {
      */
     Boolean deleteWitchPriceRulesById(String id);
 
+    IPage<AppSite> querySiteList(AppSiteDTO dto);
+
 }

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

@@ -1,12 +1,30 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.dto.AppCategoryDTO;
 import org.jeecg.modules.system.app.entity.AppCategory;
+import org.jeecg.modules.system.app.entity.AppSite;
 import org.jeecg.modules.system.app.mapper.AppCategoryMapper;
 import org.jeecg.modules.system.app.service.IAppCategoryService;
+import org.jeecg.modules.system.app.vo.AppCategoryVO;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
+import static org.jeecg.common.constant.CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
+
 /**
  * @Description: 运动类型表
  * @Author: jeecg-boot
@@ -16,4 +34,68 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class AppCategoryServiceImpl extends ServiceImpl<AppCategoryMapper, AppCategory> implements IAppCategoryService {
 
+
+    @Override
+    public Boolean saveCategory(AppCategoryVO categoryVO) {
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        AppCategory category = new AppCategory();
+        BeanUtils.copyProperties(categoryVO, category);
+        category.setOrgCode(loginUser.getOrgCode());
+        category.setTenantId(loginUser.getOrgId());
+        int insert = baseMapper.insert(category);
+        if (insert > 0) {
+            return Boolean.TRUE;
+        }
+        return Boolean.FALSE;
+    }
+
+    @Override
+    public Boolean editCategory(AppCategoryDTO categoryDTO) {
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        AppCategory selectedById = baseMapper.selectById(categoryDTO.getId());
+        if (null==selectedById) throw new JeecgBootException("无此类目信息");
+        checkPermission(selectedById, loginUser);
+        AppCategory category = new AppCategory();
+        BeanUtils.copyProperties(categoryDTO, category);
+        int update = baseMapper.updateById(category);
+        if (update > 0) {
+            return Boolean.TRUE;
+        }
+        return Boolean.FALSE;
+    }
+
+    @Override
+    public Boolean deleteCategory(String id) {
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        AppCategory selectedById = baseMapper.selectById(id);
+        if (null==selectedById) throw new JeecgBootException("无此类目信息");
+        checkPermission(selectedById, loginUser);
+        int delete = baseMapper.deleteById(id);
+        if (delete > 0) {
+            return Boolean.TRUE;
+        }
+        return Boolean.FALSE;
+    }
+
+    @Override
+    public IPage<AppCategoryVO> queryCategoryList(AppCategoryDTO dto) {
+        Page<AppCategory> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<AppCategory> wrapper = Wrappers.<AppCategory>lambdaQuery()
+                .like(StringUtils.isNotBlank(dto.getName()), AppCategory::getName, dto.getName()).last("order by sort");
+        IPage<AppCategory> resultPage = baseMapper.selectPage(page, wrapper);
+        return resultPage.convert(record -> {
+            AppCategoryVO vo = new AppCategoryVO();
+            BeanUtils.copyProperties(record, vo);
+            return vo;
+        });
+    }
+    /**
+     * 权限校验
+     * @param category
+     * @param sysUser
+     */
+    private void checkPermission(AppCategory category, LoginUser sysUser ){
+        if (!sysUser.getOrgCode().equals(category.getOrgCode())) throw new JeecgBootException("无权限操作", SC_INTERNAL_SERVER_ERROR_500);
+    }
+
 }

+ 101 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppCoureseServiceImpl.java

@@ -1,19 +1,116 @@
 package org.jeecg.modules.system.app.service.impl;
 
-import org.jeecg.modules.system.app.entity.AppCourese;
-import org.jeecg.modules.system.app.mapper.AppCoureseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.dto.AppCoursesDTO;
+import org.jeecg.modules.system.app.entity.AppCourses;
+import org.jeecg.modules.system.app.entity.AppCoursesPriceRules;
+import org.jeecg.modules.system.app.mapper.AppCoursesMapper;
+import org.jeecg.modules.system.app.mapper.AppCoursesPriceRulesMapper;
 import org.jeecg.modules.system.app.service.IAppCoureseService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import javax.annotation.Resource;
+import java.util.List;
+
+import static org.jeecg.common.constant.CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
+
 /**
  * @Description: 课程/培训表
  * @Author: jeecg-boot
- * @Date:   2025-07-03
+ * @Date: 2025-07-03
  * @Version: V1.0
  */
 @Service
-public class AppCoureseServiceImpl extends ServiceImpl<AppCoureseMapper, AppCourese> implements IAppCoureseService {
+public class AppCoureseServiceImpl extends ServiceImpl<AppCoursesMapper, AppCourses> implements IAppCoureseService {
+    @Resource
+    AppCoursesPriceRulesMapper coursesPriceRulesMapper;
+
+    @Override
+    public Boolean saveWitchPriceRules(AppCoursesDTO appCoursesDTO) {
+        AppCourses course = appCoursesDTO.getCourse();
+        if (null == course.getCategoryId()) throw new JeecgBootException("请选择课程类别");
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        course.setOrgCode(loginUser.getOrgCode());
+        course.setTenantId(loginUser.getOrgId());
+        int saveCourseResult = baseMapper.insert(course);
+        if (saveCourseResult < 1) {
+            throw new JeecgBootException("课程信息保存失败");
+        }
+        List<AppCoursesPriceRules> priceRulesList = appCoursesDTO.getPriceRulesList();
+        for (AppCoursesPriceRules rule : priceRulesList) {
+            rule.setCoursesId(course.getId());
+            rule.setOrgCode(course.getOrgCode());
+            rule.setTenantId(course.getTenantId());
+            int savePriceResult = coursesPriceRulesMapper.insert(rule); // 保证每个操作都在事务中
+            if (savePriceResult < 1) {
+                throw new JeecgBootException("课程价格规则保存失败");
+            }
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public Boolean editWitchPriceRules(AppCoursesDTO appCoursesDTO) {
+        AppCourses course = appCoursesDTO.getCourse();
+        if (null == course.getCategoryId()) throw new JeecgBootException("请选择课程类别");
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        AppCourses dbCourse = baseMapper.selectById(course.getId());
+        checkPermission(loginUser, dbCourse);
+        course.setOrgCode(loginUser.getOrgCode());
+        course.setTenantId(loginUser.getOrgId());
+        int updateCourseResult = baseMapper.updateById(course);
+        if (updateCourseResult < 1) {
+            throw new JeecgBootException("课程信息保存失败");
+        }
+        List<AppCoursesPriceRules> priceRulesList = appCoursesDTO.getPriceRulesList();
+        for (AppCoursesPriceRules rule : priceRulesList) {
+            rule.setCoursesId(course.getId());
+            rule.setOrgCode(course.getOrgCode());
+            rule.setTenantId(course.getTenantId());
+            int savePriceResult = coursesPriceRulesMapper.updateById(rule);
+            if (savePriceResult < 1) {
+                throw new JeecgBootException("课程价格规则保存失败");
+            }
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public AppCoursesDTO queryWitchPriceRulesById(String id) {
+        AppCourses dbCourse = baseMapper.selectById(id);
+        if (null==dbCourse) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        checkPermission(sysUser,dbCourse);
+        List<AppCoursesPriceRules> priceRulesList = coursesPriceRulesMapper.selectList(Wrappers.<AppCoursesPriceRules>lambdaQuery().eq(AppCoursesPriceRules::getCoursesId, id));
+        return new AppCoursesDTO(dbCourse, priceRulesList);
+    }
+
+    @Override
+    public Boolean deleteWitchPriceRulesById(String id) {
+        AppCourses dbCourse = baseMapper.selectById(id);
+        if (null==dbCourse) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        checkPermission(sysUser,dbCourse);
+        int deleteCourseResult = baseMapper.deleteById(id);
+        if (deleteCourseResult < 1) {
+            throw new JeecgBootException("课程信息删除失败", SC_INTERNAL_SERVER_ERROR_500);
+        }
+        int deletePriceResult = coursesPriceRulesMapper.delete(Wrappers.<AppCoursesPriceRules>lambdaQuery().eq(AppCoursesPriceRules::getCoursesId, id));
+        if (deletePriceResult<1) throw new JeecgBootException("课程价格规则删除失败", SC_INTERNAL_SERVER_ERROR_500);
+        return Boolean.TRUE;
+    }
 
+    /**
+     *  校验权限
+     * @param loginUser
+     * @param course
+     */
+    private void checkPermission(LoginUser loginUser, AppCourses course) {
+        if (!loginUser.getOrgCode().equals(course.getOrgCode())) throw new JeecgBootException("无权限修改", SC_INTERNAL_SERVER_ERROR_500);
+    }
 }

+ 59 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppGameServiceImpl.java

@@ -1,6 +1,11 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.Setter;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.system.app.dto.AppGameDTO;
 import org.jeecg.modules.system.app.entity.AppGame;
 import org.jeecg.modules.system.app.entity.AppGamePriceRules;
@@ -10,10 +15,13 @@ import org.jeecg.modules.system.app.service.IAppGameService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
 
+import static org.jeecg.common.constant.CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
+
 /**
  * @Description: 赛事表
  * @Author: jeecg-boot
@@ -26,40 +34,87 @@ public class AppGameServiceImpl extends ServiceImpl<AppGameMapper, AppGame> impl
     private AppGamePriceRulesMapper rulesMapper;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean saveWitchPriceRules(AppGameDTO gameDTO) {
         AppGame game=gameDTO.getGame();
         if (null==game.getType()) throw new JeecgBootException("请选择赛事类型");
-        if (null==game.getOrgCode()) throw new JeecgBootException("部门不能为空");
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        game.setOrgCode(sysUser.getOrgCode());
+        game.setTenantId(sysUser.getOrgId());
         int saveGameResult = baseMapper.insert(game);
         if (saveGameResult<1) {
-            throw new RuntimeException("赛事信息保存失败");
+            throw new JeecgBootException("赛事信息保存失败");
         }
         List<AppGamePriceRules> priceRulesList = gameDTO.getGamePriceRules();
         for (AppGamePriceRules rule : priceRulesList) {
             rule.setGameId(game.getId());
             rule.setOrgCode(game.getOrgCode());
+            rule.setTenantId(game.getTenantId());
             int savePriceResult = rulesMapper.insert(rule); // 保证每个操作都在事务中
             if (savePriceResult<1) {
-                throw new RuntimeException("赛事价格规则保存失败");
+                throw new JeecgBootException("赛事价格规则保存失败");
             }
         }
         return Boolean.TRUE;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean editWitchPriceRules(AppGameDTO gameDTO) {
         AppGame game=gameDTO.getGame();
         if (null==game.getType()) throw new JeecgBootException("请选择赛事类型");
+        AppGame dbGame = baseMapper.selectById(game.getId());
+        if (null==dbGame) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        checkPermission(sysUser,dbGame);
+        game.setOrgCode(sysUser.getOrgCode());
+        game.setTenantId(sysUser.getOrgId());
+        int updateGameResult = baseMapper.updateById(game);
+        if (updateGameResult<1) {
+            throw new JeecgBootException("赛事信息保存失败");
+        }
+        List<AppGamePriceRules> priceRulesList = gameDTO.getGamePriceRules();
+        for (AppGamePriceRules rule : priceRulesList) {
+            rule.setGameId(game.getId());
+            rule.setOrgCode(game.getOrgCode());
+            rule.setTenantId(game.getTenantId());
+            int savePriceResult = rulesMapper.updateById(rule);
+            if (savePriceResult<1) {
+                throw new JeecgBootException("赛事价格规则保存失败");
+            }
+        }
         return Boolean.TRUE;
     }
 
     @Override
     public AppGameDTO queryWitchPriceRulesById(String id) {
-        return null;
+        AppGame dbGame = baseMapper.selectById(id);
+        if (null==dbGame) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        checkPermission(sysUser,dbGame);
+        List<AppGamePriceRules> priceRulesList = rulesMapper.selectList(Wrappers.<AppGamePriceRules>lambdaQuery().eq(AppGamePriceRules::getGameId, id));
+        return new AppGameDTO(dbGame,priceRulesList);
     }
 
     @Override
     public Boolean deleteWitchPriceRulesById(String id) {
+        AppGame dbGame = baseMapper.selectById(id);
+        if (null==dbGame) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        checkPermission(sysUser,dbGame);
+        int deleteGameResult = baseMapper.deleteById(id);
+        if (deleteGameResult<1) {
+            throw new JeecgBootException("赛事信息删除失败");
+        }
         return Boolean.TRUE;
     }
+
+    /**
+     *  校验权限
+     * @param sysUser
+     * @param game
+     */
+    private void checkPermission(LoginUser sysUser, AppGame game) {
+        if (!sysUser.getOrgCode().equals(game.getOrgCode())) throw new JeecgBootException("无权限修改", SC_INTERNAL_SERVER_ERROR_500);
+    }
 }

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

@@ -1,11 +1,21 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.dto.AppOrderDTO;
 import org.jeecg.modules.system.app.entity.AppOrder;
-import org.jeecg.modules.system.app.mapper.AppOrderMapper;
+import org.jeecg.modules.system.app.entity.AppOrderProduct;
+import org.jeecg.modules.system.app.entity.AppOrderUser;
+import org.jeecg.modules.system.app.enums.OrderTypeEnum;
+import org.jeecg.modules.system.app.mapper.*;
 import org.jeecg.modules.system.app.service.IAppOrderService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
 
 /**
  * @Description: 订单表
@@ -15,5 +25,33 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  */
 @Service
 public class AppOrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> implements IAppOrderService {
+    @Resource
+    AppOrderProductMapper appOrderProductMapper;
+    @Resource
+    AppInsureNumberMapper appInsureMapper;
+    @Resource
+    AppOrderUserMapper appOrderUserMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean saveWitchProduct(AppOrderDTO appOrderDTO) {
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public Boolean editWitchProduct(AppOrderDTO appOrderDTO) {
+        return null;
+    }
+
+    @Override
+    public Boolean deleteWitchProductById(String id) {
+        return null;
+    }
 
+    @Override
+    public AppOrderDTO queryWitchProductById(String id) {
+        return null;
+    }
 }

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

@@ -1,19 +0,0 @@
-package org.jeecg.modules.system.app.service.impl;
-
-import org.jeecg.modules.system.app.entity.AppProductCategory;
-import org.jeecg.modules.system.app.mapper.AppProductCategoryMapper;
-import org.jeecg.modules.system.app.service.IAppProductCategoryService;
-import org.springframework.stereotype.Service;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-/**
- * @Description: 产品类目表
- * @Author: jeecg-boot
- * @Date:   2025-07-03
- * @Version: V1.0
- */
-@Service
-public class AppProductCategoryServiceImpl extends ServiceImpl<AppProductCategoryMapper, AppProductCategory> implements IAppProductCategoryService {
-
-}

+ 44 - 14
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppSiteServiceImpl.java

@@ -1,16 +1,23 @@
 package org.jeecg.modules.system.app.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.dto.AppCategoryDTO;
 import org.jeecg.modules.system.app.dto.AppSiteDTO;
+import org.jeecg.modules.system.app.entity.AppCategory;
 import org.jeecg.modules.system.app.entity.AppSite;
 import org.jeecg.modules.system.app.entity.AppSitePriceRules;
 import org.jeecg.modules.system.app.mapper.AppSiteMapper;
 import org.jeecg.modules.system.app.mapper.AppSitePriceRulesMapper;
 import org.jeecg.modules.system.app.service.IAppSiteService;
+import org.jeecg.modules.system.app.vo.AppCategoryVO;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -37,11 +44,10 @@ public class AppSiteServiceImpl extends ServiceImpl<AppSiteMapper, AppSite> impl
     @Transactional(rollbackFor = Exception.class)
     public Boolean saveWitchPriceRules(AppSiteDTO appSiteDTO) {
         AppSite site = appSiteDTO.getSite();
-        // 校验场地类型是否为空,若为空则返回 false
         if (null == site.getType()) throw new JeecgBootException("场地类型不能为空", SC_INTERNAL_SERVER_ERROR_500);
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        site.setOrgCode(sysUser.getOrgCode());
-        // 通过注入的 baseMapper 插入场地信息
+        site.setOrgCode(sysUser.getOrgCode());//部门默认登录用户部门
+        site.setTenantId(sysUser.getOrgId());
         int saveSiteResult = baseMapper.insert(site);
         // 如果插入失败,抛出自定义异常提示“场地信息保存失败”
         if (saveSiteResult < 1) {
@@ -50,11 +56,11 @@ public class AppSiteServiceImpl extends ServiceImpl<AppSiteMapper, AppSite> impl
 
         // 获取价格规则列表
         List<AppSitePriceRules> priceRulesList = appSiteDTO.getPriceRulesList();
-        // 遍历价格规则列表并逐一保存
         for (AppSitePriceRules rule : priceRulesList) {
             // 设置当前规则对应的场地 ID
             rule.setSiteId(site.getId());
             rule.setOrgCode(site.getOrgCode());
+            rule.setTenantId(site.getTenantId());
             // 调用 priceRulesMapper 插入价格规则
             int savePriceResult = priceRulesMapper.insert(rule);
             // 如果插入失败,抛出自定义异常提示“场地价格规则保存失败”
@@ -72,21 +78,22 @@ public class AppSiteServiceImpl extends ServiceImpl<AppSiteMapper, AppSite> impl
     public Boolean editWitchPriceRules(AppSiteDTO appSiteDTO) {
         AppSite site = appSiteDTO.getSite();
         if (null == site.getType()) throw new JeecgBootException("场地类型不能为空", SC_INTERNAL_SERVER_ERROR_500);
-        if (null == site.getOrgCode()) throw new JeecgBootException("部门编码不能为空", SC_INTERNAL_SERVER_ERROR_500);
         AppSite dbSite = baseMapper.selectById(site.getId());
         if (null==dbSite) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (!sysUser.getOrgCode().equals(dbSite.getOrgCode())) throw new JeecgBootException("无权限修改", SC_INTERNAL_SERVER_ERROR_500);
-        // 通过注入的服务调用,保证事务生效
-        int saveSiteResult = baseMapper.updateById(site);
-        if (saveSiteResult < 1) {
+        checkPermission(dbSite,sysUser);
+        site.setOrgCode(sysUser.getOrgCode());//部门默认登录用户部门
+        site.setTenantId(sysUser.getOrgId());
+        int updateSiteResult = baseMapper.updateById(site);
+        if (updateSiteResult < 1) {
             throw new JeecgBootException("场地信息保存失败", SC_INTERNAL_SERVER_ERROR_500);
         }
 
         List<AppSitePriceRules> priceRulesList = appSiteDTO.getPriceRulesList();
         for (AppSitePriceRules rule : priceRulesList) {
-            rule.setSiteId(dbSite.getId());
+            rule.setSiteId(site.getId());
             rule.setOrgCode(site.getOrgCode());
+            rule.setTenantId(site.getTenantId());
             int savePriceResult = priceRulesMapper.updateById(rule); // 保证每个操作都在事务中
             if (savePriceResult < 1) {
                 throw new JeecgBootException("场地价格规则保存失败", SC_INTERNAL_SERVER_ERROR_500);
@@ -101,9 +108,9 @@ public class AppSiteServiceImpl extends ServiceImpl<AppSiteMapper, AppSite> impl
         AppSite dbSite = baseMapper.selectById(id);
         if (null==dbSite) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (!sysUser.getOrgCode().equals(dbSite.getOrgCode())) throw new JeecgBootException("无权限查看", SC_INTERNAL_SERVER_ERROR_500);
-        List<AppSitePriceRules> priceRulesList = priceRulesMapper.selectList(new LambdaQueryWrapper<AppSitePriceRules>().eq(AppSitePriceRules::getSiteId, id));
-        return new AppSiteDTO().setSite(dbSite).setPriceRulesList(priceRulesList);
+        checkPermission(dbSite,sysUser);
+        List<AppSitePriceRules> priceRulesList = priceRulesMapper.selectList(Wrappers.<AppSitePriceRules>lambdaQuery().eq(AppSitePriceRules::getSiteId, id));
+        return new AppSiteDTO(dbSite,priceRulesList);
     }
 
     @Override
@@ -112,7 +119,7 @@ public class AppSiteServiceImpl extends ServiceImpl<AppSiteMapper, AppSite> impl
         AppSite dbSite = baseMapper.selectById(id);
         if (null==dbSite) throw new JeecgBootException("未找到对应数据", SC_INTERNAL_SERVER_ERROR_500);
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (!sysUser.getOrgCode().equals(dbSite.getOrgCode())) throw new JeecgBootException("无权限操作", SC_INTERNAL_SERVER_ERROR_500);
+        checkPermission(dbSite,sysUser);
         int deleteSiteResult = baseMapper.deleteById(id);
         if (deleteSiteResult>0){
             int deletePriceResult = priceRulesMapper.delete(Wrappers.<AppSitePriceRules>lambdaQuery().eq(AppSitePriceRules::getSiteId, id));
@@ -122,4 +129,27 @@ public class AppSiteServiceImpl extends ServiceImpl<AppSiteMapper, AppSite> impl
         }
         return Boolean.TRUE;
     }
+
+    @Override
+    public IPage<AppSite> querySiteList(AppSiteDTO dto) {
+//        Page<AppSite> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+//        LambdaQueryWrapper<AppSite> wrapper = Wrappers.<AppSite>lambdaQuery()
+//                .like(StringUtils.isNotBlank(dto.getName()), AppSite::getName, dto.getName());
+//        IPage<AppSite> resultPage = baseMapper.selectPage(page, wrapper);
+//        return resultPage.convert(record -> {
+//            AppSiteVO vo = new AppCategoryVO();
+//            BeanUtils.copyProperties(record, vo);
+//            return vo;
+//        });
+        return null;
+    }
+
+    /**
+     * 权限校验
+     * @param site
+     * @param sysUser
+     */
+    private void checkPermission(AppSite site,LoginUser sysUser ){
+        if (!sysUser.getOrgCode().equals(site.getOrgCode())) throw new JeecgBootException("无权限操作", SC_INTERNAL_SERVER_ERROR_500);
+    }
 }

+ 42 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/utils/OrderCodeGenerator.java

@@ -0,0 +1,42 @@
+package org.jeecg.modules.system.app.utils;
+
+import java.time.LocalDate;
+import java.util.Random;
+
+/**
+ * @author DM
+ * @date 2025/7/7 18:23
+ * @description
+ */
+public class OrderCodeGenerator {
+    /**
+     * 生成 8 位编码:前 4 位随机数,后 4 位为当前日期(MMDD)
+     */
+    public static String generateCode() {
+        // 获取当前日期,格式化为 MMdd(例如:0715)
+        LocalDate currentDate = LocalDate.now();
+        String datePart = String.format("%02d%02d",
+                currentDate.getMonthValue(), // 月份
+                currentDate.getDayOfMonth()); // 日期
+
+        // 生成 4 位随机数字
+        Random random = new Random();
+        int randomNumber = 1000 + random.nextInt(9000); // 1000 ~ 9999
+
+        // 拼接结果
+        return String.format("%04d%s", randomNumber, datePart);
+    }
+
+    /**
+     *
+     * @param businessType 88支付 86退款
+     * @return
+     */
+    public static String getOrderCode(Integer businessType){
+        return businessType + generateCode();
+    }
+
+    public static void main(String[] args) {
+        System.out.println("生成的编码:" + getOrderCode(88));
+    }
+}

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

@@ -0,0 +1,34 @@
+package org.jeecg.modules.system.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * @author DM
+ * @date 2025/7/7 15:32
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="订单入参DTO")
+public class AppCategoryVO {
+    /**名称*/
+    @Schema(description = "名称")
+    private String name;
+    /**顺序*/
+    @Schema(description = "顺序")
+    private Integer sort;
+
+    /**创建时间*/
+    @Schema(description = "创建时间")
+    private Date createTime;;
+}

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

@@ -0,0 +1,9 @@
+package org.jeecg.modules.system.app.vo;
+
+/**
+ * @author DM
+ * @date 2025/7/7 17:37
+ * @description
+ */
+public class AppSiteVO {
+}