From b1fb83530b7105e4aa73e4101727dea945eb01c2 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 29 八月 2025 21:48:15 +0800
Subject: [PATCH] bug修改
---
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 696 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 649 insertions(+), 47 deletions(-)
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
index 786a631..2bd5d02 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
@@ -3,22 +3,23 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dsh.course.entity.CoursePackageScheduling;
-import com.dsh.course.entity.CoursePackageStudent;
-import com.dsh.course.entity.TCoursePackage;
+import com.dsh.course.controller.CoursePackagePaymentController;
+import com.dsh.course.entity.*;
+import com.dsh.course.feignclient.account.StudentClient;
+import com.dsh.course.feignclient.account.model.Student;
+import com.dsh.course.feignclient.account.model.TStudent;
import com.dsh.course.mapper.CoursePackageSchedulingMapper;
+import com.dsh.course.mapper.CoursePackageStudentMapper;
import com.dsh.course.model.QueryCoursePackageSchedulingList;
-import com.dsh.course.service.CoursePackageStudentService;
-import com.dsh.course.service.ICoursePackageSchedulingService;
+import com.dsh.course.model.vo.response.AppUserVideoResponse;
+import com.dsh.course.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* @author zhibing.pu
@@ -36,12 +37,28 @@
@Resource
private CoursePackageSchedulingMapper coursePackageSchedulingMapper;
+ @Autowired
+ private TCoursePackagePaymentService packagePaymentService;
+ @Autowired
+ private ICoursePackageOrderService coursePackageOrderService;
+ @Autowired
+ private ICoursePackageOrderStudentService coursePackageOrderStudentService;
+
+ @Resource
+ private CoursePackageStudentMapper coursePackageStudentMapper;
+
+ @Resource
+ private StudentClient studentClient;
+
+ @Autowired
+ private CourseCounsumService courseCounsumService;
/**
* 获取课包排课数据
+ *
* @param page
* @param queryCoursePackageSchedulingList
* @return
@@ -53,11 +70,23 @@
Long id = Long.valueOf(map.get("id").toString());
int count = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", id).eq("reservationStatus", 1));
// map.put("registered", count);
- int count1 = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", id).eq("signInOrNot", 1));
+ int count1 = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", id).eq("reservationStatus", 1));
int count2 = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", id).eq("reservationStatus", 0));
- map.put("registered", count2);
- map.put("actualArrival", count1);
- map.put("nonArrival", count - count1);
+
+ CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingMapper.selectById(id);
+
+ List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingMapper.selectList(new QueryWrapper<CoursePackageScheduling>().eq("classDate", coursePackageScheduling.getClassDate()).eq("coursePackageId", coursePackageScheduling.getCoursePackageId()));
+ List<Long> scs = new ArrayList<>();
+ for (CoursePackageScheduling packageScheduling : coursePackageSchedulings) {
+ scs.add(packageScheduling.getId());
+ }
+ int res = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().in("coursePackageSchedulingId", scs).eq("signInOrNot", 2));
+ int act = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().in("coursePackageSchedulingId", scs).eq("signInOrNot", 1));
+ int nonArrival = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().in("coursePackageSchedulingId", scs).eq("signInOrNot", 0));
+
+ map.put("registered", res);
+ map.put("actualArrival", act);
+ map.put("nonArrival",nonArrival);
// Integer totalClassHours = (Integer) map.get("totalClassHours");
// Integer laveClassHours = (Integer) map.get("laveClassHours");
// map.put("already",totalClassHours-laveClassHours);
@@ -68,39 +97,7 @@
}
- /**
- * 定时添加排课数据
- */
- @Override
- public void taskAddData() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- List<TCoursePackage> list = coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("status", 2).eq("auditStatus", 2).eq("state", 1));
- for (TCoursePackage tCoursePackage : list) {
- CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingMapper.selectOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", tCoursePackage.getId()).last(" order by classDate desc limit 0, 1"));
- Calendar calendar = Calendar.getInstance();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- if(null != coursePackageScheduling){
- calendar.setTime(sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00"));
- calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
- }else{
- calendar.setTime(sdf1.parse(sdf.format(new Date()) + " 00:00:00"));
- }
- coursePackageScheduling = new CoursePackageScheduling();
- coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
- coursePackageScheduling.setClassDate(calendar.getTime());
- coursePackageScheduling.setStatus(1);
- coursePackageSchedulingMapper.insert(coursePackageScheduling);
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }).start();
- }
+
/**
@@ -119,7 +116,7 @@
coursePackageSchedulingMapper.updateById(coursePackageScheduling);
TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId());
- if(coursePackage.getStatus() == 1){
+ if (null != coursePackage && coursePackage.getStatus() == 1) {
coursePackage.setStatus(2);
coursePackageService.updateById(coursePackage);
}
@@ -135,4 +132,609 @@
}
}).start();
}
+
+ @Override
+ public List<AppUserVideoResponse> queryAll(List<Long> longs) {
+
+ if (longs.size() > 0) {
+ List<AppUserVideoResponse> appUserVideoResponses = this.baseMapper.queryAll(longs);
+
+ for (AppUserVideoResponse appUserVideoRespon : appUserVideoResponses) {
+ if (appUserVideoRespon.getVideoId() != null) {
+ if (this.baseMapper.isHave(appUserVideoRespon.getVideoId()) > 0) {
+ appUserVideoRespon.setStudyStatus(2);
+ } else {
+ appUserVideoRespon.setStudyStatus(1);
+ }
+ }
+ }
+
+ return appUserVideoResponses;
+
+ } else return null;
+
+ }
+
+
+ /**
+ * 每周一凌晨定时添加排课数据
+ */
+ @Override
+ public void taskCoursePackageScheduling() {
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ List<TCoursePackage> list2 = coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("status", 2).eq("auditStatus", 2)
+ .eq("state", 1).eq("type", 1));
+ List<Integer> collect = list2.stream().map(TCoursePackage::getId).collect(Collectors.toList());
+ if(collect.size() == 0){
+ return;
+ }
+ List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+ .eq("status", 1)
+ .eq("state", 1)
+ .gt("useTime", "now()")
+ .gt("laveClassHours", 0)
+ .in("coursePackageId", collect)
+ );
+ for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
+ CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>()
+ .eq("appUserId", coursePackageOrderStudent.getAppUserId())
+ .eq("studentId", coursePackageOrderStudent.getStudentId())
+ .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+ .eq("status", 1)
+ .orderByDesc("classDate")
+ .last(" limit 0, 1")
+ );
+ Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId());
+ Date validity = student.getValidity();
+ TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId());
+ //上课星期
+ String classWeeks = coursePackage.getClassWeeks();
+ List<Integer> week = week(classWeeks);
+ //新排课的开始日期
+ Calendar start = Calendar.getInstance();
+ if(null != coursePackageScheduling){
+ Date classDate = coursePackageScheduling.getClassDate();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(classDate);
+ calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+ start = calendar;
+ }
+ //需要排课的天数
+ int day_week = start.get(Calendar.DAY_OF_WEEK);
+ day_week = day_week - 1 == 0 ? 7 : day_week - 1;
+ Integer num = 8 - day_week + 7;
+
+ String classStartTime = coursePackage.getClassStartTime();
+ String classEndTime = coursePackage.getClassEndTime();
+ String[] split = classStartTime.split(",");
+ String[] split1 = classEndTime.split(",");
+ //有效期
+ Date useTime = coursePackageOrderStudent.getUseTime();
+ //剩余课时(需要扣除已排课但是还未上课的数据)
+ Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+ int count = this.count(new QueryWrapper<CoursePackageScheduling>()
+ .eq("appUserId", coursePackageOrderStudent.getAppUserId())
+ .eq("studentId", coursePackageOrderStudent.getStudentId())
+ .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+ .eq("status", 1)
+ .eq("type", 1)
+ );
+ Integer codeTime = coursePackage.getCodeTime();
+ laveClassHours -= count;
+ //剩余数量不足以排课
+ if (laveClassHours.compareTo(codeTime) < 0) {
+ break;
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ //生成一周的排课数据
+ for (int i = 0; i < num; i++) {
+ String s = sdf.format(start.getTime());
+
+ //判断当天是否在排课星期内
+ int day = start.get(Calendar.DAY_OF_WEEK);
+ day = day - 1 == 0 ? 7 : day - 1;
+ if (!week.contains(day)) {
+ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
+ continue;
+ }
+ //大于有效期不进行排课
+ if (start.getTimeInMillis() >= validity.getTime()) {
+ break;
+ }
+ for (int j = 0; j < split.length; j++) {
+ //剩余数量不足以排课
+ if (laveClassHours.compareTo(codeTime) < 0) {
+ break;
+ }
+ //减少剩余课时数量
+ laveClassHours -= codeTime;
+ //开始组装排课数据
+ CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+ packageScheduling.setType(1);
+ packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+ packageScheduling.setCoursePackageId(coursePackage.getId());
+ try {
+ Date parse = format.parse(s + " " + split[j]);
+ Date parse1 = format.parse(s + " " + split1[j]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ packageScheduling.setStatus(1);
+ this.save(packageScheduling);
+
+ CoursePackageStudent student1 = new CoursePackageStudent();
+ student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ student1.setStudentId(coursePackageOrderStudent.getStudentId());
+ student1.setCoursePackageId(coursePackage.getId());
+ student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+ student1.setCoursePackageSchedulingId(packageScheduling.getId());
+ student1.setSignInOrNot(1);
+ student1.setReservationStatus(1);
+ student1.setInsertTime(new Date());
+ student1.setType(1);
+ coursePackageStudentMapper.insert(student1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+ }
+ }
+
+
+
+ private List<Integer> week(String week) {
+ String[] split = week.split(";");
+ ArrayList<Integer> integers = new ArrayList<>();
+ for (String s : split) {
+ switch (s) {
+ case "周一":
+ integers.add(1);
+ break;
+ case "周二":
+ integers.add(2);
+ break;
+ case "周三":
+ integers.add(3);
+ break;
+ case "周四":
+ integers.add(4);
+ break;
+ case "周五":
+ integers.add(5);
+ break;
+ case "周六":
+ integers.add(6);
+ break;
+ case "周日":
+ integers.add(7);
+ break;
+ }
+ }
+ return integers;
+ }
+
+
+ /**
+ * 处理剩余课时已经全部排完课后临时增加课时后添加排课
+ * @param coursePackageOrderStudentId
+ */
+ @Override
+ public void addNewCoursePackageScheduling(Long coursePackageOrderStudentId, Integer classNumber) {
+ try {
+ CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getById(coursePackageOrderStudentId);
+ CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>()
+ .eq("appUserId", coursePackageOrderStudent.getAppUserId())
+ .eq("studentId", coursePackageOrderStudent.getStudentId())
+ .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+ .eq("status", 1)
+ .orderByDesc("classDate")
+ .last(" limit 0, 1")
+ );
+ TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId());
+ Integer codeTime = coursePackage.getCodeTime();
+ Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+ Student student = studentClient.queryStudentById(coursePackageOrderStudent.getStudentId());
+ Date validity = student.getValidity();
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ int day_week = calendar.get(Calendar.DAY_OF_WEEK);
+ day_week = day_week - 1 == 0 ? 7 : day_week - 1;
+ calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 7 - day_week);
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
+ calendar.set(Calendar.MINUTE, 59);
+ calendar.set(Calendar.SECOND, 59);
+
+ //新有效期
+ Calendar calendar1 = Calendar.getInstance();
+ calendar1.setTime(coursePackageOrderStudent.getUseTime());
+ calendar1.set(Calendar.DAY_OF_YEAR, calendar1.get(Calendar.DAY_OF_YEAR) + classNumber);
+ Date useTime = calendar1.getTime();
+
+ //剩余课时已不足以继续排课,且最后一次的排课时间是在本周(因为定时任务会周一凌晨去继续进行排课处理
+ // 如果最后一次排课时间不是本周,则直接增加剩余课时,剩余排课逻辑交由定时任务处理)
+ if(0 == laveClassHours){
+ //从第二天开始
+ Calendar startTime = Calendar.getInstance();
+ startTime.setTime(new Date());
+ startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
+ startTime.set(Calendar.HOUR_OF_DAY, 0);
+ startTime.set(Calendar.MINUTE, 0);
+ startTime.set(Calendar.SECOND, 0);
+ int day_week1 = startTime.get(Calendar.DAY_OF_WEEK);
+ day_week1 = day_week1 - 1 == 0 ? 7 : day_week1 - 1;
+ int num = 8 - day_week1 + 7;
+
+ //上课星期
+ String classWeeks = coursePackage.getClassWeeks();
+ List<Integer> week = week(classWeeks);
+ //新剩余课时
+ laveClassHours += classNumber;
+
+ String classStartTime = coursePackage.getClassStartTime();
+ String classEndTime = coursePackage.getClassEndTime();
+ String[] split = classStartTime.split(",");
+ String[] split1 = classEndTime.split(",");
+ for (int i = 0; i < num; i++) {
+ Date time1 = startTime.getTime();
+
+ //判断当天是否在排课星期内
+ int day = startTime.get(Calendar.DAY_OF_WEEK);
+ day = day - 1 == 0 ? 7 : day - 1;
+ if (!week.contains(day)) {
+ startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
+ continue;
+ }
+
+ //大于有效期不进行排课
+ if (startTime.getTimeInMillis() >= validity.getTime()) {
+ break;
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+ for (int j = 0; j < split.length; j++) {
+ //剩余数量不足以排课
+ if (laveClassHours.compareTo(codeTime) < 0) {
+ break;
+ }
+
+ laveClassHours -= codeTime;
+
+ CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+ packageScheduling.setType(coursePackage.getType());
+ packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+ packageScheduling.setCoursePackageId(coursePackage.getId());
+ Date parse = sdf.parse(sdf1.format(time1) + " " + split[j]);
+ Date parse1 = sdf.parse(sdf1.format(time1) + " " + split1[j]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ packageScheduling.setStatus(1);
+ this.save(packageScheduling);
+ CoursePackageStudent student1 = new CoursePackageStudent();
+ student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ student1.setStudentId(coursePackageOrderStudent.getStudentId());
+ student1.setCoursePackageId(coursePackage.getId());
+ student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+ student1.setCoursePackageSchedulingId(packageScheduling.getId());
+ student1.setSignInOrNot(1);
+ student1.setReservationStatus(1);
+ student1.setInsertTime(new Date());
+ coursePackageStudentMapper.insert(student1);
+ }
+ //增加日期,用于判断
+ startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+
+ }else{
+ Date classDate = new Date();
+
+ if (coursePackageScheduling!=null){
+ classDate = coursePackageScheduling.getClassDate();
+ }
+
+ int count = this.count(new QueryWrapper<CoursePackageScheduling>()
+ .eq("appUserId", coursePackageOrderStudent.getAppUserId())
+ .eq("studentId", coursePackageOrderStudent.getStudentId())
+ .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+ .eq("status", 1)
+ );
+
+ Integer number = laveClassHours - count;
+ if((number.compareTo(codeTime) > 0 && calendar.getTimeInMillis() > classDate.getTime())||coursePackageScheduling==null){
+ //从第二天开始
+ Calendar startTime = Calendar.getInstance();
+// startTime.setTime(coursePackageScheduling.getClassDate());
+ startTime.setTime(classDate);
+ startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
+ startTime.set(Calendar.HOUR_OF_DAY, 0);
+ startTime.set(Calendar.MINUTE, 0);
+ startTime.set(Calendar.SECOND, 0);
+ int day_week1 = startTime.get(Calendar.DAY_OF_WEEK);
+ day_week1 = day_week1 - 1 == 0 ? 7 : day_week1 - 1;
+ int num = 8 - day_week1 + 7;
+
+ //上课星期
+ String classWeeks = coursePackage.getClassWeeks();
+ List<Integer> week = week(classWeeks);
+ //新剩余课时
+ number += classNumber;
+
+ //判断最后一天是否所有时段都已排完
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+ String format = sdf.format(classDate);
+ String time = format.substring(0,format.indexOf(" ") + 1);
+ String classStartTime = coursePackage.getClassStartTime();
+ String classEndTime = coursePackage.getClassEndTime();
+ String[] split = classStartTime.split(",");
+ String[] split1 = classEndTime.split(",");
+ int n = Arrays.asList(split).indexOf(time);
+ if(n != split.length - 1){
+ //单独处理剩余没排课的时段
+ n++;
+ for (int i = n; i < split.length; i++) {
+ //剩余数量不足以排课
+ if (number.compareTo(codeTime) < 0) {
+ break;
+ }
+ number -= codeTime;
+ CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+ packageScheduling.setType(coursePackage.getType());
+ packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+ packageScheduling.setCoursePackageId(coursePackage.getId());
+ Date parse = sdf.parse(format.format(time) + " " + split[i]);
+ Date parse1 = sdf.parse(format.format(time) + " " + split1[i]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ packageScheduling.setStatus(1);
+ this.save(packageScheduling);
+ CoursePackageStudent student1 = new CoursePackageStudent();
+ student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ student1.setStudentId(coursePackageOrderStudent.getStudentId());
+ student1.setCoursePackageId(coursePackage.getId());
+ student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+ student1.setCoursePackageSchedulingId(packageScheduling.getId());
+ student1.setSignInOrNot(1);
+ student1.setReservationStatus(1);
+ student1.setInsertTime(new Date());
+ coursePackageStudentMapper.insert(student1);
+ }
+ }
+
+ for (int i = 0; i < num; i++) {
+ Date time1 = startTime.getTime();
+
+ //判断当天是否在排课星期内
+ int day = startTime.get(Calendar.DAY_OF_WEEK);
+ day = day - 1 == 0 ? 7 : day - 1;
+ if (!week.contains(day)) {
+ startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
+ continue;
+ }
+
+ //大于有效期不进行排课
+ if (startTime.getTimeInMillis() >= validity.getTime()) {
+ break;
+ }
+ for (int j = 0; j < split.length; j++) {
+ //剩余数量不足以排课
+ if (number.compareTo(codeTime) < 0) {
+ break;
+ }
+
+ number -= codeTime;
+
+ CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+ packageScheduling.setType(coursePackage.getType());
+ packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+ packageScheduling.setCoursePackageId(coursePackage.getId());
+ Date parse = sdf.parse(sdf1.format(time1) + " " + split[j]);
+ Date parse1 = sdf.parse(sdf1.format(time1) + " " + split1[j]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ packageScheduling.setStatus(1);
+ this.save(packageScheduling);
+ CoursePackageStudent student1 = new CoursePackageStudent();
+ student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ student1.setStudentId(coursePackageOrderStudent.getStudentId());
+ student1.setCoursePackageId(coursePackage.getId());
+ student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+ student1.setCoursePackageSchedulingId(packageScheduling.getId());
+ student1.setSignInOrNot(1);
+ student1.setReservationStatus(1);
+ student1.setInsertTime(new Date());
+ coursePackageStudentMapper.insert(student1);
+ }
+ //增加日期,用于判断
+ startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+ }
+ }
+
+ //开始更新剩余课时和有效期
+ coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + classNumber);
+ coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + classNumber);
+ coursePackageOrderStudent.setUseTime(useTime);
+ coursePackageOrderStudent.setStatus(1);
+ coursePackageOrderStudentService.updateById(coursePackageOrderStudent);
+ if(null == student.getValidity()){
+ student.setValidity(useTime);
+ }else if(student.getValidity().getTime() < useTime.getTime()){
+ student.setValidity(useTime);
+ }
+ studentClient.frozen(student);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * 过时清零排课记录及剩余课时数据
+ */
+ @Override
+ public void taskOverdueClearing() {
+ List<TStudent> tStudents = studentClient.queryExpiredList();
+ for (TStudent tStudent : tStudents) {
+ List<CoursePackageScheduling> list1 = this.list(new QueryWrapper<CoursePackageScheduling>()
+ .eq("type", 1)
+ .eq("studentId", tStudent.getId())
+ .eq("status", 1)
+ );
+ if(list1.size() > 0){
+ List<Long> collect = list1.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList());
+ this.removeByIds(collect);
+ coursePackageStudentMapper.delete(new QueryWrapper<CoursePackageStudent>()
+ .in("coursePackageSchedulingId", collect)
+ );
+ }
+
+ List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+ .eq("studentId", tStudent.getId())
+ .eq("status", 1)
+ .eq("state", 1)
+ );
+ for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
+ CourseCounsum courseCounsum = new CourseCounsum();
+ courseCounsum.setChangeType(0);
+ courseCounsum.setNum(coursePackageOrderStudent.getLaveClassHours());
+ courseCounsum.setReason("有效期结束清楚剩余课时");
+ courseCounsum.setInsertTime(new Date());
+ courseCounsum.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ courseCounsumService.save(courseCounsum);
+ coursePackageOrderStudent.setLaveClassHours(0);
+ }
+ if(list.size() > 0){
+ coursePackageOrderStudentService.updateBatchById(list);
+ }
+ }
+ }
+
+
+ /**
+ * 课程开课后检查排课
+ */
+ @Override
+ public void startAndScheduleClasses(Integer coursePackageId) {
+ List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+ .eq("status", 1)
+ .eq("state", 1)
+ .gt("useTime", "now()")
+ .gt("laveClassHours", 0)
+ .eq("coursePackageId", coursePackageId)
+ );
+
+ for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
+ CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>()
+ .eq("appUserId", coursePackageOrderStudent.getAppUserId())
+ .eq("studentId", coursePackageOrderStudent.getStudentId())
+ .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+ .eq("status", 1)
+ .orderByDesc("classDate")
+ .last(" limit 0, 1")
+ );
+ //当前时间小于最后一次排课时间则交由定时任务排课
+ if(null != coursePackageScheduling && System.currentTimeMillis() <= coursePackageScheduling.getClassDate().getTime()){
+ continue;
+ }
+
+ //当前时间大于最后一次排课时间,表明已经断开了定时任务的排课逻辑,需要从第二天手动排课。后续的排课还是让定时任务排课
+ Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId());
+ Date validity = student.getValidity();
+ TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId());
+ //上课星期
+ String classWeeks = coursePackage.getClassWeeks();
+ List<Integer> week = week(classWeeks);
+ //新排课的开始日期
+ Calendar start = Calendar.getInstance();
+ start.setTime(new Date());
+ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
+ //需要排课的天数
+ int day_week = start.get(Calendar.DAY_OF_WEEK);
+ day_week = day_week - 1 == 0 ? 7 : day_week - 1;
+ Integer num = 8 - day_week + 7;
+
+ String classStartTime = coursePackage.getClassStartTime();
+ String classEndTime = coursePackage.getClassEndTime();
+ String[] split = classStartTime.split(",");
+ String[] split1 = classEndTime.split(",");
+ //有效期
+ Date useTime = coursePackageOrderStudent.getUseTime();
+ //剩余课时(需要扣除已排课但是还未上课的数据)
+ Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+ int count = this.count(new QueryWrapper<CoursePackageScheduling>()
+ .eq("appUserId", coursePackageOrderStudent.getAppUserId())
+ .eq("studentId", coursePackageOrderStudent.getStudentId())
+ .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+ .eq("status", 1)
+ .eq("type", 1)
+ );
+ Integer codeTime = coursePackage.getCodeTime();
+ laveClassHours -= count;
+ //剩余数量不足以排课
+ if (laveClassHours.compareTo(codeTime) < 0) {
+ break;
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ //生成一周的排课数据
+ for (int i = 0; i < num; i++) {
+ String s = sdf.format(start.getTime());
+
+ //判断当天是否在排课星期内
+ int day = start.get(Calendar.DAY_OF_WEEK);
+ day = day - 1 == 0 ? 7 : day - 1;
+ if (!week.contains(day)) {
+ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
+ continue;
+ }
+ //大于有效期不进行排课
+ if (start.getTimeInMillis() >= validity.getTime()) {
+ break;
+ }
+ for (int j = 0; j < split.length; j++) {
+ //剩余数量不足以排课
+ if (laveClassHours.compareTo(codeTime) < 0) {
+ break;
+ }
+ //减少剩余课时数量
+ laveClassHours -= codeTime;
+ //开始组装排课数据
+ CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+ packageScheduling.setType(1);
+ packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+ packageScheduling.setCoursePackageId(coursePackage.getId());
+ try {
+ Date parse = format.parse(s + " " + split[j]);
+ Date parse1 = format.parse(s + " " + split1[j]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ packageScheduling.setStatus(1);
+ this.save(packageScheduling);
+
+ CoursePackageStudent student1 = new CoursePackageStudent();
+ student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+ student1.setStudentId(coursePackageOrderStudent.getStudentId());
+ student1.setCoursePackageId(coursePackage.getId());
+ student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+ student1.setCoursePackageSchedulingId(packageScheduling.getId());
+ student1.setSignInOrNot(1);
+ student1.setReservationStatus(1);
+ student1.setInsertTime(new Date());
+ student1.setType(1);
+ coursePackageStudentMapper.insert(student1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+ }
+ }
}
--
Gitblit v1.7.1