From 8d136a0f92dcd31d77e18c30f9b1865db83b0f85 Mon Sep 17 00:00:00 2001
From: liujie <liujie>
Date: 星期二, 10 十月 2023 14:25:53 +0800
Subject: [PATCH] update

---
 cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html                              |    4 
 cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java                               |    2 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java                 |  109 ++++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html                     |  321 ++++++++++++
 cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml                                  |    4 
 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java                            |  322 ++++++++++++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html                  |  330 ++++++++++++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java |  113 ++++
 cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java                      |    2 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java         |    5 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html                               |    1 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html                  |  319 +++++++++--
 cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java                |    5 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java                     |    7 
 14 files changed, 1,455 insertions(+), 89 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
index 394eec2..77dee1e 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
@@ -311,6 +311,8 @@
 
         ArrayList<Long> months = new ArrayList<>();
         ArrayList<Long> monthsVip = new ArrayList<>();
+
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         // 月
         for (int i = 1; i <= 12; i++) {
             String m=i+"";
@@ -318,8 +320,8 @@
                 m="0"+i;
             }
             String s = year + "-" + m;
-            long count = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
-            long count1 = list1.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
+            long count = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
+            long count1 = list1.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
             months.add(count);
             monthsVip.add(count1);
         }
@@ -385,6 +387,322 @@
         return map;
 
     }
