puzhibing
2023-12-04 3ad6b6ba2ba56fc0bcd2130e47190779c6e15acc
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -12,6 +12,7 @@
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;
@@ -28,6 +29,9 @@
import javax.swing.text.html.parser.Entity;
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;
@@ -37,18 +41,22 @@
@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();
        return counsumService.getRefund();
    }
@@ -56,16 +64,14 @@
    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);
        System.out.println("-====studentQeryDto=========" + studentQeryDto);
        List<Map<String, Object>> pays = paymentService.getStudentTotal(studentQeryDto);
        System.out.println("=========pays======" + pays);
        return  pays;
        return pays;
    }
@@ -73,35 +79,53 @@
    @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);
        System.out.println("-====studentQeryDto========="+pacQueryDto);
        List<Map<String, Object>>  pays =  paymentService.bypac(pacQueryDto);
        System.out.println("=========pays======"+pays);
        return  pays;
        return pays;
    }
    @ResponseBody
    @PostMapping("/queryIdsByStore")
    public List<Integer> queryIdsByStore(@RequestBody Integer objectId){
    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){
        if (collect.size() == 0) {
            collect.add(-1);
        }
        return collect;
    }
    @ResponseBody
    @PostMapping("/queryAble")
    public Integer queryAble(@RequestBody Integer id) {
        int coursePackageId = orderStudentService.count(new QueryWrapper<CoursePackageOrderStudent>().eq("coursePackageId", id));
        if (coursePackageId>0){
            return 1;
        }else {
            return 0;
        }
    }
    //获取学员课时数信息
    @RequestMapping("/getInfo")
    @ResponseBody
    public StudentClassInfo list(@RequestParam("tStudentId")Integer tStudentId) {
    public StudentClassInfo list(@RequestParam("tStudentId") Integer tStudentId){
//        System.out.println("------------>"+tStudentId);
@@ -112,99 +136,118 @@
        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);
//        appUserClient.queryGift(tStudentId);
        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) {
            if (dto.getClassType()!=2) {
                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;
    @Autowired
    private ICoursePackageOrderStudentService orderStudentService;
    //获取可转移学员
    @RequestMapping("/getSelect")
    @ResponseBody
    public List<SelectDto> getSelect(@RequestParam("payId")Long payId){
    public List<SelectDto> getSelect(@RequestParam("payId") Long payId) {
        TCoursePackagePayment byId = paymentService.getById(payId);
//        TCoursePackagePayment byId = paymentService.getById(payId);
//
//        List<Integer> studentIds = paymentService.getStudentIds(payId, byId.getCoursePackageId(), byId.getAppUserId());
//        System.out.println("=========studentIds=================>" + studentIds);
        List<Integer> studentIds = paymentService.getStudentIds(payId,byId.getCoursePackageId(),byId.getAppUserId());
    System.out.println("=========studentIds=================>"+studentIds);
        CoursePackageOrderStudent coursePackageOrderStudent = orderStudentService.getById(payId);
    if (studentIds.size()>0){
        List<SelectDto> selectDtos =   appUserClient.getSelects(studentIds);
        return selectDtos;}
    else return null;
        List<CoursePackageOrderStudent> orderStudent = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().eq("appUserId", coursePackageOrderStudent.getAppUserId()).eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).ne("id",payId));
        List<Integer> studentIds = new ArrayList<>();
        for (CoursePackageOrderStudent packageOrderStudent : orderStudent) {
            studentIds.add(packageOrderStudent.getStudentId());
        }
        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;
@@ -212,24 +255,22 @@
    @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").ne("id",id)
                .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());
            selectDtos.add(selectDto);
        }
        return selectDtos;
