44323
2023-11-28 fade481769731552d9a16c79c9a5323e6f015b36
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -1,7 +1,9 @@
package com.dsh.course.controller;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsh.course.entity.*;
@@ -9,6 +11,8 @@
import com.dsh.course.feignclient.account.AppUserClient;
import com.dsh.course.feignclient.account.StudentClient;
import com.dsh.course.feignclient.account.model.Student;
import com.dsh.course.mapper.CoursePackageSchedulingMapper;
import com.dsh.course.mapper.CoursePackageStudentMapper;
import com.dsh.course.model.dto.ToClassDto;
import com.dsh.course.service.*;
import com.dsh.course.util.ResultUtil;
@@ -23,10 +27,12 @@
import javax.annotation.Resource;
import javax.swing.text.html.parser.Entity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@Api
@@ -35,13 +41,76 @@
@RequestMapping("/courdent")
public class CourseStudentController {
    @Autowired
    CoursePackageStudentService studentService ;
    CoursePackageStudentService studentService;
    @Autowired
    TCoursePackagePaymentService paymentService;
    @Autowired
    private CourseCounsumService counsumService;
    @Autowired
    private TCoursePackageService coursePackageService;
    @Resource
    private CoursePackageStudentMapper cpsMapper;
    //获取退费记录
    @RequestMapping("/getRefund")
    @ResponseBody
    public List<MoneyBack> getRefund() {
        // 查询已通过申请的退费记录
        return counsumService.getRefund();
    }
    @Resource
    private CoursePackageSchedulingMapper coursePackageSchedulingService;
    @RequestMapping("/getStudentTotal")
    @ResponseBody
    public List<Map<String, Object>> get(@RequestBody StudentQeryDto studentQeryDto) {
        System.out.println("-====studentQeryDto=========" + studentQeryDto);
        List<Map<String, Object>> pays = paymentService.getStudentTotal(studentQeryDto);
        System.out.println("=========pays======" + pays);
        return pays;
    }
    @RequestMapping("/bypac")
    @ResponseBody
    public List<Map<String, Object>> bypac(@RequestBody PacQueryDto pacQueryDto) {
        System.out.println("-====studentQeryDto=========" + pacQueryDto);
        if (pacQueryDto.getStoreIds() != null && pacQueryDto.getStoreIds().size() != 0) {
            // 根据门店id 查询课包ids
            List<Integer> coursePackageIds = coursePackageService.list(new QueryWrapper<TCoursePackage>()
                    .in("storeId", pacQueryDto.getStoreIds())).stream()
                    .map(TCoursePackage::getId).collect(Collectors.toList());
            pacQueryDto.setStoreIds(coursePackageIds);
        }
        List<Map<String, Object>> pays = paymentService.bypac(pacQueryDto);
        System.out.println("=========pays======" + pays);
        return pays;
    }
    @ResponseBody
    @PostMapping("/queryIdsByStore")
    public List<Integer> queryIdsByStore(@RequestBody Integer objectId) {
        List<TCoursePackage> list = packageService.list(new LambdaQueryWrapper<TCoursePackage>().eq(TCoursePackage::getStoreId, objectId));
        List<Integer> collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList());
        if (collect.size() == 0) {
            collect.add(-1);
        }
        return collect;
    }
    //获取学员课时数信息
    @RequestMapping("/getInfo")
    @ResponseBody
    public StudentClassInfo list(@RequestParam("tStudentId")Integer tStudentId) {
    public StudentClassInfo list(@RequestParam("tStudentId") Integer tStudentId){
//        System.out.println("------------>"+tStudentId);
@@ -52,95 +121,100 @@
        Date minDate = studentService.getMinDate(tStudentId);
        Integer totalHours = studentClassInfo.getTotalHours();
        Integer hasHours = studentClassInfo.getRestHours();
        Integer restHours = totalHours-hasHours;
        Integer restHours = totalHours - hasHours;
        studentClassInfo.setHasHours(restHours);
        studentClassInfo.setInDate(minDate);
        System.out.println("===========>"+studentClassInfo);
        System.out.println("===========>" + studentClassInfo);
        return studentClassInfo;
    }
    //获取学员课程列表
    @RequestMapping("/getClassList")
    @ResponseBody
    public List<ClassListDto> listClass(@RequestParam("tStudentId")Integer tStudentId) {
        System.out.println("==========getClassList===tStudentId===="+tStudentId);
    List<ClassListDto> listDtos = studentService.getClassList(tStudentId);
    for (ClassListDto dto : listDtos){
        dto.setHasClassHours(dto.getTotalClassHours()-dto.getLaveClassHours());
    }
    System.out.println("======listDtos======"+listDtos);
    return  listDtos;
    public List<ClassListDto> listClass(@RequestParam("tStudentId") Integer tStudentId) {
        System.out.println("==========getClassList===tStudentId====" + tStudentId);
        List<ClassListDto> listDtos = studentService.getClassList(tStudentId);
        for (ClassListDto dto : listDtos) {
            dto.setHasClassHours(dto.getTotalClassHours() - dto.getLaveClassHours());
        }
        System.out.println("======listDtos======" + listDtos);
        return listDtos;
    }
    //获取学员有效期
    @RequestMapping("/getUseTime")
    @ResponseBody
    public Date getUseTime(@RequestParam("tStudentId")Integer tStudentId) {
                Date maxDate = studentService.getMaxDate(tStudentId);
    public Date getUseTime(@RequestParam("tStudentId") Integer tStudentId) {
        Date maxDate = studentService.getMaxDate(tStudentId);
        return  maxDate;
        return maxDate;
    }
    //批量修改有效期
    @RequestMapping("/updateUseDate")
    @ResponseBody
    public void updateUseDate(@RequestBody updateTimeDto updateTimeDto ){
        System.out.println("=========updateUseDate=====>="+updateTimeDto);
    public void updateUseDate(@RequestBody updateTimeDto updateTimeDto) {
        System.out.println("=========updateUseDate=====>=" + updateTimeDto);
        List<TCoursePackagePayment> paymentList = paymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("studentId", updateTimeDto.getTStudentId()));
        System.out.println("=========paymentList=====>="+paymentList);
        System.out.println("=========paymentList=====>=" + paymentList);
        for (TCoursePackagePayment payment: paymentList) {
        for (TCoursePackagePayment payment : paymentList) {
//            payment.setUseTime(updateTimeDto.getDate());
            paymentService.updateUseTime(payment.getId(),updateTimeDto.getDate());
            paymentService.updateUseTime(payment.getId(), updateTimeDto.getDate());
        }
        System.out.println("=======updateUseDate=======>"+paymentList);
        System.out.println("=======updateUseDate=======>" + paymentList);
    }
    @Resource
    private AppUserClient appUserClient;
    //获取可转移学员
    @RequestMapping("/getSelect")
    @ResponseBody
    public List<SelectDto> getSelect(@RequestParam("payId")Integer payId){
    public List<SelectDto> getSelect(@RequestParam("payId") Long payId) {
        List<Integer> studentIds = paymentService.getStudentIds(payId);
    System.out.println("=========studentIds=================>"+studentIds);
        TCoursePackagePayment byId = paymentService.getById(payId);
        List<SelectDto> selectDtos =   appUserClient.getSelects(studentIds);
        List<Integer> studentIds = paymentService.getStudentIds(payId, byId.getCoursePackageId(), byId.getAppUserId());
        System.out.println("=========studentIds=================>" + studentIds);
        return selectDtos;
        if (studentIds.size() > 0) {
            List<SelectDto> selectDtos = appUserClient.getSelects(studentIds);
            return selectDtos;
        } else return null;
    }
    //根据payid获取对应门店的常规课程
    @Autowired
    private  TCoursePackageService packageService;
    private TCoursePackageService packageService;
    @RequestMapping("/holiSelect")
    @ResponseBody
    public List<SelectDto> getHoliSelect(@RequestParam("courseId")Integer id){
    public List<SelectDto> getHoliSelect(@RequestParam("courseId") Integer id) {
        TCoursePackage byId = packageService.getById(id);
        Integer storeId = byId.getStoreId();
        List<TCoursePackage> list = packageService.list(new QueryWrapper<TCoursePackage>()
                .select("id", "name")
                .eq("storeId", storeId)
                .eq("type","2")
                .eq("type", "2")
        );
        List<SelectDto> selectDtos = new ArrayList<>();
        for (TCoursePackage t :list){
        for (TCoursePackage t : list) {
            SelectDto selectDto = new SelectDto();
            selectDto.setId(t.getId());
            selectDto.setValue(t.getName());
            selectDtos.add(selectDto);
        }
        return selectDtos;
@@ -148,17 +222,17 @@
    @RequestMapping("/transSelect")
    @ResponseBody
    public List<SelectDto> getTransSelect(@RequestParam("courseId")Integer id){
    public List<SelectDto> getTransSelect(@RequestParam("courseId") Integer id) {
        TCoursePackage byId = packageService.getById(id);
        Integer storeId = byId.getStoreId();
        List<TCoursePackage> list = packageService.list(new QueryWrapper<TCoursePackage>()
                .select("id", "name")
                .eq("storeId", storeId)
                .eq("type","1")
                .eq("type", "1").ne("id", id)
        );
        List<SelectDto> selectDtos = new ArrayList<>();
        for (TCoursePackage t :list){
        for (TCoursePackage t : list) {
            SelectDto selectDto = new SelectDto();
            selectDto.setId(t.getId());
            selectDto.setValue(t.getName());
@@ -166,46 +240,41 @@
        }
        return selectDtos;
    }
    @Autowired
    private CourseCounsumService counsumService;
    @RequestMapping("/queryCounsum")
    @ResponseBody
    public List<CourseCounsum> queryCounsum(@RequestBody ConsumeQuery consumeQuery){
        System.out.println("======queryCounsum==========="+consumeQuery);
    public List<CourseCounsum> queryCounsum(@RequestBody ConsumeQuery consumeQuery) {
        System.out.println("======queryCounsum===========" + consumeQuery);
        QueryWrapper<CourseCounsum> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("paymentId",consumeQuery.getPayId());
        queryWrapper.eq("paymentId", consumeQuery.getPayId());
        if (consumeQuery.getChangeType()!=null){
        if (consumeQuery.getChangeType() != null) {
            queryWrapper.eq("changeType", consumeQuery.getChangeType());
        }
        if (consumeQuery.getStart()!=null){
        if (consumeQuery.getStart() != null) {
            queryWrapper.between("insertTime", consumeQuery.getStart(), consumeQuery.getEnd());
        }
        if (consumeQuery.getReason()!=null&&consumeQuery.getReason()!=""){
        if (consumeQuery.getReason() != null && consumeQuery.getReason() != "") {
            queryWrapper.like("reason", consumeQuery.getReason());
        }
        List<CourseCounsum> list = counsumService.list(queryWrapper);
//        List<CourseCounsum> list = counsumService.list(new QueryWrapper<CourseCounsum>().eq("paymentId", consumeQuery.getPayId()).eq("changeType", consumeQuery.getChangeType()).between("insertTime", consumeQuery.getStart(), consumeQuery.getEnd()).like("reason", consumeQuery.getReason()));
        return list;
    }
    @Autowired
    private ICoursePackageOrderStudentService orderStudentService;
    @RequestMapping("/insertBack")
    @ResponseBody
    public void insertBack(@RequestBody InsertBackDto insertBackDto){
    public void insertBack(@RequestBody InsertBackDto insertBackDto) {
        MoneyBack moneyBack = new MoneyBack();
        moneyBack.setStudentId(insertBackDto.getId());
@@ -214,38 +283,109 @@
        moneyBack.setIds(insertBackDto.getIds());
        moneyBackService.save(moneyBack);
//        List<TCoursePackagePayment> pays = paymentService.list(new QueryWrapper<TCoursePackagePayment>().in("id", insertBackDto.getIds()));
        List<CoursePackageOrderStudent> pays = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().in("id", insertBackDto.getIds()));
        for (CoursePackageOrderStudent o : pays) {
            o.setStatus(4);
            o.setAppUserId(null);
        }
        orderStudentService.updateBatchById(pays);
    }
    @RequestMapping("/queryByIds")
    @ResponseBody
    public List<TCoursePackagePayment> queryByIds(@RequestParam("ids")String ids){
    public List<TCoursePackagePayment> queryByIds(@RequestParam("ids") String ids) {
        List<TCoursePackagePayment> paymentList = paymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .in("id", Arrays.asList(ids.split(","))));
        System.out.println("========client==>"+paymentList);
        System.out.println("========client==>" + paymentList);
        return paymentList;
    }
    @RequestMapping("/changeStatus")
    @ResponseBody
    public void changeStatus(@RequestParam("id")Integer id){
    public void changeStatus(@RequestParam("id") Integer id) {
        MoneyBack byId = moneyBackService.getById(id);
        byId.setStatus(1);
        moneyBackService.updateById(byId);
    }
    @RequestMapping("/noStatus")
    @ResponseBody
    public void noStatus(@RequestParam("id") Integer id) {
        MoneyBack byId = moneyBackService.getById(id);
        byId.setStatus(2);
        moneyBackService.updateById(byId);
        List<CoursePackageOrderStudent> pays = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().in("id", byId.getIds()));
        for (CoursePackageOrderStudent o : pays) {
            o.setStatus(1);
            o.setAppUserId(null);
        }
        orderStudentService.updateBatchById(pays);
    }
    @RequestMapping("/zeroClass")
    @ResponseBody
    public void zeroClass(@RequestParam("id")Integer id){
    public void zeroClass(@RequestParam("id") Integer id) {
        MoneyBack byId = moneyBackService.getById(id);
        String[] split = byId.getIds().split(",");
        System.out.println("========split===>"+split);
        List<TCoursePackagePayment> id1 = paymentService.list(new QueryWrapper<TCoursePackagePayment>().in("id", split));
        for (TCoursePackagePayment o :id1){
        String[] split2 = byId.getIds().split(",");
        System.out.println("========split===>" + split2);
        List<TCoursePackagePayment> id1 = paymentService.list(new QueryWrapper<TCoursePackagePayment>().in("id", split2));
        for (TCoursePackagePayment o : id1) {
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setNum(o.getLaveClassHours());
            courseCounsum.setChangeType(0);
            courseCounsum.setReason("退费");
            courseCounsum.setPaymentId(o.getId());
            courseCounsum.setInsertTime(new Date());
            counsumService.save(courseCounsum);
            o.setTotalClassHours(0);
            o.setLaveClassHours(0);
            o.setStatus(2);
            o.setAppUserId(null);
            TCoursePackage tCoursePackage = packageService.getById(o.getCoursePackageId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
            String[] split = tCoursePackage.getClassStartTime().split(",");
            String[] split1 = tCoursePackage.getClassEndTime().split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            // 本周周几
            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", o.getStudentId()).eq("coursePackageId", o.getCoursePackageId()));
            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect.size() > 0) {
                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", o.getStudentId()).eq("coursePackageId", o.getCoursePackageId()));
            }
        }
        paymentService.updateBatchById(id1);
    }
    @RequestMapping("/backStausClass")
    @ResponseBody
    public void backStausClass(@RequestParam("id") Integer id) {
        MoneyBack byId = moneyBackService.getById(id);
        String[] split = byId.getIds().split(",");
        System.out.println("========split===>" + split);
        List<TCoursePackagePayment> id1 = paymentService.list(new QueryWrapper<TCoursePackagePayment>().in("id", split));
        for (TCoursePackagePayment o : id1) {
            o.setStatus(1);
            o.setAppUserId(null);
        }
        paymentService.updateBatchById(id1);
@@ -253,13 +393,13 @@
    @RequestMapping("/cancel")
    @ResponseBody
    public void cancel(@RequestParam("ids")String ids){
    public void cancel(@RequestParam("ids") String ids) {
        String[] split = ids.split(",");
        List<CoursePackageStudent> coursePackagePaymentId = studentService.list(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", split));
      for (CoursePackageStudent student :coursePackagePaymentId){
          student.setReservationStatus(2);
          student.setAppUserId(null);
      }
        for (CoursePackageStudent student : coursePackagePaymentId) {
            student.setReservationStatus(3);
            student.setAppUserId(null);
        }
        studentService.updateBatchById(coursePackagePaymentId);
@@ -267,9 +407,10 @@
    @Autowired
    private MoneyBackService moneyBackService;
    @RequestMapping("/getMoneyBack")
    @ResponseBody
    public List<MoneyBack> getMoneyBack(@RequestParam("tStudentId")Integer tStudentId){
    public List<MoneyBack> getMoneyBack(@RequestParam("tStudentId") Integer tStudentId) {
        List<MoneyBack> moneyBacksck = moneyBackService.list(new QueryWrapper<MoneyBack>().eq("studentId", tStudentId));
        return moneyBacksck;
@@ -278,24 +419,39 @@
    //课程转移
    @RequestMapping("/toClass")
    @ResponseBody
    public void toClass(@RequestBody ToClassDto toClassDto){
        System.out.println("===========到达getSelect======="+toClassDto);
        TCoursePackagePayment orinPay = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("id", toClassDto.getId()));
        TCoursePackagePayment studentPay = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId",orinPay.getCoursePackageId()));
        if (studentPay!=null) {
    public void toClass(@RequestBody ToClassDto toClassDto) throws ParseException {
        System.out.println("===========到达getSelect=======" + toClassDto);
        TCoursePackagePayment orinPay =
                paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("id", toClassDto.getId()));
        TCoursePackagePayment studentPay = paymentService.getOne
                (new QueryWrapper<TCoursePackagePayment>()
                        .eq("studentId", toClassDto.getToStudentId())
                        .eq("coursePackageId", orinPay.getCoursePackageId()));
        if (studentPay != null) {
            System.out.println("======orinPay=====>" + orinPay);
            System.out.println("======studentPay=====>" + studentPay);
            Integer laveClassHours = orinPay.getLaveClassHours();
            Integer totalClassHours = orinPay.getTotalClassHours();
            orinPay.setTotalClassHours(0);
            orinPay.setLaveClassHours(0);
            orinPay.setStatus(1);
            orinPay.setAppUserId(null);
            paymentService.updateById(orinPay);
            //删除orin的排课记录
            List<CoursePackageStudent> studentCourse1 = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId()));
            List<Long> collect1 = studentCourse1.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect1.size() > 0) {
                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect1));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
            }
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("转课");
            if (orinPay.getAppUserId() != studentPay.getAppUserId()) {
                courseCounsum.setReason("课时转移");
            } else {
                courseCounsum.setReason("课时转移");
            }
            courseCounsum.setNum(laveClassHours);
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
@@ -313,30 +469,87 @@
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            courseCounsum1.setReason("转课");
            if (orinPay.getAppUserId() != studentPay.getAppUserId()) {
                courseCounsum1.setReason("课时转移");
            } else {
                courseCounsum1.setReason("课时转移");
            }
            courseCounsum1.setNum(laveClassHours);
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(studentPay.getId());
            counsumService.save(courseCounsum1);
        }else {
            //排课
            TCoursePackage tCoursePackage = packageService.getById(studentPay.getCoursePackageId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
            String[] split = tCoursePackage.getClassStartTime().split(",");
            String[] split1 = tCoursePackage.getClassEndTime().split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            // 本周周几
            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect.size() > 0) {
                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
            }
            Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
            Date today = new Date();
            TCoursePackagePayment pay = coursePackagePaymentService.getById(studentPay.getId());
            Integer laveClassHours2 = pay.getLaveClassHours();
            Integer codeTime = tCoursePackage.getCodeTime();
            Integer can = 0;
            int count = 0;
            // 本周周几
//        int i = DateUtil.dayOfWeek(new Date())-1;
            orinPay.setTotalClassHours(0);
            orinPay.setLaveClassHours(0);
            orinPay.setAppUserId(null);
            paymentService.updateById(orinPay);
            Date[] dates = generateDateArray(14, today);
            can = laveClassHours2 / codeTime;
            for (Date date : dates) {
                if (count == can) {
                    break;
                }
                int wei = DateUtil.dayOfWeek(date);
                if (week.contains(wei)) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        if (count == can) {
                            break;
                        }
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(date) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(date) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.insert(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(student.getAppUserId());
                        student1.setStudentId(student.getId());
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(studentPay.getId());
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(1);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                        count++;
                    }
                }
            }
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("赠课");
            courseCounsum.setNum(orinPay.getLaveClassHours());
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
        } else {
            Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
@@ -353,13 +566,106 @@
            paymentService.save(to);
            orinPay.setTotalClassHours(0);
            orinPay.setLaveClassHours(0);
            orinPay.setAppUserId(null);
            orinPay.setStatus(1);
            paymentService.updateById(orinPay);
            //删除orin的排课记录
            List<CoursePackageStudent> studentCourse1 = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId()));
            List<Long> collect1 = studentCourse1.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect1.size() > 0) {
                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect1));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
            }
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("课时转移");
            courseCounsum.setNum(orinPay.getLaveClassHours());
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            courseCounsum1.setReason("赠课");
            courseCounsum1.setReason("课时转移");
            courseCounsum1.setNum(orinPay.getLaveClassHours());
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(to.getId());
            counsumService.save(courseCounsum);
            TCoursePackage tCoursePackage = packageService.getById(studentPay.getCoursePackageId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
            String[] split = tCoursePackage.getClassStartTime().split(",");
            String[] split1 = tCoursePackage.getClassEndTime().split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            // 本周周几
            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect.size() > 0) {
                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
            }
            Date today = new Date();
            TCoursePackagePayment pay = coursePackagePaymentService.getById(studentPay.getId());
            Integer laveClassHours2 = pay.getLaveClassHours();
            Integer codeTime = tCoursePackage.getCodeTime();
            Integer can = 0;
            int count = 0;
            // 本周周几
//        int i = DateUtil.dayOfWeek(new Date())-1;
            Date[] dates = generateDateArray(14, today);
            can = laveClassHours2 / codeTime;
            for (Date date : dates) {
                if (count == can) {
                    break;
                }
                int wei = DateUtil.dayOfWeek(date);
                if (week.contains(wei)) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        if (count == can) {
                            break;
                        }
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(date) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(date) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.insert(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(student.getAppUserId());
                        student1.setStudentId(student.getId());
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(studentPay.getId());
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(1);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                        count++;
                    }
                }
            }
        }
@@ -368,18 +674,21 @@
    @Resource
    private StudentClient studentClient;
    @RequestMapping(value = "/toHoli",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @ResponseBody
    public String toHoli(@RequestBody ToHoliDto toHoliDto){
    @Autowired
    private CourseCounsumService courseCounsumService;
        String [] ids = toHoliDto.getIds();
    @RequestMapping(value = "/toHoli", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @ResponseBody
    public String toHoli(@RequestBody ToHoliDto toHoliDto) throws ParseException {
        String[] ids = toHoliDto.getIds();
        List<String> strings = new ArrayList<>();
        for (String id : ids){
        for (String id : ids) {
            //扣除课时
            TCoursePackagePayment payment = paymentService.getById(id);
            System.out.println("=====byId========="+payment);
            System.out.println("=====byId=========" + payment);
            Integer laveClassHours = payment.getLaveClassHours();
@@ -388,8 +697,9 @@
            Integer totalClassHours = payment.getTotalClassHours();
            Student student = studentClient.queryStudentById(payment.getStudentId());
            if (laveClassHours < classNum){
                strings.add(student.getName()); continue;
            if (laveClassHours < classNum) {
                strings.add(student.getName());
                continue;
            }
            Integer laveClassHoursnew = laveClassHours - classNum;
@@ -397,6 +707,7 @@
            payment.setLaveClassHours(laveClassHoursnew);
            payment.setTotalClassHours(totalClassHoursnew);
            payment.setAppUserId(null);
//            payment.setStatus(3);
            paymentService.updateById(payment);
@@ -412,36 +723,159 @@
            holi.setLaveClassHours(toHoliDto.getClassNum());
            holi.setState(1);
            holi.setInsertTime(new Date());
            holi.setPayStatus(2);
            paymentService.save(holi);
            System.out.println("保存成功=============》="+holi);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setPaymentId(holi.getId());
            courseCounsum.setChangeType(0);
            courseCounsum.setNum(classNum);
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("报名假期班");
            courseCounsumService.save(courseCounsum);
            //排假期课
            TCoursePackage tCoursePackage = packageService.getById(toHoliDto.getClassId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
            Date today = new Date();
            Date startTime = tCoursePackage.getStartTime();
            Date endTime = tCoursePackage.getEndTime();
            LocalDate startDate = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            LocalDate endDate = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            Period period = Period.between(startDate, endDate);
            int days = period.getDays() + 1;
            Integer can = 999;
            int count = 0;
            String[] split = tCoursePackage.getClassStartTime().split(",");
            String[] split1 = tCoursePackage.getClassEndTime().split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(startTime);
            calendar.add(Calendar.DAY_OF_MONTH, -1);
            Date[] dates = generateDateArray(days, calendar.getTime());
            for (Date date : dates) {
                if (count == can) {
                    break;
                }
                int wei = cn.hutool.core.date.DateUtil.dayOfWeek(date) - 1;
                if (wei == 0) {
                    wei = 7;
                }
                if (week.contains(wei)) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        if (count == can) {
                            break;
                        }
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(date) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(date) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.insert(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(student.getAppUserId());
                        student1.setStudentId(student.getId());
                        student1.setCoursePackageId(toHoliDto.getClassId());
                        student1.setCoursePackagePaymentId(holi.getId());
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(1);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        studentService.save(student1);
                        count++;
                    }
                }
            }
            System.out.println("保存成功=============》=" + holi);
        }
        String[] stringArray = strings.toArray(new String[strings.size()]);
        String join = StringUtils.join(stringArray, ",");
    System.out.println("==========join========"+join);
        System.out.println("==========join========" + join);
        return join;
    }
    @RequestMapping(value = "/toTrans",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @ResponseBody
    public String toTrans(@RequestBody ToHoliDto toHoliDto){
        String [] ids = toHoliDto.getIds();
    @Autowired
    private TCoursePackagePaymentService coursePackagePaymentService;
    public static Date[] generateDateArray(int numDays, Date date) {
//        LocalDate tomorrow = LocalDate.now().plusDays(1);
        LocalDate tomorrow = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1);
        Date[] dates = new Date[numDays];
        for (int i = 0; i < numDays; i++) {
            LocalDate currentDate = tomorrow.plusDays(i);
            dates[i] = Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        }
        return dates;
    }
    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;
    }
    @Autowired
    private CoursePackageStudentService coursePackageStudentService;
    @RequestMapping(value = "/toTrans", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @ResponseBody
    public String toTrans(@RequestBody ToHoliDto toHoliDto) throws ParseException {
        String[] ids = toHoliDto.getIds();
        List<String> strings = new ArrayList<>();
        for (String id : ids){
        for (String id : ids) {
            //扣除课时
            TCoursePackagePayment payment = paymentService.getById(id);
            System.out.println("=====byId========="+payment);
            System.out.println("=====byId=========" + payment);
            Integer laveClassHours = payment.getLaveClassHours();
@@ -466,32 +900,117 @@
            //新增课时
            TCoursePackagePayment one = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", student.getId()).eq("coursePackageId", toHoliDto.getClassId()));
            TCoursePackagePayment holi = new TCoursePackagePayment();
            holi.setAppUserId(student.getAppUserId());
            holi.setStudentId(student.getId());
            holi.setCoursePackageId(toHoliDto.getClassId());
            holi.setTotalClassHours(laveClassHours);
            holi.setLaveClassHours(laveClassHours);
            holi.setState(1);
            holi.setInsertTime(new Date());
            paymentService.save(holi);
            if (one == null) {
                holi.setAppUserId(student.getAppUserId());
                holi.setStudentId(student.getId());
                holi.setCoursePackageId(toHoliDto.getClassId());
                holi.setTotalClassHours(laveClassHours);
                holi.setLaveClassHours(laveClassHours);
                holi.setState(1);
                holi.setInsertTime(new Date());
                holi.setPayStatus(2);
                holi.setStatus(1);
                paymentService.save(holi);
            System.out.println("保存成功=============》="+holi);
            } else {
                one.setTotalClassHours(one.getTotalClassHours() + laveClassHours);
                one.setLaveClassHours(one.getLaveClassHours() + laveClassHours);
                one.setAppUserId(null);
                paymentService.updateById(one);
                holi = one;
            }
            System.out.println("保存成功=============》=" + holi);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setPaymentId(holi.getId());
            courseCounsum.setChangeType(1);
            courseCounsum.setNum(laveClassHours);
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("换课");
            courseCounsumService.save(courseCounsum);
            TCoursePackage tCoursePackage = packageService.getById(toHoliDto.getClassId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
            String[] split = tCoursePackage.getClassStartTime().split(",");
            String[] split1 = tCoursePackage.getClassEndTime().split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            // 本周周几
            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", student.getId()).eq("coursePackageId", toHoliDto.getClassId()));
            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect.size() > 0) {
                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", student.getId()).eq("coursePackageId", toHoliDto.getClassId()));
            }
            Date today = new Date();
            TCoursePackagePayment pay = coursePackagePaymentService.getById(holi.getId());
            Integer laveClassHours1 = pay.getLaveClassHours();
            Integer codeTime = tCoursePackage.getCodeTime();
            Integer can = 0;
            int count = 0;
            // 本周周几
//        int i = DateUtil.dayOfWeek(new Date())-1;
            Date[] dates = generateDateArray(14, today);
            can = laveClassHours1 / codeTime;
            for (Date date : dates) {
                if (count == can) {
                    break;
                }
                int wei = DateUtil.dayOfWeek(date);
                if (week.contains(wei)) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        if (count == can) {
                            break;
                        }
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(date) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(date) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.insert(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(student.getAppUserId());
                        student1.setStudentId(student.getId());
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(holi.getId());
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(1);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                        count++;
                    }
                }
            }
        }
        String[] stringArray = strings.toArray(new String[strings.size()]);
        String join = StringUtils.join(stringArray, ",");
        System.out.println("==========join========"+join);
        System.out.println("==========join========" + join);
        return "转课成功";
    }
}