+    @ResponseBody
+    @PostMapping("/student/stuPt")
+    public HashMap<String, Object>  stuPt(){
+        HashMap<String, Object> map = new HashMap<>();
+        // 所有的
+        List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1));
+        List<Integer> collect1 = list.stream().map(TAppUser::getId).collect(Collectors.toList());
+        if(collect1.size()==0){
+            collect1.add(-1);
+        }
+        List<TStudent> students = studentService.list(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect1));
+        map.put("allUser",students.size());
+
+        ArrayList<Object> integers = new ArrayList<>();
+        int year = 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<Long> years = new ArrayList<>();
+        for (Object o : collect) {
+            String s = o.toString();
+            long count = students.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
+            years.add(count);
+        }
+        map.put("yearData",years);
+
+        ArrayList<Long> 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;
+            long count = students.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
+            months.add(count);
+        }
+        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();
+
+        String s3 = minNow.minusDays(13).toString();
+        String s4 = maxNow.minusDays(6).toString();
+
+
+        String s5 = minNow.minusDays(20).toString();
+        String s6 = maxNow.minusDays(13).toString();
+
+        String s7 = minNow.minusDays(27).toString();
+        String s8 = maxNow.minusDays(20).toString();
+
+
+        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));
+        map.put("count",count);
+        map.put("count1",count1);
+        map.put("count2",count2);
+        map.put("count3",count3);
+
+
+        // 日
+        ArrayList<Integer> days = new ArrayList<>();
+        for (int i = 6; i >= 0; i--) {
+            String s = minNow.minusDays(i).toString();
+            String s9 = maxNow.minusDays(i).toString();
+            int count4 = studentService.count(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect1).between(TStudent::getInsertTime,s,s9));
+            days.add(count4);
+        }
+        map.put("dayData",days);
+
+
+        return map;
+
+    }
+
+
+
+
+
+
+
+
+
+    @ResponseBody
+    @PostMapping("/student/userAndVipYys")
+    public HashMap<String, Object>  userAndVipYys(@RequestBody Integer id){
+        HashMap<String, Object> map = new HashMap<>();
+        // 所有的
+        List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id));
+        map.put("allUser",list.size());
+        List<TAppUser> list1 = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1));
+        map.put("allVip",list1.size());
+
+
+        ArrayList<Object> integers = new ArrayList<>();
+        int year = 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<Long> years = new ArrayList<>();
+        ArrayList<Long> yearsVip = new ArrayList<>();
+        for (Object o : collect) {
+            String s = o.toString();
+            long count = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
+            long count1 = list1.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
+            years.add(count);
+            yearsVip.add(count1);
+        }
+        map.put("yearData",years);
+        map.put("yearsVip",yearsVip);
+
+        ArrayList<Long> months = new ArrayList<>();
+        ArrayList<Long> monthsVip = 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;
+            long count = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
+            long count1 = list1.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
+            months.add(count);
+            monthsVip.add(count1);
+        }
+        map.put("monthData",months);
+        map.put("monthsVip",monthsVip);
+
+        // 周
+
+        // 获取最近四周
+        LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN);
+        LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX);
+        // 周度数据
+        String s1 = minNow.minusDays(6).toString();
+        String s2 = maxNow.toString();
+
+        String s3 = minNow.minusDays(13).toString();
+        String s4 = maxNow.minusDays(6).toString();
+
+
+        String s5 = minNow.minusDays(20).toString();
+        String s6 = maxNow.minusDays(13).toString();
+
+        String s7 = minNow.minusDays(27).toString();
+        String s8 = maxNow.minusDays(20).toString();
+
+
+        int count = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime, s7, s8));
+        int countVip = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s7, s8));
+
+        int count1 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s5,s6));
+        int countVip1 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s5,s6));
+
+        int count2 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s3,s4));
+        int countVip2 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s3,s4));
+
+        int count3 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s1,s2));
+        int countVip3 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s1,s2));
+        map.put("count",count);
+        map.put("count1",count1);
+        map.put("count2",count2);
+        map.put("count3",count3);
+        map.put("countVip",countVip);
+        map.put("countVip1",countVip1);
+        map.put("countVip2",countVip2);
+        map.put("countVip3",countVip3);
+
+
+        // 日
+        ArrayList<Integer> days = new ArrayList<>();
+        ArrayList<Integer> daysVip = new ArrayList<>();
+        for (int i = 6; i >= 0; i--) {
+            String s = minNow.minusDays(i).toString();
+            String s9 = maxNow.minusDays(i).toString();
+            int count4 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s,s9));
+            int countVip5 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s,s9));
+            days.add(count4);
+            daysVip.add(countVip5);
+        }
+        map.put("dayData",days);
+        map.put("daysVip",daysVip);
+
+
+        return map;
+
+    }
+    @ResponseBody
+    @PostMapping("/student/userAndVipStore")
+    public HashMap<String, Object>  userAndVipStore(@RequestBody Integer id){
+        HashMap<String, Object> map = new HashMap<>();
+        // 所有的
+        List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id));
+        map.put("allUser",list.size());
+        List<TAppUser> list1 = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1));
+        map.put("allVip",list1.size());
+
+
+        ArrayList<Object> integers = new ArrayList<>();
+        int year = 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<Long> years = new ArrayList<>();
+        ArrayList<Long> yearsVip = new ArrayList<>();
+        for (Object o : collect) {
+            String s = o.toString();
+            long count = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
+            long count1 = list1.stream().filter(e -> e.getInsertTime().toString().contains(s)).count();
+            years.add(count);
+            yearsVip.add(count1);
+        }
+        map.put("yearData",years);
+        map.put("yearsVip",yearsVip);
+
+        ArrayList<Long> months = new ArrayList<>();
+        ArrayList<Long> monthsVip = 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;
+            long count = list.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
+            long count1 = list1.stream().filter(e -> format.format(e.getInsertTime()).contains(s)).count();
+            months.add(count);
+            monthsVip.add(count1);
+        }
+        map.put("monthData",months);
+        map.put("monthsVip",monthsVip);
+
+        // 周
+
+        // 获取最近四周
+        LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN);
+        LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX);
+        // 周度数据
+        String s1 = minNow.minusDays(6).toString();
+        String s2 = maxNow.toString();
+
+        String s3 = minNow.minusDays(13).toString();
+        String s4 = maxNow.minusDays(6).toString();
+
+
+        String s5 = minNow.minusDays(20).toString();
+        String s6 = maxNow.minusDays(13).toString();
+
+        String s7 = minNow.minusDays(27).toString();
+        String s8 = maxNow.minusDays(20).toString();
+
+
+        int count = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime, s7, s8));
+        int countVip = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s7, s8));
+
+        int count1 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s5,s6));
+        int countVip1 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s5,s6));
+
+        int count2 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s3,s4));
+        int countVip2 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s3,s4));
+
+        int count3 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s1,s2));
+        int countVip3 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s1,s2));
+        map.put("count",count);
+        map.put("count1",count1);
+        map.put("count2",count2);
+        map.put("count3",count3);
+        map.put("countVip",countVip);
+        map.put("countVip1",countVip1);
+        map.put("countVip2",countVip2);
+        map.put("countVip3",countVip3);
+
+
+        // 日
+        ArrayList<Integer> days = new ArrayList<>();
+        ArrayList<Integer> daysVip = new ArrayList<>();
+        for (int i = 6; i >= 0; i--) {
+            String s = minNow.minusDays(i).toString();
+            String s9 = maxNow.minusDays(i).toString();
+            int count4 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).between(TAppUser::getInsertTime,s,s9));
+            int countVip5 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s,s9));
+            days.add(count4);
+            daysVip.add(countVip5);
+        }
+        map.put("dayData",days);
+        map.put("daysVip",daysVip);
+
+
+        return map;
+
+    }
 
 
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java
index 4a04537..8b354b0 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java
@@ -15,5 +15,7 @@
 
     @ApiModelProperty(value = "答复内容")
     private String quesContents;
+    @ApiModelProperty(value = "答复时间")
+    private String quesTime;
 
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
index 29210cf..901066a 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -583,11 +583,12 @@
             ids.add(-1);
         }
         ArrayList<Object> integers = new ArrayList<>();
-        List<Object> collect = integers.stream().sorted().collect(Collectors.toList());
         int year = 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<>();
         ArrayList<Integer> yearsUser = new ArrayList<>();