@@ -238,37 +279,41 @@
    @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;
    }
    @RequestMapping("/insertBack")
    @ResponseBody
    public void insertBack(@RequestBody InsertBackDto insertBackDto){
    public Integer insertBack(@RequestBody InsertBackDto insertBackDto) {
        List<MoneyBack> ids = moneyBackService.list(new QueryWrapper<MoneyBack>().eq("ids", insertBackDto.getIds()));
        if (!ids.isEmpty()){
            return 1 ;
        }
        MoneyBack moneyBack = new MoneyBack();
        moneyBack.setStudentId(insertBackDto.getId());
@@ -277,54 +322,83 @@
        moneyBack.setIds(insertBackDto.getIds());
        moneyBackService.save(moneyBack);
        List<TCoursePackagePayment> pays = paymentService.list(new QueryWrapper<TCoursePackagePayment>().in("id", insertBackDto.getIds()));
        for (TCoursePackagePayment o :pays){
//        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);
            List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingService.selectList(new QueryWrapper<CoursePackageScheduling>().eq("studentId", o.getStudentId()).eq("coursePackageId", o.getCoursePackageId()).ge("classDate", new Date()));
            List<Long> scs = new ArrayList<>();
            for (CoursePackageScheduling coursePackageScheduling : coursePackageSchedulings) {
                scs.add(coursePackageScheduling.getId());
            }
            coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().in("coursePackageSchedulingId",scs));
            coursePackageSchedulingService.deleteBatchIds(scs);
        }
        paymentService.updateBatchById(pays);
        orderStudentService.updateBatchById(pays);
        return 0;
    }
    @Autowired
    private ICoursePackageOrderService coursePackageOrderService;
    @Autowired
    private ICoursePackageOrderStudentService coursePackageOrderStudentService;
    @RequestMapping("/queryByIds")
    @ResponseBody
    public List<TCoursePackagePayment> queryByIds(@RequestParam("ids")String ids){
        List<TCoursePackagePayment> paymentList = paymentService.list(new QueryWrapper<TCoursePackagePayment>()
    public List<CoursePackageOrderStudent> queryByIds(@RequestParam("ids") String ids) {
        List<CoursePackageOrderStudent> paymentList = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
                .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){
    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);
            schedulingService.addNewCoursePackageScheduling(o.getId(),o.getLaveClassHours());
        }
        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);
@@ -339,202 +413,7 @@
            o.setAppUserId(null);
        }
        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);
    }
    @RequestMapping("/cancel")
    @ResponseBody
    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(3);
          student.setAppUserId(null);
      }
        studentService.updateBatchById(coursePackagePaymentId);
    }
    @Autowired
    private MoneyBackService moneyBackService;
    @RequestMapping("/getMoneyBack")
    @ResponseBody
    public List<MoneyBack> getMoneyBack(@RequestParam("tStudentId")Integer tStudentId){
        List<MoneyBack> moneyBacksck = moneyBackService.list(new QueryWrapper<MoneyBack>().eq("studentId", tStudentId));
        return moneyBacksck;
    }
    //课程转移
    @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) {
            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(5);
            orinPay.setAppUserId(null);
            paymentService.updateById(orinPay);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            if (orinPay.getAppUserId()!=studentPay.getAppUserId()){
                courseCounsum.setReason("赠课");
            }else {            courseCounsum.setReason("转课");
            }
            courseCounsum.setNum(laveClassHours);
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            Integer laveClassHours1 = studentPay.getLaveClassHours();
            Integer totalClassHours1 = studentPay.getTotalClassHours();
            int total = totalClassHours + totalClassHours1;
            int lave = laveClassHours + laveClassHours1;
            studentPay.setAppUserId(null);
            studentPay.setLaveClassHours(lave);
            studentPay.setTotalClassHours(total);
            paymentService.updateById(studentPay);
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            courseCounsum1.setReason("转课");
            courseCounsum1.setNum(laveClassHours);
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(studentPay.getId());
            counsumService.save(courseCounsum1);
        }else {
            Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
            TCoursePackagePayment to = new TCoursePackagePayment();
            to.setStudentId(toClassDto.getToStudentId());
            to.setTotalClassHours(orinPay.getTotalClassHours());
            to.setLaveClassHours(orinPay.getLaveClassHours());
            to.setCoursePackageId(orinPay.getCoursePackageId());
            to.setState(1);
            to.setAppUserId(student.getAppUserId());
            to.setPayStatus(2);
            to.setStatus(1);
            to.setInsertTime(new Date());
            paymentService.save(to);
            orinPay.setTotalClassHours(0);
            orinPay.setLaveClassHours(0);
            orinPay.setAppUserId(null);
            orinPay.setStatus(6);
            paymentService.updateById(orinPay);
            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.setNum(orinPay.getLaveClassHours());
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(to.getId());
            counsumService.save(courseCounsum);
        }
    }
    @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) throws ParseException {
        String [] ids = toHoliDto.getIds();
        List<String> strings = new ArrayList<>();
        for (String id : ids){
            //扣除课时
            TCoursePackagePayment payment = paymentService.getById(id);
            System.out.println("=====byId========="+payment);
            Integer laveClassHours = payment.getLaveClassHours();
            Integer classNum = toHoliDto.getClassNum();
            Integer totalClassHours = payment.getTotalClassHours();
            Student student = studentClient.queryStudentById(payment.getStudentId());
            if (laveClassHours < classNum){
                strings.add(student.getName()); continue;
            }
            Integer laveClassHoursnew = laveClassHours - classNum;
            Integer totalClassHoursnew = totalClassHours - classNum;
            payment.setLaveClassHours(laveClassHoursnew);
            payment.setTotalClassHours(totalClassHoursnew);
            payment.setAppUserId(null);
            payment.setStatus(3);
            paymentService.updateById(payment);
            //获取student信息
            //新增课时
            TCoursePackagePayment holi = new TCoursePackagePayment();
            holi.setAppUserId(student.getAppUserId());
            holi.setStudentId(student.getId());
            holi.setCoursePackageId(toHoliDto.getClassId());
            holi.setTotalClassHours(toHoliDto.getClassNum());
            holi.setLaveClassHours(toHoliDto.getClassNum());
            holi.setState(1);
            holi.setInsertTime(new Date());
            holi.setPayStatus(2);
            paymentService.save(holi);
            TCoursePackage tCoursePackage = packageService.getById(toHoliDto.getClassId());
            TCoursePackage tCoursePackage = packageService.getById(o.getCoursePackageId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
@@ -543,122 +422,526 @@
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            // 本周周几
            int i = DateUtil.dayOfWeek(new Date())-1;
            for (Integer integer : week) {
                if(integer<i){
                    // 找下一周的时间
                    Calendar instance = Calendar.getInstance();
                    instance.add(Calendar.DATE,7-(i-integer));
                    Date time = instance.getTime();
                    for (int i1 = 0; i1 < split.length; i1++) {
            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()));
            }
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                                    Date parse = format1.parse(format.format(time) + " " + split[i1]);
                            Date parse1 = format1.parse(format.format(time) + " " + 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());
                        studentService.save(student1);
        }
        paymentService.updateBatchById(id1);
    }
    @RequestMapping("/getOrder")
    @ResponseBody
    public List<CoursePackageOrder> getOrder(@RequestParam("id") Long id) {
        CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getById(id);
        List<CoursePackageOrder> list = coursePackageOrderService.list(new QueryWrapper<CoursePackageOrder>().eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).like("studentIds", coursePackageOrderStudent.getStudentId()));
            return  list;
    }
    @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<CoursePackageOrderStudent> id1 = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().in("id", split));
