Pārlūkot izejas kodu

feat(app):
1.业务管理学校场地开放相关页面接口
2.体育馆无固定场相关页面接口
3.课程相关页面接口
4.定时任务生成学校教学日非教学日
refactor(system):
1.创建部门时创建部门信息补充,学校则直接创建场地
fix(app):
1.修改类目列表接口未按照orgCode查询

wzq 1 dienu atpakaļ
vecāks
revīzija
c1282bd1f5
40 mainītis faili ar 1746 papildinājumiem un 762 dzēšanām
  1. 22 0
      national-motion-base-core/src/main/java/org/jeecg/common/system/base/mybatisPlusBase/IMyService.java
  2. 18 0
      national-motion-base-core/src/main/java/org/jeecg/common/system/base/mybatisPlusBase/MyBaseMapper.java
  3. 46 0
      national-motion-base-core/src/main/java/org/jeecg/common/system/base/mybatisPlusBase/MyServiceImpl.java
  4. 0 6
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJob.java
  5. 36 55
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJobService.java
  6. 3 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/utils/HolidayUtil.java
  7. 29 18
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCoursesController.java
  8. 26 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppInstructorController.java
  9. 9 12
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppSiteController.java
  10. 41 15
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppSitePlaceController.java
  11. 29 31
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppTeachingTimeController.java
  12. 0 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCategoryDTO.java
  13. 5 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCoursesCuDTO.java
  14. 75 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCoursesInfoPageDTO.java
  15. 18 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppCoursesPageDTO.java
  16. 28 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppInstructorDTO.java
  17. 28 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppSiteAddressDTO.java
  18. 3 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppSitePlaceUnfixedDTO.java
  19. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/AppTeachingTimeDTO.java
  20. 42 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/SchoolPlaceAddDTO.java
  21. 30 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/TeachingDayDTO.java
  22. 2 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppSite.java
  23. 11 11
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppSitePlace.java
  24. 4 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppCoursesMapper.java
  25. 2 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppSitePlaceMapper.java
  26. 4 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppSitePriceRulesMapper.java
  27. 10 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppTeachingTimeMapper.java
  28. 35 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoursesMapper.xml
  29. 104 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppSitePriceRulesMapper.xml
  30. 45 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppTeachingTimeMapper.xml
  31. 7 6
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppCoureseService.java
  32. 3 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppSitePlaceService.java
  33. 4 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppSitePriceRulesService.java
  34. 4 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppTeachingTimeService.java
  35. 3 7
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppCategoryServiceImpl.java
  36. 126 34
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppCoureseServiceImpl.java
  37. 221 34
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppSitePlaceServiceImpl.java
  38. 6 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppSitePriceRulesServiceImpl.java
  39. 13 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppTeachingTimeServiceImpl.java
  40. 652 518
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java

+ 22 - 0
national-motion-base-core/src/main/java/org/jeecg/common/system/base/mybatisPlusBase/IMyService.java

@@ -0,0 +1,22 @@
+package org.jeecg.common.system.base.mybatisPlusBase;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface IMyService <T> extends IService<T> {
+    /**
+     * 不设置批量最大条数,数据量不大时使用
+     * @param entityList
+     * @return
+     */
+    int insertBatchSomeColumn(List<T> entityList);
+
+    /**
+     *
+     * @param entityList
+     * @param batchSize 批量一次最大条数,进行多次
+     * @return
+     */
+    int insertBatchSomeColumn(List<T> entityList, int batchSize);
+}

+ 18 - 0
national-motion-base-core/src/main/java/org/jeecg/common/system/base/mybatisPlusBase/MyBaseMapper.java

@@ -0,0 +1,18 @@
+package org.jeecg.common.system.base.mybatisPlusBase;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 自定义BaseMapper
+ * 继承Mybatis-plus的BaseMapper,添加批量插入方法
+ */
+public interface MyBaseMapper<T> extends BaseMapper<T> {
+    /**
+     * 不设置批量最大条数,数据量不大时使用
+     * @param entityList
+     * @return
+     */
+    int insertBatchSomeColumn(List<T> entityList);
+}

+ 46 - 0
national-motion-base-core/src/main/java/org/jeecg/common/system/base/mybatisPlusBase/MyServiceImpl.java

@@ -0,0 +1,46 @@
+package org.jeecg.common.system.base.mybatisPlusBase;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  自定义BaseMapper实现
+ * @param <M>
+ * @param <T>
+ */
+public class MyServiceImpl<M extends MyBaseMapper<T>, T>extends ServiceImpl<M, T> implements IMyService<T> {
+    @Override
+    public int insertBatchSomeColumn(List<T> entityList) {
+        return this.baseMapper.insertBatchSomeColumn(entityList);
+    }
+
+    @Override
+    public int insertBatchSomeColumn(List<T> entityList, int batchSize) {
+
+        int size=entityList.size();
+        if(size<batchSize){
+            return this.baseMapper.insertBatchSomeColumn(entityList);
+        }
+        int page=1;
+        if(size % batchSize ==0){
+            page=size/batchSize;
+        }else {
+            page=size/batchSize+1;
+        }
+        for (int i = 0; i < page; i++) {
+            List<T> sub = new ArrayList<>();
+            if(i==page-1){
+                sub=entityList.subList(i*batchSize, entityList.size());
+            }else {
+                sub.subList(i*batchSize,(i+1)*batchSize);
+            }
+            if(sub.size()>0){
+                baseMapper.insertBatchSomeColumn(sub);
+            }
+        }
+        return size;
+    }
+}
+

+ 0 - 6
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJob.java