@@ -601,6 +602,8 @@
         map.put("yearData",years);
         map.put("yearsUser",yearsUser);
         // 月
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
         ArrayList<Integer> months = new ArrayList<>();
         ArrayList<Integer> monthsUser = new ArrayList<>();
         for (int i = 1; i <= 12; i++) {
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
index 2f691bb..c65589a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -54,6 +54,8 @@
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -1601,4 +1603,111 @@
     }
 
 
+
+    @ResponseBody
+    @PostMapping("/coursePackagePayment/coursePt")
+    HashMap<String, Object> coursePt(@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(coursePackageStudent.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)).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)).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();
+
+        String s3 = minNow.minusDays(13).toString();
+        String s4 = maxNow.minusDays(6).toString();
+
+
+        String s5 = minNow.minusDays(20).toString();
+        String s6 = maxNow.minusDays(13).toString();
+
+        String s7 = minNow.minusDays(27).toString();
+        String s8 = maxNow.minusDays(20).toString();
+
+//
+//        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));
+
+//        map.put("count",count);
+//        map.put("count1",count1);
+//        map.put("count2",count2);
+//        map.put("count3",count3);
+        return null;
+
+    }
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java
index b692440..a75287d 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackageStudent.java
@@ -75,6 +75,8 @@
     @TableField("type")
     private Integer type;
 
+    @TableField(exist = false)
+    private Integer needNum;
 
     @Override
     protected Serializable pkVal() {
diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml
index cec4c9e..62f0c90 100644
--- a/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml
@@ -39,8 +39,8 @@
     <select id="queryDiscountListAudit" resultType="com.dsh.course.model.DiscountList">
         select t1.id,t1.type,t1.auditStatus status,t2.province pName,t2.city cName,t2.name,t2.storeId,t2.id courseId from t_course_package_discount t1 left join  t_course_package t2 on t1.coursePackageId = t2.id
         where t2.storeId in <foreach collection="ids" close=")" item="id" open="(" separator=",">
-        #{id} and t1.auditStatus !=2
-    </foreach>
+        #{id}
+    </foreach> and t1.auditStatus !=2
         <if test="pCode !=null and pCode !=''">
             and t2.provinceCode =#{pCode}
         </if>
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
index bca3425..d498192 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
@@ -125,5 +125,12 @@
     @PostMapping("/student/userAndVipPt")
     HashMap<String, Object>  userAndVipPt(Integer type);
 
+    @PostMapping("/student/userAndVipYys")
+    HashMap<String, Object> userAndVipYys(Integer id);
+    @PostMapping("/student/userAndVipStore")
+    HashMap<String, Object> userAndVipStore(Integer id);
+    @PostMapping("/student/stuPt")
+    HashMap<String, Object> stuPt();
+
 
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
index ac52705..fb25304 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
@@ -8,6 +8,7 @@
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -92,6 +93,6 @@
     @PostMapping("/coursePackagePayment/queryCourseData")
     List<Map<String,Object>> queryCourseData(List<Integer> ids);
 
-
-
+    @PostMapping("/coursePackagePayment/coursePt")
+    HashMap<String, Object> coursePt(List<Integer> userPt);
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
index fcaffb4..e23922a 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
@@ -425,6 +425,8 @@
         return monthlyData;
     }
 