//        for (CoursePackageOrderStudent o : id1) {
//            o.setStatus(1);
//            o.setAppUserId(null);
//        }
//        coursePackageOrderStudentService.updateBatchById(id1);
    }
    @RequestMapping("/cancel")
    @ResponseBody
    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(3);
            student.setAppUserId(null);
        }
        studentService.updateBatchById(coursePackagePaymentId);
    }
    @Autowired
    private MoneyBackService moneyBackService;
    @RequestMapping("/getMoneyBack")
    @ResponseBody
    public List<MoneyBack> getMoneyBack(@RequestParam("tStudentId") Integer tStudentId) {
        List<MoneyBack> moneyBacksck = moneyBackService.list(new QueryWrapper<MoneyBack>().eq("studentId", tStudentId));
        return moneyBacksck;
    }
    @Autowired
    private ICoursePackageSchedulingService schedulingService;
    //课程转移
    @RequestMapping("/toClass")
    @ResponseBody
    public void toClass(@RequestBody ToClassDto toClassDto) throws ParseException {
        CoursePackageOrderStudent orinPay = orderStudentService.getById(toClassDto.getId());
        CoursePackageOrderStudent studentPay = orderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>()
                .eq("studentId", toClassDto.getToStudentId())
                .eq("coursePackageId", orinPay.getCoursePackageId()));
        TCoursePackage coursePackage = packageService.getById(orinPay.getCoursePackageId());
        if (studentPay != null) {
            //转移
            Integer laveClassHours = orinPay.getLaveClassHours();
            Integer totalClassHours = orinPay.getTotalClassHours();
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            Integer appUserId = orinPay.getAppUserId();
            Integer appUserId1 = studentPay.getAppUserId();
            if (appUserId.compareTo(appUserId1) != 0) {
                courseCounsum.setReason("赠课");
            } else {
                courseCounsum.setReason("课时转移");
            }
            orinPay.setLaveClassHours(0);
            orinPay.setStatus(5);
            orinPay.setAppUserId(null);
            orderStudentService.updateById(orinPay);
            courseCounsum.setNum(laveClassHours);
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            if (appUserId.compareTo(appUserId1) != 0) {
                courseCounsum1.setReason("赠课");
            } else {
                courseCounsum1.setReason("课时转移");
            }
            courseCounsum1.setNum(laveClassHours);
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(studentPay.getId());
            counsumService.save(courseCounsum1);
            schedulingService.addNewCoursePackageScheduling(studentPay.getId(), laveClassHours);
            //删除原排课数据
            List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingService.selectList(new QueryWrapper<CoursePackageScheduling>()
                    .eq("type", 1).eq("appUserId", appUserId)
                    .eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId())
                    .orderByAsc("classDate"));
            int num = totalClassHours - laveClassHours;
            for (int i = num; i < coursePackageSchedulings.size(); i++) {
                CoursePackageScheduling packageScheduling = coursePackageSchedulings.get(i);
                coursePackageSchedulingService.deleteById(packageScheduling.getId());
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", packageScheduling.getId()));
            }
        } else {
            Integer totalClassHours = orinPay.getTotalClassHours();
            Integer laveClassHours = orinPay.getLaveClassHours();
            Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
            CoursePackageOrderStudent to = new CoursePackageOrderStudent();
            to.setStudentId(toClassDto.getToStudentId());
            to.setTotalClassHours(laveClassHours);
            to.setLaveClassHours(laveClassHours);
            to.setCoursePackageId(orinPay.getCoursePackageId());
            to.setState(1);
            to.setAppUserId(student.getAppUserId());
            to.setStatus(1);
            to.setInsertTime(new Date());
            Integer validDays = coursePackage.getValidDays();
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date());
            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
            to.setUseTime(calendar.getTime());
            orderStudentService.save(to);
            if(null == student.getValidity()){
                student.setValidity(calendar.getTime());
            }else if(student.getValidity().getTime() < calendar.getTime().getTime()){
                student.setValidity(calendar.getTime());
            }
            studentClient.frozen(student);
            Integer laveClassHours1 = orinPay.getLaveClassHours();
            Integer appUserId = orinPay.getAppUserId();
            orinPay.setLaveClassHours(0);
            orinPay.setAppUserId(null);
            orinPay.setStatus(6);
            orderStudentService.updateById(orinPay);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("赠课");
            courseCounsum.setNum(laveClassHours1);
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            courseCounsum1.setReason("赠课");
            courseCounsum1.setNum(laveClassHours1);
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(to.getId());
            counsumService.save(courseCounsum1);
            //开始排课
             addPackageStudent(coursePackage, to.getAppUserId(), to.getStudentId(), to);
            //删除原排课数据
            List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingService.selectList(new QueryWrapper<CoursePackageScheduling>()
                    .eq("type", 1).eq("appUserId", appUserId)
                    .eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId())
                    .orderByAsc("classDate"));
            int num = totalClassHours - laveClassHours;
            for (int i = num; i < coursePackageSchedulings.size(); i++) {
                CoursePackageScheduling packageScheduling = coursePackageSchedulings.get(i);
                coursePackageSchedulingService.deleteById(packageScheduling.getId());
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", packageScheduling.getId()));
            }
        }
    }
    /**
     * 新购买课程后的排课
     *
     * @param userId
     * @param sId
     * @throws ParseException
     */
    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent) {
        try {
            //1常规 2假期 3体验
            if (tCoursePackage.getType() == 1) {
                //上课星期
                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");
                //剩余课时
                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
                //扣除课时数
                Integer codeTime = tCoursePackage.getCodeTime();
                //排课 本周+下周,课时不够扣则直接剩余不排课
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                calendar.set(Calendar.HOUR_OF_DAY, 0);
                calendar.set(Calendar.MINUTE, 0);
                calendar.set(Calendar.SECOND, 0);
                int day_week = calendar.get(Calendar.DAY_OF_WEEK);
                day_week = day_week - 1 == 0 ? 7 : day_week - 1;
                int num = 8 - day_week + 7;
                Student student = studentClient.queryStudentById(coursePackageOrderStudent.getStudentId());
                Date useTime = student.getValidity();
                for (int i = 0; i < num; i++) {
                    Date time = calendar.getTime();
                    //判断当天是否在排课星期内
                    int day = calendar.get(Calendar.DAY_OF_WEEK);
                    day = day - 1 == 0 ? 7 : day - 1;
                    if (!week.contains(day)) {
                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                        continue;
                    }
                }else if(integer>i) {
                    Calendar instance = Calendar.getInstance();
                    instance.add(Calendar.DATE,integer-i);
                    Date time1 = instance.getTime();
                    List<Date> list = new ArrayList<>();
                    list.add(time1);
                    instance.add(Calendar.DATE,7);
                    Date time2 = instance.getTime();
                    list.add(time2);
                    for (Date time : list) {
                        for (int i1 = 0; i1 < split.length; i1++) {
                            CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                            coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                                            Date parse = format1.parse(format.format(time) + " " + split[i1]);
                                Date parse1 = format1.parse(format.format(time) + " " + 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());
                            studentService.save(student1);
                    //大于有效期不进行排课
                    if (calendar.getTimeInMillis() >= useTime.getTime()) {
                        break;
                    }
                    for (int j = 0; j < split.length; j++) {
                        //剩余数量不足以排课
                        if (laveClassHours.compareTo(codeTime) < 0) {
                            break;
                        }
                    }
                }else {
                    Calendar instance = Calendar.getInstance();
                    instance.add(Calendar.DATE,7);
                    Date time = instance.getTime();
                        laveClassHours -= codeTime;
                    for (int i1 = 0; i1 < split.length; i1++) {
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setType(tCoursePackage.getType());
                        coursePackageScheduling.setAppUserId(userId);
                        coursePackageScheduling.setStudentId(sId);
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                                    Date parse = format1.parse(format.format(time) + " " + split[i1]);
                            Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                            coursePackageScheduling.setClassDate(parse);
                            coursePackageScheduling.setEndDate(parse1);
                            coursePackageScheduling.setStatus(1);
                            coursePackageSchedulingService.insert(coursePackageScheduling);
                        Date parse = format1.parse(format.format(time) + " " + split[j]);
                        Date parse1 = format1.parse(format.format(time) + " " + split1[j]);
                        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.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(holi.getId());
                        student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(1);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        studentService.save(student1);
                        cpsMapper.insert(student1);
                    }
                    //增加日期,用于判断
                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                }
            }
            if (tCoursePackage.getType() == 2) {
                //上课星期
                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");
                Date startTime = tCoursePackage.getStartTime();
                Date endTime = tCoursePackage.getEndTime();
                //排课 本周+下周,课时不够扣则直接剩余不排课
                Calendar calendar = Calendar.getInstance();
                //假期开始使用当前时间为起始时间进行排课
                calendar.setTime(startTime.getTime() > System.currentTimeMillis() ? startTime : new Date());
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                while (true) {
                    Date time = calendar.getTime();
                    //判断当天是否在排课星期内
                    int day = calendar.get(Calendar.DAY_OF_WEEK);
                    day = day - 1 == 0 ? 7 : day - 1;
                    if (!week.contains(day)) {
                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                        continue;
                    }
                    //大于有效期不进行排课
                    if (calendar.getTimeInMillis() > endTime.getTime()) {
                        break;
                    }
                    for (int j = 0; j < split.length; j++) {
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setType(tCoursePackage.getType());
                        coursePackageScheduling.setAppUserId(userId);
                        coursePackageScheduling.setStudentId(sId);
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(time) + " " + split[j]);
                        Date parse1 = format1.parse(format.format(time) + " " + split1[j]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.insert(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(null);
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(1);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                    }
                    //增加日期,用于判断
                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Resource
    private StudentClient studentClient;
    @Autowired
    private CourseCounsumService courseCounsumService;
    @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[] stuIds = toHoliDto.getIds();
        //查询出学员ids对应的棵树,判断剩余课时数是否够
        List<CoursePackageOrderStudent> list = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().eq("coursePackageId", toHoliDto.getClassId()).in("studentId", stuIds));
        List<String> notStudent = new ArrayList<>();
        for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
            if (coursePackageOrderStudent.getLaveClassHours() < toHoliDto.getClassNum()) {
                notStudent.add(studentClient.queryStudentById(coursePackageOrderStudent.getStudentId()).getName());
            }
        }
        if (!notStudent.isEmpty()) {
            String notStudentStr = String.join(",", notStudent);
            return notStudentStr+":课时数不足";
        }
        for (String stuId : stuIds) {
            Student student = studentClient.queryStudentById(Integer.valueOf(stuId));
            // 扣除 原来的课时数
        // 添加购买课时 paytyoe为7
        // 排课可期  判断课程时间段  添加排课表  添加上课记录表
        // 找到原来的课包 扣课时
//        CoursePackageOrderStudent coursePackageOrderStudent = orderStudentService.getById(toHoliDto.getId());
        CoursePackageOrderStudent coursePackageOrderStudent = orderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>().eq("coursePackageId",toHoliDto.getId()).eq("studentId",stuId));
        TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId());
        TCoursePackage coursePackage1 = coursePackageService.getById(toHoliDto.getClassId());
        //判断剩余课时是否已经全部进行排课,如果排课需要删除已经排好的记录
        List<CoursePackageScheduling> list1 = coursePackageSchedulingService.selectList(new QueryWrapper<CoursePackageScheduling>()
                .eq("studentId", coursePackageOrderStudent.getStudentId()).eq("status", 1)
                .eq("type", 1).orderByDesc("classDate"));
        //已经排课但没有使用的课时数量
        int number = list1.size() * coursePackage.getNeedNum();
        Integer laveClassHours1 = coursePackageOrderStudent.getLaveClassHours();
        laveClassHours1 -= number;
        //需要购买使用的课时数
        Integer num = toHoliDto.getClassNum();
        //需要删除多余的排课记录
        if(num.compareTo(laveClassHours1) > 0){
            //课时数差额
            int number1 = num - laveClassHours1;
            double o = number1 % coursePackage.getNeedNum();
            int l = 0;
            if(0 != o){
                l = 1;
            }
            int n = Double.valueOf(number1 / coursePackage.getNeedNum()).intValue() + l;
            for (int i = 0; i < n; i++) {
                CoursePackageScheduling coursePackageScheduling = list1.get(i);
                coursePackageSchedulingService.deleteById(coursePackageScheduling.getId());
                coursePackageStudentService.getBaseMapper().delete(new QueryWrapper<CoursePackageStudent>()
                        .eq("coursePackageSchedulingId", coursePackageScheduling.getId()));
            }
        }
            coursePackageOrderStudent.setAppUserId(null);
        coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours()-toHoliDto.getClassNum());
            orderStudentService.updateById(coursePackageOrderStudent);
            //上课星期
            String classWeeks = coursePackage1.getClassWeeks();
            List<Integer> week = week(classWeeks);
            //上课时段
            String[] split = coursePackage1.getClassStartTime().split(",");
            String[] split1 = coursePackage1.getClassEndTime().split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            Date startTime = coursePackage1.getStartTime();
            Date endTime = coursePackage1.getEndTime();
            //排课 本周+下周,课时不够扣则直接剩余不排课
            Calendar calendar = Calendar.getInstance();
            //假期开始使用当前时间为起始时间进行排课
            calendar.setTime(startTime.getTime() > System.currentTimeMillis() ? startTime : new Date());
            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
            while (true) {
                Date time = calendar.getTime();
                //判断当天是否在排课星期内
                int day = calendar.get(Calendar.DAY_OF_WEEK);
                day = day - 1 == 0 ? 7 : day - 1;
                if (!week.contains(day)) {
                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                    continue;
                }
                //大于有效期不进行排课
                if (calendar.getTimeInMillis() > endTime.getTime()) {
                    break;
                }
                for (int j = 0; j < split.length; j++) {
                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                    coursePackageScheduling.setType(coursePackage1.getType());
                    coursePackageScheduling.setAppUserId(student.getAppUserId());
                    coursePackageScheduling.setStudentId(Integer.valueOf(stuId));
                    coursePackageScheduling.setCoursePackageId(coursePackage1.getId());
                    Date parse = format1.parse(format.format(time) + " " + split[j]);
                    Date parse1 = format1.parse(format.format(time) + " " + split1[j]);
                    coursePackageScheduling.setClassDate(parse);
                    coursePackageScheduling.setEndDate(parse1);
                    coursePackageScheduling.setStatus(1);
                    coursePackageSchedulingService.insert(coursePackageScheduling);
                    CoursePackageStudent student1 = new CoursePackageStudent();
                    student1.setAppUserId(student.getAppUserId());
                    student1.setStudentId(Integer.valueOf(stuId));
                    student1.setCoursePackageId(coursePackage1.getId());
                    student1.setCoursePackagePaymentId(null);
                    student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                    student1.setSignInOrNot(1);
                    student1.setReservationStatus(1);
                    student1.setInsertTime(new Date());
                    cpsMapper.insert(student1);
                }
                //增加日期,用于判断
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
            }
            System.out.println("保存成功=============》="+holi);
        CourseCounsum courseCounsum = new CourseCounsum();
        courseCounsum.setPaymentId(coursePackageOrderStudent.getId());
        courseCounsum.setChangeType(0);
        courseCounsum.setNum(toHoliDto.getClassNum());
        courseCounsum.setInsertTime(new Date());
        courseCounsum.setReason("报名假期班");
//        courseCounsum.setAppUserId(userId);
        courseCounsumService.save(courseCounsum);
        }
        String[] stringArray = strings.toArray(new String[strings.size()]);
        String join = StringUtils.join(stringArray, ",");
    System.out.println("==========join========"+join);
        return join;
        return "报名成功";
    }
    private List<Integer> week(String week){
    @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){
            switch (s) {
                case "周一":
                    integers.add(1);
                    break;
@@ -685,171 +968,156 @@
        return integers;
    }
    @RequestMapping(value = "/toTrans",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @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){
            //扣除课时
            TCoursePackagePayment payment = paymentService.getById(id);
            System.out.println("=====byId========="+payment);
            Integer laveClassHours = payment.getLaveClassHours();
            Integer classNum = toHoliDto.getClassNum();
            Integer totalClassHours = payment.getTotalClassHours();
            Student student = studentClient.queryStudentById(payment.getStudentId());
//            if (laveClassHours < classNum){
//                strings.add(student.getName()); continue;
        String[] stuIds = toHoliDto.getIds();
//        //查询出学员ids对应的棵树,判断剩余课时数是否够
//        List<CoursePackageOrderStudent> list = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().eq("coursePackageId", toHoliDto.getClassId()).in("studentId", stuIds));
//        List<String> notStudent = new ArrayList<>();
//        for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
//            if (coursePackageOrderStudent.getLaveClassHours() < toHoliDto.getClassNum()) {
//                notStudent.add(studentClient.queryStudentById(coursePackageOrderStudent.getStudentId()).getName());
//            }
//
//            Integer laveClassHoursnew = laveClassHours - classNum;
//            Integer totalClassHoursnew = totalClassHours - classNum;
            payment.setLaveClassHours(0);
            payment.setTotalClassHours(0);
            payment.setAppUserId(null);
            paymentService.updateById(payment);
            //获取student信息
            //新增课时
            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());
            holi.setPayStatus(2);
            paymentService.save(holi);
            System.out.println("保存成功=============》="+holi);
//        }
//        if (!notStudent.isEmpty()) {
//            String notStudentStr = String.join(",", notStudent);
//            return notStudentStr+":课时数不足";
//        }
        //转移课程
        for (String stuId : stuIds) {
//            CoursePackageOrderStudent orinPay = orderStudentService.getById(toHoliDto.getId());
            CoursePackageOrderStudent orinPay = orderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>()
                    .eq("studentId", stuId)
                    .eq("coursePackageId", toHoliDto.getId()));
            CoursePackageOrderStudent studentPay = orderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>()
                    .eq("studentId", stuId)
                    .eq("coursePackageId", toHoliDto.getClassId()));
            TCoursePackage coursePackage = packageService.getById(toHoliDto.getClassId());
            if (studentPay != null) {
                //转移
                Integer laveClassHours = orinPay.getLaveClassHours();
                Integer totalClassHours = orinPay.getTotalClassHours();
            TCoursePackage tCoursePackage = packageService.getById(toHoliDto.getClassId());
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setInsertTime(new Date());
                Integer appUserId = orinPay.getAppUserId();
                Integer appUserId1 = studentPay.getAppUserId();
            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");
            // 本周周几
            int i = DateUtil.dayOfWeek(new Date())-1;
            for (Integer integer : week) {
                if(integer<i){
                    // 找下一周的时间
                    Calendar instance = Calendar.getInstance();
                    instance.add(Calendar.DATE,7-(i-integer));
                    Date time = instance.getTime();
                    courseCounsum.setReason("换课");
                    for (int i1 = 0; i1 < split.length; i1++) {
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(time) + " " + split[i1]);
                            Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                            coursePackageScheduling.setClassDate(parse);
                            coursePackageScheduling.setEndDate(parse1);
                            coursePackageScheduling.setStatus(1);
                            coursePackageSchedulingService.insert(coursePackageScheduling);
                orinPay.setLaveClassHours(0);
                orinPay.setStatus(3);
                orinPay.setAppUserId(null);
                orderStudentService.updateById(orinPay);
                        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());
                        studentService.save(student1);
                courseCounsum.setNum(laveClassHours);
                courseCounsum.setChangeType(0);
                courseCounsum.setPaymentId(orinPay.getId());
                counsumService.save(courseCounsum);
                    }
                CourseCounsum courseCounsum1 = new CourseCounsum();
                courseCounsum1.setInsertTime(new Date());
//                if (appUserId.compareTo(appUserId1) != 0) {
//                    courseCounsum1.setReason("赠课");
//                } else {
                    courseCounsum1.setReason("换课");
//                }
                courseCounsum1.setNum(laveClassHours);
                courseCounsum1.setChangeType(1);
                courseCounsum1.setPaymentId(studentPay.getId());
                counsumService.save(courseCounsum1);
                }else if(integer>i) {
                    Calendar instance = Calendar.getInstance();
                    instance.add(Calendar.DATE,integer-i);
                    Date time1 = instance.getTime();
                    List<Date> list = new ArrayList<>();
                    list.add(time1);
                    instance.add(Calendar.DATE,7);
                    Date time2 = instance.getTime();
                    list.add(time2);
                    for (Date time : list) {
                        for (int i1 = 0; i1 < split.length; i1++) {
                            CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                            coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                                            Date parse = format1.parse(format.format(time) + " " + split[i1]);
                                Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                                coursePackageScheduling.setClassDate(parse);
                                coursePackageScheduling.setEndDate(parse1);
                                coursePackageScheduling.setStatus(1);
                                coursePackageSchedulingService.insert(coursePackageScheduling);
                schedulingService.addNewCoursePackageScheduling(studentPay.getId(), laveClassHours);
                //删除原排课数据
                List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingService.selectList(new QueryWrapper<CoursePackageScheduling>()
                        .eq("type", 1).eq("appUserId", appUserId)
                        .eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId())
                        .orderByAsc("classDate"));
                int num = totalClassHours - laveClassHours;
                for (int i = num; i < coursePackageSchedulings.size(); i++) {
                    CoursePackageScheduling packageScheduling = coursePackageSchedulings.get(i);
                    coursePackageSchedulingService.deleteById(packageScheduling.getId());
                    coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", packageScheduling.getId()));
                }
            } else {
                            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());
                            studentService.save(student1);
                        }
                    }
                Integer totalClassHours = orinPay.getTotalClassHours();
                Integer laveClassHours = orinPay.getLaveClassHours();
                Student student = studentClient.queryStudentById(Integer.valueOf(stuId));
                CoursePackageOrderStudent to = new CoursePackageOrderStudent();
                to.setStudentId(Integer.valueOf(stuId));
                to.setTotalClassHours(laveClassHours);
                to.setLaveClassHours(laveClassHours);
                to.setCoursePackageId(toHoliDto.getClassId());
                to.setState(1);
                to.setAppUserId(student.getAppUserId());
                to.setStatus(1);
                to.setInsertTime(new Date());
                }else {
                    Calendar instance = Calendar.getInstance();
                    instance.add(Calendar.DATE,7);
                    Date time = instance.getTime();
                Integer validDays = coursePackage.getValidDays();
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                to.setUseTime(calendar.getTime());
                orderStudentService.save(to);
                if (null == student.getValidity()) {
                    student.setValidity(calendar.getTime());
                } else if (student.getValidity().getTime() < calendar.getTime().getTime()) {
                    student.setValidity(calendar.getTime());
                }
                studentClient.frozen(student);
                    for (int i1 = 0; i1 < split.length; i1++) {
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                                    Date parse = format1.parse(format.format(time) + " " + split[i1]);
                            Date parse1 = format1.parse(format.format(time) + " " + 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());
                        studentService.save(student1);
                    }
                Integer laveClassHours1 = orinPay.getLaveClassHours();
                Integer appUserId = orinPay.getAppUserId();
                orinPay.setLaveClassHours(0);
                orinPay.setAppUserId(null);
                orinPay.setStatus(3);
                orderStudentService.updateById(orinPay);
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setInsertTime(new Date());
                courseCounsum.setReason("换课");
                courseCounsum.setNum(laveClassHours1);
                courseCounsum.setChangeType(0);
                courseCounsum.setPaymentId(orinPay.getId());
                counsumService.save(courseCounsum);
                CourseCounsum courseCounsum1 = new CourseCounsum();
                courseCounsum1.setInsertTime(new Date());
                courseCounsum1.setReason("换课");
                courseCounsum1.setNum(laveClassHours1);
                courseCounsum1.setChangeType(1);
                courseCounsum1.setPaymentId(to.getId());
                counsumService.save(courseCounsum1);
                //开始排课
                addPackageStudent(coursePackage, to.getAppUserId(), to.getStudentId(), to);
                //删除原排课数据
                List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingService.selectList(new QueryWrapper<CoursePackageScheduling>()
                        .eq("type", 1).eq("appUserId", appUserId)
                        .eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId())
                        .orderByAsc("classDate"));
                int num = totalClassHours - laveClassHours;
                for (int i = num; i < coursePackageSchedulings.size(); i++) {
                    CoursePackageScheduling packageScheduling = coursePackageSchedulings.get(i);
                    coursePackageSchedulingService.deleteById(packageScheduling.getId());
                    coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("coursePackageSchedulingId", packageScheduling.getId()));
                }
            }
        }
        String[] stringArray = strings.toArray(new String[strings.size()]);
    return "换课成功";
        String join = StringUtils.join(stringArray, ",");
        System.out.println("==========join========"+join);
        return "转课成功";
    }
}