浏览代码

1、课程顺延
2、点名无教学点兼容

Joburgess 5 年之前
父节点
当前提交
78327e1360

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -783,6 +783,17 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> findClassGroupCourseSchedules(@Param("classGroupId") Integer classGroupId);
 
     /**
+     * @describe 获取指定班级上指定日期之后的课程
+     * @author Joburgess
+     * @date 2020/1/2
+     * @param classGroupIds: 班级编号,多个逗号分隔
+     * @param fromDate: 开始时间
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     */
+    List<CourseSchedule> findClassGroupCourseSchedulesWithDate(@Param("classGroupIds") String classGroupIds,
+                                                               @Param("fromDate") Date fromDate);
+
+    /**
      * @describe 批量修改乐团下所有课程上的教学点
      * @author Joburgess
      * @date 2019/12/11

+ 56 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CoursePostponeDto.java

@@ -0,0 +1,56 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/1/2
+ */
+public class CoursePostponeDto {
+
+    @ApiModelProperty(value = "班级编号,逗号分隔")
+    private String classGroupIds;
+
+    @ApiModelProperty(value = "课程暂停时间")
+    private Date pauseDate;
+
+    @ApiModelProperty(value = "课程恢复时间")
+    private Date recoveryDate;
+
+    @ApiModelProperty(value = "跳过节假日")
+    private boolean skipHoliday;
+
+    public String getClassGroupIds() {
+        return classGroupIds;
+    }
+
+    public void setClassGroupIds(String classGroupIds) {
+        this.classGroupIds = classGroupIds;
+    }
+
+    public Date getPauseDate() {
+        return pauseDate;
+    }
+
+    public void setPauseDate(Date pauseDate) {
+        this.pauseDate = pauseDate;
+    }
+
+    public Date getRecoveryDate() {
+        return recoveryDate;
+    }
+
+    public void setRecoveryDate(Date recoveryDate) {
+        this.recoveryDate = recoveryDate;
+    }
+
+    public boolean isSkipHoliday() {
+        return skipHoliday;
+    }
+
+    public void setSkipHoliday(boolean skipHoliday) {
+        this.skipHoliday = skipHoliday;
+    }
+}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -195,6 +195,15 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	void vipCourseAdjust(VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo);
 
 	/**
+	 * @describe 课程顺延
+	 * @author Joburgess
+	 * @date 2020/1/2
+	 * @param coursePostPoneInfo:
+	 * @return void
+	 */
+	void coursePostpone(CoursePostponeDto coursePostPoneInfo);
+
+	/**
 	 * @describe vip课批量新增-后端处理
 	 * @author Joburgess
 	 * @date 2019/12/12

+ 51 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -217,13 +217,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Transactional(rollbackFor = Exception.class)
     public void createCourseSchedules(CreateCourseScheduleDto createCourseScheduleDto) {
         List<CourseSchedule> courseSchedules = createCourseScheduleDto.getCourseSchedules();
-        //添加课程计划
-        batchAddCourseSchedule(courseSchedules);
-        //更新课次
-        List<Integer> classGroupIds = courseSchedules.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
-        classGroupService.batchUpdateClassCourseTimes(classGroupIds);
-        //创建学生单节课的缴费记录,乐团课的缴费为0
-        courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentByCourseSchedules(courseSchedules);
+
+        if(!CollectionUtils.isEmpty(courseSchedules)){
+            //添加课程计划
+            batchAddCourseSchedule(courseSchedules);
+            //更新课次
+            List<Integer> classGroupIds = courseSchedules.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
+            classGroupService.batchUpdateClassCourseTimes(classGroupIds);
+            //创建学生单节课的缴费记录,乐团课的缴费为0
+            courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentByCourseSchedules(courseSchedules);
+        }
 
         MusicGroup musicGroup = musicGroupService.get(createCourseScheduleDto.getMusicGroupID());
 
@@ -1084,6 +1087,47 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void coursePostpone(CoursePostponeDto coursePostPoneInfo) {
+        if(StringUtils.isBlank(coursePostPoneInfo.getClassGroupIds())){
+            throw new BizException("请指定班级");
+        }
+        if(Objects.isNull(coursePostPoneInfo.getPauseDate())){
+            throw new BizException("请指定课程暂停时间");
+        }
+        if(Objects.isNull(coursePostPoneInfo.getRecoveryDate())){
+            throw new BizException("请指定课程恢复时间");
+        }
+        //间隔天数
+        int betweenDays = DateUtil.daysBetween(coursePostPoneInfo.getPauseDate(), coursePostPoneInfo.getRecoveryDate());
+        List<CourseSchedule> classGroupCourseSchedulesWithDate = courseScheduleDao.findClassGroupCourseSchedulesWithDate(coursePostPoneInfo.getClassGroupIds(), coursePostPoneInfo.getPauseDate());
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(coursePostPoneInfo.getRecoveryDate());
+
+        Map<String, Integer> holidayDays = new HashMap<>();
+        Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
+
+        for (int i=0;i<classGroupCourseSchedulesWithDate.size();i++) {
+            CourseSchedule courseSchedule=classGroupCourseSchedulesWithDate.get(i);
+            calendar.setTime(courseSchedule.getClassDate());
+            calendar.add(Calendar.DATE, betweenDays);
+            if (coursePostPoneInfo.isSkipHoliday() && !holiday.containsKey(calendar.get(Calendar.YEAR))) {
+                holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
+                holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+            }
+            if (coursePostPoneInfo.isSkipHoliday() && holidayDays.containsKey(DateUtil.format(calendar.getTime(), "MMdd"))) {
+                betweenDays=betweenDays+7;
+                calendar.add(Calendar.DATE, betweenDays);
+                i=i-1;
+                continue;
+            }
+            classGroupCourseSchedulesWithDate.get(i).setClassDate(calendar.getTime());
+        }
+        courseScheduleDao.batchUpdate(classGroupCourseSchedulesWithDate);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void batchAppendVipGroupCourses(VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo) {
         if (Objects.isNull(vipGroupCourseAdjustInfo.getVipGroupId())) {
             throw new BizException("请指定小课");

+ 7 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -187,10 +187,13 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			return;
 		}
 
-		YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(),
-				sysUser.getId().longValue(),
-				true,
-				courseSchedule.getSchoolId().intValue());
+		YesOrNoEnum yesOrNoEnum = YesOrNoEnum.NO;
+		if(Objects.nonNull(courseSchedule.getSchoolId())){
+			yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(),
+					sysUser.getId().longValue(),
+					true,
+					courseSchedule.getSchoolId().intValue());
+		}
 		teacherAttendance.setSignInTime(date);
 		teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 		teacherAttendance.setSignOutTime(date);

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1926,4 +1926,10 @@
             LEFT JOIN sys_user su ON csts.user_id_ = su.id_
         WHERE real_name_ LIKE CONCAT('%',#{search},'%') OR su.id_=#{search}
     </select>
+    <select id="findClassGroupCourseSchedulesWithDate" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule
+        WHERE FIND_IN_SET(class_group_id_,#{classGroupIds})
+        AND CONCAT(class_date_,' ',start_class_time_)&gt;NOW()
+        AND class_date_&gt;=DATE_FORMAT(#{fromDate},"%Y-%m-%d")
+    </select>
 </mapper>

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
+import com.ym.mec.biz.dal.dto.CoursePostponeDto;
 import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
 import com.ym.mec.biz.dal.dto.VipGroupCourseAdjustInfoDto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
@@ -277,4 +278,12 @@ public class CourseScheduleController extends BaseController {
         return succeed(scheduleService.endFindCourseSchedules(queryInfo));
     }
 
+    @ApiOperation(value = "课程顺延")
+    @PostMapping("/coursePostpone")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/coursePostpone')")
+    public Object coursePostpone(CoursePostponeDto coursePostPoneInfo){
+        scheduleService.coursePostpone(coursePostPoneInfo);
+        return succeed();
+    }
+
 }