+
+
     /**
      * 运营统计-平台-用户数据
      *
@@ -435,6 +437,18 @@
 
 
         return null;
+    }
+    @RequestMapping(value = "/getYears")
+    @ResponseBody
+    public Object getYears() {
+        ArrayList<Object> integers = new ArrayList<>();
+        int year = DateUtil.year(new Date());
+        for (int i = 0; i < 10; i++) {
+            integers.add(year-i);
+        }
+        List<Object> collect = integers.stream().sorted().collect(Collectors.toList());
+
+        return collect;
     }
     /**
      * 退费-平台
@@ -826,7 +840,36 @@
     @RequestMapping(value = "/userAndVipPt")
     @ResponseBody
     public Object userAndVipPt(Integer type) {
+        type=1;
         HashMap<String, Object> map = appUserClient.userAndVipPt(type);
+        return map;
+    }
+
+    @RequestMapping(value = "/stuPt")
+    @ResponseBody
+    public Object stuPt() {
+        HashMap<String, Object> map = appUserClient.stuPt();
+        return map;
+    }
+
+    @RequestMapping(value = "/coursePt")
+    @ResponseBody
+    public Object coursePt() {
+        List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(1));
+        HashMap<String, Object> map = coursePackagePaymentClient.coursePt(userPt);
+        return map;
+    }
+
+    @RequestMapping(value = "/userAndVipYys")
+    @ResponseBody
+    public Object userAndVipYys(Integer id) {
+        HashMap<String, Object> map = appUserClient.userAndVipYys(id);
+        return map;
+    }
+    @RequestMapping(value = "/userAndVipStore")
+    @ResponseBody
+    public Object userAndVipStore(Integer id) {
+        HashMap<String, Object> map = appUserClient.userAndVipStore(id);
         return map;
     }
     @RequestMapping(value = "/actPt")
@@ -836,10 +879,78 @@
         HashMap<String, Object> map = competitionClient.actPt(userPt);
 
         List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId, 0));
+        long l1=0;
         for (TStore tStore : list) {
             long l = DateUtil.betweenDay(tStore.getCreateTime(), new Date(), true);
-            tStore.getStartTime();
+            String startTime = tStore.getStartTime();
+            String endTime = tStore.getEndTime();
+            String s = startTime.split(":")[0];
+            String s1 = endTime.split(":")[1];
+            Integer integer = Integer.valueOf(s);
+            Integer integer1 = Integer.valueOf(s1);
+            Integer a =0;
+            if(integer==0 && integer1==0){
+                a=24;
+            }else {
+                a= integer1-integer;
+            }
+            l1 += l * a;
         }
+        map.put("allHour",l1);
+        return map;
+    }
+    @RequestMapping(value = "/actYys")
+    @ResponseBody
+    public Object actYys(Integer id) {
+        List<Integer> userPt = appUserClient.getUserYYs(id);
+        HashMap<String, Object> map = competitionClient.actPt(userPt);
+
+        List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId, 0));
+        long l1=0;
+        for (TStore tStore : list) {
+            long l = DateUtil.betweenDay(tStore.getCreateTime(), new Date(), true);
+            String startTime = tStore.getStartTime();
+            String endTime = tStore.getEndTime();
+            String s = startTime.split(":")[0];
+            String s1 = endTime.split(":")[1];
+            Integer integer = Integer.valueOf(s);
+            Integer integer1 = Integer.valueOf(s1);
+            Integer a =0;
+            if(integer==0 && integer1==0){
+                a=24;
+            }else {
+                a= integer1-integer;
+            }
+            l1 += l * a;
+        }
+        map.put("allHour",l1);
+        return map;
+    }
+    @RequestMapping(value = "/actStore")
+    @ResponseBody
+    public Object actStore(Integer id) {
+        List<Integer> userPt = appUserClient.getUserStore(id);
+        HashMap<String, Object> map = competitionClient.actPt(userPt);
+
+        List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId, 0));
+        long l1=0;
+        for (TStore tStore : list) {
+            long l = DateUtil.betweenDay(tStore.getCreateTime(), new Date(), true);
+            String startTime = tStore.getStartTime();
+            String endTime = tStore.getEndTime();
+            String s = startTime.split(":")[0];
+            String s1 = endTime.split(":")[1];
+            Integer integer = Integer.valueOf(s);
+            Integer integer1 = Integer.valueOf(s1);
+            Integer a =0;
+            if(integer==0 && integer1==0){
+                a=24;
+            }else {
+                a= integer1-integer;
+            }
+            l1 += l * a;
+        }
+        map.put("allHour",l1);
         return map;
     }
 
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
index d7c2800..94f3a09 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
@@ -300,6 +300,9 @@
 
         if(cutType==2){
             yytj()
+            ptUser()
+            ptActivity()
+
         }
         if(cutType==3){
             jxtj()
@@ -316,9 +319,17 @@
         , range: true
     });
     $(function(){
+
+        var ajax2 = new $ax(Feng.ctxPath + "/data/getYears", function(data){
+            yearX=data
+        });
+        ajax2.start()
+
         getContent(1);
         getContent1(1);
         getContent2(1);
+
+
 
         // 基于准备好的dom,初始化echarts实例
         var myChart  = echarts.init(document.getElementById('income'));
@@ -718,6 +729,8 @@
 
         if(type==2){
             yytj()
+            ptUser()
+            ptActivity()
         }
 
         if(type==3){
@@ -1101,9 +1114,8 @@
         ajax.set("id",id);
         ajax.start();
     }
-    
-    
-    
+
+
     function tuifei() {
         var myChart1 = echarts.init(document.getElementById('refund'));
         let id  = $("#cCode").val()
@@ -1200,6 +1212,318 @@
         })
         myChart1.setOption(option1);
     }
+
+
+    function ptUser() {
+        var myChart2 = echarts.init(document.getElementById('user'));
+        var myChart3 = echarts.init(document.getElementById('vip'));
+        myChart2.on('legendselectchanged', obj => {
+            var options = myChart2.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度用户数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度用户数') {
+                options.xAxis[0].data = monthX
+            } else if (obj.name == '周度用户数') {
+                options.xAxis[0].data = ["1周","2周","3周","4周"]
+            } else if (obj.name == '日度用户数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart2.setOption(options, true)
+        });
+        let id  = $("#cCode").val()
+        console.log(id)
+        if(id==''){
+            Feng.info("请先选择运营商");
+            return;
+        }
+        myChart3.on('legendselectchanged', obj => {
+            var options = myChart3.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度会员数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度会员数') {
+                options.xAxis[0].data = monthX
+            } else if (obj.name == '周度会员数') {
+                options.xAxis[0].data = ["1周","2周","3周","4周"]
+            } else if (obj.name == '日度会员数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart3.setOption(options, true)
+        });
+        var ajax2 = new $ax(Feng.ctxPath + "/data/userAndVipYys", function(data){
+            $("#userAll").text(data.allUser)
+            $("#userVipAll").text(data.allVip)
+            console.log(data)
+            option2  = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+
+                    data: ['年度用户数', '月度用户数','周度用户数','日度用户数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度用户数: true,
+                        月度用户数: false,
+                        周度用户数: false,
+                        日度用户数: false
+                    }
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearData
+                    },
+                    {
+                        name: '月度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthData
+                    },
+                    {
+                        name: '周度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [data.count,data.count1,data.count2,data.count3]
+                    },
+                    {
+                        name: '日度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.dayData
+                    }
+                ]
+            };
+            option3  = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+
+                    data: ['年度会员数', '月度会员数','周度会员数','日度会员数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度会员数: true,
+                        月度会员数: false,
+                        周度会员数: false,
+                        日度会员数: false
+                    }
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearsVip
+                    },
+                    {
+                        name: '月度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data:  data.monthsVip
+                    },
+                    {
+                        name: '周度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data:[data.countVip,data.countVip1,data.countVip2,data.countVip3]
+                    },
+                    {
+                        name: '日度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.daysVip
+                    }
+                ]
+            };
+        });
+        ajax2.set("id",id)
+        ajax2.start()
+        myChart2.setOption(option2);
+        myChart3.setOption(option3);
+    }
+
+    function ptActivity() {
+        var myChart4 = echarts.init(document.getElementById('activity'));
+        var myChart5 = echarts.init(document.getElementById('prepare'));
+        myChart4.on('legendselectchanged', obj => {
+            var options = myChart4.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度次数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度次数') {
+                options.xAxis[0].data = monthX
+            }
+            myChart4.setOption(options, true)
+        });
+
+        myChart5.on('legendselectchanged', obj => {
+            var options = myChart5.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度次数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度次数') {
+                options.xAxis[0].data = monthX
+            }
+            myChart5.setOption(options, true)
+        });
+        let id  = $("#cCode").val()
+        console.log(id)
+        if(id==''){
+            Feng.info("请先选择运营商");
+            return;
+        }
+        var ajax2 = new $ax(Feng.ctxPath + "/data/actYys", function(data){
+
+            $("#allHour").text(data.allHour)
+
+            option4 = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+                    data: ['年度次数', '月度次数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度次数: true,
+                        月度次数: false,
+                    },
+
+
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearData
+                    },
+                    {
+                        name: '月度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthData
+                    }
+
+                ]
+            };
+            option5 = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+                    data: ['年度次数', '月度次数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度次数: true,
+                        月度次数: false,
+                    },
+
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearsUser
+                    },
+                    {
+                        name: '月度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthsUser
+                    }
+                ]
+            };
+        });
+        ajax2.set("id",id)
+        ajax2.start()
+        myChart4.setOption(option4);
+        myChart5.setOption(option5);
+    }
     
     function getContent1(type){
         //设置点击字体颜色效果
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html
index 2e0a683..8dc7afb 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html
@@ -177,7 +177,7 @@
                                     <h2>运营数据</h2>
                                     </br>
                                     </br>
-                                    <span>运营时长:0小时</span>
+                                    <span>运营时长:<span id="allHour"></span>小时</span>
                                     </br>
                                     </br>
                                     <div style="height: 25px;box-sizing: border-box;background:#f3f3f4;line-height: 25px;border:1px solid;margin-bottom: 20px;width: 500px">
@@ -211,7 +211,7 @@
                                     <h2>学员数据</h2>
                                     </br>
                                     </br>
-                                    <span>累计学员数:0人</span>
+                                    <span>累计学员数:<span id="allUser"></span>人</span>
                                     </br>
                                     </br>
                                     <div id="teach" style="width: 1280px;height:500px;"></div>
@@ -385,7 +385,7 @@
         ajax.start();
     }
     var ans = [];
-    var weekX = ["1","2","上周","本周"];
+    var weekX = ["1周","2周","3周","4周"];
     var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
     var yearX = [];
     var timeX = [];
@@ -418,10 +418,19 @@
         , trigger: 'click'
         , range: true
     });
+    function getYears() {
+        var ajax2 = new $ax(Feng.ctxPath + "/data/getYears", function(data){
+            yearX=data
+        });
+        ajax2.start()
+    }
     $(function(){
         getContent(1);
         getContent1(1);
         getContent2(1);
+
+
+
         var ajax = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){
             yearX=resp.year
 
@@ -526,9 +535,6 @@
         var myChart  = echarts.init(document.getElementById('main'));
         var myChart1 = echarts.init(document.getElementById('refund'));
 
-
-
-        var myChart6 = echarts.init(document.getElementById('teach'));
         var myChart7 = echarts.init(document.getElementById('courseData'));
 
 
@@ -678,61 +684,6 @@
 
 
 
-        option6  = {
-            tooltip: {
-                trigger: 'axis'
-            },
-            legend: {
-                data: ['年度学员数', '月度学员数', '周度学员数', '日度学员数']
-            },
-            grid: {
-                left: '3%',
-                right: '4%',
-                bottom: '3%',
-                containLabel: true
-            },
-            toolbox: {
-                feature: {
-                    saveAsImage: {}
-                }
-            },
-            xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
-            },
-            yAxis: {
-                type: 'value'
-            },
-            series: [
-                {
-                    name: '年度学员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [120, 132, 101, 134, 90, 230, 160, 190, 410, 330, 210, 330]
-                },
-                {
-                    name: '月度学员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [220, 182, 191, 234, 290, 330, 310, 190, 210, 330, 410, 160]
-                },
-                {
-                    name: '周度学员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [150, 232, 201, 154, 190, 330, 410, 160, 210, 195, 210, 188]
-                },
-                {
-                    name: '日度学员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160]
-                }
-            ]
-        };
-
-
 
         option7  = {
             tooltip: {
@@ -821,11 +772,9 @@
         myChart.setOption(option);
         myChart1.setOption(option1);
 
-        myChart6.setOption(option6);
         myChart7.setOption(option7);
     });
-    
-    function ptUser() {
+    function ptUser()   {
         var myChart2 = echarts.init(document.getElementById('user'));
         var myChart3 = echarts.init(document.getElementById('vip'));
         myChart2.on('legendselectchanged', obj => {
@@ -995,16 +944,47 @@
     function ptActivity() {
         var myChart4 = echarts.init(document.getElementById('activity'));
         var myChart5 = echarts.init(document.getElementById('prepare'));
+        myChart4.on('legendselectchanged', obj => {
+            var options = myChart4.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度次数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度次数') {
+                options.xAxis[0].data = monthX
+            }
+            myChart4.setOption(options, true)
+        });
+
+        myChart5.on('legendselectchanged', obj => {
+            var options = myChart5.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度次数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度次数') {
+                options.xAxis[0].data = monthX
+            }
+            myChart5.setOption(options, true)
+        });
 
         var ajax2 = new $ax(Feng.ctxPath + "/data/actPt", function(data){
             console.log(data)
+
+            $("#allHour").text(data.allHour)
 
             option4 = {
                 tooltip: {
                     trigger: 'axis'
                 },
                 legend: {
-                    data: ['年度次数', '月度次数']
+                    data: ['年度次数', '月度次数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度次数: true,
+                        月度次数: false,
+                    },
+
+
                 },
                 grid: {
                     left: '3%',
@@ -1020,7 +1000,7 @@
                 xAxis: {
                     type: 'category',
                     boundaryGap: false,
-                    data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
+                    data: yearX
                 },
                 yAxis: {
                     type: 'value'
@@ -1030,13 +1010,13 @@
                         name: '年度次数',
                         type: 'line',
                         stack: 'Total',
-                        data: [1220, 1532, 101, 1394, 980, 2380, 1680, 1190, 1410, 1330, 2110, 1330]
+                        data: data.yearData
                     },
                     {
                         name: '月度次数',
                         type: 'line',
                         stack: 'Total',
-                        data: [1220, 1182, 2191, 3234, 1290, 1330, 2310, 2190, 2210, 1330, 2410, 1650]
+                        data: data.monthData
                     }
 
                 ]
@@ -1046,7 +1026,14 @@
                     trigger: 'axis'
                 },
                 legend: {
-                    data: ['年度次数', '月度次数']
+                    data: ['年度次数', '月度次数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度次数: true,
+                        月度次数: false,
+                    },
+
                 },
                 grid: {
                     left: '3%',
@@ -1062,7 +1049,7 @@
                 xAxis: {
                     type: 'category',
                     boundaryGap: false,
-                    data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
+                    data: yearX
                 },
                 yAxis: {
                     type: 'value'
@@ -1072,13 +1059,13 @@
                         name: '年度次数',
                         type: 'line',
                         stack: 'Total',
-                        data: [120, 132, 101, 394, 980, 2380, 1680, 1190, 1410, 1330, 2110, 1330]
+                        data: data.yearsUser
                     },
                     {
                         name: '月度次数',
                         type: 'line',
                         stack: 'Total',
-                        data: [120, 182, 211, 324, 120, 130, 310, 290, 220, 130, 240, 150]
+                        data: data.monthsUser
                     }
                 ]
             };
@@ -1087,6 +1074,188 @@
         ajax2.start()
         myChart4.setOption(option4);
         myChart5.setOption(option5);
+    }
+
+
+    function ptStu() {
+        var myChart6 = echarts.init(document.getElementById('teach'));
+        myChart6.on('legendselectchanged', obj => {
+            var options = myChart6.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度学员数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度学员数') {
+                options.xAxis[0].data = monthX
+            }else if (obj.name == '周度学员数') {
+                options.xAxis[0].data = ["1周","2周","3周","4周"]
+            }else if (obj.name == '日度学员数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart6.setOption(options, true)
+        });
+
+
+        var ajax2 = new $ax(Feng.ctxPath + "/data/stuPt", function(data){
+            console.log(data)
+
+            $("#allUser").text(data.allUser)
+
+            option6  = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+                    data: ['年度学员数', '月度学员数', '周度学员数', '日度学员数'],
+
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度学员数: true,
+                        月度学员数: false,
+                        周度学员数: false,
+                        日度学员数: false
+                    },
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度学员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearData
+                    },
+                    {
+                        name: '月度学员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthData
+                    },
+                    {
+                        name: '周度学员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [data.count,data.count1,data.count2,data.count3]
+                    },
+                    {
+                        name: '日度学员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.dayData
+                    }
+                ]
+            };
+        });
+        ajax2.start()
+        myChart6.setOption(option6);
+    }
+
+
+    function ptCourse() {
+        var myChart7 = echarts.init(document.getElementById('courseData'));
+        myChart7.on('legendselectchanged', obj => {
+            var options = myChart7.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度耗课数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度耗课数') {
+                options.xAxis[0].data = monthX
+            }else if (obj.name == '周度耗课数') {
+                options.xAxis[0].data = ["1周","2周","3周","4周"]
+            }else if (obj.name == '日度耗课数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart7.setOption(options, true)
+        });
+
+
+        var ajax2 = new $ax(Feng.ctxPath + "/data/coursePt", function(data){
+            console.log(data)
+
+            $("#allHour").text(data.allHour)
+
+            option7  = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+                    data: ['年度耗课数', '月度耗课数', '周度耗课数', '日度耗课数'],
+
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度耗课数: true,
+                        月度耗课数: false,
+                        周度耗课数: false,
+                        日度耗课数: false
+                    },
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度耗课数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearData
+                    },
+                    {
+                        name: '月度耗课数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthData
+                    },
+                    {
+                        name: '周度耗课数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [data.count,data.count1,data.count2,data.count3]
+                    },
+                    {
+                        name: '日度耗课数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.dayData
+                    }
+                ]
+            };
+        });
+        ajax2.start()
+        myChart7.setOption(option7);
     }
 
     function getContent(type){
@@ -1222,12 +1391,13 @@
 
             ptUser()
 
+            ptActivity()
+
         }
 
 
         if(type==3){
             var ajax = new $ax(Feng.ctxPath + "/data/stuCourseData", function (data) {
-
                 console.log(data.data1)
                 var chartDom = document.getElementById('cookieTeachCourse');
                 var myChart = echarts.init(chartDom);
@@ -1253,8 +1423,7 @@
 
             });
             ajax.start();
-
-            ptActivity()
+            ptStu()
         }
 
 
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
index 55f042a..e406831 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
@@ -279,6 +279,8 @@
 
         if(cutType==2){
             yytj()
+            ptUser()
+            ptActivity()
         }
         if(cutType==3){
             jxtj()
@@ -761,12 +763,329 @@
     }
 
 
+
+    function ptUser() {
+        var myChart2 = echarts.init(document.getElementById('user'));
+        var myChart3 = echarts.init(document.getElementById('vip'));
+        myChart2.on('legendselectchanged', obj => {
+            var options = myChart2.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度用户数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度用户数') {
+                options.xAxis[0].data = monthX
+            } else if (obj.name == '周度用户数') {
+                options.xAxis[0].data = ["1周","2周","3周","4周"]
+            } else if (obj.name == '日度用户数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart2.setOption(options, true)
+        });
+        let id  = $("#cCode").val()
+        console.log(id)
+        if(id==''){
+            Feng.info("请先选择门店");
+            return;
+        }
+        myChart3.on('legendselectchanged', obj => {
+            var options = myChart3.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度会员数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度会员数') {
+                options.xAxis[0].data = monthX
+            } else if (obj.name == '周度会员数') {
+                options.xAxis[0].data = ["1周","2周","3周","4周"]
+            } else if (obj.name == '日度会员数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart3.setOption(options, true)
+        });
+        var ajax2 = new $ax(Feng.ctxPath + "/data/userAndVipStore", function(data){
+            $("#userAll").text(data.allUser)
+            $("#userVipAll").text(data.allVip)
+            console.log(data)
+            option2  = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+
+                    data: ['年度用户数', '月度用户数','周度用户数','日度用户数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度用户数: true,
+                        月度用户数: false,
+                        周度用户数: false,
+                        日度用户数: false
+                    }
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearData
+                    },
+                    {
+                        name: '月度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthData
+                    },
+                    {
+                        name: '周度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [data.count,data.count1,data.count2,data.count3]
+                    },
+                    {
+                        name: '日度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.dayData
+                    }
+                ]
+            };
+            option3  = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+
+                    data: ['年度会员数', '月度会员数','周度会员数','日度会员数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度会员数: true,
+                        月度会员数: false,
+                        周度会员数: false,
+                        日度会员数: false
+                    }
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearsVip
+                    },
+                    {
+                        name: '月度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data:  data.monthsVip
+                    },
+                    {
+                        name: '周度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data:[data.countVip,data.countVip1,data.countVip2,data.countVip3]
+                    },
+                    {
+                        name: '日度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.daysVip
+                    }
+                ]
+            };
+        });
+        ajax2.set("id",id)
+        ajax2.start()
+        myChart2.setOption(option2);
+        myChart3.setOption(option3);
+    }
+
+    function ptActivity() {
+        var myChart4 = echarts.init(document.getElementById('activity'));
+        var myChart5 = echarts.init(document.getElementById('prepare'));
+        myChart4.on('legendselectchanged', obj => {
+            var options = myChart4.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度次数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度次数') {
+                options.xAxis[0].data = monthX
+            }
+            myChart4.setOption(options, true)
+        });
+
+        myChart5.on('legendselectchanged', obj => {
+            var options = myChart5.getOption()
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度次数') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度次数') {
+                options.xAxis[0].data = monthX
+            }
+            myChart5.setOption(options, true)
+        });
+        let id  = $("#cCode").val()
+        console.log(id)
+        if(id==''){
+            Feng.info("请先选择门店");
+            return;
+        }
+        var ajax2 = new $ax(Feng.ctxPath + "/data/actStore", function(data){
+
+            $("#allHour").text(data.allHour)
+
+            option4 = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+                    data: ['年度次数', '月度次数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度次数: true,
+                        月度次数: false,
+                    },
+
+
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearData
+                    },
+                    {
+                        name: '月度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthData
+                    }
+
+                ]
+            };
+            option5 = {
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {
+                    data: ['年度次数', '月度次数'],
+                    icon: 'stack',
+                    selectedMode: 'single', // 单选
+                    selected: {
+                        年度次数: true,
+                        月度次数: false,
+                    },
+
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                toolbox: {
+                    feature: {
+                        saveAsImage: {}
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: yearX
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.yearsUser
+                    },
+                    {
+                        name: '月度次数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: data.monthsUser
+                    }
+                ]
+            };
+        });
+        ajax2.set("id",id)
+        ajax2.start()
+        myChart4.setOption(option4);
+        myChart5.setOption(option5);
+    }
+
+
     laydate.render({
         elem: '#beginTime'
         , trigger: 'click'
         , range: true
     });
     $(function(){
+        var ajax2 = new $ax(Feng.ctxPath + "/data/getYears", function(data){
+            yearX=data
+        });
+        ajax2.start()
         getContent(1);
         getContent1(1);
         getContent2(1);
@@ -1165,6 +1484,8 @@
 
         if(type==2){
             yytj()
+            ptUser()
+            ptActivity()
         }
 
         if(type==3){
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
index 431c7b5..362ff1b 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
@@ -110,7 +110,6 @@
             <#input id="userName" name="管理员姓名" type="text" value="${city.name}"/>
             <#input id="userPhone" name="管理员手机号" type="text" value="${city.account}"/>
             <#avatar id="img" name="门店封面(推荐像素722*360px)" avatarImg="${item.coverDrawing}"/>
-            <#input id="imgOne" name="实景照片" type="text" value="${item.realPicture}"/>
             <div class="row" id="app1">
                 <div class="col-sm-6" style="width: 100%;margin-left: 103px;">
                     <div class="form-group">
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html
index 88683dd..562547f 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html
@@ -76,7 +76,7 @@
             <#avatar id="cover" name="*门票封面(推荐像素350x350px)" />
 
             <div class="row" id="app" >
-                <div class="col-sm-6" style="width: 100%">
+                <div class="col-sm-6" style="width: 100%;margin-left: 7%">
                     <div class="form-group">
                         <label class="col-sm-3 control-label" style="width: 15%;margin-left: 7%">*门票图片(请上传不超过五张图片,推荐像素780x440px): </label>
                         <div class="col-sm-2" style="width: 100%;margin-left: 12%;margin-top: 1%">
@@ -123,7 +123,7 @@
                 </div>
             </div>
             <#input id="startTime" name="有效期" type="text"/>
-            @if(roletype==3){
+            @if(userType==3){
             <div class="row" id="belongsCon" >
                 <div class="form-group">
                     <div class="form-group">

--
Gitblit v1.7.1