nickchange
2023-10-18 062fb1ed6efcaac5d75bbe184524c4929dff7fcd
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -54,8 +54,11 @@
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@@ -142,7 +145,7 @@
        Integer studentId = packagePayment.getStudentId();
        // 添加学员上课记录
        CoursePackageStudent coursePackageStudent = new CoursePackageStudent();
        TCoursePackagePayment one = packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", packagePayment)
        TCoursePackagePayment one = packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", packagePayment.getStudentId())
                .orderByDesc("insertTime")
                .last("LIMIT 1"));
@@ -1645,7 +1648,7 @@
                    if(ToolUtil.isEmpty(coursePackage.getNeedNum())){
                        coursePackageStudent.setNeedNum(0);
                    }else {
                        coursePackageStudent.setNeedNum(coursePackageStudent.getNeedNum());
                        coursePackageStudent.setNeedNum(coursePackage.getNeedNum());
                    }
                }
            }
@@ -1661,7 +1664,7 @@
        ArrayList<Integer> years = new ArrayList<>();
        for (Object o : collect) {
            String s = o.toString();
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).collect(Collectors.toList());
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList());
            int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum();
            years.add(sum2);
        }
@@ -1682,47 +1685,391 @@
                m="0"+i;
            }
            String s = year + "-" + m;
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).collect(Collectors.toList());
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList());
            int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum();
            months.add(sum2);
        }
        map.put("monthData",months);
        // 周
        // 获取最近四周
        LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN);
        LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX);
        // 周度数据
        String s1 = minNow.minusDays(6).toString();
        String s2 = maxNow.toString();
        LocalDateTime s1 = minNow.minusDays(6);
        LocalDateTime s2 = maxNow;
        String s3 = minNow.minusDays(13).toString();
        String s4 = maxNow.minusDays(6).toString();
        LocalDateTime s3 = minNow.minusDays(13);
        LocalDateTime s4 = maxNow.minusDays(6);
        String s5 = minNow.minusDays(20).toString();
        String s6 = maxNow.minusDays(13).toString();
        LocalDateTime s5 = minNow.minusDays(20);
        LocalDateTime s6 = maxNow.minusDays(13);
        String s7 = minNow.minusDays(27).toString();
        String s8 = maxNow.minusDays(20).toString();
        LocalDateTime s7 = minNow.minusDays(27);
        LocalDateTime s8 = maxNow.minusDays(20);
        ArrayList<Object> weekData = new ArrayList<>();
//
//        int count = studentService.count(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect1).between(TStudent::getInsertTime, s7, s8));
//
//        int count1 = studentService.count(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect1).between(TStudent::getInsertTime,s5,s6));
//
//        int count2 = studentService.count(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect1).between(TStudent::getInsertTime,s3,s4));
//
//        int count3 = studentService.count(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect1).between(TStudent::getInsertTime,s1,s2));
        int count  = 0;