@@ -3,8 +3,6 @@ package org.jeecg.modules.quartz.job;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
-import org.jeecg.modules.system.app.service.IAppSiteService;
-import org.jeecg.modules.system.app.service.IAppTeachingTimeService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -18,10 +16,6 @@ import org.quartz.JobExecutionException;
 @Slf4j
 public class OrTeachingJob implements Job {
 
-    private final IAppTeachingTimeService appTeachingTimeService;
-
-    private final IAppSiteService appSiteService;
-
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         log.info(" Job Execution key:"+jobExecutionContext.getJobDetail().getKey());

+ 36 - 55
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJobService.java

@@ -1,12 +1,17 @@
 package org.jeecg.modules.quartz.job;
 
+
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.quartz.utils.HolidayUtil;
+import org.jeecg.modules.system.app.dto.TeachingDayDTO;
 import org.jeecg.modules.system.app.entity.AppSite;
 import org.jeecg.modules.system.app.entity.AppSitePlace;
 import org.jeecg.modules.system.app.entity.AppSitePriceRules;
@@ -15,7 +20,6 @@ import org.jeecg.modules.system.app.service.IAppSitePlaceService;
 import org.jeecg.modules.system.app.service.IAppSitePriceRulesService;
 import org.jeecg.modules.system.app.service.IAppSiteService;
 import org.jeecg.modules.system.app.service.IAppTeachingTimeService;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -27,7 +31,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * @author DM
+ * @author wzq
  * @date 2025/7/15 10:28
  * @description
  */
@@ -44,58 +48,38 @@ public class OrTeachingJobService {
 
     private final IAppSiteService appSiteService;
 
-    //表示每天8时30分0秒执行
-    @Scheduled(cron = "0 00 14 ? * *")
+//    @Scheduled(cron = "0 23 15 ? * *")
     @Transactional(rollbackFor = Exception.class)
     public void execute() throws ParseException {
-
         log.info("开始执行定时任务");
-
 //        int year = DateUtils.getYear();
         int year = 2024;
-
         Map<String, List<String>> HolidayMap = HolidayUtil.getYearHoliday(String.valueOf(year));
-
         // 设置开始日期和结束日期
         Date beginDate = DateUtils.str2Date((year + 1) + "-01-01 00:00:00", new SimpleDateFormat("yyyy-MM-dd"));
-        Date endDate = DateUtils.str2Date((year + 1) + "-12-31 00:00:00", new SimpleDateFormat("yyyy-MM-dd"));
-
+        Date endDate = DateUtils.str2Date((year + 2) + "-01-01 00:00:00", new SimpleDateFormat("yyyy-MM-dd"));
         // 获取开始日期和结束日期之间的所有日期
         List<Date> dateList = HolidayUtil.getDaysBetweenDates(beginDate, endDate);
-        log.info("所有日期:{}",dateList);
-
         //部门、场地、教学日(teaching)、
         //1、查询所有的学校
         LambdaQueryWrapper<AppSite> wrapper = Wrappers.<AppSite>lambdaQuery().eq(AppSite::getType, 0).eq(AppSite::getStatus, 0);
-
         List<AppSite> appSiteList = appSiteService.list(wrapper);
-
-        log.info("学校数量:{}",appSiteList.size());
-
         List<AppSitePriceRules> appSitePriceRulesList = new ArrayList<>();
-
         if(!appSiteList.isEmpty()){
             //教学日列表
             List<AppTeachingTime> appteachingList = new ArrayList<>();
-
             //2、遍历查询所有的学校
             for (AppSite site : appSiteList) {
-
                 //根据学校查询场地
                 AppSitePlace appSitePlace = appSitePlaceService.getOne(Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getTenantId, site.getTenantId()));
-
                 // 遍历生成一对多教学时段
                 for (Date localDate : dateList) {
-
                     AppTeachingTime appTeachingTime = new AppTeachingTime();
-
                     appTeachingTime
                             .setTenantId(site.getTenantId())
                             //localDate 转 Date
                             .setDay(localDate)
-                            .setOrgCode(site.getOrgCode())
-                    ;
-
+                            .setOrgCode(site.getOrgCode());
                     //格式‘yyyy-MM-dd’
                     String yearHoliday = null;
                     try {
@@ -112,19 +96,15 @@ public class OrTeachingJobService {
                         log.info("非教学日");
                         appTeachingTime.setIsTeaching(1);
                     }
-
                     //添加到集合中
                     appteachingList.add(appTeachingTime);
-
                     //如果开放时段列表不为空(教学日/非教学日),根据开放时段批量存储,开放时段记录
-                    if (ObjectUtils.isNotEmpty(site.getTeachingDay())){
-
-                        //解析Json 数据
-                        site.getTeachingDay().forEach(item -> {
-
-                            String startTime = String.valueOf(item.get("startTime"));
-                            String endTime = String.valueOf(item.get("endTime"));
-
+                    if (StringUtils.isNotEmpty(site.getTeachingDay()) && appTeachingTime.getIsTeaching() == 0){
+                        JSONObject jsonObject = JSONObject.parseObject(site.getTeachingDay());
+                        List<TeachingDayDTO> data = jsonObject.getJSONArray("data").toJavaList(TeachingDayDTO.class);
+                        data.forEach(item -> {
+                            String startTime = item.getStartTime();
+                            String endTime = item.getEndTime();
                             AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
                             appSitePriceRules
                                     .setOrgCode(site.getOrgCode())
@@ -132,23 +112,23 @@ public class OrTeachingJobService {
                                     .setSitePlaceId(appSitePlace.getId())
                                     .setType(0)
                                     .setDateOfSale(localDate)
-                                    .setStartTime(DateUtils.str2Date(startTime, new SimpleDateFormat("HH:mm:ss")))
-                                    .setEndTime(DateUtils.str2Date(endTime, new SimpleDateFormat("HH:mm:ss")))
+                                    .setStartTime(DateUtils.str2Date(startTime, new SimpleDateFormat("HH:mm")))
+                                    .setEndTime(DateUtils.str2Date(endTime, new SimpleDateFormat("HH:mm")))
                                     .setDayOfWeek(HolidayUtil.getWeekOfDate(localDate))
                                     .setIsTeaching(appTeachingTime.getIsTeaching())
+                                    .setCategoryId(site.getCategoryId())
+                                    .setCreateBy("admin")
+                                    .setStatus(CommonConstant.STATUS_NORMAL)
+                                    .setDelFlag(CommonConstant.STATUS_NORMAL)
                             ;
-
                             appSitePriceRulesList.add(appSitePriceRules);
                         });
-
                     }
-                    if (ObjectUtils.isNotEmpty(site.getNoTeachingDay())){
-
-                        site.getTeachingDay().forEach(item -> {
-
-                            String startTime = String.valueOf(item.get("startTime"));
-                            String endTime = String.valueOf(item.get("endTime"));
-
+                    if (ObjectUtils.isNotEmpty(site.getNoTeachingDay())&& appTeachingTime.getIsTeaching() == 1){
+                        List<TeachingDayDTO> data = JSONObject.parseObject(site.getNoTeachingDay()).getJSONArray("data").toJavaList(TeachingDayDTO.class);
+                        data.forEach(item -> {
+                            String startTime = item.getStartTime();
+                            String endTime = item.getEndTime();
                             AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
                             appSitePriceRules
                                     .setOrgCode(site.getOrgCode())
@@ -156,23 +136,24 @@ public class OrTeachingJobService {
                                     .setSitePlaceId(appSitePlace.getId())
                                     .setType(0)
                                     .setDateOfSale(localDate)
-                                    .setStartTime(DateUtils.str2Date(startTime, new SimpleDateFormat("HH:mm:ss")))
-                                    .setEndTime(DateUtils.str2Date(endTime, new SimpleDateFormat("HH:mm:ss")))
+                                    .setStartTime(DateUtils.str2Date(startTime, new SimpleDateFormat("HH:mm")))
+                                    .setEndTime(DateUtils.str2Date(endTime, new SimpleDateFormat("HH:mm")))
                                     .setDayOfWeek(HolidayUtil.getWeekOfDate(localDate))
                                     .setIsTeaching(appTeachingTime.getIsTeaching())
+                                    .setCategoryId(site.getCategoryId())
+                                    .setCreateBy("admin")
+                                    .setStatus(CommonConstant.STATUS_NORMAL)
+                                    .setDelFlag(CommonConstant.STATUS_NORMAL)
                             ;
                             appSitePriceRulesList.add(appSitePriceRules);
                         });
                     }
                 }
-
-                //存放集合
-                appTeachingTimeService.saveBatch(appteachingList);
-
-                //存放开放时段列表
-                appSitePriceRulesService.saveBatch(appSitePriceRulesList);
             }
+            //存放集合
+            appTeachingTimeService.saveBatch(appteachingList);
+            //存放开放时段列表
+            appSitePriceRulesService.insertList(appSitePriceRulesList);
         }
-
     }
 }

+ 3 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/utils/HolidayUtil.java

@@ -77,7 +77,7 @@ public class HolidayUtil {
      * @param date 日期参数 格式‘yyyy’,不传参则默认当前日期
      * @return
      */
-    public static Map<String,List<String>> getYearHoliday(String date) throws ParseException {
+    public static Map<String,List<String>> getYearHoliday(String date) {
 
         HashMap<String , List<String>> map = new HashMap<>();
 
@@ -173,7 +173,8 @@ public class HolidayUtil {
      * @return 当前日期是星期几
      */
     public static String getWeekOfDate(Date dt) {
-        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+//        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+        String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"};
         Calendar cal = Calendar.getInstance();
         cal.setTime(dt);
 

+ 29 - 18
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppCoursesController.java

@@ -1,27 +1,25 @@
 package org.jeecg.modules.system.app.controller;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.modules.system.app.dto.AppCoursesCuDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesPageDTO;
-import org.jeecg.modules.system.app.entity.AppCourses;
-import org.jeecg.modules.system.app.service.IAppCoureseService;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
-
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.system.app.dto.*;
+import org.jeecg.modules.system.app.entity.AppCourses;
+import org.jeecg.modules.system.app.service.IAppCoureseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
-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;
- /**
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
  * @Description: 课程/培训表
  * @Author: jeecg-boot
  * @Date:   2025-07-03
@@ -44,7 +42,7 @@ public class AppCoursesController extends JeecgController<AppCourses, IAppCoures
 	//@AutoLog(value = "课程/培训表-分页列表查询")
 	@Operation(summary="课程/培训表-分页列表查询")
 	@GetMapping(value = "/list")
-	public Result<IPage<AppCoursesCuDTO>> queryPageList(AppCoursesPageDTO dto) {
+	public Result<IPage<AppCoursesInfoPageDTO>> queryPageList(AppCoursesPageDTO dto) {
 		return Result.OK(appCoursesService.queryWitchPriceRulesPage(dto));
 	}
 	
@@ -72,7 +70,7 @@ public class AppCoursesController extends JeecgController<AppCourses, IAppCoures
 	@Operation(summary="课程/培训表-编辑")
 //	@RequiresPermissions("org.jeecg.modules.app:nm_courese:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody AppCoursesCuDTO appCoursesDTO) {
+	public Result<String> edit(@RequestBody AppCoursesDTO appCoursesDTO) {
 		return appCoursesService.editWitchPriceRules(appCoursesDTO)?Result.OK("操作成功!"):Result.error("操作失败!");
 	}
 	
@@ -143,4 +141,17 @@ public class AppCoursesController extends JeecgController<AppCourses, IAppCoures
         return super.importExcel(request, response, AppCourses.class);
     }
 
+	 /**
+	  * 通过siteId查询列表
+	  *
+	  * @param
+	  * @return
+	  */
+	 //@AutoLog(value = "课程/培训表-通过id查询")
+	 @Operation(summary="课程/培训表-通过siteId查询列表")
+	 @GetMapping(value = "/queryAddressList")
+	 public Result<List<AppSiteAddressDTO>> queryAddressList() {
+		 return Result.OK(appCoursesService.queryAddressList());
+	 }
+
 }

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

@@ -1,6 +1,7 @@
 package org.jeecg.modules.system.app.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -17,6 +18,7 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.base.service.BaseCommonService;
+import org.jeecg.modules.system.app.dto.AppInstructorDTO;
 import org.jeecg.modules.system.app.entity.AppInstructor;
 import org.jeecg.modules.system.app.service.IAppInstructorService;
 import org.jeecg.modules.system.app.vo.staff.StaffRequestVO;
@@ -40,6 +42,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 教练表
@@ -404,4 +409,25 @@ public class AppInstructorController extends JeecgController<AppInstructor, IApp
         return super.importExcel(request, response, AppInstructor.class);
     }
 
+	/**
+	 * 通过部门查询教练列表
+	 *
+	 * @param orgCode
+	 * @return
+	 */
+	//@AutoLog(value = "教练表-通过部门查询教练列表")
+	@Operation(summary="员工信息-通过部门查询教练列表")
+	@GetMapping(value = "/queryList")
+	public Result<List<AppInstructorDTO>> queryList(@RequestParam(name="orgCode",required=true) String orgCode) {
+
+		List<AppInstructor> list = Optional.ofNullable(appInstructorService.list(Wrappers.<AppInstructor>lambdaQuery().likeRight(AppInstructor::getOrgCode, orgCode))).orElse((List.of()));
+		List<AppInstructorDTO> dtoList = list.stream().map(e -> {
+			AppInstructorDTO dto = new AppInstructorDTO();
+			SysUser sysUser = sysUserService.getById(e.getUserId());
+			dto.setUserId(e.getUserId()).setName(sysUser.getRealname());
+			return dto;
+		}).collect(Collectors.toList());
+		return Result.OK(dtoList);
+	}
+
 }

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

@@ -1,28 +1,25 @@
 package org.jeecg.modules.system.app.controller;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.modules.system.app.dto.AppSiteDTO;
 import org.jeecg.modules.system.app.dto.AppSitePageDTO;
 import org.jeecg.modules.system.app.entity.AppSite;
 import org.jeecg.modules.system.app.service.IAppSitePriceRulesService;
 import org.jeecg.modules.system.app.service.IAppSiteService;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.extern.slf4j.Slf4j;
-
-import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.modules.system.app.vo.AppSiteListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
-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;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 

+ 41 - 15
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppSitePlaceController.java

@@ -1,19 +1,18 @@
 package org.jeecg.modules.system.app.controller;
 
-import org.jeecg.common.api.vo.Result;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
-
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.jmreport.common.annotation.RequiresPermissions;
 import org.jeecg.modules.system.app.dto.*;
 import org.jeecg.modules.system.app.entity.AppSitePlace;
 import org.jeecg.modules.system.app.service.IAppSitePlaceService;
-import org.jeecg.common.system.base.controller.JeecgController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Operation;
-import org.jeecg.common.aspect.annotation.AutoLog;
 
 /**
  * @Description: 商户场所表
@@ -91,13 +90,11 @@ public class AppSitePlaceController extends JeecgController<AppSitePlace, IAppSi
      * @param unfixedDTO
      * @return
      */
-    @AutoLog(value = "商户无固定场所-添加")
-    @Operation(summary = "商户无固定场所-添加")
+    @AutoLog(value = "商户包场-添加")
+    @Operation(summary = "商户包场-添加")
 //	@RequiresPermissions("org.jeecg.modules.system.app:nm_site_place:add")
     @PostMapping(value = "/savePack")
-    public Result<String> savePack(@RequestBody
-
-                                         AppSitePlaceDTO unfixedDTO) {
+    public Result<String> savePack(@RequestBody AppSitePlaceDTO unfixedDTO) {
         Boolean b = appSitePlaceService.savePack(unfixedDTO);
         return b ? Result.OK("添加成功!") : Result.error("添加失败!");
     }
@@ -115,14 +112,15 @@ public class AppSitePlaceController extends JeecgController<AppSitePlace, IAppSi
     public Result<String> edit(@RequestBody AppSitePlaceSchoolDTO appSitePlace) {
         Boolean b = appSitePlaceService.editSchool(appSitePlace);
         return b ? Result.OK("编辑成功!") : Result.error("编辑失败!");
-    } /**
+    }
+    /**
      * 编辑
      *
      * @param appSitePlace
      * @return
      */
-    @AutoLog(value = "商户场所学校-编辑")
-    @Operation(summary = "商户场所学校-编辑")
+    @AutoLog(value = "商户场-编辑")
+    @Operation(summary = "商户场-编辑")
 //	@RequiresPermissions("org.jeecg.modules.system.app:nm_site_place:edit")
     @RequestMapping(value = "/editPack", method = {RequestMethod.PUT, RequestMethod.POST})
     public Result<String> editPack(@RequestBody
@@ -217,6 +215,34 @@ public class AppSitePlaceController extends JeecgController<AppSitePlace, IAppSi
         return Result.OK(appSitePlaceService.queryUnfixedById(id));
     }
 
+    /**
+     * 学校场地开放添加
+     *
+     * @param schoolPlaceAddDTO
+     * @return
+     */
+    @RequiresPermissions("org.jeecg.modules.system.app:nm_site_place:addSchoolPlace")
+    @AutoLog(value = "商户无固定场所-学校场地开放添加")
+    @Operation(summary = "商户无固定场所-学校场地开放添加")
+    @PostMapping(value = "/addSchoolPlace")
+    public Result<String> addSchoolPlace(@RequestBody SchoolPlaceAddDTO schoolPlaceAddDTO) {
+        Boolean b =  appSitePlaceService.addSchoolPlace(schoolPlaceAddDTO);
+        return b ? Result.OK("添加成功!") : Result.error("添加失败!");
+    }
+
+    /**
+     * 学校场地开放查询
+     *
+     * @param orgCode
+     * @return
+     */
+    @AutoLog(value = "商户无固定场所-学校场地开放查询")
+    @Operation(summary = "商户无固定场所-学校场地开放查询")
+    @GetMapping(value = "/querySchoolPlace")
+    public Result<SchoolPlaceAddDTO> querySchoolPlace(@RequestParam(name = "orgCode", required = true) String orgCode) {
+        return Result.OK(appSitePlaceService.querySchoolPlace(orgCode));
+    }
+
 //    /**
 //    * 导出excel
 //    *

+ 29 - 31
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppTeachingTimeController.java

@@ -1,44 +1,29 @@
 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.AppTeachingTime;
-import org.jeecg.modules.system.app.service.IAppTeachingTimeService;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 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.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.system.app.dto.AppTeachingTimeDTO;
+import org.jeecg.modules.system.app.entity.AppTeachingTime;
+import org.jeecg.modules.system.app.service.IAppTeachingTimeService;
 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;
- /**
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
  * @Description: 教学/非教学维护表
  * @Author: jeecg-boot
  * @Date:   2025-07-10
@@ -179,4 +164,17 @@ public class AppTeachingTimeController extends JeecgController<AppTeachingTime,
         return super.importExcel(request, response, AppTeachingTime.class);
     }
 
+	 /**
+	  * 通过tenantId查询
+	  *
+	  * @param tenantId
+	  * @return
+	  */
+	 //@AutoLog(value = "教学/非教学维护表-通过id查询")
+	 @Operation(summary="教学/非教学维护表-通过tenantId查询当前月与下月-教学/非教学")
+	 @GetMapping(value = "/queryByTenantId")
+	 public Result<List<AppTeachingTimeDTO>> queryByTenantId(@RequestParam(name="tenantId",required=true) String tenantId) {
+		 return Result.OK(appTeachingTimeService.queryListByTenantId(tenantId));
+	 }
+
 }

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

@@ -1,6 +1,5 @@
 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;

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

@@ -51,10 +51,14 @@ public class AppCoursesCuDTO {
     @Excel(name = "费用类型;0 精品 1免费 仅课程", width = 15)
     @Schema(description = "费用类型;0 精品 1免费 仅课程")
     private Integer priceType;
+    /**门店信息ID*/
+    @Excel(name = "门店信息ID", width = 15)
+    @Schema(description = "门店信息ID")
+    private String siteId;
     /**上课场地*/
     @Excel(name = "上课场地", width = 15)
     @Schema(description = "上课场地")
-    private String siteId;
+    private String addressSiteId;
     /**保险id;可能有多个险种*/
     @Excel(name = "保险id;可能有多个险种", width = 15)
     @Schema(description = "保险id;可能有多个险种")

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

@@ -0,0 +1,75 @@
+package org.jeecg.modules.system.app.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+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;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author DM
+ * @date 2025/7/7 20:58
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="课程分页DTO")
+public class AppCoursesInfoPageDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "id")
+    private String id;
+    /**产品名称*/
+    @Schema(description = "产品名称")
+    private String name;
+    @Schema(description = "类目集;")
+    private String categoryId;
+    @Schema(description = "类目名称集;")
+    private String categoryIds;
+    /**费用类型;0 精品 1免费 仅课程*/
+    @Schema(description = "费用类型;0 精品 1免费 仅课程")
+    private Integer priceType;
+    /**上课场地*/
+    @Schema(description = "上课场地")
+    private String address;
+    /**封面*/
+    @Schema(description = "封面")
+    private String cover;
+    /**原价*/
+    @Schema(description = "原价")
+    private BigDecimal originalPrice;
+   /**售价*/
+    @Schema(description = "售价")
+    private BigDecimal sellingPrice;
+    /**开始时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "开始时间")
+    private Date startTime;
+    /**结束时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "结束时间")
+    private Date endTime;
+    /**上架状态;0上架 1下架*/
+    @Schema(description = "上架状态;0上架 1下架")
+    private Integer rackingStatus;
+    /**课程进展状态*/
+    @Excel(name = "课程进展状态", width = 15)
+    @Schema(description = "课程进展状态")
+    private Integer coursesStatus;
+    @Excel(name = "总节数", width = 15)
+    private Integer totalNum;
+}

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

@@ -19,6 +19,23 @@ import lombok.experimental.Accessors;
 @NoArgsConstructor
 @Schema(description="课程课时入参DTO")
 public class AppCoursesPageDTO extends BasePageDTO {
-    @Schema(description = "名称", example = "名称")
+
+    @Schema(description = "orgCode")
+    private String orgCode;
+
+    @Schema(description = "课程名称")
     private String name;
+
+    @Schema(description = "上架状态;0上架 1下架")
+    private Integer rackingStatus;
+
+    @Schema(description = "费用类型")
+    private Integer priceType;
+
+    @Schema(description = "课程进展")
+    private Integer coursesStatus;
+
+    @Schema(description = "类目")
+    private Integer categoryId;
+
 }

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

@@ -0,0 +1,28 @@
+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 java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="教练列表DTO")
+public class AppInstructorDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**userId*/
+    @Schema(description = "userId")
+    private String userId;
+    /**姓名*/
+    @Schema(description = "姓名")
+    private String name;
+}

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

@@ -0,0 +1,28 @@
+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 java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="门店地址出参DTO")
+public class AppSiteAddressDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**siteId*/
+    @Schema(description = "siteId")
+    private String siteId;
+    /**地址*/
+    @Schema(description = "地址")
+    private String address;
+}

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

@@ -29,6 +29,9 @@ public class AppSitePlaceUnfixedDTO {
     @Excel(name = "商户补充信息id", width = 15)
     @Schema(description = "商户补充信息id")
     private String siteId;
+    @Excel(name = "orgCode", width = 15)
+    @Schema(description = "orgCode")
+    private String orgCode;
     /**名称*/
     @Excel(name = "名称", width = 15)
     @Schema(description = "名称")

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

@@ -1,9 +1,8 @@
 package org.jeecg.modules.system.app.dto;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -14,6 +13,7 @@ import java.util.Date;
  * @date 2025/7/10 11:59
  * @description
  */
+@Data
 public class AppTeachingTimeDTO {
     @Schema(description = "id")
     private String id;

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

@@ -0,0 +1,42 @@
+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 java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="学校场地开放DTO")
+public class SchoolPlaceAddDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "部门ID")
+    private String tenantId;
+
+    @Schema(description = "教学日")
+    private String teachingDay;
+
+    @Schema(description = "非教学日")
+    private String noTeachingDay;
+
+    @Schema(description = "封面")
+    private String cover;
+
+    @Schema(description = "配套保险")
+    private Integer insurance;
+
+    @Schema(description = "使用须知")
+    private String reminder;
+
+    @Schema(description = "是否拥有操作权限")
+    private Boolean havePermission;
+}

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

@@ -0,0 +1,30 @@
+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 java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="教学时段JsonDTO")
+public class TeachingDayDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "开始时间")
+    private String startTime;
+
+    @Schema(description = "结束时间")
+    private String endTime;
+
+    @Schema(description = "票数")
+    private String ticketNum;
+}

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

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.databind.JsonNode;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -159,9 +158,9 @@ public class AppSite implements Serializable {
     /**非教学日*/
     @Excel(name = "非教学日", width = 15)
     @Schema(description = "非教学日")
-    private JsonNode noTeachingDay;
+    private String noTeachingDay;
     /**教学日*/
     @Excel(name = "教学日", width = 15)
     @Schema(description = "教学日")
-    private JsonNode teachingDay;
+    private String teachingDay;
 }

+ 11 - 11
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppSitePlace.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: 商户场所表
@@ -106,6 +102,10 @@ public class AppSitePlace implements Serializable {
 	@Excel(name = "适用人数", width = 15)
     @Schema(description = "适用人数")
     private Integer usableCount;
+    /**配套保险**/
+    @Excel(name = "配套保险", width = 15)
+    @Schema(description = "配套保险")
+    private Integer insurance;
 	/**提示/须知*/
 	@Excel(name = "提示/须知", width = 15)
     @Schema(description = "提示/须知")

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

@@ -9,6 +9,8 @@ import org.jeecg.modules.app.vo.CourseInfoVO;
 import org.jeecg.modules.app.vo.SearchVO;
 import org.jeecg.modules.app.vo.course.CourseRequestVo;
 import org.jeecg.modules.app.vo.course.CourseResponseVo;
+import org.jeecg.modules.system.app.dto.AppCoursesInfoPageDTO;
+import org.jeecg.modules.system.app.dto.AppCoursesPageDTO;
 import org.jeecg.modules.system.app.entity.AppCourses;
 
 /**
@@ -41,4 +43,6 @@ public interface AppCoursesMapper extends BaseMapper<AppCourses> {
     IPage<CourseResponseVo> findByLaLoList(@Param("page") Page<CourseResponseVo> page,@Param("courseRequestVo") CourseRequestVo courseRequestVo);
 
     IPage<CourseResponseVo> findByList(@Param("page") Page<CourseResponseVo> page,@Param("courseRequestVo") CourseRequestVo courseRequestVo);
+
+    IPage<AppCoursesInfoPageDTO> queryWitchPriceRulesPage(Page<AppCourses> page, @Param("dto") AppCoursesPageDTO dto);
 }

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

@@ -1,11 +1,12 @@
 package org.jeecg.modules.system.app.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.app.vo.PlaceInfoVO;
 import org.jeecg.modules.app.vo.stadium.ConcertsVO;
 import org.jeecg.modules.app.vo.stadium.StadiumConcertsResponseVO;
 import org.jeecg.modules.system.app.entity.AppSitePlace;
-import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 
 /**

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

@@ -30,4 +30,8 @@ public interface AppSitePriceRulesMapper extends BaseMapper<AppSitePriceRules> {
 
     List<OrderVO.PreviewOrderTimePeriod> previewOrderPlaceGymnasiumChartered(@Param("rulesId")List<String> rulesId);
 
+    int insertList(@Param("list") List<AppSitePriceRules> list);
+
+    int updateList(@Param("list") List<AppSitePriceRules> list);
+
 }

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

@@ -1,5 +1,11 @@
 package org.jeecg.modules.system.app.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.app.dto.AppTeachingTimeDTO;
+import org.jeecg.modules.system.app.entity.AppTeachingTime;
+
+import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.jeecg.modules.app.vo.OrderVO;
 import org.jeecg.modules.system.app.entity.AppTeachingTime;
@@ -21,4 +27,8 @@ public interface AppTeachingTimeMapper extends BaseMapper<AppTeachingTime> {
      * @return OrderVO.PreviewOrderPlaceSchoolTime {@link OrderVO.PreviewOrderPlaceSchoolTime}
      **/
     List<OrderVO.PreviewOrderPlaceSchoolTime> previewOrderPlaceSchoolTime(String orgCode);
+
+    List<AppTeachingTimeDTO> queryListByTenantId(@Param("tenantId") String tenantId);
+
+    int insertList(@Param("list") List<AppTeachingTime> list);
 }

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

@@ -161,5 +161,40 @@
             ORDER BY b.create_time DESC
         </if>
     </select>
+    <select id="queryWitchPriceRulesPage" resultType="org.jeecg.modules.system.app.dto.AppCoursesInfoPageDTO">
+        SELECT
+            c.id,
+            c.`name`,
+            c.cover,
+            c.start_time,
+            c.end_time,
+            s.address,
+            c.original_price,
+            c.selling_price,
+            c.racking_status,
+            c.courses_status,
+            c.category_id,
+            c.create_time
+        FROM
+            `nm_courses` c
+            left JOIN nm_site s ON c.address_site_id = s.id
+        WHERE 1=1
+        <if test="dto.orgCode != null and dto.orgCode != ''">
+            AND c.org_code = #{ dto.orgCode }
+        </if>
+        <if test="dto.name != null and dto.name != ''">
+            AND c.name LIKE CONCAT('%',#{ dto.name },'%')
+        </if>
+        <if test="dto.rackingStatus != null ">
+            AND c.racking_status = #{ dto.rackingStatus }
+        </if>
+        <if test="dto.coursesStatus != null ">
+            AND c.courses_status = #{ dto.coursesStatus }
+        </if>
+        <if test="dto.categoryId != null">
+            AND c.category_id LIKE CONCAT('%',#{ dto.categoryId },'%')
+        </if>
+        ORDER BY c.create_time DESC
+    </select>
 
 </mapper>

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

@@ -95,4 +95,108 @@
         ORDER BY
         a.date_of_sale ASC
     </select>
+
+    <insert id="insertList">
+        INSERT INTO `nm_site_price_rules` (id,org_code,tenant_id,site_place_id,category_id,type,date_of_sale,start_time,end_time,day_of_week,original_price,selling_price,is_teaching,view_status,inventory,revision,create_by,create_time,update_by,update_time,status,del_flag)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.id},
+             #{item.orgCode},
+            #{item.tenantId},
+            #{item.sitePlaceId},
+            #{item.categoryId},
+            #{item.type},
+            #{item.dateOfSale},
+            #{item.startTime},
+            #{item.endTime},
+            #{item.dayOfWeek},
+            #{item.originalPrice},
+            #{item.sellingPrice},
+            #{item.isTeaching},
+            #{item.viewStatus},
+            #{item.inventory},
+            #{item.revision},
+            #{item.createBy},
+            #{item.createTime},
+            #{item.updateBy},
+            #{item.updateTime},
+            #{item.status},
+            #{item.delFlag}
+            )
+        </foreach>
+    </insert>
+
+    <update id="updateList" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            update `nm_site_price_rules`
+            <set>
+                <if test="item.orgCode != null and item.orgCode != ''">
+                    org_code = #{item.orgCode},
+                </if>
+                <if test="item.tenantId != null and item.tenantId != ''">
+                    tenant_id = #{item.tenantId},
+                </if>
+                <if test="item.sitePlaceId != null and item.sitePlaceId != ''">
+                    site_place_id = #{item.sitePlaceId},
+                </if>
+                <if test="item.categoryId != null and item.categoryId != ''">
+                    category_id = #{item.categoryId},
+                </if>
+                <if test="item.type != null and item.type != ''">
+                    `type` = #{item.type},
+                </if>
+                <if test="item.dateOfSale != null and item.dateOfSale != ''">
+                    date_of_sale = #{item.dateOfSale},
+                </if>
+                <if test="item.startTime != null and item.startTime != ''">
+                    start_time = #{item.startTime},
+                </if>
+                <if test="item.endTime != null and item.endTime != ''">
+                    end_time = #{item.endTime},
+                </if>
+                <if test="item.dayOfWeek != null and item.dayOfWeek != ''">
+                    day_of_week = #{item.dayOfWeek},
+                </if>
+                <if test="item.originalPrice != null and item.originalPrice != ''">
+                    orginal_price = #{item.originalPrice},
+                </if>
+                <if test="item.sellingPrice != null and item.sellingPrice != ''">
+                    selling_price = #{item.sellingPrice},
+                </if>
+                <if test="item.isTeaching != null and item.isTeaching != ''">
+                    is_teaching = #{item.isTeaching},
+                </if>
+                <if test="item.viewStatus != null and item.viewStatus != ''">
+                    view_status = #{item.viewStatus},
+                </if>
+
+                <if test="item.inventory != null and item.inventory != ''">
+                    inventory = #{item.inventory},
+                </if>
+                <if test="item.revision != null and item.revision != ''">
+                    revision = #{item.revision},
+                </if>
+                <if test="item.createBy != null and item.createBy != ''">
+                    create_by = #{item.createBy},
+                </if>
+                <if test="item.createTime != null and item.createTime != ''">
+                    create_time = #{item.createTime},
+                </if>
+                <if test="item.updateBy != null and item.updateBy != ''">
+                    update_by = #{item.updateBy},
+                </if>
+                <if test="item.updateTime != null and item.updateTime != ''">
+                    update_time = #{item.updateTime},
+                </if>
+                <if test="item.status != null and item.status != ''">
+                    status = #{item.status},
+                </if>
+                <if test="item.delFlag != null and item.delFlag != ''">
+                    del_flag = #{item.delFlag}
+                </if>
+            </set>
+            where id = #{item.id}
+        </foreach>
+    </update>
+
 </mapper>

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

@@ -23,4 +23,49 @@
 	    AND CURDATE() + INTERVAL 6 DAY
 	    AND a.org_code = #{orgCode};
     </select>
+    <select id="queryListByTenantId" resultType="org.jeecg.modules.system.app.dto.AppTeachingTimeDTO">
+        SELECT
+            t1.id,
+            t1.`day`,
+            t1.is_teaching,
+            t1.org_code
+        FROM
+            `nm_teaching_time` t1
+        WHERE
+            t1.tenant_id = #{tenantId}
+        AND t1.`status` = 0
+        AND MONTH(t1.`day`) = MONTH(CURRENT_DATE)
+        UNION
+        SELECT
+            t2.id,
+            t2.`day`,
+            t2.is_teaching,
+            t2.org_code
+        FROM
+            `nm_teaching_time` t2
+        WHERE
+            t2.tenant_id = #{tenantId}
+        AND t2.`status` = 0
+        AND MONTH(t2.`day`) = MONTH(DATE_ADD(CURRENT_DATE, INTERVAL 1 MONTH))
+    </select>
+
+    <insert id="insertList">
+        INSERT INTO `nm_teaching_time` (tenant_id, day, is_teaching,org_code,revision,create_by,create_time,update_by,update_time,update_time,status,del_flag)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.tenantId},
+             #{item.day},
+             #{item.isTeaching},
+             #{item.orgCode},
+             #{item.revision},
+             #{item.createBy},
+             #{item.createTime},
+             #{item.updateBy},
+             #{item.updateTime},
+             #{item.status},
+             #{item.delFlag}
+             )
+        </foreach>
+    </insert>
+
 </mapper>

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

