From d643b843cc794d8f59c4ecd04bda2b9d35e5b22a Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期二, 28 十一月 2023 19:54:22 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 349 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 216 insertions(+), 133 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 0f46a7b..b8e875a 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 @@ -68,10 +68,20 @@ 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)); + CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingMapper.selectById(id); - map.put("registered", count2); - map.put("actualArrival", count1); - map.put("nonArrival", count - count1); + 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); @@ -297,161 +307,234 @@ */ @Override public void addNewCoursePackageScheduling(Long 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(); - Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId()); - Date validity = student.getValidity(); + 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(coursePackageScheduling.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 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, 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; //新有效期 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(" ") + 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 (laveClassHours.compareTo(codeTime) < 0) { + //剩余课时已不足以继续排课,且最后一次的排课时间是在本周(因为定时任务会周一凌晨去继续进行排课处理 + // 如果最后一次排课时间不是本周,则直接增加剩余课时,剩余排课逻辑交由定时任务处理) + if(0 == laveClassHours){ + //从第二天开始 + 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; + + 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; } - 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); - } - } + 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; + } - for (int i = 0; i < num; i++) { - Date time1 = startTime.getTime(); + laveClassHours -= codeTime; - //判断当天是否在排课星期内 - 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 (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 { + 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); - }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); } - 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); } - //增加日期,用于判断 - startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1); + + }else{ + Date classDate = coursePackageScheduling.getClassDate(); + 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; + + //判断最后一天是否所有时段都已排完 + 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()); + 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 (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); + } + } } //开始更新剩余课时和有效期 coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + classNumber); coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + classNumber); coursePackageOrderStudent.setUseTime(useTime); + coursePackageOrderStudent.setStatus(1); coursePackageOrderStudentService.updateById(coursePackageOrderStudent); + }catch (Exception e){ + e.printStackTrace(); } } -- Gitblit v1.7.1