From aa925d851857f50eff0556411366690d9a78a0e5 Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期一, 27 十一月 2023 17:30:26 +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 | 382 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 334 insertions(+), 48 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 c9b155c..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 @@ -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; @@ -37,12 +33,22 @@ @Resource private CoursePackageSchedulingMapper coursePackageSchedulingMapper; + @Autowired + private TCoursePackagePaymentService packagePaymentService; + @Autowired + private ICoursePackageOrderService coursePackageOrderService; + @Autowired + private ICoursePackageOrderStudentService coursePackageOrderStudentService; + + @Resource + private CoursePackageStudentMapper coursePackageStudentMapper; /** * 获取课包排课数据 + * * @param page * @param queryCoursePackageSchedulingList * @return @@ -56,6 +62,8 @@ // map.put("registered", count); 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)); + + map.put("registered", count2); map.put("actualArrival", count1); map.put("nonArrival", count - count1); @@ -69,43 +77,9 @@ } - /** - * 定时添加排课数据 - */ - @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; + /** * 定时修改状态 */ @@ -118,7 +92,7 @@ Date now = new Date(); List<Long> pays = new ArrayList<>(); for (TCoursePackagePayment coursePackagePayment : list) { - if (now.before(coursePackagePayment.getUseTime())){ + if (now.before(coursePackagePayment.getUseTime())) { pays.add(coursePackagePayment.getId()); } } @@ -129,7 +103,7 @@ scs.add(coursePackageStudent.getCoursePackageSchedulingId()); } coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays)); - coursePackageSchedulingMapper.delete(new QueryWrapper<CoursePackageScheduling>().in("id",scs)); + coursePackageSchedulingMapper.delete(new QueryWrapper<CoursePackageScheduling>().in("id", scs)); } @@ -152,7 +126,7 @@ coursePackageSchedulingMapper.updateById(coursePackageScheduling); TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId()); - if(coursePackage.getStatus() == 1){ + if (coursePackage.getStatus() == 1) { coursePackage.setStatus(2); coursePackageService.updateById(coursePackage); } @@ -172,7 +146,7 @@ @Override public List<AppUserVideoResponse> queryAll(List<Long> longs) { - if (longs.size()>0) { + if (longs.size() > 0) { List<AppUserVideoResponse> appUserVideoResponses = this.baseMapper.queryAll(longs); for (AppUserVideoResponse appUserVideoRespon : appUserVideoResponses) { @@ -187,7 +161,319 @@ return appUserVideoResponses; - }else return null; - + } 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(); + 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; + } + //需要排课的天数 + 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) + ); + 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(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); + } + } + } + + + + 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; + } + + + /** + * 处理剩余课时已经全部排完课后临时增加课时后添加排课 + * @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