From 331f26c7c15716ea60d37745235919b201a4c0fa Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期一, 27 十一月 2023 16:05:21 +0800 Subject: [PATCH] 添加周排课的定时任务 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 171 insertions(+), 6 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 d76812b..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 @@ -193,16 +193,18 @@ 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; } + //需要排课的天数 + 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(","); @@ -244,7 +246,7 @@ } //减少剩余课时数量 laveClassHours -= codeTime; - + //开始组装排课数据 CoursePackageScheduling packageScheduling = new CoursePackageScheduling(); packageScheduling.setType(1); packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId()); @@ -263,7 +265,7 @@ student1.setStudentId(coursePackageOrderStudent.getStudentId()); student1.setCoursePackageId(coursePackage.getId()); student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId()); - student1.setCoursePackageSchedulingId(coursePackageScheduling.getId()); + student1.setCoursePackageSchedulingId(packageScheduling.getId()); student1.setSignInOrNot(1); student1.setReservationStatus(1); student1.setInsertTime(new Date()); @@ -276,7 +278,6 @@ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); } } - } @@ -311,4 +312,168 @@ } 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