From f8521034c5007b11bf00040e101bcf21195dfeb8 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 27 十一月 2023 16:49:04 +0800
Subject: [PATCH] 后台
---
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 412 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 367 insertions(+), 45 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 81710e7..c4797d5 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,23 +3,19 @@
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.mapper.CoursePackageSchedulingMapper;
+import com.dsh.course.mapper.CoursePackageStudentMapper;
import com.dsh.course.model.QueryCoursePackageSchedulingList;
import com.dsh.course.model.vo.response.AppUserVideoResponse;
-import com.dsh.course.service.CoursePackageStudentService;
-import com.dsh.course.service.ICoursePackageSchedulingService;
+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.*;
/**
* @author zhibing.pu
@@ -37,12 +33,22 @@
@Resource
private CoursePackageSchedulingMapper coursePackageSchedulingMapper;
+ @Autowired
+ private TCoursePackagePaymentService packagePaymentService;
+ @Autowired
+ private ICoursePackageOrderService coursePackageOrderService;
+ @Autowired
+ private ICoursePackageOrderStudentService coursePackageOrderStudentService;
+
+ @Resource
+ private CoursePackageStudentMapper coursePackageStudentMapper;
/**
* 获取课包排课数据
+ *
* @param page
* @param queryCoursePackageSchedulingList
* @return
@@ -56,6 +62,8 @@
// map.put("registered", count);
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);
@@ -69,40 +77,38 @@
}
+
+
+
/**
- * 定时添加排课数据
+ * 定时修改状态
*/
@Override
- public void taskAddData() {
+ public void cancel() {
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);
+ List<TCoursePackagePayment> list = packagePaymentService.list();
+ Date now = new Date();
+ List<Long> pays = new ArrayList<>();
+ for (TCoursePackagePayment coursePackagePayment : list) {
+ if (now.before(coursePackagePayment.getUseTime())) {
+ pays.add(coursePackagePayment.getId());
}
- }catch (Exception e){
- e.printStackTrace();
}
+
+ List<CoursePackageStudent> coursePackagePaymentId = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays));
+ List<Long> scs = new ArrayList<>();
+ for (CoursePackageStudent coursePackageStudent : coursePackagePaymentId) {
+ scs.add(coursePackageStudent.getCoursePackageSchedulingId());
+ }
+ coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays));
+ coursePackageSchedulingMapper.delete(new QueryWrapper<CoursePackageScheduling>().in("id", scs));
+
+
}
}).start();
}
-
/**
* 定时修改状态
@@ -120,7 +126,7 @@
coursePackageSchedulingMapper.updateById(coursePackageScheduling);
TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId());
- if(coursePackage.getStatus() == 1){
+ if (coursePackage.getStatus() == 1) {
coursePackage.setStatus(2);
coursePackageService.updateById(coursePackage);
}
@@ -138,20 +144,336 @@
}
@Override
- public List<AppUserVideoResponse> queryAll() {
- List<AppUserVideoResponse> appUserVideoResponses = this.baseMapper.queryAll();
+ public List<AppUserVideoResponse> queryAll(List<Long> longs) {
- for (AppUserVideoResponse appUserVideoRespon : appUserVideoResponses) {
- if (this.baseMapper.isHave(appUserVideoRespon.getVideoId())){
- appUserVideoRespon.setStudyStatus(1);
- }else {
- appUserVideoRespon.setStudyStatus(0);
+ 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<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+ .eq("status", 1)
+ .eq("state", 1)
+ .gt("useTime", "now()")
+ .gt("laveClassHours", 0)
+ );
+ 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")
+ );
+ 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)
+ );
+ laveClassHours -= count;
+
+ Integer codeTime = coursePackage.getCodeTime();
+ 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() >= useTime.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);
}
}
-
- return appUserVideoResponses;
-
-
-
+ }
+
+
+
+ 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(Integer coursePackageOrderStudentId, Integer classNumber) {
+ 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();
+ Date classDate = coursePackageScheduling.getClassDate();
+
+ 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);
+
+ //剩余课时已不足以继续排课,且最后一次的排课时间是在本周(因为定时任务会周一凌晨去继续进行排课处理
+ // 如果最后一次排课时间不是本周,则直接增加剩余课时,剩余排课逻辑交由定时任务处理)
+ if(codeTime.compareTo(laveClassHours) > 0 && calendar.getTimeInMillis() > classDate.getTime()){
+ //从第二天开始
+ Calendar startTime = Calendar.getInstance();
+ startTime.setTime(new Date());
+ startTime.set(Calendar.DAY_OF_YEAR, calendar.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;
+ //新有效期
+ 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();
+
+ //判断最后一天是否所有时段都已排完
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+ String format = sdf.format(coursePackageScheduling.getClassDate());
+ String time = format.substring(format.indexOf(" "));
+ 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 (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());
+ try {
+ Date parse = sdf.parse(format.format(time) + " " + split[i]);
+ Date parse1 = sdf.parse(format.format(time) + " " + split1[i]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ 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() >= useTime.getTime()) {
+ break;
+ }
+ 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());
+ try {
+ Date parse = sdf.parse(sdf1.format(time1) + " " + split[j]);
+ Date parse1 = sdf.parse(sdf1.format(time1) + " " + split1[j]);
+ packageScheduling.setClassDate(parse);
+ packageScheduling.setEndDate(parse1);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ 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);
+ coursePackageOrderStudentService.updateById(coursePackageOrderStudent);
+ }
+
}
}
--
Gitblit v1.7.1