From eb6b6dbb35a9f029e0b7d269773685c19fd40976 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 11 七月 2024 10:47:51 +0800 Subject: [PATCH] 玩湃微信商户认证代码 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java | 563 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 412 insertions(+), 151 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 2288be4..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 @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.controller.CoursePackagePaymentController; import com.dsh.course.entity.*; +import com.dsh.course.feignclient.account.StudentClient; +import com.dsh.course.feignclient.account.model.Student; +import com.dsh.course.feignclient.account.model.TStudent; import com.dsh.course.mapper.CoursePackageSchedulingMapper; import com.dsh.course.mapper.CoursePackageStudentMapper; import com.dsh.course.model.QueryCoursePackageSchedulingList; @@ -16,6 +19,7 @@ import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -45,6 +49,12 @@ @Resource private CoursePackageStudentMapper coursePackageStudentMapper; + @Resource + private StudentClient studentClient; + + @Autowired + private CourseCounsumService courseCounsumService; + /** * 获取课包排课数据 @@ -63,10 +73,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); @@ -84,36 +104,6 @@ * 定时修改状态 */ @Override - public void cancel() { - new Thread(new Runnable() { - @Override - public void run() { - 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()); - } - } - - 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(); - } - - /** - * 定时修改状态 - */ - @Override public void taskSetStatus() { new Thread(new Runnable() { @Override @@ -126,7 +116,7 @@ coursePackageSchedulingMapper.updateById(coursePackageScheduling); TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId()); - if (coursePackage.getStatus() == 1) { + if (null != coursePackage && coursePackage.getStatus() == 1) { coursePackage.setStatus(2); coursePackageService.updateById(coursePackage); } @@ -172,11 +162,18 @@ @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) ); for (CoursePackageOrderStudent coursePackageOrderStudent : list) { CoursePackageScheduling coursePackageScheduling = this.getOne(new QueryWrapper<CoursePackageScheduling>() @@ -187,6 +184,8 @@ .orderByDesc("classDate") .last(" limit 0, 1") ); + Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId()); + Date validity = student.getValidity(); TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId()); //上课星期 String classWeeks = coursePackage.getClassWeeks(); @@ -220,9 +219,12 @@ .eq("status", 1) .eq("type", 1) ); - laveClassHours -= count; - Integer codeTime = coursePackage.getCodeTime(); + laveClassHours -= count; + //剩余数量不足以排课 + if (laveClassHours.compareTo(codeTime) < 0) { + break; + } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //生成一周的排课数据 for (int i = 0; i < num; i++) { @@ -236,7 +238,7 @@ continue; } //大于有效期不进行排课 - if (start.getTimeInMillis() >= useTime.getTime()) { + if (start.getTimeInMillis() >= validity.getTime()) { break; } for (int j = 0; j < split.length; j++) { @@ -320,114 +322,379 @@ */ @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(); + 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(coursePackageOrderStudent.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, 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(" ")); + //剩余课时已不足以继续排课,且最后一次的排课时间是在本周(因为定时任务会周一凌晨去继续进行排课处理 + // 如果最后一次排课时间不是本周,则直接增加剩余课时,剩余排课逻辑交由定时任务处理) + if(0 == laveClassHours){ + //从第二天开始 + 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; + + 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; + } + 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; + } + + 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); + } + + }else{ + Date classDate = new Date(); + + if (coursePackageScheduling!=null){ + classDate = coursePackageScheduling.getClassDate(); + } + + int count = this.count(new QueryWrapper<CoursePackageScheduling>() + .eq("appUserId", coursePackageOrderStudent.getAppUserId()) + .eq("studentId", coursePackageOrderStudent.getStudentId()) + .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()) + .eq("status", 1) + ); + + Integer number = laveClassHours - count; + if((number.compareTo(codeTime) > 0 && calendar.getTimeInMillis() > classDate.getTime())||coursePackageScheduling==null){ + //从第二天开始 + Calendar startTime = Calendar.getInstance(); +// startTime.setTime(coursePackageScheduling.getClassDate()); + startTime.setTime(classDate); + 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); + //新剩余课时 + number += classNumber; + + //判断最后一天是否所有时段都已排完 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + String format = sdf.format(classDate); + String time = format.substring(0,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 (number.compareTo(codeTime) < 0) { + break; + } + number -= 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 (number.compareTo(codeTime) < 0) { + break; + } + + number -= 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); + if(null == student.getValidity()){ + student.setValidity(useTime); + }else if(student.getValidity().getTime() < useTime.getTime()){ + student.setValidity(useTime); + } + studentClient.frozen(student); + }catch (Exception e){ + e.printStackTrace(); + } + } + + + /** + * 过时清零排课记录及剩余课时数据 + */ + @Override + public void taskOverdueClearing() { + List<TStudent> tStudents = studentClient.queryExpiredList(); + for (TStudent tStudent : tStudents) { + List<CoursePackageScheduling> list1 = this.list(new QueryWrapper<CoursePackageScheduling>() + .eq("type", 1) + .eq("studentId", tStudent.getId()) + .eq("status", 1) + ); + if(list1.size() > 0){ + List<Long> collect = list1.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList()); + this.removeByIds(collect); + coursePackageStudentMapper.delete(new QueryWrapper<CoursePackageStudent>() + .in("coursePackageSchedulingId", collect) + ); + } + + List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() + .eq("studentId", tStudent.getId()) + .eq("status", 1) + .eq("state", 1) + ); + for (CoursePackageOrderStudent coursePackageOrderStudent : list) { + CourseCounsum courseCounsum = new CourseCounsum(); + courseCounsum.setChangeType(0); + courseCounsum.setNum(coursePackageOrderStudent.getLaveClassHours()); + courseCounsum.setReason("有效期结束清楚剩余课时"); + courseCounsum.setInsertTime(new Date()); + courseCounsum.setAppUserId(coursePackageOrderStudent.getAppUserId()); + courseCounsumService.save(courseCounsum); + coursePackageOrderStudent.setLaveClassHours(0); + } + if(list.size() > 0){ + 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(","); - 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); - } + //有效期 + 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++) { - Date time1 = startTime.getTime(); + String s = sdf.format(start.getTime()); //判断当天是否在排课星期内 - int day = startTime.get(Calendar.DAY_OF_WEEK); + int day = start.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); + start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); continue; } - //大于有效期不进行排课 - if (startTime.getTimeInMillis() >= useTime.getTime()) { + if (start.getTimeInMillis() >= validity.getTime()) { break; } for (int j = 0; j < split.length; j++) { @@ -435,45 +702,39 @@ if (laveClassHours.compareTo(codeTime) < 0) { break; } - + //减少剩余课时数量 laveClassHours -= codeTime; - + //开始组装排课数据 CoursePackageScheduling packageScheduling = new CoursePackageScheduling(); - packageScheduling.setType(coursePackage.getType()); + packageScheduling.setType(1); 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]); + Date parse = format.parse(s + " " + split[j]); + Date parse1 = format.parse(s + " " + split1[j]); packageScheduling.setClassDate(parse); packageScheduling.setEndDate(parse1); - }catch (Exception e){ + 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(); } - 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); + start.set(Calendar.DAY_OF_YEAR, start.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