From f9ce347bc1325ec05704b1213cdafdd9db8dd578 Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期一, 29 一月 2024 11:25:01 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai --- cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 136 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 127 insertions(+), 9 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 f3f89c2..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 @@ -162,21 +162,19 @@ @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) ); - - List<CoursePackageOrder> list1 = coursePackageOrderService.list(new QueryWrapper<CoursePackageOrder>() - .eq("payStatus", 2) - .eq("status", 1) - .eq("state", 1) - .gt("laveClassHours", 0) - .orderByAsc("insertTime") - ); - for (CoursePackageOrderStudent coursePackageOrderStudent : list) { CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>() .eq("appUserId", coursePackageOrderStudent.getAppUserId()) @@ -615,8 +613,128 @@ 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