puzhibing
2023-11-27 f772c17da4190642f7effdab83de374640265e28
添加周排课的定时任务
3个文件已修改
217 ■■■■ 已修改文件
cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java 204 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java
@@ -26,11 +26,6 @@
    List<Map<String, Object>> queryCoursePackageSchedulingList(Page<Map<String, Object>> page, QueryCoursePackageSchedulingList queryCoursePackageSchedulingList);
    /**
     * 定时任务添加排课数据
     */
    void taskAddData();
    /**
     * 定时修改状态
@@ -40,4 +35,10 @@
    List<AppUserVideoResponse> queryAll(List<Long> longs);
    void cancel();
    /**
     * 每周一凌晨定时添加排课数据
     */
    void taskCoursePackageScheduling();
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
@@ -4,16 +4,12 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.controller.CoursePackagePaymentController;
import com.dsh.course.entity.CoursePackageScheduling;
import com.dsh.course.entity.CoursePackageStudent;
import com.dsh.course.entity.TCoursePackage;
import com.dsh.course.entity.TCoursePackagePayment;
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.TCoursePackagePaymentService;
import com.dsh.course.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -36,6 +32,18 @@
    @Resource
    private CoursePackageSchedulingMapper coursePackageSchedulingMapper;
    @Autowired
    private TCoursePackagePaymentService packagePaymentService;
    @Autowired
    private ICoursePackageOrderService coursePackageOrderService;
    @Autowired
    private ICoursePackageOrderStudentService coursePackageOrderStudentService;
    @Resource
    private CoursePackageStudentMapper coursePackageStudentMapper;
    /**
@@ -69,43 +77,8 @@
    }
    /**
     * 定时添加排课数据
     */
    @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();
    }
    @Autowired
    private TCoursePackagePaymentService packagePaymentService;
    /**
     * 定时修改状态
@@ -191,4 +164,151 @@
        } 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();
            //需要排课的天数
            Integer num = 14;
            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;
                num = 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(coursePackageScheduling.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;
    }
}
cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java
@@ -96,7 +96,7 @@
    @Scheduled(cron = "0 0 23 * * *")
    public void zeroTask() {
        //定时添加排课数据
//        coursePackageSchedulingService.taskAddData();
        coursePackageSchedulingService.taskAddData();
        coursePackageSchedulingService.cancel();
    }
}