puzhibing
2023-12-14 f21cf2729f0ebf3cfea564c8bc0fc7349cdabe48
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
@@ -7,6 +7,7 @@
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;
@@ -18,6 +19,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author zhibing.pu
@@ -49,6 +51,9 @@
    @Resource
    private StudentClient studentClient;
    @Autowired
    private CourseCounsumService courseCounsumService;
    /**
@@ -111,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);
                    }
@@ -163,6 +168,15 @@
                .gt("useTime", "now()")
                .gt("laveClassHours", 0)
        );
        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())
@@ -207,9 +221,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++) {
@@ -320,7 +337,7 @@
            TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId());
            Integer codeTime = coursePackage.getCodeTime();
            Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
            Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId());
            Student student = studentClient.queryStudentById(coursePackageOrderStudent.getStudentId());
            Date validity = student.getValidity();
            Calendar calendar = Calendar.getInstance();
@@ -344,7 +361,7 @@
                //从第二天开始
                Calendar startTime = Calendar.getInstance();
                startTime.setTime(new Date());
                startTime.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                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);
@@ -414,12 +431,26 @@
                }
            }else{
                Date classDate = coursePackageScheduling.getClassDate();
                if(codeTime.compareTo(laveClassHours) > 0 && calendar.getTimeInMillis() > classDate.getTime()){
                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(new Date());
                    startTime.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
//                    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);
@@ -431,13 +462,13 @@
                    String classWeeks = coursePackage.getClassWeeks();
                    List<Integer> week = week(classWeeks);
                    //新剩余课时
                    laveClassHours += classNumber;
                    number += 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 format = sdf.format(classDate);
                    String time = format.substring(0,format.indexOf(" ") + 1);
                    String classStartTime = coursePackage.getClassStartTime();
                    String classEndTime = coursePackage.getClassEndTime();
                    String[] split = classStartTime.split(",");
@@ -448,10 +479,10 @@
                        n++;
                        for (int i = n; i < split.length; i++) {
                            //剩余数量不足以排课
                            if (laveClassHours.compareTo(codeTime) < 0) {
                            if (number.compareTo(codeTime) < 0) {
                                break;
                            }
                            laveClassHours -= codeTime;
                            number -= codeTime;
                            CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
                            packageScheduling.setType(coursePackage.getType());
                            packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
@@ -493,11 +524,11 @@
                        }
                        for (int j = 0; j < split.length; j++) {
                            //剩余数量不足以排课
                            if (laveClassHours.compareTo(codeTime) < 0) {
                            if (number.compareTo(codeTime) < 0) {
                                break;
                            }
                            laveClassHours -= codeTime;
                            number -= codeTime;
                            CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
                            packageScheduling.setType(coursePackage.getType());
@@ -533,9 +564,59 @@
            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);
            }
        }
    }
}