@@ -1,11 +1,11 @@
 package org.jeecg.modules.system.app.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.jeecg.modules.system.app.dto.AppCoursesCuDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesPageDTO;
-import org.jeecg.modules.system.app.entity.AppCourses;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.app.dto.*;
+import org.jeecg.modules.system.app.entity.AppCourses;
+
+import java.util.List;
 
 /**
  * @Description: 课程/培训表
@@ -25,7 +25,7 @@ public interface IAppCoureseService extends IService<AppCourses> {
      * @param appCoursesDTO
      * @return
      */
-    Boolean editWitchPriceRules(AppCoursesCuDTO appCoursesDTO);
+    Boolean editWitchPriceRules(AppCoursesDTO appCoursesDTO);
     /**
      * 通过id查询课程
      * @param id
@@ -39,6 +39,7 @@ public interface IAppCoureseService extends IService<AppCourses> {
      */
     Boolean deleteWitchPriceRulesById(String id);
 
-    IPage<AppCoursesCuDTO> queryWitchPriceRulesPage(AppCoursesPageDTO dto);
+    IPage<AppCoursesInfoPageDTO> queryWitchPriceRulesPage(AppCoursesPageDTO dto);
 
+    List<AppSiteAddressDTO> queryAddressList();
 }

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

@@ -107,4 +107,7 @@ public interface IAppSitePlaceService extends IService<AppSitePlace> {
      */
     Boolean deletePackById(String id);
 
+    boolean addSchoolPlace(SchoolPlaceAddDTO schoolPlaceAddDTO);
+
+    SchoolPlaceAddDTO querySchoolPlace(String tenantId);
 }

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

