From 1d9f7b0cf4251f3058badb07dd7a2bc06b6bc09a Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 11 四月 2025 10:05:32 +0800 Subject: [PATCH] bug修改 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java | 235 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 221 insertions(+), 14 deletions(-) diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java index 00bc62d..691b95e 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java @@ -60,6 +60,9 @@ @Autowired private TCoursePackageService coursePackageService; + @Resource + private CoursePackageStudentMapper coursePackageStudentMapper; + @Override @@ -192,7 +195,7 @@ public List<Integer> getIds(Integer siteId) { - HttpRequest httpRequest = HttpRequest.get("https://try.daowepark.com/v7/user_api/general/get_space_area?space_id=" + siteId); + HttpRequest httpRequest = HttpRequest.get("https://port.daowepark.com/v7/user_api/general/get_space_area?space_id=" + siteId); HttpResponse execute = httpRequest.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); @@ -216,7 +219,7 @@ * @return */ @Override - public boolean deductionClassHour(DeductionClassHourList deductionClassHourList) { + public DeductionClassHourList deductionClassHour(DeductionClassHourList deductionClassHourList) { try { List<DeductionClassHour> list = deductionClassHourList.getDeductionClassHourList(); for (DeductionClassHour deductionClassHour : list) { @@ -229,30 +232,40 @@ Integer codeTime = coursePackage.getCodeTime(); //未上的排课数据 List<CoursePackageScheduling> packageSchedulings = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>().eq("studentId", coursePackageOrderStudent.getStudentId()) - .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).eq("status", 1).orderByDesc("classDate")); - //排课使用的总课时 + .eq("type", 1).eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).eq("status", 1).orderByDesc("classDate")); + //已经排课的总课时 int classHour = packageSchedulings.size() * codeTime; //未排课的课时 int notClass = laveClassHours - classHour; + /** + * 1、查询剩余已经排课的数据 + * 2、判断 剩余课时- 未上排课 = 可扣减 -->是否满足扣减 + * --->满足扣减,直接减去剩余课时 + * --->不满足扣减,需要计算出删除的排课节数(注意每节消耗的课时数),然后减去剩余课时 + */ + //判断是否需要删除排课数据 if(notClass < deductionClassHour.getClassHour()){ + //计算需要删除的排课数量 int clss = deductionClassHour.getClassHour() - notClass; int n = clss % codeTime; - int l = 0; + int num = clss / codeTime; //不整除的情况,需要多删除一节排课,回加差额课时。 if(n != 0){ - n += 1; - l = (codeTime * n) - clss; + num += 1; } - coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + l); - //删除已排的课程 - List<CoursePackageScheduling> coursePackageSchedulings = packageSchedulings.subList(0, n); + List<CoursePackageScheduling> coursePackageSchedulings = packageSchedulings.subList(0, num); List<Long> collect = coursePackageSchedulings.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList()); - coursePackageSchedulingService.removeByIds(collect); + if(collect.size() > 0){ + coursePackageSchedulingService.removeByIds(collect); + coursePackageStudentMapper.delete(new QueryWrapper<CoursePackageStudent>().in("coursePackageSchedulingId", collect)); + } + deductionClassHour.setScheduledCourses(num); + }else{ + deductionClassHour.setScheduledCourses(0); } - this.updateById(coursePackageOrderStudent); CourseCounsum courseCounsum = new CourseCounsum(); @@ -264,10 +277,204 @@ courseCounsum.setAppUserId(coursePackageOrderStudent.getAppUserId()); courseCounsumService.save(courseCounsum); } - return true; + return deductionClassHourList; }catch (Exception e){ e.printStackTrace(); } - return false; + return null; + } + + + /** + * 回退课时和回退排课数据 + * @param deductionClassHourList + */ + @Override + public void backspaceClassHour(DeductionClassHourList deductionClassHourList) { + List<DeductionClassHour> list = deductionClassHourList.getDeductionClassHourList(); + for (DeductionClassHour deductionClassHour : list) { + CoursePackageOrderStudent coursePackageOrderStudent = this.getById(deductionClassHour.getId()); + Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); + coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + deductionClassHour.getClassHour()); + this.updateById(coursePackageOrderStudent); + + CourseCounsum courseCounsum = new CourseCounsum(); + courseCounsum.setPaymentId(coursePackageOrderStudent.getId()); + courseCounsum.setChangeType(1); + courseCounsum.setNum(deductionClassHour.getClassHour()); + courseCounsum.setInsertTime(new Date()); + courseCounsum.setReason("取消社区世界杯报名"); + courseCounsum.setAppUserId(coursePackageOrderStudent.getAppUserId()); + courseCounsumService.save(courseCounsum); + + + //需要排课的节数 + Integer scheduledCourses = deductionClassHour.getScheduledCourses(); + if(scheduledCourses > 0){ + TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId()); + Integer codeTime = coursePackage.getCodeTime(); + CoursePackageScheduling one = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().eq("studentId", coursePackageOrderStudent.getStudentId()) + .eq("type", 1).eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).eq("status", 1) + .orderByDesc("classDate").last(" limit 0, 1")); + + //上课星期 + String classWeeks = coursePackage.getClassWeeks(); + List<Integer> week = week(classWeeks); + //新排课的开始日期 + Calendar start = Calendar.getInstance(); + String classStartTime = coursePackage.getClassStartTime(); + String classEndTime = coursePackage.getClassEndTime(); + String[] split = classStartTime.split(","); + String[] split1 = classEndTime.split(","); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //计算剩余课时最大排课节数 + int num = laveClassHours / codeTime; + //比较除哪个最小以哪个来确定排课节数 + num = num > scheduledCourses ? scheduledCourses : num; + + //先检查当前是都还有需要排课的 + if(null != one){ + Date classDate = one.getClassDate(); + + Calendar calendar = Calendar.getInstance(); + calendar.setTime(classDate); + String s = sdf.format(calendar.getTime()); + + for (int j = 0; j < split.length; j++) { + Date parse = null; + Date parse1 = null; + try { + parse = format.parse(s + " " + split[j]); + parse1 = format.parse(s + " " + split1[j]); + } catch (ParseException e) { + throw new RuntimeException(e); + } + if(classDate.getTime() >= parse.getTime()){ + continue; + } + + //开始组装排课数据 + CoursePackageScheduling packageScheduling = new CoursePackageScheduling(); + packageScheduling.setType(1); + packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId()); + packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId()); + packageScheduling.setCoursePackageId(coursePackage.getId()); + packageScheduling.setClassDate(parse); + packageScheduling.setEndDate(parse1); + packageScheduling.setStatus(1); + coursePackageSchedulingService.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); + + num--; + if(num <= 0){ + return; + } + } + + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); + start = calendar; + } + + if(num <= 0){ + return; + } + + //继续排后面的数据 + while (true) { + 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; + } + + for (int j = 0; j < split.length; j++) { + //开始组装排课数据 + 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); + coursePackageSchedulingService.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(); + } + num--; + if(num <= 0){ + return; + } + } + 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; } } -- Gitblit v1.7.1