//        map.put("count",count);
//        map.put("count1",count1);
//        map.put("count2",count2);
//        map.put("count3",count3);
        return null;
        int count1 = 0;
        int count2 = 0;
        int count3 = 0;
        for (CoursePackageStudent coursePackageStudent : list) {
            if (coursePackageStudent.getNeedNum()==null){
                continue;
            }
            // 如果到课状态为否 则不计算
            if (coursePackageStudent.getSignInOrNot() != 0) {
                Date insertTime = coursePackageStudent.getInsertTime();
                Instant instant = insertTime.toInstant();
                ZoneId zoneId = ZoneId.systemDefault();
                LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime();
                if (dateTime.isAfter(s1) && dateTime.isBefore(s2)){
                    count+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s3) && dateTime.isBefore(s4)){
                    count1+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s5) && dateTime.isBefore(s6)){
                    count2+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s7) && dateTime.isBefore(s8)){
                    count3+=coursePackageStudent.getNeedNum();
                }
            }
        }
        weekData.add(count3);
        weekData.add(count2);
        weekData.add(count1);
        weekData.add(count);
        map.put("weekData",weekData);
        LocalDateTime currentDateTime = LocalDateTime.now();
        List<Integer> amountByDay = new ArrayList<>(Collections.nCopies(7,0));
        for (CoursePackageStudent coursePackageStudent : list) {
            Date insertTime = coursePackageStudent.getInsertTime();
            // 将 Date 转换为 LocalDateTime
            LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
            // 计算日期与当前日期的差距
            long daysDifference = ChronoUnit.DAYS.between(insertDateTime.toLocalDate(), currentDateTime.toLocalDate());
            // 如果日期在七天内,累加金额
            if (daysDifference >= 0 && daysDifference < 7) {
                int index = (int) (6 - daysDifference); // 计算对应的索引位置
                Integer needNum = coursePackageStudent.getNeedNum();
                if (needNum!=null){
                    int i = amountByDay.get(index) + needNum;
                    amountByDay.set(index, i);
                }
            }
        }
        map.put("dayData", amountByDay);
        return map;
    }
    @ResponseBody
    @PostMapping("/coursePackagePayment/courseYys")
    HashMap<String, Object> courseYys(@RequestBody List<Integer> userPt){
        if(userPt.size()==0){
            userPt.add(-1);
        }
        HashMap<String, Object> map = new HashMap<>();
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.listOne(userPt);
        int sum = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getTotalClassHours).sum();
        int sum1 = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getLaveClassHours).sum();
        map.put("allCourse",sum-sum1);
        //所有课包
        List<TCoursePackage> coursePackages = tcpService.list();
        // 年
        List<CoursePackageStudent> list = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>().in(CoursePackageStudent::getAppUserId, userPt));
        for (CoursePackageStudent coursePackageStudent : list) {
            for (TCoursePackage coursePackage : coursePackages) {
                if(coursePackageStudent.getCoursePackageId().equals(coursePackage.getId())){
                    if(ToolUtil.isEmpty(coursePackage.getNeedNum())){
                        coursePackageStudent.setNeedNum(0);
                    }else {
                        coursePackageStudent.setNeedNum(coursePackage.getNeedNum());
                    }
                }
            }
        }
        ArrayList<Object> integers = new ArrayList<>();
        int year = cn.hutool.core.date.DateUtil.year(new Date());
        for (int i = 0; i < 10; i++) {
            integers.add(year-i);
        }
        List<Object> collect = integers.stream().sorted().collect(Collectors.toList());
        // 年
        ArrayList<Integer> years = new ArrayList<>();
        for (Object o : collect) {
            String s = o.toString();
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList());
            int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum();
            years.add(sum2);
        }
        map.put("yearData",years);
        ArrayList<Integer> months = new ArrayList<>();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 月
        for (int i = 1; i <= 12; i++) {
            String m=i+"";
            if(i<10){
                m="0"+i;
            }
            String s = year + "-" + m;
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList());
            int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum();
            months.add(sum2);
        }
        map.put("monthData",months);
        // 周
        // 获取最近四周
        LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN);
        LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX);
        // 周度数据
        LocalDateTime s1 = minNow.minusDays(6);
        LocalDateTime s2 = maxNow;
        LocalDateTime s3 = minNow.minusDays(13);
        LocalDateTime s4 = maxNow.minusDays(6);
        LocalDateTime s5 = minNow.minusDays(20);
        LocalDateTime s6 = maxNow.minusDays(13);
        LocalDateTime s7 = minNow.minusDays(27);
        LocalDateTime s8 = maxNow.minusDays(20);
        ArrayList<Object> weekData = new ArrayList<>();
        int count  = 0;
        int count1 = 0;
        int count2 = 0;
        int count3 = 0;
        for (CoursePackageStudent coursePackageStudent : list) {
            if (coursePackageStudent.getNeedNum()==null){
                continue;
            }
            // 如果到课状态为否 则不计算
            if (coursePackageStudent.getSignInOrNot() != 0) {
                Date insertTime = coursePackageStudent.getInsertTime();
                Instant instant = insertTime.toInstant();
                ZoneId zoneId = ZoneId.systemDefault();
                LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime();
                if (dateTime.isAfter(s1) && dateTime.isBefore(s2)){
                    count+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s3) && dateTime.isBefore(s4)){
                    count1+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s5) && dateTime.isBefore(s6)){
                    count2+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s7) && dateTime.isBefore(s8)){
                    count3+=coursePackageStudent.getNeedNum();
                }
            }
        }
        weekData.add(count3);
        weekData.add(count2);
        weekData.add(count1);
        weekData.add(count);
        map.put("weekData",weekData);
        LocalDateTime currentDateTime = LocalDateTime.now();
        List<Integer> amountByDay = new ArrayList<>(Collections.nCopies(7,0));
        for (CoursePackageStudent coursePackageStudent : list) {
            Date insertTime = coursePackageStudent.getInsertTime();
            // 将 Date 转换为 LocalDateTime
            LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
            // 计算日期与当前日期的差距
            long daysDifference = ChronoUnit.DAYS.between(insertDateTime.toLocalDate(), currentDateTime.toLocalDate());
            // 如果日期在七天内,累加金额
            if (daysDifference >= 0 && daysDifference < 7) {
                int index = (int) (6 - daysDifference); // 计算对应的索引位置
                Integer needNum = coursePackageStudent.getNeedNum();
                if (needNum!=null){
                    int i = amountByDay.get(index) + needNum;
                    amountByDay.set(index, i);
                }
            }
        }
        map.put("dayData", amountByDay);
        return map;
    }
    @ResponseBody
    @PostMapping("/coursePackagePayment/courseStore")
    HashMap<String, Object> courseStore(@RequestBody List<Integer> userPt){
        if(userPt.size()==0){
            userPt.add(-1);
        }
        HashMap<String, Object> map = new HashMap<>();
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.listOne(userPt);
        int sum = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getTotalClassHours).sum();
        int sum1 = tCoursePackagePayments.stream().mapToInt(TCoursePackagePayment::getLaveClassHours).sum();
        map.put("allCourse",sum-sum1);
        //所有课包
        List<TCoursePackage> coursePackages = tcpService.list();
        // 年
        List<CoursePackageStudent> list = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>().in(CoursePackageStudent::getAppUserId, userPt));
        for (CoursePackageStudent coursePackageStudent : list) {
            for (TCoursePackage coursePackage : coursePackages) {
                if(coursePackageStudent.getCoursePackageId().equals(coursePackage.getId())){
                    if(ToolUtil.isEmpty(coursePackage.getNeedNum())){
                        coursePackageStudent.setNeedNum(0);
                    }else {
                        coursePackageStudent.setNeedNum(coursePackage.getNeedNum());
                    }
                }
            }
        }
        ArrayList<Object> integers = new ArrayList<>();
        int year = cn.hutool.core.date.DateUtil.year(new Date());
        for (int i = 0; i < 10; i++) {
            integers.add(year-i);
        }
        List<Object> collect = integers.stream().sorted().collect(Collectors.toList());
        // 年
        ArrayList<Integer> years = new ArrayList<>();
        for (Object o : collect) {
            String s = o.toString();
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList());
            int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum();
            years.add(sum2);
        }
        map.put("yearData",years);
        ArrayList<Integer> months = new ArrayList<>();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 月
        for (int i = 1; i <= 12; i++) {
            String m=i+"";
            if(i<10){
                m="0"+i;
            }
            String s = year + "-" + m;
            List<CoursePackageStudent> collect1 = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).filter(student -> student.getNeedNum() != null).collect(Collectors.toList());
            int sum2 = collect1.stream().mapToInt(CoursePackageStudent::getNeedNum).sum();
            months.add(sum2);
        }
        map.put("monthData",months);
        // 周
        // 获取最近四周
        LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN);
        LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX);
        // 周度数据
        LocalDateTime s1 = minNow.minusDays(6);
        LocalDateTime s2 = maxNow;
        LocalDateTime s3 = minNow.minusDays(13);
        LocalDateTime s4 = maxNow.minusDays(6);
        LocalDateTime s5 = minNow.minusDays(20);
        LocalDateTime s6 = maxNow.minusDays(13);
        LocalDateTime s7 = minNow.minusDays(27);
        LocalDateTime s8 = maxNow.minusDays(20);
        ArrayList<Object> weekData = new ArrayList<>();
        int count  = 0;
        int count1 = 0;
        int count2 = 0;
        int count3 = 0;
        for (CoursePackageStudent coursePackageStudent : list) {
            if (coursePackageStudent.getNeedNum()==null){
                continue;
            }
            // 如果到课状态为否 则不计算
            if (coursePackageStudent.getSignInOrNot() != 0) {
                Date insertTime = coursePackageStudent.getInsertTime();
                Instant instant = insertTime.toInstant();
                ZoneId zoneId = ZoneId.systemDefault();
                LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime();
                if (dateTime.isAfter(s1) && dateTime.isBefore(s2)){
                    count+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s3) && dateTime.isBefore(s4)){
                    count1+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s5) && dateTime.isBefore(s6)){
                    count2+=coursePackageStudent.getNeedNum();
                }else if(dateTime.isAfter(s7) && dateTime.isBefore(s8)){
                    count3+=coursePackageStudent.getNeedNum();
                }
            }
        }
        weekData.add(count3);
        weekData.add(count2);
        weekData.add(count1);
        weekData.add(count);
        map.put("weekData",weekData);
        LocalDateTime currentDateTime = LocalDateTime.now();
        List<Integer> amountByDay = new ArrayList<>(Collections.nCopies(7,0));
        for (CoursePackageStudent coursePackageStudent : list) {
            Date insertTime = coursePackageStudent.getInsertTime();
            // 将 Date 转换为 LocalDateTime
            LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
            // 计算日期与当前日期的差距
            long daysDifference = ChronoUnit.DAYS.between(insertDateTime.toLocalDate(), currentDateTime.toLocalDate());
            // 如果日期在七天内,累加金额
            if (daysDifference >= 0 && daysDifference < 7) {
                int index = (int) (6 - daysDifference); // 计算对应的索引位置
                Integer needNum = coursePackageStudent.getNeedNum();
                if (needNum!=null){
                    int i = amountByDay.get(index) + needNum;
                    amountByDay.set(index, i);
                }
            }
        }
        map.put("dayData", amountByDay);
        return map;
    }
}