@@ -1,7 +1,9 @@
 package org.jeecg.modules.system.app.service;
 
-import org.jeecg.modules.system.app.entity.AppSitePriceRules;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.app.entity.AppSitePriceRules;
+
+import java.util.List;
 
 /**
  * @Description: 场地表
@@ -11,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAppSitePriceRulesService extends IService<AppSitePriceRules> {
 
+    int insertList(List<AppSitePriceRules> appSitePriceRulesList);
 }

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

@@ -1,8 +1,11 @@
 package org.jeecg.modules.system.app.service;
 
+import org.jeecg.modules.system.app.dto.AppTeachingTimeDTO;
 import org.jeecg.modules.system.app.entity.AppTeachingTime;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 教学/非教学维护表
  * @Author: jeecg-boot
@@ -12,5 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface IAppTeachingTimeService extends IService<AppTeachingTime> {
 
 
-
+    List<AppTeachingTimeDTO> queryListByTenantId(String tenantId);
 }

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

@@ -1,28 +1,22 @@
 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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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;
 
 /**
@@ -79,8 +73,10 @@ public class AppCategoryServiceImpl extends ServiceImpl<AppCategoryMapper, AppCa
 
     @Override
     public IPage<AppCategoryVO> queryCategoryList(AppCategoryDTO dto) {
+        LoginUser loginUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
         Page<AppCategory> page = new Page<>(dto.getPageNum(), dto.getPageSize());
         LambdaQueryWrapper<AppCategory> wrapper = Wrappers.<AppCategory>lambdaQuery()
+                .eq(AppCategory::getOrgCode,loginUser.getOrgCode())
                 .like(StringUtils.isNotBlank(dto.getName()), AppCategory::getName, dto.getName()).last("order by sort");
         IPage<AppCategory> resultPage = baseMapper.selectPage(page, wrapper);
         return resultPage.convert(record -> {

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

@@ -1,33 +1,31 @@
 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.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.shiro.SecurityUtils;
-import org.dom4j.rule.RuleManager;
+import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.system.app.dto.AppCoursesCuDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesPageDTO;
-import org.jeecg.modules.system.app.dto.AppCoursesRuleDTO;
+import org.jeecg.modules.system.app.dto.*;
+import org.jeecg.modules.system.app.entity.AppCategory;
 import org.jeecg.modules.system.app.entity.AppCourses;
 import org.jeecg.modules.system.app.entity.AppCoursesPriceRules;
 import org.jeecg.modules.system.app.entity.AppSite;
+import org.jeecg.modules.system.app.mapper.AppCategoryMapper;
 import org.jeecg.modules.system.app.mapper.AppCoursesMapper;
 import org.jeecg.modules.system.app.mapper.AppCoursesPriceRulesMapper;
 import org.jeecg.modules.system.app.mapper.AppSiteMapper;
 import org.jeecg.modules.system.app.service.IAppCoureseService;
 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;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.jeecg.common.constant.CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
 
@@ -43,19 +41,23 @@ public class AppCoureseServiceImpl extends ServiceImpl<AppCoursesMapper, AppCour
     private AppCoursesPriceRulesMapper priceRulesMapper;
     @Resource
     private AppSiteMapper siteMapper;
+    @Resource
+    private AppCategoryMapper categoryMapper;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean saveWitchPriceRules(AppCoursesDTO appCoursesDTO) {
         AppCoursesCuDTO coursesCuDTO = appCoursesDTO.getCourses();
         if (null == coursesCuDTO.getCategoryId()) throw new JeecgBootException("请选择课程类别");
-        AppSite site = siteMapper.selectById(coursesCuDTO.getSiteId());
+        AppSite site = siteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getTenantId, coursesCuDTO.getSiteId()));
         AppCourses appCourses = new AppCourses();
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         BeanUtils.copyProperties(coursesCuDTO, appCourses);
         appCourses.setOrgCode(site.getOrgCode());
         appCourses.setTenantId(site.getTenantId());
-        appCourses.setUserId(loginUser.getId());
+        appCourses.setUserId(coursesCuDTO.getUserId());
+        appCourses.setAddressSiteId(coursesCuDTO.getAddressSiteId());
         List<AppCoursesRuleDTO> coursesRuleDTOS= appCoursesDTO.getPriceRulesList();
         //起止时间计算
         Optional<Date> minStartTime = coursesRuleDTOS.stream()
@@ -89,24 +91,92 @@ public class AppCoureseServiceImpl extends ServiceImpl<AppCoursesMapper, AppCour
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean editWitchPriceRules(AppCoursesCuDTO coursesCuDTO) {
+    public Boolean editWitchPriceRules(AppCoursesDTO appCoursesDTO) {
+        AppCoursesCuDTO coursesCuDTO = appCoursesDTO.getCourses();
         if (null == coursesCuDTO.getCategoryId()) throw new JeecgBootException("请选择课程类别");
-        AppSite site = siteMapper.selectById(coursesCuDTO.getSiteId());
-        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        AppCourses dbCourse = baseMapper.selectById(coursesCuDTO.getId());
-//        checkPermission(loginUser, dbCourse);
-        AppCourses course = new AppCourses();
-        BeanUtils.copyProperties(coursesCuDTO, course);
-        course.setOrgCode(site.getOrgCode());
-        course.setTenantId(site.getTenantId());
-        course.setUserId(loginUser.getId());
-        int updateCourseResult = baseMapper.updateById(course);
-        if (updateCourseResult < 1) {
+
+        AppCourses appCourses = baseMapper.selectById(coursesCuDTO.getId());
+        BeanUtils.copyProperties(coursesCuDTO, appCourses);
+        appCourses.setAddressSiteId(coursesCuDTO.getAddressSiteId());
+        List<AppCoursesRuleDTO> coursesRuleDTOS= appCoursesDTO.getPriceRulesList();
+        //起止时间计算
+        Optional<Date> minStartTime = coursesRuleDTOS.stream()
+                .map(AppCoursesRuleDTO::getStartTime)
+                .filter(Objects::nonNull)
+                .min(Date::compareTo);
+
+        Optional<Date> maxEndTime = coursesRuleDTOS.stream()
+                .map(AppCoursesRuleDTO::getEndTime)
+                .filter(Objects::nonNull)
+                .max(Date::compareTo);
+        appCourses.setStartTime(minStartTime.orElse(null));
+        appCourses.setEndTime(maxEndTime.orElse(null));
+        int updateResult = baseMapper.updateById(appCourses);
+        if (updateResult < 1) {
             throw new JeecgBootException("课程信息保存失败");
         }
+
+        //查历史本地数据
+        List<AppCoursesPriceRules> coursesPriceRules = priceRulesMapper.selectList(Wrappers.lambdaQuery(AppCoursesPriceRules.class).eq(AppCoursesPriceRules::getCoursesId, appCourses.getId()));
+        List<String> localList = coursesPriceRules.stream().map(AppCoursesPriceRules::getCoursesId).collect(Collectors.toList());
+        //表单数据
+        List<String> formList = coursesRuleDTOS.stream().filter(e->ObjectUtils.isNotEmpty(e.getId())).map(AppCoursesRuleDTO::getId).collect(Collectors.toList());
+        //有ID的做更新
+        coursesRuleDTOS.stream().filter(e->ObjectUtils.isNotEmpty(e.getId())).forEach(coursesRule -> {
+            AppCoursesPriceRules appCoursesPriceRules = new AppCoursesPriceRules();
+            BeanUtils.copyProperties(coursesRule, appCoursesPriceRules);
+            priceRulesMapper.updateById(appCoursesPriceRules);
+        });
+        //差集直接做删除
+        List<String> differ = getDifferListByMap(formList, localList);
+        //修改状态
+        for (String id : differ) {
+            AppCoursesPriceRules appCoursesPriceRules = priceRulesMapper.selectById(id);
+            if (ObjectUtils.isNotEmpty(appCoursesPriceRules)) {
+                appCoursesPriceRules.setStatus(CommonConstant.STATUS_1_INT);
+                priceRulesMapper.updateById(appCoursesPriceRules);
+            }
+        }
+        //id为空做新增
+        List<AppCoursesRuleDTO> nullList = coursesRuleDTOS.stream().filter(e->ObjectUtils.isEmpty(e.getId())).collect(Collectors.toList());
+        for (AppCoursesRuleDTO rule : nullList) {
+            //做新增
+            AppCoursesPriceRules appCoursesPriceRules = new AppCoursesPriceRules();
+            BeanUtils.copyProperties(rule, appCoursesPriceRules);
+            appCoursesPriceRules.setCoursesId(appCourses.getId());
+            appCoursesPriceRules.setOrgCode(appCourses.getOrgCode());
+            appCoursesPriceRules.setTenantId(appCourses.getTenantId());
+            int savePriceResult = priceRulesMapper.insert(appCoursesPriceRules); // 保证每个操作都在事务中
+            if (savePriceResult < 1) {
+                throw new JeecgBootException("课程价格规则保存失败");
+            }
+        }
         return Boolean.TRUE;
     }
 
+
+    public static List<String> getDifferListByMap(List<String> listA, List<String> listB) {
+        List<String> differList = new ArrayList<>();
+        Map<String, Integer> map = new HashMap<>();
+        for (String strA : listA) {
+            map.put(strA, 1);
+        }
+        for (String strB : listB) {
+            Integer value = map.get(strB);
+            if (value != null) {
+                map.put(strB, ++value);
+                continue;
+            }
+            map.put(strB, 1);
+        }
+        for (Map.Entry<String, Integer> entry : map.entrySet()) {
+            if (entry.getValue() == 1) {
+                differList.add(entry.getKey());
+            }
+        }
+        return differList;
+    }
+
     @Override
     public AppCoursesDTO queryWitchPriceRulesById(String id) {
         AppCourses dbCourse = baseMapper.selectById(id);
@@ -144,19 +214,41 @@ public class AppCoureseServiceImpl extends ServiceImpl<AppCoursesMapper, AppCour
     }
 
     @Override
-    public IPage<AppCoursesCuDTO> queryWitchPriceRulesPage(AppCoursesPageDTO dto) {
+    public IPage<AppCoursesInfoPageDTO> queryWitchPriceRulesPage(AppCoursesPageDTO dto) {
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        dto.setOrgCode(loginUser.getOrgCode());
         Page<AppCourses> page = new Page<>(dto.getPageNum(), dto.getPageSize());
-        LambdaQueryWrapper<AppCourses> wrapper = Wrappers.<AppCourses>lambdaQuery()
-                .like(StringUtils.isNotBlank(dto.getName()), AppCourses::getName, dto.getName());
-//                .eq(AppCourses::getOrgCode, loginUser.getOrgCode());
-        IPage<AppCourses> resultPage = baseMapper.selectPage(page, wrapper);
-        return resultPage.convert(record -> {
-            AppCoursesCuDTO cuDTO = new AppCoursesCuDTO();
-            BeanUtils.copyProperties(record,cuDTO);
-            Long l = priceRulesMapper.selectCount(Wrappers.<AppCoursesPriceRules>lambdaQuery().eq(AppCoursesPriceRules::getCoursesId, record.getId()));
-            cuDTO.setTotalNum(l.intValue());
-            return cuDTO;
+        IPage<AppCoursesInfoPageDTO> resultPage = baseMapper.queryWitchPriceRulesPage(page, dto);
+
+        resultPage.getRecords().forEach(r -> {
+            String[] split = r.getCategoryId().split(",");
+            List<String> ids = Arrays.stream(split).collect(Collectors.toList());
+
+            Long count = priceRulesMapper.selectCount(Wrappers.<AppCoursesPriceRules>lambdaQuery().eq(AppCoursesPriceRules::getCoursesId, r.getId()));
+
+            r.setTotalNum(Math.toIntExact(count));
+
+            StringJoiner stringJoiner = new StringJoiner(",");
+
+            for (String id : ids) {
+                AppCategory category = categoryMapper.selectById(id);
+                stringJoiner.add(category.getName());
+            }
+            r.setCategoryIds(stringJoiner.toString());
         });
+        return resultPage;
+    }
+
+    @Override
+    public List<AppSiteAddressDTO> queryAddressList() {
+        List<AppSite> appSites = siteMapper.selectList(Wrappers.<AppSite>lambdaQuery().select(AppSite::getId, AppSite::getAddress));
+        List<AppSiteAddressDTO> dtoList = Optional.ofNullable(appSites.stream().map(e -> {
+            AppSiteAddressDTO appSiteAddressDTO = new AppSiteAddressDTO();
+            appSiteAddressDTO.setSiteId(e.getId());
+            appSiteAddressDTO.setAddress(e.getAddress());
+            return appSiteAddressDTO;
+        }).collect(Collectors.toList())).orElse(List.of());
+        return dtoList;
     }
 
     /**

+ 221 - 34
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppSitePlaceServiceImpl.java

@@ -1,30 +1,31 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.quartz.utils.HolidayUtil;
 import org.jeecg.modules.system.app.dto.*;
-import org.jeecg.modules.system.app.entity.AppCategory;
-import org.jeecg.modules.system.app.entity.AppSite;
-import org.jeecg.modules.system.app.entity.AppSitePlace;
-import org.jeecg.modules.system.app.entity.AppSitePriceRules;
+import org.jeecg.modules.system.app.entity.*;
 import org.jeecg.modules.system.app.enums.SitePlaceTypeEnum;
-import org.jeecg.modules.system.app.mapper.AppCategoryMapper;
-import org.jeecg.modules.system.app.mapper.AppSiteMapper;
-import org.jeecg.modules.system.app.mapper.AppSitePlaceMapper;
-import org.jeecg.modules.system.app.mapper.AppSitePriceRulesMapper;
+import org.jeecg.modules.system.app.mapper.*;
 import org.jeecg.modules.system.app.service.IAppSitePlaceService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -41,6 +42,8 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
     @Resource
     private AppSitePriceRulesMapper appSitePriceRulesMapper;
     @Resource
+    private AppTeachingTimeMapper appTeachingTimeMapper;
+    @Resource
     private AppSiteMapper appSiteMapper;
     @Resource
     private AppCategoryMapper appCategoryMapper;
@@ -210,8 +213,8 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         Page<AppSitePlace> page = new Page<>(dto.getPageNum(), dto.getPageSize());
         LambdaQueryWrapper<AppSitePlace> wrapper = Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getType, dto.getType())
-                .like(StringUtils.isNotBlank(dto.getName()), AppSitePlace::getName, dto.getName());
-//                .eq(AppSitePlace::getOrgCode, loginUser.getOrgCode());
+                .like(StringUtils.isNotBlank(dto.getName()), AppSitePlace::getName, dto.getName())
+                .eq(AppSitePlace::getOrgCode, loginUser.getOrgCode());
         IPage<AppSitePlace> resultPage = baseMapper.selectPage(page, wrapper);
         return resultPage.convert(record -> {
             AppSitePlaceCuDTO cuDTO = new AppSitePlaceCuDTO();
@@ -224,21 +227,41 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean addUnfixed(AppSitePlaceUnfixedDTO unsetDTO) {
-        if (null == unsetDTO.getSiteId()) throw new JeecgBootException("请选择商户门店", SC_INTERNAL_SERVER_ERROR_500);
-        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        AppSite site = appSiteMapper.selectById(unsetDTO.getSiteId());
+//        if (null == unsetDTO.getSiteId()) throw new JeecgBootException("请选择商户门店", SC_INTERNAL_SERVER_ERROR_500);
+//        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        AppSite site = appSiteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getOrgCode, unsetDTO.getOrgCode()));
         AppSitePlace appSitePlace = new AppSitePlace();
         BeanUtils.copyProperties(unsetDTO, appSitePlace);
         appSitePlace.setType(SitePlaceTypeEnum.UNFIXED.getCode());
         appSitePlace.setOrgCode(site.getOrgCode());
         appSitePlace.setTenantId(site.getTenantId());
+        appSitePlace.setSiteId(site.getId());
+        appSitePlace.setCategoryId(site.getCategoryId());
         int insert = baseMapper.insert(appSitePlace);
         if (insert < 1) throw new JeecgBootException("无固定场添加失败", SC_INTERNAL_SERVER_ERROR_500);
-        AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
-        appSitePriceRules.setSitePlaceId(appSitePlace.getId());
-        appSitePriceRules.setOrgCode(appSitePlace.getOrgCode());
-        appSitePriceRules.setTenantId(appSitePlace.getTenantId());
-        int insert1 = appSitePriceRulesMapper.insert(appSitePriceRules);
+        //每新增无固定场,对应增加(7-除外日期)条场地价格规则表数据
+        List<String> weekList = List.of("1", "2", "3", "4", "5", "6", "7");
+        String[] split = unsetDTO.getDownTime().split(",");
+        //"6,7"
+        List<String> downTimes = Arrays.stream(split).collect(Collectors.toList());
+        List<AppSitePriceRules> appSitePriceRulesList = new ArrayList<>();
+        weekList.forEach(week -> {
+            AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
+            appSitePriceRules
+                    .setSitePlaceId(appSitePlace.getId())
+                    .setOrgCode(appSitePlace.getOrgCode())
+                    .setTenantId(appSitePlace.getTenantId())
+                    .setType(SitePlaceTypeEnum.UNFIXED.getCode())
+                    .setOriginalPrice(unsetDTO.getOriginalPrice())
+                    .setSellingPrice(unsetDTO.getSellingPrice())
+                    .setDayOfWeek(week);
+            ;
+            if (downTimes.contains(week)) {
+                appSitePriceRules.setStatus(1);
+            }
+            appSitePriceRulesList.add(appSitePriceRules);
+        });
+        int insert1 = appSitePriceRulesMapper.insertList(appSitePriceRulesList);
         if (insert1 < 1) throw new JeecgBootException("无固定场价格添加失败", SC_INTERNAL_SERVER_ERROR_500);
         return Boolean.TRUE;
     }
@@ -246,14 +269,14 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateUnfixed(AppSitePlaceUnfixedDTO unsetDTO) {
-        if (null == unsetDTO.getSiteId())
-            throw new JeecgBootException("商户门店不能为空", SC_INTERNAL_SERVER_ERROR_500);
+//        if (null == unsetDTO.getSiteId())
+//            throw new JeecgBootException("商户门店不能为空", SC_INTERNAL_SERVER_ERROR_500);
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
         AppSitePlace dbSitePlace = baseMapper.selectById(unsetDTO.getId());
         if (null == dbSitePlace) throw new JeecgBootException("数据不存在", SC_INTERNAL_SERVER_ERROR_500);
 //        checkPermission(dbSitePlace,sysUser);
-        AppSite site = appSiteMapper.selectById(unsetDTO.getSiteId());
+        AppSite site = appSiteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getOrgCode, unsetDTO.getOrgCode()));
         AppSitePlace appSitePlace = new AppSitePlace();
         BeanUtils.copyProperties(unsetDTO, appSitePlace);
         //固定
@@ -262,12 +285,24 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
         appSitePlace.setTenantId(site.getTenantId());
         int updateById = baseMapper.updateById(appSitePlace);
         if (updateById < 1) throw new JeecgBootException("无固定场编辑失败", SC_INTERNAL_SERVER_ERROR_500);
-        AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
-        appSitePriceRules.setSitePlaceId(appSitePlace.getId());
-        appSitePriceRules.setOrgCode(appSitePlace.getOrgCode());
-        appSitePriceRules.setTenantId(appSitePlace.getTenantId());
-        int updateById1 = appSitePriceRulesMapper.updateById(appSitePriceRules);
-        if (updateById1 < 1) throw new JeecgBootException("无固定场价格编辑失败", SC_INTERNAL_SERVER_ERROR_500);
+       //查询无固定场价格表对应数据,查询对应数据修改
+        List<AppSitePriceRules> appSitePriceRulesList = appSitePriceRulesMapper.selectList(Wrappers.<AppSitePriceRules>lambdaQuery().eq(AppSitePriceRules::getSitePlaceId, unsetDTO.getId()));
+        String[] split = unsetDTO.getDownTime().split(",");
+        List<String> downTimes = Arrays.stream(split).collect(Collectors.toList());
+        appSitePriceRulesList.forEach(appSitePriceRules -> {
+            appSitePriceRules
+                    .setSitePlaceId(appSitePlace.getId())
+                    .setOrgCode(appSitePlace.getOrgCode())
+                    .setTenantId(appSitePlace.getTenantId())
+                    .setType(SitePlaceTypeEnum.UNFIXED.getCode())
+                    .setOriginalPrice(unsetDTO.getOriginalPrice())
+                    .setSellingPrice(unsetDTO.getSellingPrice())
+            ;
+            if (downTimes.contains(appSitePriceRules.getDayOfWeek())) {
+                appSitePriceRules.setStatus(1);
+            }
+            appSitePriceRulesMapper.updateById(appSitePriceRules);
+        });
         return Boolean.TRUE;
     }
 
@@ -290,18 +325,21 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         Page<AppSitePlace> page = new Page<>(dto.getPageNum(), dto.getPageSize());
         LambdaQueryWrapper<AppSitePlace> wrapper = Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getType, SitePlaceTypeEnum.UNFIXED.getCode())
-                .eq(AppSitePlace::getSiteId, dto.getSiteId())
-                .like(StringUtils.isNotBlank(dto.getName()), AppSitePlace::getName, dto.getName());
-//                .eq(AppSitePlace::getOrgCode, loginUser.getOrgCode());
+//                .eq(AppSitePlace::getSiteId, dto.getSiteId())
+                .eq(AppSitePlace::getOrgCode, loginUser.getOrgCode())
+                .like(StringUtils.isNotBlank(dto.getName()), AppSitePlace::getName, dto.getName())
+                ;
 
         IPage<AppSitePlace> resultPage = baseMapper.selectPage(page, wrapper);
         return resultPage.convert(record -> {
             AppSitePlaceUnfixedDTO appSitePlaceUnfixedDTO = new AppSitePlaceUnfixedDTO();
             BeanUtils.copyProperties(record, appSitePlaceUnfixedDTO);
-            AppSitePriceRules appSitePriceRules = appSitePriceRulesMapper.selectOne(
-                    Wrappers.<AppSitePriceRules>lambdaQuery().eq(AppSitePriceRules::getSitePlaceId, record.getId()));
-            appSitePlaceUnfixedDTO.setOriginalPrice(appSitePriceRules.getOriginalPrice());
-            appSitePlaceUnfixedDTO.setSellingPrice(appSitePriceRules.getSellingPrice());
+            List<AppSitePriceRules> appSitePriceRulesList = appSitePriceRulesMapper.selectList(
+                    Wrappers.<AppSitePriceRules>lambdaQuery().eq(AppSitePriceRules::getSitePlaceId, record.getId()).eq(AppSitePriceRules::getStatus, CommonConstant.STATUS_0_INT));
+            if (CollUtil.isNotEmpty(appSitePriceRulesList)) {
+                appSitePlaceUnfixedDTO.setOriginalPrice(appSitePriceRulesList.get(0).getOriginalPrice());
+                appSitePlaceUnfixedDTO.setSellingPrice(appSitePriceRulesList.get(0).getSellingPrice());
+            }
             return appSitePlaceUnfixedDTO;
         });
     }
@@ -327,6 +365,7 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
     public Boolean savePack(AppSitePlaceDTO placeDTO) {
         AppSitePlaceCuDTO placeCuDTO = placeDTO.getAppSitePlaceCuDTO();
         List<AppSiteRuleDTO> siteRuleDTOS = placeDTO.getSiteRuleDTOS();
+//        AppSite site = appSiteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getTenantId,placeCuDTO.getSiteId()));
         AppSite site = appSiteMapper.selectById(placeCuDTO.getSiteId());
         placeDTO.getSiteCategoryDOTS().forEach(item -> {
             AppCategory category = appCategoryMapper.selectById(item.getCategoryId());
@@ -562,6 +601,154 @@ public class AppSitePlaceServiceImpl extends ServiceImpl<AppSitePlaceMapper, App
         return Boolean.TRUE;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addSchoolPlace(SchoolPlaceAddDTO schoolPlaceAddDTO) {
+
+        //部门ID查询学校场地
+        AppSite site = appSiteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getTenantId, schoolPlaceAddDTO.getTenantId()));
+
+        //根据学校查询场地
+        AppSitePlace appSitePlace = baseMapper.selectOne(Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getTenantId, site.getTenantId()));
+
+        //判断当前教学日配置是否与原数据对应
+        if (ObjectUtils.notEqual(site.getTeachingDay(), schoolPlaceAddDTO.getTeachingDay()) || ObjectUtils.notEqual(site.getNoTeachingDay(), schoolPlaceAddDTO.getNoTeachingDay())) {
+
+            site.setTeachingDay(schoolPlaceAddDTO.getTeachingDay());
+
+            int year = DateUtils.getYear();
+
+            Map<String, List<String>> HolidayMap = HolidayUtil.getYearHoliday(String.valueOf(year));
+
+            //当前日期
+            Date currDate = DateUtils.str2Date(DateUtils.now(), new SimpleDateFormat("yyyy-MM-dd"));
+
+            // 设置开始日期和结束日期
+            Date beginDate = DateUtils.str2Date((year) + "-01-01 00:00:00", new SimpleDateFormat("yyyy-MM-dd"));
+            Date endDate = DateUtils.str2Date((year + 1) + "-01-01 00:00:00", new SimpleDateFormat("yyyy-MM-dd"));
+
+            // 获取开始日期和结束日期之间的所有日期
+            List<Date> dateList = HolidayUtil.getDaysBetweenDates(beginDate, endDate);
+            //当前日期之后的数据
+            List<Date> dates = dateList.stream().filter(date -> date.after(currDate)).collect(Collectors.toList());
+
+            //部门、场地、教学日(teaching)、
+            List<AppSitePriceRules> appSitePriceRulesList = new ArrayList<>();
+
+            // 遍历生成一对多教学时段
+            for (Date localDate : dates) {
+                //查询
+                AppTeachingTime appTeachingTime = appTeachingTimeMapper.selectOne(Wrappers.<AppTeachingTime>lambdaQuery()
+                        .eq(AppTeachingTime::getTenantId, site.getTenantId()).eq(AppTeachingTime::getDay, localDate));
+
+                //如果开放时段列表不为空(教学日/非教学日),根据开放时段批量存储,开放时段记录
+                if (ObjectUtils.isNotEmpty(site.getTeachingDay()) && appTeachingTime.getIsTeaching() == 0) {
+
+                    //解析Json 数据
+                    List<TeachingDayDTO> data = JSONObject.parseObject(site.getTeachingDay()).getJSONArray("data").toJavaList(TeachingDayDTO.class);
+                    data.forEach(item -> {
+
+                        String startTime = item.getStartTime();
+                        String endTime = item.getEndTime();
+
+                        AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
+                        appSitePriceRules
+                                .setOrgCode(site.getOrgCode())
+                                .setTenantId(site.getTenantId())
+                                .setSitePlaceId(appSitePlace.getId())
+                                .setType(0)
+                                .setDateOfSale(localDate)
+                                .setStartTime(DateUtils.str2Date(startTime, new SimpleDateFormat("HH:mm")))
+                                .setEndTime(DateUtils.str2Date(endTime, new SimpleDateFormat("HH:mm")))
+                                .setDayOfWeek(HolidayUtil.getWeekOfDate(localDate))
+                                .setIsTeaching(appTeachingTime.getIsTeaching())
+                                .setCategoryId(site.getCategoryId())
+                                .setCreateBy("admin")
+                                .setStatus(CommonConstant.STATUS_NORMAL)
+                                .setDelFlag(CommonConstant.STATUS_NORMAL)
+                        ;
+                        appSitePriceRulesList.add(appSitePriceRules);
+                    });
+
+                }
+                if (ObjectUtils.isNotEmpty(site.getNoTeachingDay()) && appTeachingTime.getIsTeaching() == 1) {
+
+                    List<TeachingDayDTO> data = JSONObject.parseObject(site.getNoTeachingDay()).getJSONArray("data").toJavaList(TeachingDayDTO.class);
+                    data.forEach(item -> {
+
+                        String startTime = item.getStartTime();
+                        String endTime = item.getEndTime();
+
+                        AppSitePriceRules appSitePriceRules = new AppSitePriceRules();
+                        appSitePriceRules
+                                .setOrgCode(site.getOrgCode())
+                                .setTenantId(site.getTenantId())
+                                .setSitePlaceId(appSitePlace.getId())
+                                .setType(0)
+                                .setDateOfSale(localDate)
+                                .setStartTime(DateUtils.str2Date(startTime, new SimpleDateFormat("HH:mm")))
+                                .setEndTime(DateUtils.str2Date(endTime, new SimpleDateFormat("HH:mm")))
+                                .setDayOfWeek(HolidayUtil.getWeekOfDate(localDate))
+                                .setIsTeaching(appTeachingTime.getIsTeaching())
+                                .setCategoryId(site.getCategoryId())
+                                .setCreateBy("admin")
+                                .setStatus(CommonConstant.STATUS_NORMAL)
+                                .setDelFlag(CommonConstant.STATUS_NORMAL)
+                        ;
+                        appSitePriceRulesList.add(appSitePriceRules);
+                    });
+                }
+            }
+            //存放开放时段列表(删除再新增)
+            appSitePriceRulesMapper.delete(Wrappers.<AppSitePriceRules>lambdaQuery().gt(AppSitePriceRules::getDateOfSale,currDate).eq(AppSitePriceRules::getTenantId, site.getTenantId()));
+            appSitePriceRulesMapper.insertList(appSitePriceRulesList);
+
+            appSiteMapper.updateById(site);
+        }
+        //修改学校场地开放信息
+        appSitePlace
+                .setCover(schoolPlaceAddDTO.getCover())
+                //todo 设置意外保险字段
+                .setInsurance(schoolPlaceAddDTO.getInsurance())
+                .setReminder(schoolPlaceAddDTO.getReminder());
+        return this.updateById(appSitePlace);
+    }
+
+    @Override
+    public SchoolPlaceAddDTO querySchoolPlace(String orgCode) {
+
+        SchoolPlaceAddDTO schoolPlaceAddDTO = new SchoolPlaceAddDTO();
+
+        AppSite site = appSiteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getOrgCode, orgCode));
+
+        if (ObjectUtils.isEmpty(site)) {return null;}
+
+        AppSitePlace appSitePlace = this.baseMapper.selectOne(Wrappers.<AppSitePlace>lambdaQuery().eq(AppSitePlace::getOrgCode, orgCode));
+
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        schoolPlaceAddDTO
+                .setTenantId(site.getTenantId())
+                .setTeachingDay(site.getTeachingDay())
+                .setNoTeachingDay(site.getNoTeachingDay())
+
+                .setHavePermission(Boolean.FALSE)
+        ;
+
+        if (ObjectUtils.isNotEmpty(appSitePlace)) {
+            schoolPlaceAddDTO
+                    .setCover(appSitePlace.getCover())
+                    .setInsurance(appSitePlace.getInsurance())
+                    .setReminder(appSitePlace.getReminder());
+        }
+
+        if ("admin".equals(loginUser.getRoleCode())){
+            schoolPlaceAddDTO.setHavePermission(Boolean.TRUE);
+        }
+
+        return schoolPlaceAddDTO;
+    }
+
     /**
      * 权限校验
      *

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

@@ -1,11 +1,12 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.modules.system.app.entity.AppSitePriceRules;
 import org.jeecg.modules.system.app.mapper.AppSitePriceRulesMapper;
 import org.jeecg.modules.system.app.service.IAppSitePriceRulesService;
 import org.springframework.stereotype.Service;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
 
 /**
  * @Description: 场地价格规则表
@@ -17,4 +18,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 public class AppSitePriceRulesServiceImpl extends ServiceImpl<AppSitePriceRulesMapper, AppSitePriceRules> implements IAppSitePriceRulesService {
 
 
+    @Override
+    public int insertList(List<AppSitePriceRules> appSitePriceRulesList) {
+        return baseMapper.insertList(appSitePriceRulesList);
+    }
 }

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

@@ -1,11 +1,14 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
+import org.jeecg.modules.system.app.dto.AppTeachingTimeDTO;
 import org.jeecg.modules.system.app.entity.AppTeachingTime;
 import org.jeecg.modules.system.app.mapper.AppTeachingTimeMapper;
 import org.jeecg.modules.system.app.service.IAppTeachingTimeService;
 import org.springframework.stereotype.Service;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
 
 /**
  * @Description: 教学/非教学维护表
@@ -16,4 +19,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class AppTeachingTimeServiceImpl extends ServiceImpl<AppTeachingTimeMapper, AppTeachingTime> implements IAppTeachingTimeService {
 
+    @Override
+    public List<AppTeachingTimeDTO> queryListByTenantId(String tenantId) {
+
+        List<AppTeachingTimeDTO> dtoList = baseMapper.queryListByTenantId(tenantId);
+        if (ObjectUtils.isNotEmpty(dtoList)) {
+            return dtoList;
+        }
+        return List.of();
+    }
 }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 652 - 518
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels