From e6ee956618b3c1a6371a6c22dfbb70868dbd3f17 Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期六, 07 十月 2023 15:23:06 +0800
Subject: [PATCH] 后台代码

---
 cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java                                         |   11 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java         |    9 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IOperatorUserService.java             |   19 
 cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml                                   |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java                    |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TicketController.java         |  415 +++
 cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java                        |   14 
 cloud-server-management/src/main/resources/TOperatorUserMapper.xml                                              |   37 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_edit.html                         |  155 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java      |   16 
 cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java                              |    4 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GameDataController.java       |  237 ++
 cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js                             |   12 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java                     |   11 
 cloud-server-course/src/main/java/com/dsh/course/mapper/CancelledClassesMapper.java                             |    5 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/RefundCoursePackageClient.java          |   26 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorRestPwd.java                    |   15 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorService.java                 |   11 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/GateDataResponse.java                   |   29 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTUData.java                           |   16 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorServiceImpl.java        |   24 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java          |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTU.java                               |   23 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator.html                              |   59 
 cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java                    |  100 
 cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TStoreInfo.js                             |   21 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java |  443 +++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Batter.java                             |   24 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket.html                                  |   78 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java   |  112 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/BatterData.java                         |   17 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Bank.java                               |   34 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_auth.html                 |  308 ++
 cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java                                    |    2 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_add.html                          |  127 +
 cloud-server-management/src/main/webapp/static/modular/system/gameData/gameData.js                              |   99 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/gateData/GateData.html                              |   31 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java             |   11 
 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageRefundVO.java                               |   18 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java          |   14 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java     |    1 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/gameData/GameData.html                              |  603 +++++
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java                        |    5 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html                              |  357 +++
 cloud-server-management/src/main/webapp/static/modular/system/operator/operator_add.js                          |  226 ++
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java                         |    1 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IUserService.java                     |    1 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java                 |    5 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TStoreList.html                             |   20 
 cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js                          |    1 
 cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java                      |    5 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/OperatorDTO.java                    |   24 
 cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java                                   |    9 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java       |    3 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java            |    4 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java                  |    1 
 cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js                       |    2 
 cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorUserMapper.java                            |   28 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java        |   52 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorUser.java                       |   23 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java       |  302 ++
 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java              |   21 
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java                    |    5 
 cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java                            |    9 
 cloud-server-activity/src/main/java/com/dsh/activity/model/PointMerchandiseIncomeVo.java                        |   23 
 cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java                  |    3 
 cloud-server-management/src/main/resources/mapper/TStoreMapper.xml                                              |    6 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html                      |  114 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GateDataController.java       |  119 +
 cloud-server-management/src/main/webapp/static/modular/system/dataStatistics/tSite.js                           |    4 
 cloud-server-activity/src/main/java/com/dsh/activity/model/CoachChangeStateVO.java                              |   11 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperator.java                          |    9 
 cloud-server-management/src/main/webapp/static/modular/system/ticket/ticket.js                                  |  270 ++
 cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java                          |    5 
 cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js                              |  240 ++
 cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml                                        |    3 
 cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml                                     |   46 
 cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorMapper.java                                |   12 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome1.html                 |  440 ++++
 cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml                                 |    5 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PointMerchandiseIncomeVo.java           |   21 
 cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java                              |    1 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Battlefield.java                        |   12 
 cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml                                           |   30 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html                              |    2 
 cloud-server-management/src/main/webapp/static/modular/system/gateData/gateData.js                              |   52 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PlatFormDataVO.java                     |   32 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorCityVO.java                     |   18 
 cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java                              |   12 
 cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js                      |  228 ++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorUserServiceImpl.java    |   36 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html                  |  489 ++-
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java              |    7 
 93 files changed, 6,285 insertions(+), 266 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
index b983c07..37447d1 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
@@ -51,7 +51,14 @@
     @Autowired
     private TCourseInfoRecordService courseInfoRecordService;
 
-
+    /**
+     * 获取所有用户
+     */
+    @ResponseBody
+    @PostMapping("/base/appUser/queryAppUserList")
+    public List<TAppUser> queryAppUserList(@RequestBody AppUserByNameAndPhoneDTO dto){
+        return appUserService.queryAPPUserByNameAndPhone(dto);
+    }
     /**
      * 根据用户姓名和电话模糊查询
      */
diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java
index 34f5430..62b571b 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java
@@ -161,5 +161,14 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date insertTime;
 
-
+    /**
+     * 添加类型 type = 1 平台 type=2 运营商 type=3门店
+     */
+    @TableField("insertType")
+    private Integer insertType;
+    /**
+     * 添加人id平台管理员id 运营商id
+     */
+    @TableField("type")
+    private Integer addUserId;
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java
index 4c6ee5e..5f78bf1 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java
@@ -38,5 +38,6 @@
     private Integer state;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date insertTime;
+    private Integer payStatus;
 
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
index e706008..ab18fcb 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -11,6 +11,8 @@
 import com.dsh.activity.feignclient.model.*;
 import com.dsh.activity.feignclient.other.StoreClient;
 import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
+import com.dsh.activity.model.CoachChangeStateVO;
+import com.dsh.activity.model.PointMerchandiseIncomeVo;
 import com.dsh.activity.model.PointMerchandiseVo;
 import com.dsh.activity.model.request.*;
 import com.dsh.activity.service.*;
@@ -70,7 +72,78 @@
 
     @Resource
     private CouponCityService ccityService;
+    @Autowired
+    private UserPointsMerchandiseService userPointsMerchandiseService;
 
+    /**
+     * 门票上下架 state=1 上架 state=2 下架
+     */
+    @RequestMapping("/base/pointMerchars/changeState")
+    public Object changeState(@RequestBody CoachChangeStateVO dto){
+        return pmdsService.changeState(dto);
+    }
+    @ResponseBody
+    @PostMapping("/base/pointMerchars/ticketList")
+    public List<Map<String,Object>> ticketList(@RequestBody IntegralGoodsOfSearch ofSearch){
+        List<Map<String, Object>> result = pmdsService.ticketList(ofSearch);
+        if (result.size() > 0){
+            for (Map<String, Object> stringObjectMap : result) {
+                Integer o = (Integer) stringObjectMap.get("id");
+                String startTime = (String) stringObjectMap.get("startTime");
+                String endTime = (String) stringObjectMap.get("endTime");
+                stringObjectMap.put("timeValue",startTime + "至"+endTime);
+                int count1 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>()
+                        .eq(UserPointsMerchandise::getPointsMerchandiseId, o));
+                int count2 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>()
+                        .eq(UserPointsMerchandise::getPointsMerchandiseId, o)
+                        .eq(UserPointsMerchandise::getStatus,2));
+                stringObjectMap.put("hasExchangeQty",count1);
+                stringObjectMap.put("hasPickQty",count2);
+
+                stringObjectMap.put("activeStatus",dealTimeStatus(startTime,endTime));
+            }
+            if (ToolUtil.isNotEmpty(ofSearch.getActiveStatus())){
+                result = dealTimeData(result,ofSearch.getActiveStatus());
+            }
+        }
+        return result;
+    }
+    @ResponseBody
+    @PostMapping("/base/pointMerchars/queryGoodsListSearch")
+    public List<Map<String,Object>> getIntegralGoodsListOfSearch(@RequestBody IntegralGoodsOfSearch ofSearch){
+        System.out.println(ofSearch);
+        List<Map<String, Object>> mapList = pmdsService.queryGoodsListOfSearch(ofSearch);
+        if (mapList.size() > 0){
+            for (Map<String, Object> stringObjectMap : mapList) {
+                Integer o = (Integer) stringObjectMap.get("id");
+                String startTime = (String) stringObjectMap.get("startTime");
+                String endTime = (String) stringObjectMap.get("endTime");
+                stringObjectMap.put("timeValue",startTime + "至"+endTime);
+                int count1 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>()
+                        .eq(UserPointsMerchandise::getPointsMerchandiseId, o));
+                int count2 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>()
+                        .eq(UserPointsMerchandise::getPointsMerchandiseId, o)
+                        .eq(UserPointsMerchandise::getStatus,2));
+                stringObjectMap.put("hasExchangeQty",count1);
+                stringObjectMap.put("hasPickQty",count2);
+
+                stringObjectMap.put("activeStatus",dealTimeStatus(startTime,endTime));
+            }
+            if (ToolUtil.isNotEmpty(ofSearch.getActiveStatus())){
+                mapList = dealTimeData(mapList,ofSearch.getActiveStatus());
+            }
+        }
+        System.out.println("mapList->"+mapList);
+        return mapList;
+    }
+    /**
+     * 获取积分商票消费金额
+     */
+    @ResponseBody
+    @RequestMapping("/base/pointMerchars/getAmount")
+    public List<PointMerchandiseIncomeVo> getAmount(){
+        return  userPointsMerchandiseService.getAmount();
+    }
 
     @ResponseBody
     @PostMapping("/base/pointMerchars/convertGoods")
@@ -542,34 +615,7 @@
     }
 
 
-    @ResponseBody
-    @PostMapping("/base/pointMerchars/queryGoodsListSearch")
-    public List<Map<String,Object>> getIntegralGoodsListOfSearch(@RequestBody IntegralGoodsOfSearch ofSearch){
-        System.out.println(ofSearch);
-        List<Map<String, Object>> mapList = pmdsService.queryGoodsListOfSearch(ofSearch);
-        if (mapList.size() > 0){
-            for (Map<String, Object> stringObjectMap : mapList) {
-                Integer o = (Integer) stringObjectMap.get("id");
-                String startTime = (String) stringObjectMap.get("startTime");
-                String endTime = (String) stringObjectMap.get("endTime");
-                stringObjectMap.put("timeValue",startTime + "至"+endTime);
-                int count1 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>()
-                        .eq(UserPointsMerchandise::getPointsMerchandiseId, o));
-                int count2 = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>()
-                        .eq(UserPointsMerchandise::getPointsMerchandiseId, o)
-                        .eq(UserPointsMerchandise::getStatus,2));
-                stringObjectMap.put("hasExchangeQty",count1);
-                stringObjectMap.put("hasPickQty",count2);
 
-                stringObjectMap.put("activeStatus",dealTimeStatus(startTime,endTime));
-            }
-            if (ToolUtil.isNotEmpty(ofSearch.getActiveStatus())){
-                mapList = dealTimeData(mapList,ofSearch.getActiveStatus());
-            }
-        }
-        System.out.println("mapList->"+mapList);
-        return mapList;
-    }
 
     public int dealTimeStatus(String startTime, String endTime){
         LocalDate now = LocalDate.now();
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java
index 1293821..59743fe 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseMapper.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dsh.activity.entity.PointsMerchandise;
+import com.dsh.activity.model.CoachChangeStateVO;
+import com.dsh.activity.model.request.IntegralGoodsOfSearch;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -26,4 +28,7 @@
                                                      @Param("state") Integer state,
                                                      @Param("page") Page<Map<String, Object>> page);
 
+    List<Map<String, Object>> ticketList(@Param("query") IntegralGoodsOfSearch ofSearch);
+
+    int changeState(@Param("query") CoachChangeStateVO dto);
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java
index ab12b53..9353ec6 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserPointsMerchandiseMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dsh.activity.entity.UserPointsMerchandise;
+import com.dsh.activity.model.PointMerchandiseIncomeVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -18,4 +19,8 @@
  */
 public interface UserPointsMerchandiseMapper extends BaseMapper<UserPointsMerchandise> {
 
+
+    List<PointMerchandiseIncomeVo> getAmount();
+
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/CoachChangeStateVO.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/CoachChangeStateVO.java
new file mode 100644
index 0000000..ce771fb
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/CoachChangeStateVO.java
@@ -0,0 +1,11 @@
+package com.dsh.activity.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CoachChangeStateVO {
+    private List<Integer> ids;
+    private Integer state;
+}
\ No newline at end of file
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/PointMerchandiseIncomeVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/PointMerchandiseIncomeVo.java
new file mode 100644
index 0000000..6f958ae
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/PointMerchandiseIncomeVo.java
@@ -0,0 +1,23 @@
+package com.dsh.activity.model;
+
+import com.dsh.activity.entity.PointsMerchandise;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 营收数据-平台
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PointMerchandiseIncomeVo {
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date insertTime;
+    private BigDecimal cash;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java
index a27221b..a028077 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.activity.entity.PointsMerchandise;
+import com.dsh.activity.model.CoachChangeStateVO;
 import com.dsh.activity.model.request.IntegralGoodsOfSearch;
 
 import java.util.List;
@@ -19,4 +20,8 @@
 
     List<Map<String, Object>> queryGoodsListOfSearch(IntegralGoodsOfSearch ofSearch);
 
+    List<Map<String, Object>> ticketList(IntegralGoodsOfSearch ofSearch);
+
+    Object changeState(CoachChangeStateVO dto);
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java
index 81e58a7..011c310 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/UserPointsMerchandiseService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.activity.entity.UserPointsMerchandise;
+import com.dsh.activity.model.PointMerchandiseIncomeVo;
 import com.dsh.activity.model.request.PointMercharsPayedVo;
 
 import java.util.List;
@@ -17,4 +18,6 @@
  */
 public interface UserPointsMerchandiseService extends IService<UserPointsMerchandise> {
 
+    List<PointMerchandiseIncomeVo> getAmount();
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java
index 3709d22..1ac6e3a 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.activity.entity.PointsMerchandise;
 import com.dsh.activity.mapper.PointsMerchandiseMapper;
+import com.dsh.activity.model.CoachChangeStateVO;
 import com.dsh.activity.model.request.IntegralGoodsOfSearch;
 import com.dsh.activity.service.PointsMerchandiseService;
 import org.springframework.stereotype.Service;
@@ -26,4 +27,14 @@
         return this.baseMapper.queryGoodsListOfSearch(ofSearch.getName(),ofSearch.getType(),ofSearch.getRedemptionMethod(),
                 ofSearch.getUserPopulation(),ofSearch.getActiveStatus(),ofSearch.getState(),ofSearch.getPage());
     }
+
+    @Override
+    public List<Map<String, Object>> ticketList(IntegralGoodsOfSearch ofSearch) {
+        return this.baseMapper.ticketList(ofSearch);
+    }
+
+    @Override
+    public Object changeState(CoachChangeStateVO dto) {
+        return this.baseMapper.changeState(dto);
+    }
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java
index 0ba9902..ea80b05 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserPointsMerchandiseServiceImpl.java
@@ -3,8 +3,10 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.activity.entity.UserPointsMerchandise;
 import com.dsh.activity.mapper.UserPointsMerchandiseMapper;
+import com.dsh.activity.model.PointMerchandiseIncomeVo;
 import com.dsh.activity.model.request.PointMercharsPayedVo;
 import com.dsh.activity.service.UserPointsMerchandiseService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -20,5 +22,10 @@
  */
 @Service
 public class UserPointsMerchandiseServiceImpl extends ServiceImpl<UserPointsMerchandiseMapper, UserPointsMerchandise> implements UserPointsMerchandiseService {
-
+    @Autowired
+    private UserPointsMerchandiseMapper userPointsMerchandiseMapper;
+    @Override
+    public List<PointMerchandiseIncomeVo> getAmount() {
+       return userPointsMerchandiseMapper.getAmount();
+    }
 }
diff --git a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml
index 38bcc37..5969172 100644
--- a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml
+++ b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseMapper.xml
@@ -35,4 +35,50 @@
         </if>
         order by insertTime desc
     </select>
+    <select id="ticketList" resultType="java.util.Map">
+        SELECT id,
+        `name`,
+        cardType,
+        `cover`,
+        date_format(startTime ,'%Y-%m-%d') as startTime,
+        date_format(endTime ,'%Y-%m-%d') as endTime,
+        `type`,
+        useScope,
+        userPopulation,
+        quantityIssued,
+        pickUpQuantity,
+        `sort`,
+        shelves
+        from t_points_merchandise
+        where 1 = 1
+        <if test="query.name != null">
+            and `name` like concat('%', #{query.name}, '%')
+        </if>
+        <if test="query.type != null">
+            and cardType = #{query.type}
+        </if>
+        <if test="query.redemptionMethod != null">
+            and redemptionMethod = #{query.redemptionMethod}
+        </if>
+        <if test="query.userPopulation != null">
+            and userPopulation = #{query.userPopulation}
+        </if>
+        <if test="query.state != null">
+            and `state` = #{query.state}
+        </if>
+        and `type` = 3
+        order by sort desc
+    </select>
+    <select id="changeState" resultType="java.lang.Integer">
+        update t_points_merchandise set
+        shelves = #{query.state}
+        <where>
+            <if test="query.ids != null and query.ids.size()>0">
+                AND t_points_merchandise.id IN
+                <foreach collection="query.ids" separator="," item="id" open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>
diff --git a/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml b/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
index 4601dee..fff3a7b 100644
--- a/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
+++ b/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
@@ -3,4 +3,9 @@
 <mapper namespace="com.dsh.activity.mapper.UserPointsMerchandiseMapper">
 
 
+    <select id="getAmount" resultType="com.dsh.activity.model.PointMerchandiseIncomeVo">
+        select t1.*,t2.cash  from t_user_points_merchandise t1
+        left join t_points_merchandise t2 on t1.pointsMerchandiseId = t2.id
+        where t1.payStatus =2
+    </select>
 </mapper>
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 e26f7d6..737901c 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
@@ -149,7 +149,10 @@
             Integer absencesNumber = one.getAbsencesNumber();
             // 没有过期
             if (one.getUseTime().after(new Date())){
-                packagePayment.setTotalClassHours(packagePayment.getClassHours()+one.getTotalClassHours());
+                if (one.getLaveClassHours()-packagePayment.getClassHours()<0){
+                    return 5002;
+                }
+                packagePayment.setTotalClassHours(one.getTotalClassHours());
                 packagePayment.setLaveClassHours(one.getLaveClassHours()-packagePayment.getClassHours());
                 packagePayment.setAbsencesNumber(one.getAbsencesNumber());
             }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
index 41aa1b0..f8c2125 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -38,6 +38,17 @@
     CoursePackageStudentService studentService ;
     @Autowired
     TCoursePackagePaymentService paymentService;
+    @Autowired
+    private CourseCounsumService counsumService;
+
+    //获取退费记录
+    @RequestMapping("/getRefund")
+    @ResponseBody
+    public List<MoneyBack> getRefund() {
+        // 查询已通过申请的退费记录
+       return counsumService.getRefund();
+    }
+
     //获取学员课时数信息
     @RequestMapping("/getInfo")
     @ResponseBody
@@ -175,8 +186,7 @@
         return selectDtos;
     }
 
-    @Autowired
-    private CourseCounsumService counsumService;
+
     @RequestMapping("/queryCounsum")
     @ResponseBody
     public List<CourseCounsum> queryCounsum(@RequestBody ConsumeQuery consumeQuery){
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java
index 9a9704a..856972d 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java
@@ -5,7 +5,6 @@
 import com.dsh.course.feignclient.account.model.AppUser;
 import com.dsh.course.feignclient.account.model.TCourseInfoRecord;
 import com.dsh.course.model.AppUserByNameAndPhoneDTO;
-import com.dsh.course.model.TAppUser;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CancelledClassesMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CancelledClassesMapper.java
index 6b28efe..cf5446a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/mapper/CancelledClassesMapper.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/CancelledClassesMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dsh.course.entity.CancelledClasses;
+import com.dsh.course.entity.MoneyBack;
 import com.dsh.course.model.CancelClassesQuery;
 import com.dsh.course.model.CancelClassesVO;
 import org.apache.ibatis.annotations.Param;
@@ -20,4 +21,8 @@
 public interface CancelledClassesMapper extends BaseMapper<CancelledClasses> {
 
     List<CancelClassesVO> listAll(@Param("query") CancelClassesQuery query,@Param("sTime")String sTime,@Param("eTime")String eTime);
+
+    List<MoneyBack> getRefund();
+
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageRefundVO.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageRefundVO.java
new file mode 100644
index 0000000..07d2b5a
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageRefundVO.java
@@ -0,0 +1,18 @@
+package com.dsh.course.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 退费记录列表VO
+ */
+@Data
+public class CoursePackageRefundVO {
+
+    private BigDecimal cashPayment;
+    private Date insertTime;
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java b/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java
index 99f8528..63da887 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java
@@ -3,7 +3,11 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.course.entity.CancelledClasses;
 import com.dsh.course.entity.CourseCounsum;
+import com.dsh.course.entity.MoneyBack;
+
+import java.util.List;
 
 public interface CourseCounsumService extends IService<CourseCounsum> {
 
+    List<MoneyBack> getRefund();
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java
index 5f4467c..2381648 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java
@@ -3,12 +3,23 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.course.entity.CancelledClasses;
 import com.dsh.course.entity.CourseCounsum;
+import com.dsh.course.entity.MoneyBack;
 import com.dsh.course.mapper.CancelledClassesMapper;
 import com.dsh.course.mapper.CourseCounsumMapper;
+import com.dsh.course.mapper.MoneyBackMapper;
 import com.dsh.course.service.CancelledClassesService;
 import com.dsh.course.service.CourseCounsumService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service
 public class CourseCounsumServiceImpl extends ServiceImpl<CourseCounsumMapper, CourseCounsum> implements CourseCounsumService {
+    @Autowired
+    private CancelledClassesMapper mapper;
+    @Override
+    public List<MoneyBack> getRefund() {
+        return mapper.getRefund();
+    }
 }
diff --git a/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml b/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml
index eaee487..d6f6339 100644
--- a/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml
@@ -34,5 +34,8 @@
             </if>
         </where>
     </select>
+    <select id="getRefund" resultType="com.dsh.course.entity.MoneyBack">
+        select * from t_back_money where status = 1
+    </select>
 
 </mapper>
diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
index 78a72a0..cbbc616 100644
--- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -34,7 +34,6 @@
         update t_course_package_payment set totalClassHours =totalClassHours +#{i},classHours =classHours+#{i},laveClassHours =laveClassHours+#{i} where id =#{id}
     </update>
 
-
     <select id="queryCountNumber" resultType="int">
         SELECT
 	    count( 1 ) AS num
@@ -42,7 +41,6 @@
           SELECT appUserId FROM t_course_package_payment WHERE payStatus = 2 AND state = 1 and coursePackageId = #{coursePackageId} GROUP BY appUserId
         ) AS aa
     </select>
-
 
     <select id="getCoursePackagePaymentByCode" resultType="com.dsh.course.entity.TCoursePackagePayment">
     select * from t_course_package_payment where 1=1
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java
index 7c252e3..8834020 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java
@@ -5,15 +5,36 @@
 import com.dsh.course.feignClient.activity.model.IntegralGoodsOfSearch;
 import com.dsh.course.feignClient.activity.model.PointMercharsPayedVo;
 import com.dsh.course.feignClient.activity.model.PointMercharsVo;
+import com.dsh.guns.modular.system.model.CoachChangeStateVO;
+import com.dsh.guns.modular.system.model.PointMerchandiseIncomeVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
 import java.util.Map;
 
 @FeignClient(value = "mb-cloud-activity")
 public interface PointMercharsClient {
+    /**
+     * 门票上下架 state=1 上架 state=2 下架
+     */
+    @RequestMapping("/base/pointMerchars/changeState")
+    Object changeState(@RequestBody CoachChangeStateVO dto);
+    /**
+     * 门票管理查询
+     * @param ofSearch
+     * @return
+     */
+    @PostMapping("/base/pointMerchars/ticketList")
+    List<Map<String,Object>> ticketList(@RequestBody IntegralGoodsOfSearch ofSearch);
+    /**
+     * 获取积分商票消费金额
+     */
+    @RequestMapping("/base/pointMerchars/getAmount")
+    List<PointMerchandiseIncomeVo> getAmount();
 
     @PostMapping("/base/pointMerchars/queryGoodsListSearch")
     List<Map<String,Object>> getIntegralGoodsListOfSearch(@RequestBody IntegralGoodsOfSearch ofSearch);
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/RefundCoursePackageClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/RefundCoursePackageClient.java
new file mode 100644
index 0000000..f312f47
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/RefundCoursePackageClient.java
@@ -0,0 +1,26 @@
+package com.dsh.course.feignClient.course;
+
+import com.dsh.course.feignClient.course.model.CancelledClasses;
+import com.dsh.course.model.MoneyBack;
+import com.dsh.guns.modular.system.model.CancelClassesQuery;
+import com.dsh.guns.modular.system.model.CancelClassesVO;
+import com.dsh.guns.modular.system.model.CourseCounsum;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/8/12 3:45
+ */
+@FeignClient("mb-cloud-course")
+public interface RefundCoursePackageClient {
+
+    //获取退费记录
+    @RequestMapping("/getRefund")
+    List<MoneyBack> getRefund();
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java
index c72d2d3..e0e7b84 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java
@@ -18,6 +18,11 @@
 public interface SiteClient {
 
     /**
+     * 获取所有场地
+     */
+    @RequestMapping("/base/site/getList")
+    List<Site> getList();
+    /**
      * 获取场地预约记录
      */
     @RequestMapping("/base/site/listAll")
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java
new file mode 100644
index 0000000..5ded97a
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/SiteBookingMapper.java
@@ -0,0 +1,12 @@
+package com.dsh.course.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsh.guns.modular.system.model.SiteBooking;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/13 16:48
+ */
+public interface SiteBookingMapper extends BaseMapper<SiteBooking> {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
index 1bb364e..b98b214 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
@@ -35,7 +35,7 @@
 
     List<Map<String, Object>> queryListOfpage(@Param("provinceCode") String provinceCode,
                                               @Param("cityCode")  String cityCode,
-                                              @Param("cityManagerId")  Integer cityManagerId,
+                                              @Param("operatorId")  Integer operatorId,
                                               @Param("storeName")  String storeName,
                                               @Param("page") Page<Map<String, Object>> page);
 
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorMapper.java
index 74c9bf9..946f755 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorMapper.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorMapper.java
@@ -2,7 +2,13 @@
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.guns.modular.system.model.Bank;
 import com.dsh.guns.modular.system.model.TOperator;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -14,4 +20,10 @@
  */
 public interface TOperatorMapper extends BaseMapper<TOperator> {
 
+    List<Map<String, Object>> listAll(@Param("page")Page<Map<String, Object>> page,@Param("userName")String name,@Param("phone")String phone,@Param("type")Integer type);
+
+    int changeState(@Param("ids") List<Integer> ids, @Param("state") Integer state);
+
+    List<Bank> getBankList();
+
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorUserMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorUserMapper.java
new file mode 100644
index 0000000..acf94b3
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorUserMapper.java
@@ -0,0 +1,28 @@
+package com.dsh.course.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.guns.modular.system.model.OperatorUser;
+import com.dsh.guns.modular.system.model.TOperator;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 运营商商户 Mapper 接口
+ * </p>
+ */
+public interface TOperatorUserMapper extends BaseMapper<OperatorUser> {
+
+    List<Map<String, Object>> listAll(@Param("page")Page<Map<String, Object>> page,
+                                      @Param("province") String province,
+                                      @Param("city")String city,
+                                      @Param("userName")String userName,
+                                      @Param("phone") String phone,
+                                      @Param("platform")Integer platform,
+                                      @Param("type")Integer type,
+                                      @Param("state")Integer state);
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java
index 162bfbd..5099a1e 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java
@@ -238,7 +238,7 @@
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         String birthday = format.format(data.get(0).getBirthday());
         model.addAttribute("birthday",birthday);
-        return PREFIX + "TCoach_edit.html";
+        return PREFIX + "Operator_edit.html";
     }
     /**
      * 获取教练列表
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 20603a8..deeb3ec 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
@@ -1,26 +1,42 @@
 package com.dsh.guns.modular.system.controller.code;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.dsh.course.feignClient.account.AppUserClient;
-import com.dsh.course.feignClient.account.CityClient;
-import com.dsh.course.feignClient.account.CityManagerClient;
-import com.dsh.course.feignClient.account.FinanceClient;
+import com.dsh.course.feignClient.account.*;
 import com.dsh.course.feignClient.account.model.CityManager;
-import com.dsh.course.feignClient.course.CancelledClassesClient;
+import com.dsh.course.feignClient.account.model.TAppUser;
+import com.dsh.course.feignClient.account.model.VipPayment;
+import com.dsh.course.feignClient.activity.PointMercharsClient;
+import com.dsh.course.feignClient.competition.CompetitionClient;
+import com.dsh.course.feignClient.competition.model.Competition;
+import com.dsh.course.feignClient.competition.model.CompetitionQuery;
+import com.dsh.course.feignClient.competition.model.PaymentCompetition;
+import com.dsh.course.feignClient.course.*;
+import com.dsh.course.feignClient.course.model.TCoursePackage;
+import com.dsh.course.feignClient.course.model.TCoursePackagePayment;
+import com.dsh.course.feignClient.other.SiteClient;
+import com.dsh.course.feignClient.other.StoreClient;
+import com.dsh.course.model.MoneyBack;
 import com.dsh.guns.config.UserExt;
 import com.dsh.guns.core.base.controller.BaseController;
 import com.dsh.guns.modular.system.model.*;
 import com.dsh.guns.modular.system.service.ICityService;
+import groovyjarjarpicocli.CommandLine;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 数据统计控制器
@@ -34,6 +50,28 @@
     private ICityService cityService;
     @Autowired
     private CityManagerClient cityManagerClient;
+    @Autowired
+    private AppUserClient appUserClient;
+    @Autowired
+    private VipPaymentClient vipPaymentClient;
+    @Autowired
+    private FinanceClient financeClient;
+    @Autowired
+    private CoursePackagePaymentClient coursePackagePaymentClient;
+    @Autowired
+    private CompetitionClient competitionClient;
+    @Autowired
+    private StoreClient storeClient;
+    @Autowired
+    private SiteClient siteClient;
+    @Autowired
+    private PointMercharsClient pointMercharsClient;
+    @Autowired
+    private RefundCoursePackageClient refundCoursePackageClient;
+    @Resource
+    private CourseStuddentClient courseStuddentClient;
+    @Autowired
+    private CoursePackageClient coursePackageClient;
     /**
      * 跳转到平台统计数据页面
      */
@@ -41,6 +79,395 @@
     public String index(Model model) {
         return PREFIX + "platformIncome.html";
     }
+
+    /**
+     * 营收数据-平台
+     *
+     */
+    @RequestMapping(value = "/getIncomeData")
+    @ResponseBody
+    public Object getIncomeData(Integer type) {
+        // 充值记录查询query
+        RechargeRecordsQuery rechargeRecordsQuery = new RechargeRecordsQuery();
+        // 报名课程查询query
+        RegisterOrderQuery query = new RegisterOrderQuery();
+        // 赛事活动查询query
+        CompetitionQuery competitionQuery = new CompetitionQuery();
+        // 会员支付查询query
+        IncomeQuery incomeQuery = new IncomeQuery();
+        // 场地预约记录查询query
+        SiteBookingQuery siteBookingQuery = new SiteBookingQuery();
+        Integer roleType = UserExt.getUser().getObjectType();
+        IncomeVO incomeVO = new IncomeVO();
+        List<IncomeVO> incomeVOS = new ArrayList<>();
+                // 会员支付记录
+                List<VipPayment> vipPayments = vipPaymentClient.registrationList(incomeQuery);
+                for (VipPayment vipPayment : vipPayments) {
+                    IncomeVO temp = new IncomeVO();
+                    if (vipPayment.getPayStatus()==1){
+                        temp.setInsertTime(vipPayment.getInsertTime());
+                        incomeVOS.add(temp);
+                    }
+                    if (vipPayment.getAmount() != null) {
+                        temp.setAmount(new BigDecimal(vipPayment.getAmount().toString()));
+                    }
+                }
+                // 充值记录
+                List<RechargeRecordsVO> rechargeRecordsVOS = financeClient.rechargeList(rechargeRecordsQuery);
+                for (RechargeRecordsVO rechargeRecordsVO : rechargeRecordsVOS) {
+                    IncomeVO temp = new IncomeVO();
+                    temp.setInsertTime(rechargeRecordsVO.getInsertTime());
+                    if (rechargeRecordsVO.getAmount() != null) {
+                        temp.setAmount(rechargeRecordsVO.getAmount());
+                    }
+                    if (rechargeRecordsVO.getPayStatus() ==1){
+                        incomeVOS.add(temp);
+                    }
+
+                }
+                // 报名课程记录
+                List<RegisterOrderVO> registerOrderVOS = coursePackagePaymentClient.listAllRegister(query);
+                for (RegisterOrderVO registerOrderVO : registerOrderVOS) {
+                    if (registerOrderVO.getMoney() == null) {
+                        continue;
+                    }
+                    IncomeVO temp = new IncomeVO();
+                    temp.setInsertTime(registerOrderVO.getInsertTime());
+                    if (registerOrderVO.getMoney() != null) {
+                        temp.setAmount(registerOrderVO.getMoney());
+                    }
+                    if (registerOrderVO.getPayStatus()==2){
+                        incomeVOS.add(temp);
+                    }
+                }
+                    // 报名活动
+                    List<PaymentCompetition> competitions = competitionClient.listAllPayment(competitionQuery);
+                    for (PaymentCompetition competition : competitions) {
+                        if (competition.getPayStatus() != 2) {
+                            continue;
+                        }
+                        if (competition.getPayType()==3 || competition.getPayType()==4){
+                            continue;
+                        }
+                        IncomeVO temp = new IncomeVO();
+                        temp.setInsertTime(competition.getInsertTime());
+                        if (competition.getAmount() != null) {
+                            temp.setAmount(new BigDecimal(competition.getAmount().toString()));
+                        }
+                        incomeVOS.add(temp);
+                    }
+                // 预约场地
+                List<SiteBooking> siteBookings = siteClient.listAll(siteBookingQuery);
+                for (SiteBooking siteBooking : siteBookings) {
+                    IncomeVO temp = new IncomeVO();
+                    if(siteBooking.getStatus()!=3){
+                        continue;
+                    }
+                    temp.setInsertTime(siteBooking.getPayTime());
+                    if (siteBooking.getPayMoney() != null) {
+                        temp.setAmount(new BigDecimal(siteBooking.getPayMoney().toString()));
+                    }
+                    incomeVOS.add(temp);
+                }
+        // 积分商品
+        List<PointMerchandiseIncomeVo> amount = pointMercharsClient.getAmount();
+        for (PointMerchandiseIncomeVo pointMerchandiseIncomeVo : amount) {
+            IncomeVO temp = new IncomeVO();
+            temp.setInsertTime(pointMerchandiseIncomeVo.getInsertTime());
+            if (pointMerchandiseIncomeVo.getCash()!=null){
+                temp.setAmount(pointMerchandiseIncomeVo.getCash());
+                incomeVOS.add(temp);
+            }
+        }
+
+        // 最终返回的数据
+        Map<String, List<Object>> monthlyData = new HashMap<>();
+        // 创建一个 Map 用于存储每年的累计 amount
+        Map<Integer, BigDecimal> yearToTotalAmountMap = new HashMap<>();
+        // 初始化一个 BigDecimal 用于累加
+        BigDecimal totalAmount1 = BigDecimal.ZERO;
+        // 用于返回图表上的总营收 年度营收 月度 周度 日度
+        List<Object> objects = new ArrayList<>();
+        // 遍历 incomeVOS
+        for (IncomeVO incomeVO1 : incomeVOS) {
+            // 总营收
+            BigDecimal total = incomeVO1.getAmount();
+            // 累加到总金额
+            totalAmount1 = totalAmount1.add(total);
+
+            Date insertTime = incomeVO1.getInsertTime(); // 假设有一个方法用于获取 insertTime
+            BigDecimal amount1 = incomeVO1.getAmount(); // 假设有一个方法用于获取 amount
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(insertTime);
+            int year = calendar.get(Calendar.YEAR); // 获取年份
+            // 更新年份对应的累计 amount
+            if (yearToTotalAmountMap.containsKey(year)) {
+                BigDecimal totalAmount = yearToTotalAmountMap.get(year);
+                yearToTotalAmountMap.put(year, totalAmount.add(amount1));
+            } else {
+                yearToTotalAmountMap.put(year, amount1);
+            }
+        }
+        objects.add(totalAmount1);
+        // 创建一个新的列表,按年份升序排列
+        List<Integer> sortedYears = new ArrayList<>(yearToTotalAmountMap.keySet());
+        Collections.sort(sortedYears);
+        // 创建一个新的 IncomeVO 列表,包含按年份累计的 amount
+        List<Object> resultIncomeVOS = new ArrayList<>();
+        // 循环遍历2023年到2028年的年份
+        for (int year = 2023; year <= 2028; year++) {
+            BigDecimal totalAmount = yearToTotalAmountMap.getOrDefault(year, BigDecimal.ZERO);
+            // 创建一个新的 IncomeVO 对象,并设置年份和累计金额
+            IncomeVO resultIncomeVO = new IncomeVO();
+            resultIncomeVO.setAmount(totalAmount);
+            resultIncomeVOS.add(resultIncomeVO);
+        }
+        monthlyData.put("yearIncome",resultIncomeVOS);
+
+        // 创建一个 Map 用于存储今年每个月的累计 amount
+        Map<Integer, BigDecimal> monthToTotalAmountMap = new HashMap<>();
+        Calendar calendar = Calendar.getInstance();
+        int currentYear = calendar.get(Calendar.YEAR);
+        List<BigDecimal> monthlyAmountList = new ArrayList<>(Collections.nCopies(12, BigDecimal.ZERO));
+
+        for (IncomeVO incomeVO1 : incomeVOS) {
+            Calendar calendar1 = Calendar.getInstance();
+            calendar1.setTime(incomeVO1.getInsertTime());
+            int year = calendar1.get(Calendar.YEAR);
+            int month = calendar1.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1
+            if (year == currentYear) {
+                BigDecimal totalAmount = monthlyAmountList.get(month - 1);
+                totalAmount = totalAmount.add(incomeVO1.getAmount());
+                monthlyAmountList.set(month - 1, totalAmount);
+            }
+        }
+        monthlyData.put("monthIncome", Collections.singletonList(monthlyAmountList));
+
+        // 获取当前月份
+        LocalDate currentDate = LocalDate.now();
+        int currentMonth = currentDate.getMonthValue();
+        // 初始化一个长度为当前月份的天数的列表,并将每一天的金额初始化为零
+        int daysInCurrentMonth = currentDate.lengthOfMonth();
+        List<BigDecimal> weekAmount = new ArrayList<>(daysInCurrentMonth);
+        for (int i = 0; i < daysInCurrentMonth; i++) {
+            weekAmount.add(BigDecimal.ZERO);
+        }
+        for (IncomeVO incomeVO1 : incomeVOS) {
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String string = dateFormat.format(incomeVO1.getInsertTime());
+            LocalDate insertDate = LocalDate.parse(string, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            if (insertDate.getMonthValue() == currentMonth) {
+                int dayOfMonth = insertDate.getDayOfMonth();
+                BigDecimal currentAmount = weekAmount.get(dayOfMonth - 1); // 列表索引从0开始
+                weekAmount.set(dayOfMonth - 1, currentAmount.add(incomeVO1.getAmount()));
+            }
+        }
+        monthlyData.put("weekIncome", Collections.singletonList(weekAmount));
+
+        LocalDateTime currentDateTime = LocalDateTime.now();
+        List<BigDecimal> amountByDay = new ArrayList<>(Collections.nCopies(7, BigDecimal.ZERO));
+        for (IncomeVO incomeVO3 : incomeVOS) {
+            Date insertTime = incomeVO3.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); // 计算对应的索引位置
+                BigDecimal amount3 = incomeVO3.getAmount();
+                BigDecimal updatedAmount = amountByDay.get(index).add(amount3);
+                amountByDay.set(index, updatedAmount);
+
+            }
+        }
+
+        monthlyData.put("dayIncome", Collections.singletonList(amountByDay));
+        // 创建一个 Map 用于存储今年本周的累计 amount
+        Map<Integer, BigDecimal> dayToTotalAmountMap = new HashMap<>();
+        BigDecimal yearAmount = BigDecimal.ZERO; // 初始化累加变量为0
+        BigDecimal monthAmount = BigDecimal.ZERO; // 初始化累加变量为0
+        BigDecimal todayAmount = BigDecimal.ZERO; // 初始化累加变量为0
+        // 获取当前日期和时间
+        LocalDateTime now = LocalDateTime.now();
+        // 今年的起始日期和结束日期
+        LocalDateTime startOfYear = now.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
+        LocalDateTime endOfYear = now.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX);
+        // 本月的起始日期和结束日期
+        LocalDateTime startOfMonth = now.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
+        LocalDateTime endOfMonth = now.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
+        // 本周的起始日期和结束日期
+        LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).with(LocalTime.MIN);
+        LocalDateTime endOfWeek = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)).with(LocalTime.MAX);
+        // 今天的起始日期和结束日期
+        LocalDateTime startOfDay = now.with(LocalTime.MIN);
+        LocalDateTime endOfDay = now.with(LocalTime.MAX);
+        // 创建日期格式化器
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 筛选符合条件的IncomeVO对象
+        List<IncomeVO> thisYearIncome = incomeVOS.stream()
+                .filter(income -> {
+                    Date insertTime = income.getInsertTime();
+                    try {
+                        LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
+                        return insertDateTime.isAfter(startOfYear) && insertDateTime.isBefore(endOfYear);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    }
+                })
+                .collect(Collectors.toList());
+        // 使用 map 方法将 IncomeVO 转换为 BigDecimal,提取出 amount 字段
+        List<BigDecimal> amounts = thisYearIncome.stream()
+                .map(IncomeVO::getAmount)
+                .collect(Collectors.toList());
+        //本年总收入
+        BigDecimal totalAmount = amounts.stream()
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 用于展示总营收 本年度营收 本月营收 本周营收 本日营收
+        objects.add(totalAmount);
+        List<IncomeVO> thisMonthIncome = incomeVOS.stream()
+                .filter(income -> {
+                    Date insertTime = income.getInsertTime();
+                    try {
+                        LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
+                        return insertDateTime.isAfter(startOfMonth) && insertDateTime.isBefore(endOfMonth);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    }
+                })
+                .collect(Collectors.toList());
+        List<BigDecimal> amountMonth = thisMonthIncome.stream()
+                .map(IncomeVO::getAmount)
+                .collect(Collectors.toList());
+        // 使用 本月总收入
+        BigDecimal totalMonth = amountMonth.stream()
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        objects.add(totalMonth);
+        List<IncomeVO> thisWeekIncome = incomeVOS.stream()
+                .filter(income -> {
+                    Date insertTime = income.getInsertTime();
+                    try {
+                        LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
+                        return insertDateTime.isAfter(startOfWeek) && insertDateTime.isBefore(endOfWeek);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    }
+                })
+                .collect(Collectors.toList());
+        List<BigDecimal> amountWeek = thisWeekIncome.stream()
+                .map(IncomeVO::getAmount)
+                .collect(Collectors.toList());
+        // 使用 本月总收入
+        BigDecimal totalWeek = amountWeek.stream()
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        objects.add(totalWeek);
+        List<IncomeVO> todayIncome = incomeVOS.stream()
+                .filter(income -> {
+                    Date insertTime = income.getInsertTime();
+                    try {
+                        LocalDateTime insertDateTime = LocalDateTime.ofInstant(insertTime.toInstant(), ZoneId.systemDefault());
+                        return insertDateTime.isAfter(startOfDay) && insertDateTime.isBefore(endOfDay);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    }
+                })
+                .collect(Collectors.toList());
+        List<BigDecimal> amountToday = todayIncome.stream()
+                .map(IncomeVO::getAmount)
+                .collect(Collectors.toList());
+        // 使用 本月总收入
+        BigDecimal totalToday = amountToday.stream()
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        objects.add(totalToday);
+        // 最后put
+        monthlyData.put("yearMount",objects);
+
+        return monthlyData;
+    }
+
+    /**
+     * 运营统计-平台-用户数据
+     *
+     */
+    @RequestMapping(value = "/getUserData")
+    @ResponseBody
+    public Object getUserData() {
+
+
+        return null;
+    }
+    /**
+     * 退费-平台
+     *
+     */
+    @RequestMapping(value = "/getRefundData")
+    @ResponseBody
+    public Object getRefundData(Integer type) {
+        // 赛事活动查询query
+        CompetitionQuery competitionQuery = new CompetitionQuery();
+        List<IncomeVO> incomeVOS = new ArrayList<>();
+        // 获取学员课包退费
+        List<MoneyBack> refund = refundCoursePackageClient.getRefund();
+
+        for (MoneyBack moneyBack : refund) {
+            List<TCoursePackagePayment> coursePackagePayments =  courseStuddentClient.queryByIds(moneyBack.getIds());
+            BigDecimal totalAmount = BigDecimal.ZERO;
+            for (TCoursePackagePayment payment : coursePackagePayments){
+                //课包名称
+                TCoursePackage tCoursePackage = coursePackageClient.queryById(payment.getCoursePackageId());
+                payment.setName(tCoursePackage.getName());
+                payment.setId(Long.valueOf(tCoursePackage.getId()));
+                BigDecimal cashPayment = payment.getCashPayment();
+                if (cashPayment==null){
+                    cashPayment = BigDecimal.ZERO;
+                }
+                Integer totalClassHours = payment.getTotalClassHours();
+                BigDecimal result =  new BigDecimal(0);
+                if (totalClassHours!=0) {
+                    result = cashPayment.divide(BigDecimal.valueOf(totalClassHours), 2, RoundingMode.HALF_UP);
+                }
+                //单价
+                payment.setOnePrice(result);
+                int has = payment.getTotalClassHours() - payment.getLaveClassHours();
+                //剩余课时
+                payment.setHasHours(has);
+                BigDecimal onePrice = payment.getOnePrice();
+                Integer laveClassHours = payment.getLaveClassHours();
+                BigDecimal result1 = onePrice.multiply(BigDecimal.valueOf(laveClassHours));
+                //总价
+                payment.setRestPrice(result1);
+                System.out.println("======="+result1);
+                totalAmount = totalAmount.add(result1);
+                IncomeVO temp = new IncomeVO();
+                temp.setInsertTime(payment.getInsertTime());
+                temp.setAmount(result1);
+                incomeVOS.add(temp);
+            }
+        }
+        // 获取赛事退费记录
+        List<PaymentCompetition> competitions = competitionClient.listAllPayment(competitionQuery);
+        for (PaymentCompetition competition : competitions) {
+            if (competition.getPayStatus() != 3) {
+                continue;
+            }
+            if (competition.getPayType()==3 || competition.getPayType()==4){
+                continue;
+            }
+            IncomeVO temp = new IncomeVO();
+            temp.setInsertTime(competition.getInsertTime());
+            if (competition.getAmount() != null) {
+                temp.setAmount(new BigDecimal(competition.getAmount().toString()));
+            }
+            incomeVOS.add(temp);
+        }
+
+        return null;
+    }
     /**
      * 跳转到运营商统计数据页面
      */
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GameDataController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GameDataController.java
new file mode 100644
index 0000000..c01991c
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GameDataController.java
@@ -0,0 +1,237 @@
+package com.dsh.guns.modular.system.controller.code;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.dsh.course.feignClient.other.model.Site;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.ISiteBookingService;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.service.ITSiteService;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 智慧球场统计控制器
+ *
+ */
+@Controller
+@RequestMapping("/gameData")
+public class GameDataController extends BaseController {
+    private String PREFIX = "/system/gameData/";
+    @Autowired
+    private ITSiteService siteService;
+    @Autowired
+    private IStoreService storeService;
+    @Autowired
+    private ISiteBookingService siteBookingService;
+    /**
+     * 跳转到充值记录页面
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        List<String> strings = new ArrayList<>();
+        List<TSite> list = siteService.list(new QueryWrapper<TSite>());
+        List<TSite> result = new ArrayList<>();
+        for (TSite tSite : list) {
+            if (!strings.contains(tSite.getCity())){
+                strings.add(tSite.getCity());
+                result.add(tSite);
+            }
+        }
+        List<TStore> stores = storeService.list(new QueryWrapper<TStore>());
+        model.addAttribute("list",result);
+        model.addAttribute("stores",stores);
+        model.addAttribute("sites",list);
+        return PREFIX + "GameData.html";
+    }
+    /**
+     * 获取激战球场统计
+     */
+    @RequestMapping("/list")
+    @ResponseBody
+    public Object list(Integer storeId) {
+        Map<String, Object> result = new HashMap<>();
+        try {
+            // 年度数据
+            // 创建 HttpClient 实例
+            HttpClient httpClient = HttpClients.createDefault();
+            // 创建 POST 请求
+            HttpPost httpPost = new HttpPost("https://try.daowepark.com/v7/user_api/general/getBatterData");
+            // 设置请求体数据
+            String postData = "sign=0DB011836143EEE2C2E072967C9F4E4B&space_id=1001&date_type=y";
+
+            StringEntity entity = new StringEntity(postData, ContentType.APPLICATION_FORM_URLENCODED);
+            httpPost.setEntity(entity);
+            // 执行请求
+            HttpResponse response = httpClient.execute(httpPost);
+            // 处理响应
+            HttpEntity responseEntity = response.getEntity();
+            if (responseEntity != null) {
+                String responseData = EntityUtils.toString(responseEntity);
+                ObjectMapper objectMapper = new ObjectMapper();
+                Batter batter = objectMapper.readValue(responseData, Batter.class);
+                result.put("totalNumber",batter.getData().getAll_batter_num());
+                result.put("totalTime",batter.getData().getAll_batter_time());
+                List<BatterData> dataList = batter.getData().getList();
+                // 年份
+                List<String> yearList = new ArrayList<>();
+                for (BatterData data : dataList) {
+                    yearList.add(data.getDate());
+                }
+                result.put("yearList",yearList);
+                // 年度数据
+                result.put("yDataList",dataList);
+            }
+            // 获取月度数据 (今年的十二个月数据)
+            Calendar calendar = Calendar.getInstance();
+            // 当前年份
+            int year = calendar.get(Calendar.YEAR);
+            // 月度数据
+            // 创建 HttpClient 实例
+            HttpClient httpClient1 = HttpClients.createDefault();
+            // 创建 POST 请求
+            HttpPost httpPost1 = new HttpPost("https://try.daowepark.com/v7/user_api/general/getBatterData");
+            // 设置请求体数据
+            String postData1 = "sign=0DB011836143EEE2C2E072967C9F4E4B&space_id=1001&date_type=m&year=2022";
+            StringEntity entity1 = new StringEntity(postData1, ContentType.APPLICATION_FORM_URLENCODED);
+            httpPost1.setEntity(entity1);
+            // 执行请求
+            HttpResponse response1 = httpClient1.execute(httpPost1);
+            // 处理响应
+            HttpEntity responseEntity1 = response1.getEntity();
+            if (responseEntity1 != null) {
+                String responseData = EntityUtils.toString(responseEntity1);
+                ObjectMapper objectMapper = new ObjectMapper();
+                Batter batter = objectMapper.readValue(responseData, Batter.class);
+                result.put("totalNumber",batter.getData().getAll_batter_num());
+                result.put("totalTime",batter.getData().getAll_batter_time());
+                List<BatterData> dataList = batter.getData().getList();
+
+                // 月度数据
+                result.put("mDataList",dataList);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+    /**
+     * 获取SUTU智慧球门统计
+     */
+    @RequestMapping("/listSUTU")
+    @ResponseBody
+    public Object listSUTU() {
+        Map<String, Object> result = new HashMap<>();
+        try {
+            String apiUrl = "https://try.daowepark.com/v7/user_api/general/gameDataRate";
+            URL url = new URL(apiUrl);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("GET");
+            // 发送请求并获取响应
+            int responseCode = connection.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+                String line;
+                StringBuilder response = new StringBuilder();
+                while ((line = reader.readLine()) != null) {
+                    response.append(line);
+                }
+                reader.close();
+                // 处理响应数据
+                String data = response.toString();
+                // 使用Jackson库将JSON字符串转换为Java对象
+                ObjectMapper objectMapper = new ObjectMapper();
+                SUTU res = objectMapper.readValue(data, SUTU.class);
+                // 场地总入场人数
+                String totalNum = res.getData().getTotal_num();
+                List<SUTUData> list = res.getData().getList();
+                List<String> games = new ArrayList<>();
+                for (SUTUData sutuData : list) {
+                    games.add(sutuData.getGame_name());
+                }
+                result.put("data1",list);
+                result.put("games",games);
+                return result;
+            } else {
+                System.out.println("请求失败: " + responseCode);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+    /**
+     * 获取SUTU智慧球门统计
+     */
+    @RequestMapping("/listSUTU1")
+    @ResponseBody
+    public Object listSUTU1() {
+        Map<String, Object> result = new HashMap<>();
+        try {
+            String apiUrl = "https://try.daowepark.com/v7/user_api/general/getSingleGameData?game_id=1&date_type=d&date=2021-02";
+            URL url = new URL(apiUrl);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("GET");
+            // 发送请求并获取响应
+            int responseCode = connection.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+                String line;
+                StringBuilder response = new StringBuilder();
+                while ((line = reader.readLine()) != null) {
+                    response.append(line);
+                }
+                reader.close();
+                // 处理响应数据
+                String data = response.toString();
+                // 使用Jackson库将JSON字符串转换为Java对象
+                ObjectMapper objectMapper = new ObjectMapper();
+                SUTU res = objectMapper.readValue(data, SUTU.class);
+                // 场地总入场人数
+                String totalNum = res.getData().getTotal_num();
+                List<SUTUData> list = res.getData().getList();
+                List<String> games = new ArrayList<>();
+                for (SUTUData sutuData : list) {
+                    games.add(sutuData.getGame_name());
+                }
+                result.put("data1",list);
+                result.put("games",games);
+                return result;
+            } else {
+                System.out.println("请求失败: " + responseCode);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+
+
+}
+
+
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GateDataController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GateDataController.java
new file mode 100644
index 0000000..bb2b034
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GateDataController.java
@@ -0,0 +1,119 @@
+package com.dsh.guns.modular.system.controller.code;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.dsh.course.feignClient.account.AppUserClient;
+import com.dsh.course.feignClient.account.FinanceClient;
+import com.dsh.course.feignClient.account.VipPaymentClient;
+import com.dsh.course.feignClient.account.model.CoachType;
+import com.dsh.course.feignClient.account.model.TAppUser;
+import com.dsh.course.feignClient.account.model.VipPayment;
+import com.dsh.course.feignClient.competition.CompetitionClient;
+import com.dsh.course.feignClient.competition.model.Competition;
+import com.dsh.course.feignClient.competition.model.CompetitionQuery;
+import com.dsh.course.feignClient.competition.model.PaymentCompetition;
+import com.dsh.course.feignClient.course.CancelledClassesClient;
+import com.dsh.course.feignClient.course.CoursePackagePaymentClient;
+import com.dsh.course.feignClient.other.SiteClient;
+import com.dsh.course.feignClient.other.StoreClient;
+import com.dsh.course.feignClient.other.model.Site;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.ICityService;
+import com.dsh.guns.modular.system.service.IRegionService;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import com.google.maps.internal.ApiResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 闸机数据统计控制器
+ *
+ */
+@Controller
+@RequestMapping("/gateData")
+public class GateDataController extends BaseController {
+
+    @Autowired
+    private SiteClient siteClient;
+    private String PREFIX = "/system/gateData/";
+
+
+
+    /**
+     * 跳转到充值记录页面
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        return PREFIX + "GateData.html";
+    }
+    /**
+     * 获取教练类型列表
+     */
+    @RequestMapping("/list")
+    @ResponseBody
+    public Object list() {
+        List<Site> list = siteClient.getList();
+        try {
+            for (Site site : list) {
+                String apiUrl = "https://try.daowepark.com/v7/user_api/general/spaceDoorData?space_id=" + site.getId();
+                URL url = new URL(apiUrl);
+                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+                connection.setRequestMethod("GET");
+                // 发送请求并获取响应
+                int responseCode = connection.getResponseCode();
+                if (responseCode == HttpURLConnection.HTTP_OK) {
+                    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+                    String line;
+                    StringBuilder response = new StringBuilder();
+                    while ((line = reader.readLine()) != null) {
+                        response.append(line);
+                    }
+                    reader.close();
+                    // 处理响应数据
+                    String data = response.toString();
+                    // 使用Jackson库将JSON字符串转换为Java对象
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    GateDataResponse res = objectMapper.readValue(data, GateDataResponse.class);
+                    // 访问Java对象中的数据
+                    int code = res.getCode();
+                    String message = res.getMessage();
+                    // 场地总入场人数
+                    int totalNum = res.getData().getTotal_num();
+                    List<GateDataResponse.Data.Region> regionNumList = res.getData().getRegion_num();
+                    for (GateDataResponse.Data.Region regionNum : regionNumList) {
+                        String name = regionNum.getName();
+                        int enterNum = regionNum.getEnter_num();
+                        System.out.println("Region: " + name + ", EnterNum: " + enterNum);
+                    }
+                    return regionNumList;
+
+                } else {
+                    System.out.println("请求失败: " + responseCode);
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return new ArrayList<>();
+    }
+}
+
+
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java
new file mode 100644
index 0000000..3a2fd41
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java
@@ -0,0 +1,302 @@
+package com.dsh.guns.modular.system.controller.code;
+
+
+import cn.hutool.crypto.SecureUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.CityManagerClient;
+import com.dsh.course.feignClient.account.CoachClient;
+import com.dsh.course.feignClient.account.CoachTypeClient;
+import com.dsh.course.feignClient.account.model.CityManager;
+import com.dsh.course.feignClient.account.model.Coach;
+import com.dsh.course.feignClient.account.model.CoachSerchVO;
+import com.dsh.course.feignClient.account.model.CoachType;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.SinataUtil;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.ICityService;
+import com.dsh.guns.modular.system.service.IUserService;
+import com.dsh.guns.modular.system.service.TOperatorCityService;
+import com.dsh.guns.modular.system.service.TOperatorService;
+import com.dsh.guns.modular.system.util.ResultUtil;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 运营商管理
+ */
+@Controller
+@RequestMapping("/operator")
+public class OperatorController extends BaseController {
+
+    private String PREFIX = "/system/operator/";
+    @Autowired
+    private TOperatorService operatorService;
+    @Autowired
+    private TOperatorCityService operatorCityService;
+    @Autowired
+    private IUserService userService;
+    @Autowired
+    private ICityService cityService;
+    /**
+     * 跳转运营商管理首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        return PREFIX + "Operator.html";
+    }
+
+    /**
+     * 跳转运营商重置密码页面
+     */
+    @RequestMapping("/resetPassword")
+    public String resetPassword(Model model) {
+        return PREFIX + "Operator_resetPassword.html";
+    }
+    /**
+     * 跳转运营商添加页面
+     */
+    @RequestMapping("/add")
+    public String add(Model model) {
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        model.addAttribute("provinceList",list);
+        return PREFIX + "Operator_add.html";
+    }
+    /**
+     * 跳转运营商编辑页面
+     */
+    @RequestMapping("/update/{id}")
+    public String update(Model model,@PathVariable("id") Integer id) {
+        List<TCity> provinceList = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        model.addAttribute("provinceList",provinceList);
+        model.addAttribute("id",id);
+        TOperator byId = operatorService.getById(id);
+        // 运营商名称
+        model.addAttribute(byId.getName());
+        User byId1 = userService.getById(byId.getUserId());
+        model.addAttribute("userName",byId1.getName());
+        model.addAttribute("phone",byId1.getPhone());
+        model.addAttribute("data",byId);
+        // 获取全部的省
+        List<TOperatorCity> list = operatorCityService.list(new QueryWrapper<TOperatorCity>().eq("operatorId", id).eq("pid",0));
+        List<OperatorCityVO> result = new ArrayList<>();
+
+        for (TOperatorCity tOperatorCity : list) {
+            // 拿到省下面的所有市
+            List<TOperatorCity> cities= operatorCityService.list(new QueryWrapper<TOperatorCity>().eq("pid", tOperatorCity.getId()));
+            if (cities.size()==0){
+                OperatorCityVO operatorCityVO = new OperatorCityVO();
+                operatorCityVO.setProvince(tOperatorCity.getName());
+                operatorCityVO.setProvinceCode(tOperatorCity.getCode());
+                result.add(operatorCityVO);
+            }
+            for (TOperatorCity city : cities) {
+                OperatorCityVO operatorCityVO = new OperatorCityVO();
+                operatorCityVO.setProvince(tOperatorCity.getName());
+                operatorCityVO.setProvinceCode(tOperatorCity.getCode());
+                operatorCityVO.setCity(city.getName());
+                operatorCityVO.setCityCode(city.getCode());
+                result.add(operatorCityVO);
+            }
+        }
+        model.addAttribute("list",result);
+        return PREFIX + "Operator_edit.html";
+    }
+    /**
+     * 获取运营商列表
+     */
+    @RequestMapping(value = "/listAll")
+    @ResponseBody
+    public Object listAll(String userName, String phone,Integer type) {
+        Page<Map<String,Object>> page = new PageFactory<Map<String,Object>>().defaultPage();
+        List<Map<String,Object>> list =  operatorService.listAll(page,userName,phone,type);
+        page.setRecords(list);
+        return super.packForBT(page);
+    }
+
+    /**
+     * 批量重置密码
+     * @return
+     */
+    @RequestMapping(value = "/pwd")
+    @ResponseBody
+    public Object pwd(@RequestBody OperatorRestPwd pwd  ) {
+        try {
+            List<TOperator> list = operatorService.list(new QueryWrapper<TOperator>().in("id",pwd.getIds()));
+            List<Integer> userIds = list.stream()
+                    .map(TOperator::getUserId)
+                    .collect(Collectors.toList());
+            String a123456 = SecureUtil.md5("123456");
+            List<User> users = userService.list(new QueryWrapper<User>().in("id", userIds));
+            for (User user : users) {
+                user.setPassword(a123456);
+            }
+            userService.updateBatchById(users);
+            return SUCCESS_TIP;
+        }catch (Exception e){
+            e.printStackTrace();
+            return ERROR;
+        }
+    }
+    /**
+     *  1为解冻 2为冻结
+     *
+     * @return
+     */
+    @RequestMapping("/changeState")
+    @ResponseBody
+    public Object changeState(@RequestBody CoachChangeStateVO vo){
+        operatorService.changeState(vo);
+        return ResultUtil.success();
+    }
+    /**
+     *  添加运营商
+     */
+    @ResponseBody
+    @RequestMapping(value = "/addOperator")
+    public ResultUtil addOperator(String name,String userName,String phone,Integer type ,@RequestParam String comArr) {
+        User one = userService.getOne(new QueryWrapper<User>().eq("name", name).eq("phone", phone));
+        if (one!=null){
+            return ResultUtil.error("当前管理员名称和电话已存在!");
+        }
+        User user = new User();
+        user.setName(userName);
+        user.setPhone(phone);
+        user.setObjectType(2);
+        userService.save(user);
+        TOperator data = new TOperator();
+        data.setUserId(user.getId());
+        data.setName(name);
+        data.setType(type);
+        data.setStatus(1);
+        data.setState(1);
+        operatorService.save(data);
+        if (SinataUtil.isNotEmpty(comArr)){
+            JSONArray jsonArray = JSON.parseArray(comArr);
+            int size = jsonArray.size();
+            for (int i = 0; i < size; i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                TOperatorCity province = new TOperatorCity();
+                TOperatorCity city = new TOperatorCity();
+                TOperatorCity one1 = operatorCityService.getOne(new QueryWrapper<TOperatorCity>()
+                        .eq("name", jsonObject.getString("province"))
+                        .eq("operatorId", data.getId()));
+                // 省
+                if (one1==null){
+                    province.setName(jsonObject.getString("province"));
+                    province.setCode(jsonObject.getInteger("provinceCode"));
+                    province.setPid(0);
+                    province.setType(jsonObject.getInteger("areaType"));
+                    province.setOperatorId(data.getId());
+                    city.setPid(province.getId());
+                    operatorCityService.save(province);
+                    // 市
+                    if (!jsonObject.getString("city").equals("")){
+                        city.setName(jsonObject.getString("city"));
+                        city.setCode(jsonObject.getInteger("cityCode"));
+                        city.setPid(province.getId());
+                        city.setType(jsonObject.getInteger("areaType"));
+                        city.setOperatorId(data.getId());
+                        operatorCityService.save(city);
+                    }
+                }else{
+                    // 市
+                    if (!jsonObject.getString("city").equals("")){
+                        city.setName(jsonObject.getString("city"));
+                        city.setCode(jsonObject.getInteger("cityCode"));
+                        city.setPid(one1.getId());
+                        city.setType(jsonObject.getInteger("areaType"));
+                        city.setOperatorId(data.getId());
+                        operatorCityService.save(city);
+                    }
+                }
+            }
+        }
+        return ResultUtil.success("添加成功");
+    }
+    /**
+     *  添加运营商
+     */
+    @ResponseBody
+    @RequestMapping(value = "/updateOperator")
+    public ResultUtil updateOperator(Integer id,String name,String userName,String phone,Integer type ,@RequestParam String comArr) {
+        User one = userService.getOne(new QueryWrapper<User>().eq("name", name).eq("phone", phone));
+        if (one!=null){
+            return ResultUtil.error("当前管理员名称和电话已存在!");
+        }
+        operatorCityService.remove(new QueryWrapper<TOperatorCity>().eq("operatorId",id));
+        User user = new User();
+        user.setName(userName);
+        user.setPhone(phone);
+        user.setObjectType(2);
+        String a123456 = SecureUtil.md5("a123456");
+        user.setPassword(a123456);
+        userService.save(user);
+        TOperator data = new TOperator();
+        data.setId(id);
+        data.setUserId(user.getId());
+        data.setName(name);
+        data.setType(type);
+        data.setStatus(1);
+        data.setState(1);
+        operatorService.updateById(data);
+        if (type != 1){
+        if (SinataUtil.isNotEmpty(comArr)){
+            JSONArray jsonArray = JSON.parseArray(comArr);
+            int size = jsonArray.size();
+            for (int i = 0; i < size; i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                TOperatorCity province = new TOperatorCity();
+                TOperatorCity city = new TOperatorCity();
+                TOperatorCity one1 = operatorCityService.getOne(new QueryWrapper<TOperatorCity>()
+                        .eq("name", jsonObject.getString("province"))
+                        .eq("operatorId", data.getId()));
+                // 省
+                if (one1==null){
+                    province.setName(jsonObject.getString("province"));
+                    province.setCode(jsonObject.getInteger("provinceCode"));
+                    province.setPid(0);
+                    province.setType(jsonObject.getInteger("areaType"));
+                    province.setOperatorId(data.getId());
+                    city.setPid(province.getId());
+                    operatorCityService.save(province);
+                    // 市
+                    if (!jsonObject.getString("city").equals("")){
+                        city.setName(jsonObject.getString("city"));
+                        city.setCode(jsonObject.getInteger("cityCode"));
+                        city.setPid(province.getId());
+                        city.setType(jsonObject.getInteger("areaType"));
+                        city.setOperatorId(data.getId());
+                        operatorCityService.save(city);
+                    }
+                }else{
+                    // 市
+                    if (!jsonObject.getString("city").equals("")){
+                        city.setName(jsonObject.getString("city"));
+                        city.setCode(jsonObject.getInteger("cityCode"));
+                        city.setPid(one1.getId());
+                        city.setType(jsonObject.getInteger("areaType"));
+                        city.setOperatorId(data.getId());
+                        operatorCityService.save(city);
+                    }
+                }
+            }
+        }
+        }
+        return ResultUtil.success("添加成功");
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java
new file mode 100644
index 0000000..8190a57
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java
@@ -0,0 +1,112 @@
+package com.dsh.guns.modular.system.controller.code;
+
+
+import cn.hutool.crypto.SecureUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.StoreStaffClient;
+import com.dsh.course.feignClient.account.model.TStoreStaff;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.SinataUtil;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.*;
+import com.dsh.guns.modular.system.service.impl.TOperatorUserServiceImpl;
+import com.dsh.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * 运营商管理
+ */
+@Controller
+@RequestMapping("/operatorUser")
+public class OperatorUserController extends BaseController {
+
+    private String PREFIX = "/system/operatorUser/";
+    @Autowired
+    private TOperatorService operatorService;
+    @Autowired
+    private TOperatorCityService operatorCityService;
+    @Autowired
+    private IUserService userService;
+    @Autowired
+    private ICityService cityService;
+    @Autowired
+    private IOperatorUserService operatorUserService;
+    @Autowired
+    private IStoreService storeService;
+    @Autowired
+    private StoreStaffClient storeStaffClient;
+    /**
+     * 跳转运营商管理首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        model.addAttribute("provinceList",list);
+        return PREFIX + "OperatorUser.html";
+    }
+
+
+    /**
+     * 跳转运营商商户去认证页面
+     */
+    @RequestMapping("/proportion/{id}")
+    public String update(Model model,@PathVariable("id") Integer id) {
+        List<TCity> provinceList = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        model.addAttribute("provinceList",provinceList);
+        List<Bank> bankList = operatorService.getBankList();
+        TStore store = storeService.getOne(new QueryWrapper<TStore>().eq("operatorId", id));
+        model.addAttribute("storeName",store.getName());
+//        TStoreStaff storeByStoreStaffId = storeStaffClient.getStoreByStoreStaffId(store.getStoreStaffId());
+//        model.addAttribute("storeStaff",storeByStoreStaffId.getName());
+//        model.addAttribute("storePhone",storeByStoreStaffId.getPhone());
+        model.addAttribute("bankList",bankList);
+        return PREFIX + "OperatorUser_auth.html";
+    }
+    /**
+     * 获取运营商列表
+     */
+    @RequestMapping(value = "/listAll")
+    @ResponseBody
+    public Object listAll(String province,String city,String userName, String phone,Integer platform,Integer type,Integer state) {
+        Page<Map<String,Object>> page = new PageFactory<Map<String,Object>>().defaultPage();
+        List<Map<String,Object>> list =  operatorUserService.listAll(page,province,city,userName,phone,platform,type,state);
+        page.setRecords(list);
+        return super.packForBT(page);
+    }
+
+    /**
+     * 批量重置密码
+     * @return
+     */
+    @RequestMapping(value = "/addProportion")
+    @ResponseBody
+    public Object pwd(Integer id, BigDecimal alipay,BigDecimal wechat) {
+        List<OperatorUser> list = operatorUserService.list(new QueryWrapper<OperatorUser>().eq("operatorId", id));
+        for (OperatorUser operatorUser : list) {
+            if (operatorUser.getPlatform()==1){
+                operatorUser.setProportion(wechat);
+                operatorUserService.updateById(operatorUser);
+            }else {
+                operatorUser.setProportion(alipay);
+                operatorUserService.updateById(operatorUser);
+            }
+        }
+        return SUCCESS_TIP;
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
index 77b294d..8f53790 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
@@ -3,6 +3,7 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dsh.course.feignClient.account.AppUserClient;
 import com.dsh.course.feignClient.account.CityManagerClient;
@@ -18,11 +19,8 @@
 import com.dsh.guns.core.base.tips.SuccessTip;
 import com.dsh.guns.core.common.constant.factory.PageFactory;
 import com.dsh.guns.core.util.ToolUtil;
-import com.dsh.guns.modular.system.model.CouponDataVo;
-import com.dsh.guns.modular.system.model.Region;
-import com.dsh.guns.modular.system.model.TStore;
-import com.dsh.guns.modular.system.service.IRegionService;
-import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.*;
 import com.dsh.guns.modular.system.util.OBSUploadUtil;
 import com.dsh.guns.modular.system.util.OssUploadUtil;
 import com.dsh.guns.modular.system.util.ResultUtil;
@@ -48,10 +46,7 @@
 @RequestMapping("/tCouponManage")
 public class TCouponController {
 
-
-
     private String PREFIX = "/system/tCoupon/";
-
 
     @Resource
     private IRegionService regiService;
@@ -67,8 +62,12 @@
 
     @Autowired
     private AppUserClient appUserClient;
-
-
+    @Autowired
+    private IUserService userService;
+    @Autowired
+    private TOperatorService operatorService;
+    @Autowired
+    private TOperatorCityService operatorCityService;
 
     /**
      * 跳转到优惠券管理首页
@@ -88,7 +87,6 @@
         model.addAttribute("userType",objectType);
         return PREFIX + "TQuestionAdd.html";
     }
-
 
     @RequestMapping("/coupon_record/{id}")
     public String memberCouponAdd(@PathVariable Integer id,Model model) {
@@ -164,7 +162,7 @@
      */
     @RequestMapping("/storeList")
     public String storePage(Model model) {
-        return PREFIX + "TQuestionEdit.html";
+        return PREFIX + "TStoreList.html";
     }
     @RequestMapping("/updateType")
     @ResponseBody
@@ -175,11 +173,7 @@
 
     @RequestMapping("/storeDetailsOfSearch")
     @ResponseBody
-    public Object listOfStore(Integer provinceId,Integer cityId,Integer cityManagerId,String storeName){
-        System.out.println("provinceId"+provinceId);
-        System.out.println("cityId"+cityId);
-        System.out.println("cityManagerId"+cityManagerId);
-        System.out.println("storeName"+storeName);
+    public Object listOfStore(Integer provinceId,Integer cityId,Integer operatorId,String storeName){
         String provinceCode = null;
         String cityCode = null;
         if (ToolUtil.isNotEmpty(provinceId)){
@@ -191,17 +185,22 @@
             cityCode = cityRegion.getCode();
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        List<Map<String,Object>> storeList = storeService.queryListOfpage(provinceCode,cityCode,cityManagerId,storeName,page);
+        List<Map<String,Object>> storeList = storeService.queryListOfpage(provinceCode,cityCode,operatorId,storeName,page);
         if (storeList.size() > 0 ){
             for (Map<String, Object> stringObjectMap : storeList) {
                 String provinceName = (String) stringObjectMap.get("province");
                 String cityName = (String) stringObjectMap.get("city");
                 stringObjectMap.put("provinceCity",provinceName+cityName);
-                Integer managerId = (Integer) stringObjectMap.get("cityManagerId");
-                CityManager cityManager = cmgrClient.queryCityManagerById(managerId);
-                if (ToolUtil.isNotEmpty(cityManager)){
-                    stringObjectMap.put("accountName",cityManager.getName()+"+"+cityManager.getPhone());
+                Integer managerId = (Integer) stringObjectMap.get("operatorId");
+                if (managerId==null){
+                    stringObjectMap.put("accountName","平台");
+                }else{
+                    TOperator operator = operatorService.getOne(new QueryWrapper<TOperator>().eq("id", managerId));
+                    if (ToolUtil.isNotEmpty(operator)){
+                        stringObjectMap.put("accountName",operator.getName());
+                    }
                 }
+
             }
         }
         return storeList;
@@ -294,6 +293,15 @@
         return regiService.list(new LambdaQueryWrapper<Region>()
                 .eq(Region::getParentId,province));
     }
+    // 通过市 获取运营商
+    @RequestMapping(value = "/getOperator")
+    @ResponseBody
+    public Object getOperator(Integer city){
+        List<TOperatorCity> name = operatorCityService.list(new QueryWrapper<TOperatorCity>().eq("name", city));
+        List<Integer> collect = name.stream().map(TOperatorCity::getOperatorId)
+                .collect(Collectors.toList());
+        return operatorService.list(new QueryWrapper<TOperator>().in("id",collect));
+    }
 
     @RequestMapping(value = "/uploadPic")
     @ResponseBody
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java
index 09efcda..764286a 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java
@@ -318,7 +318,7 @@
                         temp.setAmount(rechargeRecordsVO.getAmount());
                     }
                     temp.setIncomeType(2);
-                    temp.setState(rechargeRecordsVO.getState());
+                    temp.setState(rechargeRecordsVO.getPayStatus());
                     incomeVOS.add(temp);
                 }
             }
@@ -405,6 +405,7 @@
         }
         return incomeVOS;
     }
+
     /**
      * 获取收入管理列表
      */
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
index ecd68dc..844dc34 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
@@ -28,6 +28,8 @@
 import com.dsh.guns.modular.system.model.*;
 import com.dsh.guns.modular.system.service.*;
 import com.dsh.guns.modular.system.util.ResultUtil;
+import com.sun.org.apache.regexp.internal.RE;
+import groovyjarjarpicocli.CommandLine;
 import net.bytebuddy.asm.Advice;
 import org.aspectj.weaver.ast.Var;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -90,6 +92,17 @@
     private SiteLockClient siteLockClient;
 
 
+    /**
+     *   选择市 返回场地列表
+     */
+    @ResponseBody
+    @RequestMapping(value = "/getSiteByCity")
+    public List<TSite> getSiteByCity(String oneId) {
+        if (oneId.equals("")){
+            return siteService.list(new QueryWrapper<TSite>());
+        }
+        return siteService.list(new QueryWrapper<TSite>().eq("cityCode",oneId));
+    }
     /**
      * 跳转到场地管理首页
      */
@@ -374,6 +387,7 @@
         Region name = regionService.getOne(new QueryWrapper<Region>().eq("name", province));
         return regionService.list(new QueryWrapper<Region>().eq("parent_id", name.getId()));
     }
+
     /**
      *  添加场地管理
      */
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TicketController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TicketController.java
new file mode 100644
index 0000000..1b3ab19
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TicketController.java
@@ -0,0 +1,415 @@
+package com.dsh.guns.modular.system.controller.code;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.AppUserClient;
+import com.dsh.course.feignClient.account.CityManagerClient;
+import com.dsh.course.feignClient.account.model.CityManager;
+import com.dsh.course.feignClient.account.model.QueryByNamePhone;
+import com.dsh.course.feignClient.account.model.TAppUser;
+import com.dsh.course.feignClient.activity.CouponClient;
+import com.dsh.course.feignClient.activity.PointMercharsClient;
+import com.dsh.course.feignClient.activity.model.*;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.tips.SuccessTip;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.ToolUtil;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.ICityService;
+import com.dsh.guns.modular.system.service.IRegionService;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.util.OBSUploadUtil;
+import com.dsh.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * 优惠券管理 控制器
+ */
+
+@Controller
+@RequestMapping("/ticket")
+public class TicketController {
+    private String PREFIX = "/system/ticket/";
+    @Resource
+    private IRegionService regiService;
+    @Resource
+    private IStoreService storeService;
+
+    @Resource
+    private CouponClient client;
+
+    @Resource
+    private CityManagerClient cmgrClient;
+
+    @Autowired
+    private AppUserClient appUserClient;
+    @Autowired
+    private ICityService cityService;
+
+    @Resource
+    private PointMercharsClient pointMercharsClient;
+
+    /**
+     * 跳转到优惠券管理首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        return PREFIX + "ticket.html";
+    }
+    /**
+     * 跳转到添加
+     */
+    @RequestMapping("/add")
+    public String add(Model model) {
+        Integer objectType = UserExt.getUser().getObjectType();
+        System.out.println(objectType);
+        model.addAttribute("userType",objectType);
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        model.addAttribute("list",list);
+        return PREFIX + "ticket_add.html";
+    }
+
+    @RequestMapping("/info/{id}")
+    public String info(@PathVariable Integer id,Model model) {
+        Coupon coupon = client.queryCouponById(id);
+        model.addAttribute("id",id);
+        model.addAttribute("type",coupon.getType());
+        return PREFIX + "ticket_info.html";
+    }
+
+    /**
+     *
+     * @param id
+     * @param model
+     * @param type = 1 编辑 type=2 查看详情
+     * @return
+     */
+    @RequestMapping("/update/{id}/{type}")
+    public String update(@PathVariable("id") Integer id,Model model,@PathVariable("type")Integer type) {
+        model.addAttribute("id",id);
+        model.addAttribute("type",type);
+        return PREFIX + "ticket_edit.html";
+    }
+
+    /**
+     *  1为上架 2为下架
+     *
+     * @return
+     */
+    @RequestMapping("/changeState")
+    @ResponseBody
+    public Object changeState(@RequestBody CoachChangeStateVO vo){
+        pointMercharsClient.changeState(vo);
+        return ResultUtil.success();
+    }
+    /**
+     * 获取门票列表
+     */
+    @RequestMapping(value = "/listAll")
+    @ResponseBody
+    public Object listAll(String name,Integer type,Integer redemptionMethod,
+                          Integer userPopulation,Integer activeStatus,Integer state) {
+        Page<Map<String,Object>> page = new PageFactory<Map<String,Object>>().defaultPage();
+        IntegralGoodsOfSearch integralGoodsOfSearch = new IntegralGoodsOfSearch();
+        integralGoodsOfSearch.setName(name);
+        integralGoodsOfSearch.setType(type);
+        integralGoodsOfSearch.setRedemptionMethod(redemptionMethod);
+        integralGoodsOfSearch.setUserPopulation(userPopulation);
+        integralGoodsOfSearch.setActiveStatus(activeStatus);
+        integralGoodsOfSearch.setState(state);
+        integralGoodsOfSearch.setPage(page);
+        return pointMercharsClient.ticketList(integralGoodsOfSearch);
+    }
+
+
+
+
+    /**
+     * 跳转到门店管理列表页
+     */
+    @RequestMapping("/storeList")
+    public String storePage(Model model) {
+        return PREFIX + "TStoreList.html";
+    }
+    @RequestMapping("/updateType")
+    @ResponseBody
+    public Object updateType(Long id) {
+        client.updateType(id);
+        return new SuccessTip<>();
+    }
+
+    @RequestMapping("/storeDetailsOfSearch")
+    @ResponseBody
+    public Object listOfStore(Integer provinceId,Integer cityId,Integer cityManagerId,String storeName){
+        System.out.println("provinceId"+provinceId);
+        System.out.println("cityId"+cityId);
+        System.out.println("cityManagerId"+cityManagerId);
+        System.out.println("storeName"+storeName);
+        String provinceCode = null;
+        String cityCode = null;
+        if (ToolUtil.isNotEmpty(provinceId)){
+            Region provinceRegion = regiService.getById(provinceId);
+            provinceCode = provinceRegion.getCode();
+        }
+        if (ToolUtil.isNotEmpty(cityId)){
+            Region cityRegion = regiService.getById(cityId);
+            cityCode = cityRegion.getCode();
+        }
+        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+        List<Map<String,Object>> storeList = storeService.queryListOfpage(provinceCode,cityCode,cityManagerId,storeName,page);
+        if (storeList.size() > 0 ){
+            for (Map<String, Object> stringObjectMap : storeList) {
+                String provinceName = (String) stringObjectMap.get("province");
+                String cityName = (String) stringObjectMap.get("city");
+                stringObjectMap.put("provinceCity",provinceName+cityName);
+                Integer managerId = (Integer) stringObjectMap.get("cityManagerId");
+                CityManager cityManager = cmgrClient.queryCityManagerById(managerId);
+                if (ToolUtil.isNotEmpty(cityManager)){
+                    stringObjectMap.put("accountName",cityManager.getName()+"+"+cityManager.getPhone());
+                }
+            }
+        }
+        return storeList;
+    }
+
+    @RequestMapping(value = "/listRecord")
+    @ResponseBody
+    public Object listRecord(Integer id,String name, Integer type, String phone) {
+        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+        List<TAppUser> tAppUsers = appUserClient.queryByNamePhone(new QueryByNamePhone(name, phone));
+        if(tAppUsers.size()==0){
+            return new ArrayList<>();
+        }
+        CouponRecordQuery ofSearch = new CouponRecordQuery();
+        ofSearch.setId(id);
+        ofSearch.setLimit(page.getSize());
+        ofSearch.setOffset(page.getCurrent());
+        ofSearch.setIds(tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList()));
+        ofSearch.setType(type);
+        List<Map<String, Object>> maps = client.listRecord(ofSearch);
+        for (Map<String, Object> map : maps) {
+            map.put("id",map.get("id").toString());
+            for (TAppUser tAppUser : tAppUsers) {
+                if(map.get("userId").equals(tAppUser.getId())){
+                    map.put("name",tAppUser.getName());
+                    map.put("phone",tAppUser.getPhone());
+                }
+            }
+        }
+        return maps;
+    }
+
+    @RequestMapping(value = "/getProvince")
+    @ResponseBody
+    public Object getProvince(){
+        return regiService.list(new LambdaQueryWrapper<Region>()
+                .eq(Region::getParentId,0));
+    }
+
+    @RequestMapping(value = "/onShelf")
+    @ResponseBody
+    public Object onShelf(Integer id,Integer type){
+        Coupon coupon = client.queryCouponById(id);
+        coupon.setState(type);
+        client.updateCouponData(coupon);
+        return new SuccessTip<>();
+    }
+
+
+    @RequestMapping(value = "/getCity")
+    @ResponseBody
+    public Object getCity(Integer province){
+        return regiService.list(new LambdaQueryWrapper<Region>()
+                .eq(Region::getParentId,province));
+    }
+
+    @RequestMapping(value = "/uploadPic")
+    @ResponseBody
+    public Object add(@RequestParam("file") MultipartFile imgFile) throws IOException {
+        String originalFilename = imgFile.getOriginalFilename();
+        String newName = originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf("."));
+        String url = OBSUploadUtil.inputStreamUpload(imgFile);
+        Map<String, String> map = new HashMap<String, String>();
+        //是否上传成功
+        map.put("state", "SUCCESS");
+        //现在文件名称
+        map.put("title", newName);
+        //文件原名称
+        map.put("original", originalFilename);
+        //文件类型 .+后缀名
+        map.put("type", originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf(".")));
+        //文件路径
+        map.put("url", url);
+        //文件大小(字节数)
+        map.put("size", imgFile.getSize() + "");
+        System.out.println(map);
+        return url;
+    }
+
+    /**
+     * 提交添加
+     */
+    @PostMapping(value = "/commitData")
+    @ResponseBody
+    public Object commitData( CouponDataVo dataVo){
+        System.out.println(dataVo);
+        Integer objectType = UserExt.getUser().getObjectType();
+        dataVo.setUserType(objectType);
+        client.insertIntoData(dataVo);
+        return new SuccessTip<>();
+    }
+    @PostMapping(value = "/update")
+    @ResponseBody
+    public Object update( Integer id,Integer num,Integer num1,String text){
+        Coupon coupon = client.queryCouponById(id);
+        coupon.setQuantityIssued(num);
+        coupon.setPickUpQuantity(num1);
+        coupon.setIllustrate(text);
+        client.updateCouponData(coupon);
+        return new SuccessTip<>();
+    }
+
+
+    /**
+     * 获取 积分商品列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object listOfIntegralGoods(String name, Integer type, Integer redemptionMethod , Integer userPopulation, Integer activeStatus, Integer state) {
+        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+
+        IntegralGoodsOfSearch ofSearch = new IntegralGoodsOfSearch();
+        ofSearch.setPage(page);
+        ofSearch.setName(name);
+        ofSearch.setType(type);
+        ofSearch.setRedemptionMethod(redemptionMethod);
+        ofSearch.setUserPopulation(userPopulation);
+        ofSearch.setActiveStatus(activeStatus);
+        ofSearch.setState(state);
+        System.out.println(ofSearch);
+        return pointMercharsClient.getIntegralGoodsListOfSearch(ofSearch);
+    }
+
+
+
+    /**
+     * 跳转到修改车辆管理
+     */
+    @RequestMapping("/tGoods_update/{id}")
+    public String tCityUpdate(@PathVariable Integer id, Model model) {
+        System.out.println("id:"+id);
+        PointMercharsVo pointMercharsVo = pointMercharsClient.queryPointMerchaseDetailOfId(id);
+        System.out.println("pointMercharsVo:"+pointMercharsVo);
+        String[] split = pointMercharsVo.getPics().split(",");
+        model.addAttribute("item",pointMercharsVo);
+        model.addAttribute("pictures",split);
+        return PREFIX + "TGoods_edit.html";
+    }
+
+    /**
+     *  上下架处理操作
+     * @param id 商品id
+     * @param type 1=上架操作 2=下架操作
+     * @return
+     */
+    @RequestMapping("/grounding")
+    @ResponseBody
+    public Object updateGrounding(Integer id,Integer type) {
+        System.out.println(id);
+        System.out.println(type);
+        Map<String,Integer> map = new HashMap<>();
+        map.put("id",id);
+        map.put("type",type);
+        boolean b = pointMercharsClient.updateGoodsGroudingStatus(map);
+        System.out.println(b);
+        return new SuccessTip<>();
+    }
+
+
+
+    /**
+     *  购买详情
+     * @param id 商品id
+     * @return
+     */
+    @RequestMapping("/tPay_detail/{id}")
+    public String payOfDetails(@PathVariable(value = "id") Integer id,Model model) {
+        System.out.println(id);
+        model.addAttribute("id",id);
+        return PREFIX + "TGoods_pay.html";
+    }
+
+
+    /**
+     * 获取 购买记录列表
+     */
+    @ResponseBody
+    @RequestMapping(value = "/payList/{id}")
+    public Object payList(@PathVariable(value = "id") Integer id, String name, String phone, Integer status) {
+        PointMercharsPayedVo  payedVo = new PointMercharsPayedVo();
+        payedVo.setId(id);
+        payedVo.setName(name);
+        payedVo.setPhone(phone);
+        payedVo.setStatus(status);
+        List<Map<String,Object>> points = pointMercharsClient.queryUserPayedGoodsList(payedVo);
+        System.out.println(points);
+        if (points.size() > 0 ){
+            for (Map<String, Object> point : points) {
+                Integer userId = (Integer) point.get("userId");
+                TAppUser tAppUser = appUserClient.queryById(userId);
+                if (ToolUtil.isNotEmpty(tAppUser)){
+                    point.put("name",tAppUser.getName());
+                    point.put("phone",tAppUser.getPhone());
+                }
+            }
+            if (ToolUtil.isNotEmpty(name)){
+                points = points.stream()
+                        .filter(data -> {
+                            String obtName = (String) data.get("name");
+                            return obtName != null && obtName.contains(name);
+                        })
+                        .collect(Collectors.toList());
+            }
+            if (ToolUtil.isNotEmpty(phone)){
+                points = points.stream()
+                        .filter(data -> {
+                            String obtPhone = (String) data.get("phone");
+                            return obtPhone != null && obtPhone.contains(phone);
+                        })
+                        .collect(Collectors.toList());
+            }
+        }
+        return points;
+    }
+
+    /**
+     *  核销操作
+     * @param id 商品id
+     * @return
+     */
+    @RequestMapping("/write_off")
+    @ResponseBody
+    public Object GoodsWriteOff(Integer id){
+        System.out.println(id);
+        // TODO: 2023/8/15 核销操作
+        return new SuccessTip<>();
+    }
+
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
index 4af6710..401004f 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
@@ -173,7 +173,6 @@
         model.addAttribute("id", id);
         model.addAttribute("ids", ids);
 
-
         TAppUser tAppUser = appUserClient.queryById(tStudentDto.getAppUserId());
         model.addAttribute("userName",tAppUser.getName());
         model.addAttribute("tStudentDto",tStudentDto);
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Bank.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Bank.java
new file mode 100644
index 0000000..b3f4af8
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Bank.java
@@ -0,0 +1,34 @@
+package com.dsh.guns.modular.system.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 银行
+ */
+@TableName("t_bank")
+@Data
+public class Bank {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 银行名称
+     */
+    @TableField("bankName")
+    private String bankName;
+    /**
+     * 银行代码
+     */
+    @TableField("insurCom")
+    private String bankCode;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Batter.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Batter.java
new file mode 100644
index 0000000..42804bf
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Batter.java
@@ -0,0 +1,24 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 获取激战球场接口数据
+ */
+@Data
+public class Batter {
+    private int code;
+    private String message;
+    private Batter.Data data;
+    private String nextUrl;
+    @lombok.Data
+    public static class Data {
+        private String all_batter_num;
+        private String all_batter_time;
+        private List<BatterData> list;
+    }
+}
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/BatterData.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/BatterData.java
new file mode 100644
index 0000000..8583564
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/BatterData.java
@@ -0,0 +1,17 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 获取激战球场接口数据
+ */
+@Data
+public class BatterData {
+    private String date;
+    private String total_num;
+    private String batter_time;
+}
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Battlefield.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Battlefield.java
new file mode 100644
index 0000000..c0c9e99
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Battlefield.java
@@ -0,0 +1,12 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+@Data
+public class Battlefield {
+    private Integer id;
+    private String name;
+    private Integer space_id;
+    private Integer red_region_id;
+    private Integer blue_region_id;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/GateDataResponse.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/GateDataResponse.java
new file mode 100644
index 0000000..9776e72
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/GateDataResponse.java
@@ -0,0 +1,29 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 闸机数据
+ */
+@Data
+public class GateDataResponse {
+    private int code;
+    private String message;
+    private Data data;
+    private String nextUrl;
+    @lombok.Data
+    public static class Data {
+        private int total_num;
+        private List<Region> region_num;
+
+        @lombok.Data
+        public static class Region {
+            private String name;
+            private int enter_num;
+
+
+        }
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorCityVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorCityVO.java
new file mode 100644
index 0000000..b1e8e5b
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorCityVO.java
@@ -0,0 +1,18 @@
+package com.dsh.guns.modular.system.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 运营商指定地区回显VO
+ */
+@Data
+public class OperatorCityVO {
+    private Integer id;
+    private String province;
+    private Integer provinceCode;
+    private String city;
+    private Integer cityCode;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorRestPwd.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorRestPwd.java
new file mode 100644
index 0000000..de9b640
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorRestPwd.java
@@ -0,0 +1,15 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 运营商重置密码
+ */
+@Data
+public class OperatorRestPwd {
+    private List<Integer> ids;
+
+    private String password;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorUser.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorUser.java
new file mode 100644
index 0000000..6ccfbc2
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorUser.java
@@ -0,0 +1,23 @@
+package com.dsh.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@TableName("t_operator_user")
+@Data
+public class OperatorUser {
+    private Integer id;
+    private String province;
+    private Integer provinceCode;
+    private String city;
+    private Integer cityCode;
+    private Integer userId;
+    private Integer platform;
+    private Integer type;
+    private BigDecimal proportion;
+    private Integer state;
+    private Integer status;
+    private Integer operatorId;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PlatFormDataVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PlatFormDataVO.java
new file mode 100644
index 0000000..e3cb8d0
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PlatFormDataVO.java
@@ -0,0 +1,32 @@
+package com.dsh.guns.modular.system.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 平台数据VO
+ */
+@Data
+public class PlatFormDataVO {
+
+    private Integer id;
+    private String provinceAndCity;
+    private String storeName;
+    private Integer storeId;
+    private String studentName;
+    private Integer studentId;
+    private String coachName;
+    // 教练id
+    private Integer coachId;
+    // 消课时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
+    private Date insertTime;
+    private String courseName;
+    private String startAndEnd;
+    private String voucher;
+    private Integer cancelledClassesNumber;
+    private Long coursePackagePaymentId;
+    private Long coursePackageSchedulingId;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PointMerchandiseIncomeVo.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PointMerchandiseIncomeVo.java
new file mode 100644
index 0000000..a8de8ec
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/PointMerchandiseIncomeVo.java
@@ -0,0 +1,21 @@
+package com.dsh.guns.modular.system.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 营收数据-平台
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PointMerchandiseIncomeVo {
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date insertTime;
+    private BigDecimal cash;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java
index f3c051d..3dcad0d 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java
@@ -38,4 +38,5 @@
     private Integer state;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date insertTime;
+    private Integer payStatus;
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTU.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTU.java
new file mode 100644
index 0000000..70f4bc5
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTU.java
@@ -0,0 +1,23 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 获取激战球场接口数据
+ */
+@Data
+public class SUTU {
+    private int code;
+    private String message;
+    private SUTU.Data data;
+    private String nextUrl;
+    @lombok.Data
+    public static class Data {
+        private String total_num;
+        private List<SUTUData> list;
+    }
+}
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTUData.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTUData.java
new file mode 100644
index 0000000..ea1a1ae
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SUTUData.java
@@ -0,0 +1,16 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+/**
+ * 获取激战球场接口数据
+ */
+@Data
+public class SUTUData {
+    private String game_id;
+    private String game_name;
+    private String count;
+    private String rate;
+}
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperator.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperator.java
index cb188da..9e1d4e5 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperator.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperator.java
@@ -38,7 +38,14 @@
      * 1 全国 2指定
      */
     private Integer type;
-
+    /**
+     * 商户绑定状态1否2是
+     */
+    private Integer status;
+    /**
+     * 运营商状态1正常 2冻结 3删除
+     */
+    private Integer state;
 
     @Override
     protected Serializable pkVal() {
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/OperatorDTO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/OperatorDTO.java
new file mode 100644
index 0000000..db0fb55
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/OperatorDTO.java
@@ -0,0 +1,24 @@
+package com.dsh.guns.modular.system.model.dto;
+
+import lombok.Data;
+
+/**
+ * 运营商添加DTO
+ */
+@Data
+public class OperatorDTO {
+    private Integer id;
+    // 运营商名称
+    private String name;
+    // 管理员名称
+    private String userName;
+    // 管理员电话
+    private String phone;
+    // 1 全国 2 指定
+    private Integer type;
+    // 商户绑定状态
+    private Integer status;
+    // 运营商状态
+    private Integer state;
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IOperatorUserService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IOperatorUserService.java
new file mode 100644
index 0000000..586d672
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IOperatorUserService.java
@@ -0,0 +1,19 @@
+package com.dsh.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.guns.core.dataScope.DataScope;
+import com.dsh.guns.modular.system.model.OperatorUser;
+import com.dsh.guns.modular.system.model.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 运营商商户 服务类
+ */
+public interface IOperatorUserService extends IService<OperatorUser> {
+
+    List<Map<String, Object>> listAll(Page<Map<String, Object>> page, String province, String city, String userName, String phone, Integer platform, Integer type, Integer state);
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java
new file mode 100644
index 0000000..566de82
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ISiteBookingService.java
@@ -0,0 +1,7 @@
+package com.dsh.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.guns.modular.system.model.SiteBooking;
+public interface ISiteBookingService extends IService<SiteBooking> {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
index bd5206a..4cc9227 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
@@ -35,7 +35,7 @@
      */
     List<Map<String, Object>> queryCity(String provinceCode, String cityCode);
 
-    List<Map<String, Object>> queryListOfpage(String provinceCode, String cityCode, Integer cityManagerId, String storeName, Page<Map<String, Object>> page);
+    List<Map<String, Object>> queryListOfpage(String provinceCode, String cityCode, Integer operatorId, String storeName, Page<Map<String, Object>> page);
 
     List<Map<String, Object>> listOne(Page<Map<String, Object>> page, Integer id);
 
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IUserService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IUserService.java
index 7d1e45f..20c7e2b 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IUserService.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IUserService.java
@@ -58,4 +58,5 @@
                                              @Param("endTime") String endTime,
                                              @Param("deptid") Integer deptid);
 
+
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorService.java
index 70009f6..6a4fce6 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorService.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorService.java
@@ -1,8 +1,14 @@
 package com.dsh.guns.modular.system.service;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.guns.modular.system.model.Bank;
+import com.dsh.guns.modular.system.model.CoachChangeStateVO;
 import com.dsh.guns.modular.system.model.TOperator;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -14,4 +20,9 @@
  */
 public interface TOperatorService extends IService<TOperator> {
 
+    List<Map<String, Object>> listAll(Page<Map<String, Object>> page,String userName, String phone,Integer type);
+
+    int changeState(CoachChangeStateVO vo);
+
+    List<Bank> getBankList();
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java
new file mode 100644
index 0000000..1296a08
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/SiteBookingServiceImpl.java
@@ -0,0 +1,16 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.SiteBookingMapper;
+import com.dsh.guns.modular.system.model.SiteBooking;
+import com.dsh.guns.modular.system.service.ISiteBookingService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/13 16:49
+ */
+@Service
+public class SiteBookingServiceImpl extends ServiceImpl<SiteBookingMapper, SiteBooking> implements ISiteBookingService {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
index ca5b4a3..41b066f 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
@@ -43,8 +43,8 @@
     }
 
     @Override
-    public List<Map<String, Object>> queryListOfpage(String provinceCode, String cityCode, Integer cityManagerId, String storeName, Page<Map<String, Object>> page) {
-        return this.baseMapper.queryListOfpage(provinceCode,cityCode,cityManagerId,storeName,page);
+    public List<Map<String, Object>> queryListOfpage(String provinceCode, String cityCode, Integer operatorId, String storeName, Page<Map<String, Object>> page) {
+        return this.baseMapper.queryListOfpage(provinceCode,cityCode,operatorId,storeName,page);
     }
 
     @Override
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorServiceImpl.java
index 6d6dfa1..c5e4878 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorServiceImpl.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorServiceImpl.java
@@ -1,11 +1,18 @@
 package com.dsh.guns.modular.system.service.impl;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.course.mapper.TOperatorMapper;
+import com.dsh.guns.modular.system.model.Bank;
+import com.dsh.guns.modular.system.model.CoachChangeStateVO;
 import com.dsh.guns.modular.system.model.TOperator;
 import com.dsh.guns.modular.system.service.TOperatorService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -18,4 +25,21 @@
 @Service
 public class TOperatorServiceImpl extends ServiceImpl<TOperatorMapper, TOperator> implements TOperatorService {
 
+    @Autowired
+    private TOperatorMapper tOperatorMapper;
+    @Override
+    public List<Map<String, Object>> listAll(Page<Map<String, Object>> page,String userName, String phone,Integer type) {
+        return this.baseMapper.listAll(page,userName,phone,type);
+    }
+
+    @Override
+    public int changeState(CoachChangeStateVO vo) {
+        return this.baseMapper.changeState(vo.getIds(),vo.getState());
+    }
+
+    @Override
+    public List<Bank> getBankList() {
+
+        return tOperatorMapper.getBankList();
+    }
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorUserServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorUserServiceImpl.java
new file mode 100644
index 0000000..50405ea
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorUserServiceImpl.java
@@ -0,0 +1,36 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.dto.StudentSearch;
+import com.dsh.course.dto.TStudentDto;
+import com.dsh.course.feignClient.account.AppUserClient;
+import com.dsh.course.mapper.TOperatorUserMapper;
+import com.dsh.course.mapper.TSiteMapper;
+import com.dsh.guns.modular.system.model.OperatorUser;
+import com.dsh.guns.modular.system.model.TSite;
+import com.dsh.guns.modular.system.model.TStudent;
+import com.dsh.guns.modular.system.service.IOperatorUserService;
+import com.dsh.guns.modular.system.service.ITStudentService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 学员信息 服务实现类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-09-12
+ */
+@Service
+public class TOperatorUserServiceImpl extends ServiceImpl<TOperatorUserMapper, OperatorUser> implements IOperatorUserService {
+
+    @Override
+    public List<Map<String, Object>> listAll(Page<Map<String, Object>> page, String province, String city, String userName, String phone, Integer platform, Integer type, Integer state) {
+        return this.baseMapper.listAll(page,province,city,userName,phone,platform,type,state);
+    }
+}
diff --git a/cloud-server-management/src/main/resources/TOperatorUserMapper.xml b/cloud-server-management/src/main/resources/TOperatorUserMapper.xml
new file mode 100644
index 0000000..340f060
--- /dev/null
+++ b/cloud-server-management/src/main/resources/TOperatorUserMapper.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dsh.course.mapper.TOperatorUserMapper">
+    <select id="listAll" resultType="java.util.Map">
+        select t1.id as id, t1.platform,t1.type,t1.proportion,CONCAT(t1.province,t1.city) as provinceAndCity
+        t1.state as state,t1.status as status,t2.name as userName,t2.phone as phone from t_operatorUser t1
+        left join sys_user t2 on t1.userId = t2.id
+        where 1=1
+        <if test="province != null and province != ''">
+            and t1.provinceCode =  #{province}
+        </if>
+        <if test="city != null and city != ''">
+            and t1.cityCode =  #{city}
+        </if>
+        <if test="userName != null and userName != ''">
+            and t2.name like CONCAT('%',#{userName},'%')
+        </if>
+        <if test="phone != null and phone != ''">
+            and t2.phone like CONCAT('%',#{phone},'%')
+        </if>
+        <if test="platform != null and platform != ''">
+            and t1.platform =  #{platform}
+        </if>
+        <if test="type != null and type != ''">
+            and t1.type =  #{type}
+        </if>
+        <if test="proportion != null and proportion != ''">
+            and t1.proportion =  #{proportion}
+        </if>
+        <if test="state != null and state != ''">
+            and t1.state =  #{state}
+        </if>
+        <if test="status != null and status != ''">
+            and t1.status =  #{status}
+        </if>
+    </select>
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml b/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
index 9250045..780ffae 100644
--- a/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
@@ -1,6 +1,34 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.dsh.course.mapper.TOperatorMapper">
+    <update id="changeState">
+        update t_operator set
+        state = #{state}
+        <where>
+            <if test="ids != null and ids.size()>0">
+                AND t_operator.id IN
+                <foreach collection="ids" separator="," item="id" open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </update>
 
-
+    <select id="listAll" resultType="java.util.Map">
+        select t1.id as id, t1.name as name,t1.type as `type`,t1.state as state,t1.status as status,t2.name as userName,t2.phone as phone from t_operator t1
+        left join sys_user t2 on t1.userId = t2.id
+        where 1=1
+        <if test="userName != null and userName != ''">
+            and t2.name like CONCAT('%',#{userName},'%')
+        </if>
+        <if test="phone != null and phone != ''">
+            and t2.phone like CONCAT('%',#{phone},'%')
+        </if>
+        <if test="type != null and type != ''">
+            and t1.type =  #{type}
+        </if>
+    </select>
+    <select id="getBankList" resultType="com.dsh.guns.modular.system.model.Bank">
+        select * from t_bank
+    </select>
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml b/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
index 3b40dc0..2120241 100644
--- a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
@@ -56,7 +56,7 @@
         ) as aa order by aa.code
     </select>
     <select id="queryListOfpage" resultType="java.util.Map">
-        SELECT `id`, `cityManagerId`, `province`, `city`, `name`
+        SELECT `id`, `operatorId`, `province`, `city`, `name`,ids
         from t_store
         where 1=1
         <if test="provinceCode != null">
@@ -65,8 +65,8 @@
         <if test="cityCode != null">
             and cityCode = #{cityCode}
         </if>
-        <if test="cityManagerId != null">
-            and cityManagerId = #{cityManagerId}
+        <if test="operatorId != null">
+            and operatorId = #{operatorId}
         </if>
         <if test="storeName != null and storeName != ''">
             and `name` like CONCAT('%',#{storeName},'%')
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 748749d..69f573c 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
@@ -55,15 +55,15 @@
                                     <h2>营收数据</h2>
                                     </br>
                                         <div id = "money1" style="width: 1500px" >
-                                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>总营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                            <span>本年度营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                            <span>本月度营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                            <span>本周营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                            <span>本日营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id="totalIncome">总营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                            <span id="yearIncome">本年度营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                            <span id="monthIncome">本月度营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                            <span id="weekIncome">本周营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                            <span id="todayIncome">本日营收:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                             </br>
                                             </br>
                                         </div>
-                                    <div id="income" style="width: 1280px;height:500px;"></div>
+                                    <div id="main" style="width: 1280px;height:500px;"></div>
                                 </div>
                                 <div class="col-sm-10">
                                     <h2>收入类型统计</h2>
@@ -102,10 +102,10 @@
                                 <div class="col-sm-10" style="width: 1500px" >
                                     </br>
                                     </br>
-                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>本年退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                    <span>本月退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                    <span>本周退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                    <span>本日退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id="yearRefund">本年退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                    <span id="monthRefund">本月退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                    <span id="weekRefund">本周退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                    <span id="todayRefund">本日退费额度:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                     </br>
                                     </br>
                                     <div id="refund" style="width: 1280px;height:500px;"></div>
@@ -243,6 +243,35 @@
 <script src="${ctxPath}/modular/system/dataStatistics/echarts.min.js"></script>
 <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script>
 <script>
+    var ans = [];
+    var weekX = [];
+    var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
+    var yearX = ["2023年","2024年","2025年","2026年","2027年","2028年"];
+    var timeX = [];
+    var dataX = [];
+    // 创建一个日期对象
+    var currentDate = new Date();
+    // 获取当前日期的号数
+    let currentDay = currentDate.getDate();
+    // 循环添加号数到数组
+    for (let i = 0; i < 7; i++) {
+        dataX.push(currentDay - 6+i);
+    }
+    // 获取当前月份
+    var currentMonth = currentDate.getMonth();
+    // 获取当前年份
+    var currentYear = currentDate.getFullYear();
+    // 计算指定年份和月份的天数
+    function getDaysInMonth(year, month) {
+        // month 参数范围是 0-11,所以需要加 1
+        return new Date(year, month + 1, 0).getDate();
+    }
+    // 获取当前月份的天数
+    var daysInMonth = getDaysInMonth(currentYear, currentMonth);
+    // 将天数按字符串格式添加到 timeX 数组中
+    for (var i = 1; i <= daysInMonth; i++) {
+        timeX.push(String(i));
+    }
     laydate.render({
         elem: '#beginTime'
         , trigger: 'click'
@@ -252,8 +281,240 @@
         getContent(1);
         getContent1(1);
         getContent2(1);
+        var ajax = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){
+            var list = resp.yearMount;
+            console.log(list);
+            var t1 = document.getElementById("totalIncome");
+            var t2 = document.getElementById("yearIncome");
+            var t3 = document.getElementById("monthIncome");
+            var t4 = document.getElementById("weekIncome");
+            var t5 = document.getElementById("todayIncome");
+            t1.innerText = "总营收:"+list[0]+"         ";
+            t2.innerText = "年度营收:"+list[1]+"         ";
+            t3.innerText = "月度营收:"+list[2]+"         ";
+            t4.innerText = "周度营收:"+list[3]+"         ";
+            t5.innerText = "日度营收:"+list[4]+"         ";
+            var year =  resp.yearIncome;
+            var month =  resp.monthIncome;
+            var week =  resp.weekIncome;
+            var days = week[0].length;
+            for (let i = 1; i <= days; i++) {
+                weekX.push(i);
+            }
+            var day =  resp.dayIncome;
+            option  = {
+                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: [year[0].amount,year[1].amount,year[2].amount,year[3].amount,year[4].amount,year[5].amount]
+                    },
+                    {
+                        name: '月度营收',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [month[0][0],month[0][1], month[0][2], month[0][3], month[0][4],
+                            month[0][5], month[0][6], month[0][7], month[0][8], month[0][9], month[0][10], month[0][11]]
+                    },
+                    {
+                        name: '周度营收',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [
+                            week[0][0], week[0][1], week[0][2], week[0][3], week[0][4]
+                            , week[0][5], week[0][6], week[0][7], week[0][8], week[0][9]
+                            , week[0][10], week[0][11], week[0][12], week[0][13], week[0][14]
+                            , week[0][15], week[0][16], week[0][17], week[0][18], week[0][19], week[0][20]
+                            , week[0][21], week[0][22], week[0][23], week[0][24], week[0][25], week[0][26]
+                            , week[0][27], week[0][28], week[0][29], week[0][30], week[0][31]
+                        ]
+                    },
+                    {
+                        name: '日度营收',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [
+                            day[0][0], day[0][1],day[0][2], day[0][3], day[0][4], day[0][5], day[0][6]
+                        ]
+                    }
+                ]
+            };
+        });
+        ajax.set("type",1);
+        ajax.start();
+        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: [100,50,60,10,12,13,54,156]
+                    },
+                    {
+                        name: '月度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [26,44,55,12,6,7,98,541,223]
+                    },
+                    {
+                        name: '周度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [
+                            33,22,11,12,61,17,23,33,41
+                        ]
+                    },
+                    {
+                        name: '日度用户数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [
+                            12,11,17,26,23,111,23,45,41
+                        ]
+                    }
+                ]
+            };
+        var ajax2 = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){
+            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: [100,50,60,10,12,13,54,156]
+                    },
+                    {
+                        name: '月度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [26,44,55,12,6,7,98,541,223]
+                    },
+                    {
+                        name: '周度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [
+                            33,22,11,12,61,17,23,33,41
+                        ]
+                    },
+                    {
+                        name: '日度会员数',
+                        type: 'line',
+                        stack: 'Total',
+                        data: [
+                            12,11,17,26,23,111,23,45,41
+                        ]
+                    }
+                ]
+            };
+        });
+        ajax2.set("type",1);
+        ajax2.start();
         // 基于准备好的dom,初始化echarts实例
-        var myChart  = echarts.init(document.getElementById('income'));
+        var myChart  = echarts.init(document.getElementById('main'));
         var myChart1 = echarts.init(document.getElementById('refund'));
         var myChart2 = echarts.init(document.getElementById('user'));
         var myChart3 = echarts.init(document.getElementById('vip'));
@@ -261,59 +522,7 @@
         var myChart5 = echarts.init(document.getElementById('prepare'));
         var myChart6 = echarts.init(document.getElementById('teach'));
         var myChart7 = echarts.init(document.getElementById('courseData'));
-        option  = {
-            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]
-                }
-            ]
-        };
+
         option1 = {
             tooltip: {
                 trigger: 'axis'
@@ -367,112 +576,8 @@
                 }
             ]
         };
-        option2 = {
-            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]
-                }
-            ]
-        };
-        option3 = {
-            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: [1220, 1532, 101, 1394, 980, 2380, 1680, 1190, 1410, 1330, 2110, 1330]
-                },
-                {
-                    name: '月度会员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [1220, 1182, 2191, 3234, 1290, 1330, 2310, 2190, 2210, 1330, 2410, 1650]
-                },
-                {
-                    name: '周度会员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [2150, 3232, 2201, 5154, 5190, 1330, 1410, 1660, 2610, 1695, 2410, 1848]
-                },
-                {
-                    name: '日度会员数',
-                    type: 'line',
-                    stack: 'Total',
-                    data: [2320, 3332, 1301, 3234, 3290, 1330, 1320, 1220, 1295, 1645, 1888, 1660]
-                }
-            ]
-        };
+
+
         option4 = {
             tooltip: {
                 trigger: 'axis'
@@ -662,6 +767,49 @@
                 }
             ]
         };
+        myChart.on('legendselectchanged', obj => {
+            var options = myChart.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 = weekX
+            } else if (obj.name == '日度营收') {
+                options.xAxis[0].data = dataX
+            }
+            myChart.setOption(options, true)
+        })
+        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 = weekX
+            } else if (obj.name == '日度用户数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart2.setOption(options, true)
+        });
+
+        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 = weekX
+            } else if (obj.name == '日度会员数') {
+                options.xAxis[0].data = dataX
+            }
+            myChart3.setOption(options, true)
+        });
         // 使用刚指定的配置项和数据显示图表。
         myChart.setOption(option);
         myChart1.setOption(option1);
@@ -724,6 +872,7 @@
             $("#nextB").hide();
         }
     }
+
 </script>
 <script>
     $(function(){
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome1.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome1.html
new file mode 100644
index 0000000..0b00766
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome1.html
@@ -0,0 +1,440 @@
+@layout("/common/_container.html"){
+<style type="text/css">
+
+    ztree li span. {
+        margin-left: 4px;
+        margin-right: -1px;
+        background-position: -144px 0;
+        vertical-align: top;
+        *vertical-align: middle
+    }
+
+    .titleDiv {
+        overflow: hidden;
+    }
+
+    .titleItem {
+        float: left;
+        text-align: center;
+        width: 180px;
+        line-height: 40px;
+        border-top: 1px solid #E7EBEE;
+        border-bottom: 1px solid #E7EBEE;
+        border-left: 1px solid #E7EBEE;
+        font-size: 16px;
+    }
+
+    .titleItem1 {
+        float: left;
+        text-align: center;
+        width: 180px;
+        line-height: 40px;
+        border-bottom: 1px solid #E7EBEE;
+        border-left: 1px solid #E7EBEE;
+        font-size: 16px;
+    }
+
+    .titleItemCk {
+        color: #fff !important;
+        background: #1AB395 !important;
+    }
+
+    .titleItem:last-child {
+        border-right: 1px solid #E7EBEE;
+    }
+
+    /* 订单分析 */
+    ul {
+        list-style-type: none;
+    }
+
+    .orderFenxiBox {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        background-color: white;
+    }
+
+    .orderFenxiItem {
+        flex: 1;
+        padding: 20px 0;
+    }
+
+    .orderFenxiItem:last-child .orderFenxiItem_number {
+        border-right: 0 none;
+    }
+
+    .orderFenxiItem_number {
+        width: 80%;
+        height: 80%;
+        line-height: 90px;
+        padding: 20px 0;
+        font-size: 32px;
+        color: #1AB394;
+        text-align: center;
+        border-right: 1px solid #eaeaea;
+    }
+
+    .orderFenxiItem_title, .orderFenxiItem_last {
+        line-height: 40px;
+        font-size: 14px;
+    }
+</style>
+<div style="height: 50px;line-height:50px;width: 100%;background-color: #eeeeee;font-size: 25px;font-weight: bold;padding-left: 8px">
+    汇总数据
+</div>
+<div class="row">
+    <div class="col-sm-3">
+        <#NameCon id="time" name="选择时间"/>
+    </div>
+    <div class="col-sm-3">
+        <#button name="搜索" icon="fa-search" clickFun="HomePage.search()"/>
+        <#button name="重置" icon="fa-search" clickFun="HomePage.reset()"/>
+    </div>
+</div>
+
+
+<div class="row col-space15">
+    <div class="col-md-3">
+        <div class="panel">
+            <div style="padding: 30px; font-size: 20px">注册用户数:<br><span id="userNum"></span></div>
+        </div>
+    </div>
+    <div class="col-md-3">
+        <div class="panel">
+            <div style="padding: 30px; font-size: 20px">群聊个数:<br><span id="groupNum"></span></div>
+        </div>
+    </div>
+
+    <div class="col-md-3">
+        <div class="panel">
+            <div style="padding: 30px; font-size: 20px">充值金额:<br><span id="topUp"></span></div>
+        </div>
+    </div>
+    <div class="col-md-3">
+        <div class="panel">
+            <div style="padding: 30px; font-size: 20px">提现金额:<br><span id="withdraw"> </span> <br>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="row col-space15">
+    <div class="col-md-3">
+        <div class="panel">
+            <div style="padding: 30px; font-size: 20px">平台结余:<br><span id="balance"> </span> <br>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+<div style="height: 50px;line-height:50px;width: 100%;background-color: #eeeeee;font-size: 25px;font-weight: bold;padding-left: 8px">
+    近30天走势
+</div>
+<div class="search_box" style="margin-left: 2%;">
+    <div class="titleDiv">
+        <div id="titleDiv1" class="titleItem titleItemCk" onclick="regisUser(this)" style="font-size: 20px">登录/注册</div>
+        <div id="titleDiv2" class="titleItem" onclick="chongzhi(this)"  style="font-size: 20px">充值/提现金额</div>
+        <div id="titleDiv3" class="titleItem" onclick="groupNum(this)"  style="font-size: 20px">群聊个数</div>
+    </div>
+    <div id="main" style="min-width: 400px; height: 400px"></div>
+</div>
+<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
+<script>
+    $(function () {
+        regisUser();
+    });
+
+    function chongzhi() {
+        document.getElementById("titleDiv1").setAttribute("class", "titleItem");
+        document.getElementById("titleDiv2").setAttribute("class", "titleItem titleItemCk");
+        document.getElementById("titleDiv3").setAttribute("class", "titleItem");
+        var chartDom = document.getElementById('main');
+        var myChart = echarts.init(chartDom);
+        var option;
+        $.post(Feng.ctxPath + "/homePage/chongzhi", {type: 2}, function (data) {
+            let topUp = data.topUp
+            let withdraw = data.withdraw
+            // option = {
+            //     title: {
+            //         text: '充值/提现'
+            //     },
+            //     tooltip: {
+            //         trigger: 'axis'
+            //     },
+            //     legend: {
+            //         data: ['充值', '提现']
+            //     },
+            //     grid: {
+            //         left: '3%',
+            //         right: '4%',
+            //         bottom: '3%',
+            //         containLabel: true
+            //     },
+            //     toolbox: {
+            //         feature: {
+            //         }
+            //     },
+            //     xAxis: {
+            //         type: 'category',
+            //         boundaryGap: false,
+            //         data: [topUp[29].time,topUp[28].time, topUp[27].time, topUp[26].time, topUp[25].time, topUp[24].time, topUp[23].time, topUp[22].time, topUp[21].time, topUp[20].time, topUp[19].time, topUp[18].time, topUp[17].time, topUp[16].time, topUp[15].time, topUp[14].time,topUp[13].time, topUp[12].time, topUp[11].time, topUp[10].time, topUp[9].time, topUp[8].time, topUp[7].time, topUp[6].time, topUp[5].time, topUp[4].time, topUp[3].time, topUp[2].time, topUp[1].time, topUp[0].time]
+            //     },
+            //     yAxis: {
+            //         type: 'value'
+            //     },
+            //     series: [
+            //         {
+            //             name: '充值',
+            //             type: 'line',
+            //             stack: 'Total',
+            //             data: [topUp[29].topUp,topUp[28].topUp, topUp[27].topUp, topUp[26].topUp, topUp[25].topUp, topUp[24].topUp, topUp[23].topUp, topUp[22].topUp, topUp[21].topUp, topUp[20].topUp, topUp[19].topUp, topUp[18].topUp, topUp[17].topUp, topUp[16].topUp, topUp[15].topUp, topUp[14].topUp,topUp[13].topUp, topUp[12].topUp, topUp[11].topUp, topUp[10].topUp, topUp[9].topUp, topUp[8].topUp, topUp[7].topUp, topUp[6].topUp, topUp[5].topUp, topUp[4].topUp, topUp[3].topUp, topUp[2].topUp, topUp[1].topUp, topUp[0].topUp]
+            //         },
+            //         {
+            //             name: '提现',
+            //             type: 'line',
+            //             stack: 'Total',
+            //             data: [withdraw[29].withdraw,withdraw[28].withdraw, withdraw[27].withdraw, withdraw[26].withdraw, withdraw[25].withdraw, withdraw[24].withdraw, withdraw[23].withdraw, withdraw[22].withdraw, withdraw[21].withdraw, withdraw[20].withdraw, withdraw[19].withdraw, withdraw[18].withdraw, withdraw[17].withdraw, withdraw[16].withdraw, withdraw[15].withdraw, withdraw[14].withdraw,withdraw[13].withdraw, withdraw[12].withdraw, withdraw[11].withdraw, withdraw[10].withdraw, withdraw[9].withdraw, withdraw[8].withdraw, withdraw[7].withdraw, withdraw[6].withdraw, withdraw[5].withdraw, withdraw[4].withdraw, withdraw[3].withdraw, withdraw[2].withdraw, withdraw[1].withdraw, withdraw[0].withdraw]
+            //         }
+            //
+            //     ]
+            // };
+            option = {
+                title: {
+                    text: '充值/提现'
+                },
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {},
+                toolbox: {
+                    show: false,
+                    feature: {
+                        restore: {},
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: [topUp[29].time,topUp[28].time, topUp[27].time, topUp[26].time, topUp[25].time, topUp[24].time, topUp[23].time, topUp[22].time, topUp[21].time, topUp[20].time, topUp[19].time, topUp[18].time, topUp[17].time, topUp[16].time, topUp[15].time, topUp[14].time,topUp[13].time, topUp[12].time, topUp[11].time, topUp[10].time, topUp[9].time, topUp[8].time, topUp[7].time, topUp[6].time, topUp[5].time, topUp[4].time, topUp[3].time, topUp[2].time, topUp[1].time, topUp[0].time]
+                },
+                yAxis: {
+                    type: 'value',
+                    axisLabel: {
+                        formatter: '{value} '
+                    }
+                },
+                series: [
+                    {
+                        name: '充值',
+                        type: 'line',
+                        data: [topUp[29].topUp,topUp[28].topUp, topUp[27].topUp, topUp[26].topUp, topUp[25].topUp, topUp[24].topUp, topUp[23].topUp, topUp[22].topUp, topUp[21].topUp, topUp[20].topUp, topUp[19].topUp, topUp[18].topUp, topUp[17].topUp, topUp[16].topUp, topUp[15].topUp, topUp[14].topUp,topUp[13].topUp, topUp[12].topUp, topUp[11].topUp, topUp[10].topUp, topUp[9].topUp, topUp[8].topUp, topUp[7].topUp, topUp[6].topUp, topUp[5].topUp, topUp[4].topUp, topUp[3].topUp, topUp[2].topUp, topUp[1].topUp, topUp[0].topUp]
+                    },
+                    {
+                        name: '提现',
+                        type: 'line',
+                        data: [withdraw[29].withdraw,withdraw[28].withdraw, withdraw[27].withdraw, withdraw[26].withdraw, withdraw[25].withdraw, withdraw[24].withdraw, withdraw[23].withdraw, withdraw[22].withdraw, withdraw[21].withdraw, withdraw[20].withdraw, withdraw[19].withdraw, withdraw[18].withdraw, withdraw[17].withdraw, withdraw[16].withdraw, withdraw[15].withdraw, withdraw[14].withdraw,withdraw[13].withdraw, withdraw[12].withdraw, withdraw[11].withdraw, withdraw[10].withdraw, withdraw[9].withdraw, withdraw[8].withdraw, withdraw[7].withdraw, withdraw[6].withdraw, withdraw[5].withdraw, withdraw[4].withdraw, withdraw[3].withdraw, withdraw[2].withdraw, withdraw[1].withdraw, withdraw[0].withdraw]
+                    }
+                ]
+            };
+            option && myChart.setOption(option);
+        });
+    }
+
+
+    function regisUser() {
+        document.getElementById("titleDiv1").setAttribute("class", "titleItem titleItemCk");
+        document.getElementById("titleDiv2").setAttribute("class", "titleItem");
+        document.getElementById("titleDiv3").setAttribute("class", "titleItem");
+        var chartDom = document.getElementById('main');
+        var myChart = echarts.init(chartDom);
+        var option;
+        $.post(Feng.ctxPath + "/homePage/regisUser", {type: 1}, function (data) {
+            let login = data.login
+            let register = data.register
+            // option = {
+            //     title: {
+            //         text: '登录/注册'
+            //     },
+            //     tooltip: {
+            //         trigger: 'axis'
+            //     },
+            //     legend: {
+            //         data: ['登录', '注册']
+            //     },
+            //     grid: {
+            //         left: '3%',
+            //         right: '4%',
+            //         bottom: '3%',
+            //         containLabel: true
+            //     },
+            //     toolbox: {
+            //         feature: {
+            //         }
+            //     },
+            //     xAxis: {
+            //         type: 'category',
+            //         boundaryGap: false,
+            //         data: [login[29].time,login[28].time, login[27].time, login[26].time, login[25].time, login[24].time, login[23].time, login[22].time, login[21].time, login[20].time, login[19].time, login[18].time, login[17].time, login[16].time, login[15].time, login[14].time,login[13].time, login[12].time, login[11].time, login[10].time, login[9].time, login[8].time, login[7].time, login[6].time, login[5].time, login[4].time, login[3].time, login[2].time, login[1].time, login[0].time]
+            //     },
+            //     yAxis: {
+            //         type: 'value'
+            //     },
+            //     series: [
+            //         {
+            //             name: '登录',
+            //             type: 'line',
+            //             stack: 'Total',
+            //             data: [login[29].loginNum,login[28].loginNum, login[27].loginNum, login[26].loginNum, login[25].loginNum, login[24].loginNum, login[23].loginNum, login[22].loginNum, login[21].loginNum, login[20].loginNum, login[19].loginNum, login[18].loginNum, login[17].loginNum, login[16].loginNum, login[15].loginNum, login[14].loginNum,login[13].loginNum, login[12].loginNum, login[11].loginNum, login[10].loginNum, login[9].loginNum, login[8].loginNum, login[7].loginNum, login[6].loginNum, login[5].loginNum, login[4].loginNum, login[3].loginNum, login[2].loginNum, login[1].loginNum, login[0].loginNum]
+            //         },
+            //         {
+            //             name: '注册',
+            //             type: 'line',
+            //             stack: 'Total',
+            //             data: [register[29].registerNum,register[28].registerNum, register[27].registerNum, register[26].registerNum, register[25].registerNum, register[24].registerNum, register[23].registerNum, register[22].registerNum, register[21].registerNum, register[20].registerNum, register[19].registerNum, register[18].registerNum, register[17].registerNum, register[16].registerNum, register[15].registerNum, register[14].registerNum,register[13].registerNum, register[12].registerNum, register[11].registerNum, register[10].registerNum, register[9].registerNum, register[8].registerNum, register[7].registerNum, register[6].registerNum, register[5].registerNum, register[4].registerNum, register[3].registerNum, register[2].registerNum, register[1].registerNum, register[0].registerNum]
+            //         }
+            //
+            //     ]
+            // };
+            option = {
+                title: {
+                    text: '登录/注册'
+                },
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {},
+                toolbox: {
+                    show: false,
+                    feature: {
+                        restore: {},
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: [login[29].time,login[28].time, login[27].time, login[26].time, login[25].time, login[24].time, login[23].time, login[22].time, login[21].time, login[20].time, login[19].time, login[18].time, login[17].time, login[16].time, login[15].time, login[14].time,login[13].time, login[12].time, login[11].time, login[10].time, login[9].time, login[8].time, login[7].time, login[6].time, login[5].time, login[4].time, login[3].time, login[2].time, login[1].time, login[0].time]
+                },
+                yAxis: {
+                    type: 'value',
+                    axisLabel: {
+                        formatter: '{value} '
+                    }
+                },
+                series: [
+                    {
+                        name: '登录',
+                        type: 'line',
+                        data: [login[29].loginNum,login[28].loginNum, login[27].loginNum, login[26].loginNum, login[25].loginNum, login[24].loginNum, login[23].loginNum, login[22].loginNum, login[21].loginNum, login[20].loginNum, login[19].loginNum, login[18].loginNum, login[17].loginNum, login[16].loginNum, login[15].loginNum, login[14].loginNum,login[13].loginNum, login[12].loginNum, login[11].loginNum, login[10].loginNum, login[9].loginNum, login[8].loginNum, login[7].loginNum, login[6].loginNum, login[5].loginNum, login[4].loginNum, login[3].loginNum, login[2].loginNum, login[1].loginNum, login[0].loginNum]
+                    },
+                    {
+                        name: '注册',
+                        type: 'line',
+                        data: [register[29].registerNum,register[28].registerNum, register[27].registerNum, register[26].registerNum, register[25].registerNum, register[24].registerNum, register[23].registerNum, register[22].registerNum, register[21].registerNum, register[20].registerNum, register[19].registerNum, register[18].registerNum, register[17].registerNum, register[16].registerNum, register[15].registerNum, register[14].registerNum,register[13].registerNum, register[12].registerNum, register[11].registerNum, register[10].registerNum, register[9].registerNum, register[8].registerNum, register[7].registerNum, register[6].registerNum, register[5].registerNum, register[4].registerNum, register[3].registerNum, register[2].registerNum, register[1].registerNum, register[0].registerNum]
+                    }
+                ]
+            };
+            option && myChart.setOption(option);
+
+        });
+
+    }
+    function groupNum() {
+        document.getElementById("titleDiv1").setAttribute("class", "titleItem");
+        document.getElementById("titleDiv2").setAttribute("class", "titleItem");
+        document.getElementById("titleDiv3").setAttribute("class", "titleItem titleItemCk");
+        var chartDom = document.getElementById('main');
+        var myChart = echarts.init(chartDom);
+        var option;
+        $.post(Feng.ctxPath + "/homePage/groupNum", {type: 3}, function (data) {
+            console.log(data)
+            // option = {
+            //     title: {
+            //         text: '群聊个数'
+            //     },
+            //     tooltip: {
+            //         trigger: 'axis'
+            //     },
+            //     legend: {
+            //         data: ['群聊个数', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
+            //     },
+            //     grid: {
+            //         left: '3%',
+            //         right: '4%',
+            //         bottom: '3%',
+            //         containLabel: true
+            //     },
+            //     toolbox: {
+            //         feature: {
+            //             saveAsImage: {}
+            //         }
+            //     },
+            //     xAxis: {
+            //         type: 'category',
+            //         boundaryGap: false,
+            //         data: [data[29].time,data[28].time, data[27].time, data[26].time, data[25].time, data[24].time, data[23].time, data[22].time, data[21].time, data[20].time, data[19].time, data[18].time, data[17].time, data[16].time, data[15].time, data[14].time,data[13].time, data[12].time, data[11].time, data[10].time, data[9].time, data[8].time, data[7].time, data[6].time, data[5].time, data[4].time, data[3].time, data[2].time, data[1].time, data[0].time]
+            //     },
+            //     yAxis: {
+            //         type: 'value'
+            //     },
+            //     series: [
+            //
+            //         {
+            //             name: '群聊个数',
+            //             type: 'line',
+            //             stack: 'Total',
+            //             data: [data[29].groupNum,data[28].groupNum, data[27].groupNum, data[26].groupNum, data[25].groupNum, data[24].groupNum, data[23].groupNum, data[22].groupNum, data[21].groupNum, data[20].groupNum, data[19].groupNum, data[18].groupNum, data[17].groupNum, data[16].groupNum, data[15].groupNum, data[14].groupNum,data[13].groupNum, data[12].groupNum, data[11].groupNum, data[10].groupNum, data[9].groupNum, data[8].groupNum, data[7].groupNum, data[6].groupNum, data[5].groupNum, data[4].groupNum, data[3].groupNum, data[2].groupNum, data[1].groupNum, data[0].groupNum]
+            //         }
+            //     ]
+            // };
+            option = {
+                title: {
+                    text: '群聊个数'
+                },
+                tooltip: {
+                    trigger: 'axis'
+                },
+                legend: {},
+                toolbox: {
+                    show: false,
+                    feature: {
+                        restore: {},
+                    }
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    data: [data[29].time,data[28].time, data[27].time, data[26].time, data[25].time, data[24].time, data[23].time, data[22].time, data[21].time, data[20].time, data[19].time, data[18].time, data[17].time, data[16].time, data[15].time, data[14].time,data[13].time, data[12].time, data[11].time, data[10].time, data[9].time, data[8].time, data[7].time, data[6].time, data[5].time, data[4].time, data[3].time, data[2].time, data[1].time, data[0].time]
+                },
+                yAxis: {
+                    type: 'value',
+                    axisLabel: {
+                        formatter: '{value} '
+                    }
+                },
+                series: [
+                    {
+                        name: '群聊个数',
+                        type: 'line',
+                        data: [data[29].groupNum,data[28].groupNum, data[27].groupNum, data[26].groupNum, data[25].groupNum, data[24].groupNum, data[23].groupNum, data[22].groupNum, data[21].groupNum, data[20].groupNum, data[19].groupNum, data[18].groupNum, data[17].groupNum, data[16].groupNum, data[15].groupNum, data[14].groupNum,data[13].groupNum, data[12].groupNum, data[11].groupNum, data[10].groupNum, data[9].groupNum, data[8].groupNum, data[7].groupNum, data[6].groupNum, data[5].groupNum, data[4].groupNum, data[3].groupNum, data[2].groupNum, data[1].groupNum, data[0].groupNum]
+                    },
+                    {
+                        name: '',
+                        data: []}
+                ]
+            };
+            option && myChart.setOption(option);
+
+        });
+    }
+
+</script>
+<script src="${ctxPath}/static/modular/system/homePage/homePage.js"></script>
+<script>
+    laydate.render({
+        elem: '#time'
+        , trigger: 'click'
+        , range: true
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/gameData/GameData.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/gameData/GameData.html
new file mode 100644
index 0000000..16b72db
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/gameData/GameData.html
@@ -0,0 +1,603 @@
+
+@layout("/common/_container.html"){
+<link href="${ctxPath}/static/css/plugins/switchery/switchery.css" rel="stylesheet">
+<style>
+    .table1{
+        display: inline;
+        width: 25%;
+        float:left;
+        text-align:center;
+        border-collapse:collapse;
+        font-size: 18px;
+    }
+    .table2{
+        display: inline;
+        width: 50%;
+        float:left;
+        text-align:center;
+        border-collapse:collapse;
+        font-size: 18px;
+    }
+    .table3{
+        display: inline;
+        width: 50%;
+        float:left;
+        text-align:center;
+        border-collapse:collapse;
+        font-size: 18px;
+    }
+    .table1:hover{
+        background-color: rgba(255,0,0,.3);
+    }
+    .newWidth, .single-line{
+        max-width:150px !important;display: initial !important;
+    }
+    .companyValueClass td:first-child {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+            <div class="row">
+                    <div style="height: 50px;box-sizing: border-box;background:#f3f3f4;line-height: 50px;border:1px solid;margin-bottom: 20px;width: auto">
+                        <div id="div1" class='table1' onclick="getContent(1)" style="border-right: 1px solid #333;background-color: rgb(26, 179, 148);color: white;">激战球场</div>
+                        <div id="div2" class='table1' onclick="getContent(2)" style="border-right: 1px solid #333;">SUTU智慧球门</div>
+                        <div id="div3" class='table1' onclick="getContent(3)" style="border-right: 1px solid #333;">社区世界杯跨城赛</div>
+                        <div id="div4" class='table1' onclick="getContent(4)" style="border-right: 1px solid #333;">社区世界杯90°准度赛</div>
+                    </div>
+                    <div class="row" id="content1" style="margin-left: 100px;">
+                        <div class="col-sm-11">
+                            <div class="form-group" style="display: flex;margin-left: 150px" >
+                                <span id="totalNumber">全球场次总数:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                <span id="totalTime">全球比赛时长:</span>
+                            </div>
+                        </div>
+                        </br>
+                        <div class="col-sm-11">
+                            <div class="form-group" style="display: flex;margin-left: -150px">
+                                <label class="col-sm-3 control-label">*所属门店:</label>
+                                <select style="width: 300px" class="form-control" id="stores" name="stores">
+                                    <option value="">全球</option>
+                                    @for(obj in stores){
+                                    <option style="width: 300px" value="${obj.id}">${obj.name}</option>
+                                    @}
+                                </select>
+                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                                <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/>
+                            </div>
+                            <div class="col-sm-10">
+                                <div class="row" id="t1" style="margin-left: 100px;">
+
+                                    <div id="number" style="width: 1280px;height:500px;"></div>
+                                    <div id="time" style="width: 1280px;height:500px;"></div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="row" id="content2" style="margin-left: 100px;">
+                        <div class="col-sm-11">
+                            <div class="form-group">
+                                <div class="col-sm-10">
+                                    </br>
+                                    </br>
+                                    </br>
+                                    <h2>总场次统计</h2>
+                                    <div id="gameTotal" style="width: 1500px;height:500px;"></div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-sm-11" style="display: flex">
+                            <div class="form-group" >
+                                <label class="col-sm-3 control-label">*筛选内容:</label>
+                                <div class="col-sm-9" style="display: flex;">
+                                    <input style="width: 300px" class="form-control" id="con1"  placeholder="请输入年份或者月份" type="text">
+                                </div>
+                            </div>
+                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                            <div class="form-group">
+                                <label class="col-sm-3 control-label">*筛选城市:</label>
+                                <div class="col-sm-9">
+                                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="getStoreByCity(this)">
+                                        <option value="">全球</option>
+                                        @for(obj in list){
+                                        <option style="width: 300px" value="${obj.cityCode}">${obj.city}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                            <div class="form-group" >
+                                <label class="col-sm-3 control-label">*筛选场地:</label>
+                                <div class="col-sm-9">
+                                    <select style="width: 300px" class="form-control" id="site" name="site">
+                                        <option value="">全球</option>
+                                        @for(obj in sites){
+                                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="col-sm-11" style="display: flex">
+                        <div class="form-group" >
+                            <label class="col-sm-3 control-label">*游戏类型:</label>
+                            <div class="col-sm-9">
+                                <select style="width: 300px" class="form-control" id="games" name="site">
+                                    <option value="">全部</option>
+                                    <option style="width: 300px" value="1">方块球王</option>
+                                    <option style="width: 300px" value="2">社区小球王</option>
+                                    <option style="width: 300px" value="3">玩湃熊之力</option>
+                                    <option style="width: 300px" value="4">绿茵密码</option>
+                                    <option style="width: 300px" value="5">镜像阵容</option>
+                                    <option style="width: 300px" value="6">涨姿势</option>
+                                </select>
+                            </div>
+                        </div>
+                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/>
+                        </div>
+                        <div class="col-sm-10">
+                            <div class="row" id="t2" style="margin-left: 100px;">
+                                <div id="number1" style="width: 1280px;height:500px;"></div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="row" id="content3" style="margin-left: 100px;">
+                        <div class="col-sm-11" style="display: flex">
+                            <div class="form-group" >
+                                <label class="col-sm-3 control-label">*筛选内容:</label>
+                                <div class="col-sm-9" style="display: flex;">
+                                    <input style="width: 300px" class="form-control" id="con3"  placeholder="请输入年份或者月份" type="text">
+                                </div>
+                            </div>
+                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                            <div class="form-group">
+                                <label class="col-sm-3 control-label">*筛选城市:</label>
+                                <div class="col-sm-9">
+                                    <select style="width: 300px" class="form-control" id="cCode3" name="cCode" onchange="getStoreByCity1(this)">
+                                        <option value="">全球</option>
+                                        @for(obj in list){
+                                        <option style="width: 300px" value="${obj.cityCode}">${obj.city}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                            <div class="form-group" >
+                                <label class="col-sm-3 control-label">*筛选场地:</label>
+                                <div class="col-sm-9">
+                                    <select style="width: 300px" class="form-control" id="site3" name="site">
+                                        <option value="">全球</option>
+                                        @for(obj in sites){
+                                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TCompetition.search3()"/>
+                        </div>
+                        <#table id="TSiteTable"/>
+                    </div>
+                <div class="row" id="content4" style="margin-left: 100px;">
+                    <div class="col-sm-11" style="display: flex">
+                        <div class="form-group" >
+                            <label class="col-sm-3 control-label">*筛选内容:</label>
+                            <div class="col-sm-9" style="display: flex;">
+                                <input style="width: 300px" class="form-control" id="con4"  placeholder="请输入年份或者月份" type="text">
+                            </div>
+                        </div>
+                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">*筛选城市:</label>
+                            <div class="col-sm-9">
+                                <select style="width: 300px" class="form-control" id="cCode4" name="cCode" onchange="getStoreByCity1(this)">
+                                    <option value="">全球</option>
+                                    @for(obj in list){
+                                    <option style="width: 300px" value="${obj.cityCode}">${obj.city}</option>
+                                    @}
+                                </select>
+                            </div>
+                        </div>
+                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                        <div class="form-group" >
+                            <label class="col-sm-3 control-label">*筛选场地:</label>
+                            <div class="col-sm-9">
+                                <select style="width: 300px" class="form-control" id="site4" name="site">
+                                    <option value="">全球</option>
+                                    @for(obj in sites){
+                                    <option style="width: 300px" value="${obj.id}">${obj.name}</option>
+                                    @}
+                                </select>
+                            </div>
+                        </div>
+                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TCompetition.search4()"/>
+                    </div>
+                    <#table id="TSiteTable1"/>
+                </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/dataStatistics/echarts.min.js"></script>
+<script src="${ctxPath}/modular/system/gameData/gameData.js"></script>
+<script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script>
+<script>
+    var ans = [];
+    var weekX = [];
+    var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
+    var yearX = [];
+    var timeX = [];
+    var dataX = [];
+    // 创建一个日期对象
+    var currentDate = new Date();
+    // 获取当前日期的号数
+    let currentDay = currentDate.getDate();
+    // 循环添加号数到数组
+    for (let i = 0; i < 7; i++) {
+        dataX.push(currentDay - 6+i);
+    }
+    // 获取当前月份
+    var currentMonth = currentDate.getMonth();
+    // 获取当前年份
+    var currentYear = currentDate.getFullYear();
+    // 计算指定年份和月份的天数
+    function getDaysInMonth(year, month) {
+        // month 参数范围是 0-11,所以需要加 1
+        return new Date(year, month + 1, 0).getDate();
+    }
+    // 获取当前月份的天数
+    var daysInMonth = getDaysInMonth(currentYear, currentMonth);
+    // 将天数按字符串格式添加到 timeX 数组中
+    for (var i = 1; i <= daysInMonth; i++) {
+        timeX.push(String(i));
+    }
+    laydate.render({
+        elem: '#beginTime'
+        , trigger: 'click'
+        , range: true
+    });
+    // 激战球场
+    var yD=[];
+    var mD=[];
+    var yT=[];
+    var mT=[];
+    // SUTU智慧球场X轴数据
+    var SUTU=[];
+    // SUTU智慧球场数据
+    var SUTUData1=[];
+    function BatterData() {
+        var ajax = new $ax(Feng.ctxPath + "/gameData/list", function(resp){
+            var mDataList= resp.mDataList;
+            var yDataList= resp.yDataList;
+            // 场次
+            yD=[];
+            mD=[];
+            // 时长
+            yT = [];
+            mT = [];
+            for (let i = 0; i <yDataList.length ; i++) {
+
+                yD.push(yDataList[i].total_num);
+                yT.push(yDataList[i].batter_time);
+            }
+            for (let i = 0; i <mDataList.length ; i++) {
+                mD.push(mDataList[i].total_num);
+                mT.push(mDataList[i].batter_time);
+            }
+            for (let i = 0; i <resp.yearList.length ; i++) {
+                yearX.push(resp.yearList[i])
+            }
+            var totalNumber= resp.totalNumber;
+            var totalTime= resp.totalTime;
+           var tN = document.getElementById("totalNumber");
+           var tT = document.getElementById("totalTime");
+           tN.innerText = "全球场次总数:"+totalNumber+"场"
+           tT.innerText = "全球比赛时长:"+totalTime+"小时"
+            option  = {
+                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: {
+                    minInterval: 1,
+                    axisLabel : {
+                        formatter : '{value}'
+                    },
+                    name: "场次",
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度',
+                        type: 'line',
+                        stack: 'Total',
+                        data: yD
+                    },
+                    {
+                        name: '月度',
+                        type: 'line',
+                        stack: 'Total',
+                        data: mD
+                    }
+                ]
+            };
+            option2  = {
+                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: {
+                    name: "时长(小时)",
+                    type: 'value'
+                },
+                series: [
+                    {
+                        name: '年度',
+                        type: 'line',
+                        stack: 'Total',
+                        data: yT
+                    },
+                    {
+                        name: '月度',
+                        type: 'line',
+                        stack: 'Total',
+                        data:mT
+                    }
+                ]
+            };
+        });
+        if ($("#stores").val() == ""){
+            ajax.set("storeId",0)
+        }else{
+            ajax.set("storeId",$("#stores").val());
+        }
+        ajax.start();
+    }
+    function SUTUData() {
+        var ajax = new $ax(Feng.ctxPath + "/gameData/listSUTU", function(resp){
+            for (let i = 0; i <resp.games.length ; i++) {
+                SUTU.push(resp.games[i])
+            }
+            for (let i = 0; i <resp.data1.length ; i++) {
+                SUTUData1.push(resp.data1[i].count);
+            }
+            console.log("看看")
+            console.log(SUTUData)
+            option3 = {
+                tooltip: {
+                    trigger: 'axis',
+                    axisPointer: {
+                        type: 'shadow'
+                    }
+                },
+                grid: {
+                    left: '3%',
+                    right: '4%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                xAxis: {
+                    type: 'category',
+                    data: SUTU
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        data: SUTUData1,
+                        type: 'bar'
+                    }
+                ]
+            };
+
+        });
+        ajax.start();
+    }
+    $(function(){
+        getContent(1);
+        BatterData();
+        SUTUData();
+            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: [1,3,6,8,9,5]
+                },
+                {
+                    name: '月度',
+                    type: 'line',
+                    stack: 'Total',
+                    data:[1,2,3,4,5,6,6,5,4,3,2,1]
+                    // data: [month[0][0],month[0][1], month[0][2], month[0][3], month[0][4],
+                    //     month[0][5], month[0][6], month[0][7], month[0][8], month[0][9], month[0][10], month[0][11]]
+                }
+            ]
+        };
+        // 基于准备好的dom,初始化echarts实例
+        var myChart  = echarts.init(document.getElementById('number'));
+
+        myChart.on('legendselectchanged', obj => {
+            var options = myChart.getOption()
+            options.series[0].data = yD;
+            options.series[1].data = mD;
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度') {
+                options.xAxis[0].data = monthX
+            }
+            myChart.setOption(options, true)
+        });
+        var myChart2  = echarts.init(document.getElementById('time'));
+        myChart2.on('legendselectchanged', obj => {
+            var options = myChart2.getOption();
+            options.series[0].data = yT;
+            options.series[1].data = mT;
+            //这里是选择切换什么样的x轴,那么他会进行对Y值的切换
+            if (obj.name == '年度') {
+                options.xAxis[0].data = yearX
+            } else if (obj.name == '月度') {
+                options.xAxis[0].data = monthX
+            }
+            myChart2.setOption(options, true)
+        });
+        var myChart4  = echarts.init(document.getElementById('number1'));
+        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)
+        });
+        // 使用刚指定的配置项和数据显示图表。
+        myChart.setOption(option);
+        myChart2.setOption(option2);
+        myChart4.setOption(option4);
+
+        var myChart3  = echarts.init(document.getElementById('gameTotal'));
+        myChart3.setOption(option3);
+    });
+    function getContent(type){
+        //设置点击字体颜色效果
+        for(var i=1;i<5;i++){
+            document.getElementById("div"+i).style.color="#888888";//
+            document.getElementById("div"+i).style.backgroundColor ="";
+            $("#content"+i).hide();
+        }
+        //设置点击背景颜色效果
+        document.getElementById("div"+type).style.color="white";//
+        document.getElementById("div"+type).style.backgroundColor ="rgb(26, 179, 148)";
+        $("#type").val(type);
+        $("#content"+type).show();
+        if(type!=3){
+            $("#ensure").hide();
+            $("#nextB").show();
+        }else{
+            $("#ensure").show();
+            $("#nextB").hide();
+        }
+    }
+
+    function getStoreByCity(e) {
+        var cityCode=$(e).val();
+        var ajax = new $ax(Feng.ctxPath + "/tSite/getSiteByCity", function(data){
+            if(data!=null){
+                var content='<option value="">全球</option>';
+                $.each(data, function(k,v) {
+                    content += "<option value='"+v.id+"'>"+v.name+"</option>";
+                });
+                $("#site").empty().append(content);
+            }
+        });
+        ajax.set("oneId",cityCode);
+        ajax.start();
+    }
+    function getStoreByCity1(e) {
+        var cityCode=$(e).val();
+        var ajax = new $ax(Feng.ctxPath + "/tSite/getSiteByCity", function(data){
+            if(data!=null){
+                var content='<option value="">全球</option>';
+                $.each(data, function(k,v) {
+                    content += "<option value='"+v.id+"'>"+v.name+"</option>";
+                });
+                $("#site1").empty().append(content);
+            }
+        });
+        ajax.set("oneId",cityCode);
+        ajax.start();
+    }
+</script>
+
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/gateData/GateData.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/gateData/GateData.html
new file mode 100644
index 0000000..45bdb55
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/gateData/GateData.html
@@ -0,0 +1,31 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>闸机数据统计</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                        </div>
+                <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
+                    <h3>场地总人次:</h3>
+                </div>
+                <#table id="TSiteTable"/>
+            </div>
+        </div>
+    </div>
+</div>
+</div>
+</div>
+<script src="${ctxPath}/modular/system/gateData/gateData.js"></script>
+<script>
+    laydate.render({
+        elem: '#createTime'
+        ,range: true
+        ,lang:"en"
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator.html
new file mode 100644
index 0000000..b132165
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator.html
@@ -0,0 +1,59 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>运营商管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <#NameCon id="name" name="管理员姓名:" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="phone" name="管理员手机号:" />
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            管理区域
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="type" >
+                                        <option value="">全部</option>
+                                        <option value="1">全国</option>
+                                        <option value="2">指定地区</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TSite.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TSite.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
+                            <#button name="添加" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
+                            <#button name="编辑" icon="fa-edit" clickFun="TSite.openInfo()" space="true"/>
+                            <#button name="冻结" icon="fa-remove" clickFun="TSite.offShelf()" space="true"/>
+                            <#button name="解冻" icon="fa-check" clickFun="TSite.onShelf()" space="true"/>
+                            <#button name="重置密码" icon="fa-search" clickFun="TSite.reload()" space="true"/>
+                        </div>
+                        <#table id="TSiteTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/operator/operator.js"></script>
+<script>
+    laydate.render({
+        elem: '#createTime'
+        ,range: true
+        ,lang:"en"
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_add.html
new file mode 100644
index 0000000..549860e
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_add.html
@@ -0,0 +1,127 @@
+@layout("/common/_container.html"){
+<style>
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        height: 100px;
+        width: 100px;
+        overflow: hidden;
+    }
+
+    .avatar-uploader .el-upload:hover {
+        border-color: #409EFF;
+    }
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 100px;
+        height: 100px;
+        line-height: 100px;
+        margin-top: 32px;
+        text-align: center;
+    }
+    .avatar {
+        width: 100px;
+        height: 100px;
+        display: block;
+    }
+
+    .col-sm-12 {
+        margin-top: 20px;
+    }
+
+    .col-sm-12 select {
+        height: 33px;
+    }
+</style>
+<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*运营商名称:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="name"  placeholder="请输入运营商名称" type="text">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*管理员姓名:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="userName"  placeholder="请输入管理员姓名" type="text">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*管理员手机号:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="phone"  placeholder="请输入管理员手机号" type="text">
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*管理区域:</label>
+                    <div class="col-sm-2"  style="display: flex;align-items: center;">
+                        <div class="radio radio-info radio-inline">
+                            <input type="radio" id="areaType1" value="1" name="areaType"  onclick="TSite.areaTypeClick(1)">
+                            <label for="areaType1"> 全国 </label>
+                        </div>
+                        <div class="radio radio-success radio-inline">
+                            <input type="radio" id="areaType2" value="2" name="areaType" checked="" onclick="TSite.areaTypeClick(2)">
+                            <label for="areaType2"> 指定地区 </label>
+                        </div>
+                    </div>
+                    <div class="col-sm-2">
+                        <#button btnCss="info" name="添加" id="ensure" icon="fa-check" clickFun="TSite.addArea()"/>
+                    </div>
+            </div>
+            <div class="form-group" id="areaType1Div">
+                <label class="col-sm-3 control-label">*管理地区:</label>
+                <div class="col-sm-3">
+                    <select class="form-control" id="pCode" onchange="TSite.oneChange(this)">
+                        <option value="">选择省</option>
+                        @for(obj in provinceList){
+                        <option value="${obj.code}">${obj.name}</option>
+                        @}
+                    </select>
+                </div>
+                <div class="col-sm-3">
+                    <select class="form-control" id="cCode" >
+                        <option value="">选择市</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" id = "data">
+                <label class="col-sm-3 control-label">已添加管理地区</label>
+                <div class="col-sm-6">
+                    <div style="height: 200px; border: 1px solid #e5e6e7;overflow-y: auto;">
+                        <table class="table table-striped table-bordered table-hover table-condensed">
+                            <thead>
+                            <tr>
+                                <th style="width: 300px;text-align: center;">所在省</th>
+                                <th style="width: 300px;text-align: center;">所在市</th>
+                                <th style="width: 100px;text-align: center;">操作</th>
+                            </tr>
+                            </thead>
+                            <tbody id="areaValue">
+
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5" >
+        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
+        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
+    </div>
+</div>
+        </div>
+        </div>
+    </div>
+</div>
+
+<script src="${ctxPath}/modular/system/operator/operator_add.js"></script>
+<script src="${ctxPath}/js/vue/vue.js"></script>
+<script src="${ctxPath}/js/elementui/index.js"></script>
+<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_edit.html
new file mode 100644
index 0000000..fb66c44
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator_edit.html
@@ -0,0 +1,155 @@
+@layout("/common/_container.html"){
+<style>
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        height: 100px;
+        width: 100px;
+        overflow: hidden;
+    }
+
+    .avatar-uploader .el-upload:hover {
+        border-color: #409EFF;
+    }
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 100px;
+        height: 100px;
+        line-height: 100px;
+        margin-top: 32px;
+        text-align: center;
+    }
+    .avatar {
+        width: 100px;
+        height: 100px;
+        display: block;
+    }
+
+    .col-sm-12 {
+        margin-top: 20px;
+    }
+
+    .col-sm-12 select {
+        height: 33px;
+    }
+</style>
+<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <div class="form-group" >
+                <input hidden id="id" value="${id}">
+                <input hidden id="type" value="${data.type}">
+                <label class="col-sm-3 control-label">*运营商名称:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="name" value="${data.name}"  placeholder="请输入运营商名称" type="text">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*管理员姓名:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="userName" value="${userName}"  placeholder="请输入管理员姓名" type="text">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*管理员手机号:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="phone" value="${phone}"  placeholder="请输入管理员手机号" type="text">
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*管理区域:</label>
+                <div class="col-sm-2"  style="display: flex;align-items: center;">
+                    <div class="radio radio-info radio-inline">
+                        <input type="radio" id="areaType1" value="1" name="areaType"  onclick="TSite.areaTypeClick(1)">
+                        <label for="areaType1"> 全国 </label>
+                    </div>
+                    <div class="radio radio-success radio-inline">
+                        <input type="radio" id="areaType2" value="2" name="areaType" checked="" onclick="TSite.areaTypeClick(2)">
+                        <label for="areaType2"> 指定地区 </label>
+                    </div>
+                </div>
+                <div class="col-sm-2">
+                    <#button btnCss="info" name="添加" id="ensure" icon="fa-check" clickFun="TSite.addArea()"/>
+                </div>
+            </div>
+            <div class="form-group" id="areaType1Div">
+                <label class="col-sm-3 control-label">*管理地区:</label>
+                <div class="col-sm-3">
+                    <select class="form-control" id="pCode" onchange="TSite.oneChange(this)">
+                        <option value="">选择省</option>
+                        @for(obj in provinceList){
+                        <option value="${obj.code}">${obj.name}</option>
+                        @}
+                    </select>
+                </div>
+                <div class="col-sm-3">
+                    <select class="form-control" id="cCode" >
+                        <option value="">选择市</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" id = "data">
+                <label class="col-sm-3 control-label">已添加管理地区</label>
+                <div class="col-sm-6">
+                    <div style="height: 200px; border: 1px solid #e5e6e7;overflow-y: auto;">
+                        <table class="table table-striped table-bordered table-hover table-condensed">
+                            <thead>
+                            <tr>
+                                <th style="width: 300px;text-align: center;">所在省</th>
+                                <th style="width: 300px;text-align: center;">所在市</th>
+                                <th style="width: 100px;text-align: center;">操作</th>
+                            </tr>
+                            </thead>
+                            <tbody id="areaValue">
+                                @for(obj in list){
+                                <tr class="areaValueClass">
+                                    <td style="text-align: center;"><input type="hidden" id="provinceCode" name="provinceName" value="${obj.provinceCode}">
+                                        <input type="hidden" id="provinceName" name="provinceCode" value="${obj.province}">${obj.province}</td>
+                                    <td style="text-align: center;"><input type="hidden" id="cityCode" name="cityName" value="${obj.cityCode}">
+                                        <input type="hidden" id="cityName" name="cityCode" value="${obj.city}">${obj.city}</td>
+                                    <td style="text-align: center;"><button onclick="deleteSub(this)">移除</button></td>
+                                </tr>
+                                @}
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10 col-sm-offset-5" >
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.updateSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+</div>
+
+<script src="${ctxPath}/modular/system/operator/operator_add.js"></script>
+<script src="${ctxPath}/js/vue/vue.js"></script>
+<script src="${ctxPath}/js/elementui/index.js"></script>
+<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
+<script>
+    window.onload = function(){
+        var OBJradio = document.querySelectorAll('input[type="radio"]');
+        console.log("看看集合")
+        console.log(OBJradio)
+        for(i=0;i<OBJradio.length;i++){//循环查找这个radio
+            if($("#type").val()==OBJradio[i].value){//判断是否与radio的值相同
+                OBJradio[i].checked=true//修改选中状态
+            }
+        }
+        if ($("#type").val()==1){
+            $("#areaType1Div").hide();
+            $("#areaType2Div").hide();
+            $("#data").hide();
+            $("#ensure").hide();
+        }
+    }
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html
new file mode 100644
index 0000000..a639b53
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html
@@ -0,0 +1,114 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>运营商商户管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            所在省
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="pCode" onchange="TSite.oneChange(this)">
+                                        <option value="">选择省</option>
+                                        @for(obj in provinceList){
+                                        <option value="${obj.code}">${obj.name}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            所在市
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="cCode">
+                                        <option value="">请先选择省</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="name" name="管理员姓名:" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="phone" name="管理员手机号:" />
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            认证平台
+                                        </button>
+                                    </div>
+                                    <select style="width: 300px" class="form-control" id="platform" name = "platform">
+                                        <option value="">全部</option>
+                                        <option value="1">微信</option>
+                                        <option value="2">支付宝</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            认证类型
+                                        </button>
+                                    </div>
+                                    <select style="width: 300px" class="form-control" id="type" name = "platform">
+                                        <option value="">全部</option>
+                                        <option value="1">法人</option>
+                                        <option value="2">个人</option>
+                                    </select>
+                                </div>
+                            </div>
+
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            审核状态
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="state" >
+                                        <option value="">全部</option>
+                                        <option value="1">待审核</option>
+                                        <option value="2">审核中</option>
+                                        <option value="2">已审核</option>
+                                        <option value="2">已拒绝</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TSite.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TSite.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
+                            <#button name="分账比例" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
+                            <#button name="认证" icon="fa-plus" clickFun="TSite.openInfo()"/>
+                        </div>
+                        <#table id="TSiteTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/operatorUser/operatorUser.js"></script>
+<script>
+    laydate.render({
+        elem: '#createTime'
+        ,range: true
+        ,lang:"en"
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_auth.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_auth.html
new file mode 100644
index 0000000..cebe82c
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_auth.html
@@ -0,0 +1,308 @@
+@layout("/common/_container.html"){
+<style>
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        height: 100px;
+        width: 100px;
+        overflow: hidden;
+    }
+
+    .avatar-uploader .el-upload:hover {
+        border-color: #409EFF;
+    }
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 100px;
+        height: 100px;
+        line-height: 100px;
+        margin-top: 32px;
+        text-align: center;
+    }
+    .avatar {
+        width: 100px;
+        height: 100px;
+        display: block;
+    }
+
+    .col-sm-12 {
+        margin-top: 20px;
+    }
+
+    .col-sm-12 select {
+        height: 33px;
+    }
+    #app1{
+        margin-left: 255px;
+    }
+
+
+</style>
+<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <h2>商户信息</h2>
+            <div style="display: flex">
+                <span id="storeName"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                <span id="storeStaff"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                <span id="storePhone"></span>
+            </div>
+            <h2>商户号信息</h2>
+            </br>
+            </br>
+
+            <div class="row">
+                <div class="col-lg-6" style="">
+                    <div class="form-group">
+                        <label class="col-sm-4 control-label" >
+                            主题类型:<input type="radio" name="type" value="1" checked  onclick="updateHalf(1)">个人
+                                     <input type="radio" name="type" value="2" onclick="updateHalf(2)">企业
+                        </label>
+                    </div>
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*营业执照商户名称:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="merchantName"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*法定代表人姓名:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="lrName"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*营业期限:</label>
+                        <div class="col-sm-9" style="display: flex">
+                            <input style="width: 300px" class="form-control" id="tradeTime" name="tradeTime" type="date">
+                            <input type="checkbox" style="margin-left: 10px" id="tradeT" value="0" onchange="TSite.tradeYse(this)">长期</input>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-lg-6" style="">
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*营业执照注册号:</label>
+                        <div class="col-sm-9" >
+                            <input style="width: 300px" class="form-control" id="licenseRegistration"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*注册地址:</label>
+                        <div class="col-sm-9" >
+                            <input style="width: 300px" class="form-control" id="registerAddress"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <#avatar id="license" name="营业执照" />
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-lg-6" style="">
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*法人姓名:</label>
+                        <div class="col-sm-9" >
+                            <input style="width: 300px" class="form-control" id="legalPerson"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*法人手机号:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="legalPhone"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*法人身份证有效期:</label>
+                        <div class="col-sm-9" style="display: flex">
+                            <input style="width: 300px" class="form-control" id="IDCardTime" name="IDCardTime" type="date">
+                            <input type="checkbox" style="margin-left: 10px" id="IDCardT" value="0" onchange="TSite.tradeYse(this)">长期</input>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <#avatar id="IDCardImg" name="法人身份证正面照" />
+                    </div>
+                </div>
+                <div class="col-lg-6" style="">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*法人身份证号:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="lIDNumber"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*法人邮箱:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="lEmail"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group" >
+                        <label class="col-sm-3 control-label">*法人身份证地址:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="lIDAddress"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <#avatar id="IDCardImg1" name="法人身份证背面照" />
+                    </div>
+                </div>
+            </div>
+
+            <div class="row">
+            <div class="col-lg-6" style="">
+                <div class="form-group" >
+                    <label class="col-sm-4 control-label" >
+                        结算账户类型:<input type="radio" name="type" value="1">对公 <input type="radio" name="type" value="2">对私
+                    </label>
+                </div>
+
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">开户银行:</label>
+                    <div class="col-sm-9">
+                        <select style="width: 300px" class="form-control" id="bank" name="bank">
+                            <option value="">选择开户银行</option>
+                            @for(obj in bankList){
+                            <option value="${obj.bankCode}">${obj.bankName}</option>
+                            @}
+                        </select>
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">开户所在地:</label>
+                    <div class="col-sm-9" style="display: flex">
+                        <select style="width: 150px" class="form-control" id="pCode" onchange="TSite.oneChange(this)" name="bank">
+                            <option value="">选择省</option>
+                            @for(obj in provinceList){
+                            <option value="${obj.code}">${obj.name}</option>
+                            @}
+                        </select>
+                        <select style="width: 150px" class="form-control" id="cCode" name="bank">
+                            <option value="">选择市区</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">*银行卡号:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" id="backNumber" name="backNumber" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-lg-6" style="">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">*开户名称:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" id="backUserName"  placeholder="请输入" type="text">
+                    </div>
+                </div>
+                <div class="form-group" >
+                    <label class="col-sm-3 control-label">*开户行全称:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" id="backName"  placeholder="请输入" type="text">
+                    </div>
+                </div>
+            </div>
+        </div>
+            <div class="row" id="benefit">
+                <div class="col-lg-6" style="">
+                    <div class="form-group">
+                        <label class="col-sm-4 control-label" >
+                            法人是否为受益人:<input type="radio" name="type" value="1">是 <input type="radio" name="type" value="2">否
+                        </label>
+                    </div>
+
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*受益人姓名:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="bName" name="bName" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*受益人身份证地址:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="bAddress"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*受益人身份证有效期:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="bTime" name="bTime" type="date">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <#avatar id="bImg1" name="受益人身份证正面照" />
+                    </div>
+                </div>
+                <div class="col-lg-6" style="">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*受益人身份证号:</label>
+                        <div class="col-sm-9" >
+                            <input style="width: 300px" class="form-control" id="bIDNumber"  placeholder="请输入" type="text">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <#avatar id="bImg2" name="受益人身份证背面照" />
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-lg-6" style="">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*拒绝理由:</label>
+                    </div>
+                    <div class="form-group">
+                        <#avatar id="Img" name="上传图片" />
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*备注:</label>
+                        <div class="col-sm-9">
+                            <input style="width: 300px" class="form-control" id="remark" name="remark" type="text">
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="row btn-group-m-t">
+                    <div class="col-sm-10 col-sm-offset-5" >
+                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
+                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="${ctxPath}/modular/system/operatorUser/operatorUser.js"></script>
+<script src="${ctxPath}/js/vue/vue.js"></script>
+<script src="${ctxPath}/js/elementui/index.js"></script>
+<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
+<script>
+    laydate.render({
+        elem: '#tradeTime'
+        ,range: true
+        ,lang:"CN"
+    });
+    laydate.render({
+        elem: '#IDCardTime'
+        ,range: true
+        ,lang:"CN"
+    });
+    laydate.render({
+        elem: '#bTime'
+        ,range: true
+        ,lang:"CN"
+    });
+    function updateHalf(e) {
+        if(e==1){
+            $("#benefit").hide()
+        }else {
+            $("#benefit").show()
+        }
+
+    }
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TStoreList.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TStoreList.html
index a7f46c1..0d079ce 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TStoreList.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TStoreList.html
@@ -10,17 +10,17 @@
                     <div class="col-sm-12">
                         <div class="row">
                             <div class="col-sm-3">
-                                <select class="form-control" id="province">
-                                    <option value="">全部</option>
-                                </select>
-                            </div>
-                            <div class="col-sm-3">
-                                <select class="form-control" id="city">
-                                    <option value="">全部</option>
-                                </select>
-                            </div>
+                                <#SelectCon id="province" name="所在省" >
+                                <option value="">全部</option>
+                            </#SelectCon>
+                        </div>
+                        <div class="col-sm-3">
+                                <#SelectCon id="city" name="所在市" >
+                                <option value="">全部</option>
+                            </#SelectCon>
+                        </div>
                     <div class="col-sm-3">
-                        <#SelectCon id="userPopulation" name="所属账号" >
+                        <#SelectCon id="operator" name="所属运营商" >
                         <option value="">全部</option>
                     </#SelectCon>
                 </div>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html
index 7c6e1a5..0b08976 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TStoreList.html
@@ -20,7 +20,7 @@
                                 </select>
                             </div>
                     <div class="col-sm-3">
-                        <#SelectCon id="userPopulation" name="所属账号" >
+                        <#SelectCon id="userPopulation" name="所属运营商" >
                         <option value="">全部</option>
                     </#SelectCon>
                 </div>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket.html
new file mode 100644
index 0000000..d30a913
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket.html
@@ -0,0 +1,78 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+
+            <div class="ibox-title">
+                <h5>门票管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+
+                            <div class="col-sm-3">
+                                <#NameCon id="name" name="门票名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#SelectCon id="type" name="门票类型">
+                                <option value="">全部</option>
+                                <option value="1">日卡</option>
+                                <option value="2">月卡</option>
+                                <option value="3">季卡</option>
+                                <option value="4">年卡</option>
+                            </#SelectCon>
+                            </div>
+                    <div class="col-sm-3">
+                        <#SelectCon id="redemptionMethod" name="兑换方式">
+                        <option value="">全部</option>
+                        <option value="1">积分</option>
+                        <option value="2">现金+积分</option>
+                        <option value="3">现金</option>
+                    </#SelectCon>
+                </div>
+                    <div class="col-sm-3">
+                        <#SelectCon id="userPopulation" name="用户人群">
+                        <option value="">全部</option>
+                        <option value="1">全部用户</option>
+                        <option value="2">年度会员</option>
+                        <option value="3">已有学员用户</option>
+                    </#SelectCon>
+                </div>
+                    <div class="col-sm-3">
+                        <#SelectCon id="activeStatus" name="活动状态">
+                        <option value="">全部</option>
+                        <option value="1">未开始</option>
+                        <option value="2">已开始</option>
+                        <option value="3">已结束</option>
+                    </#SelectCon>
+                    </div>
+            <div class="col-sm-3">
+                <#SelectCon id="state" name="可售状态">
+                <option value="">全部</option>
+                <option value="1">上架</option>
+                <option value="2">下架</option>
+            </#SelectCon>
+            </div>
+                    <div class="col-sm-3">
+                        <#button name="搜索" icon="fa-search" clickFun="TPointProducts.search()"/>
+                        <#button name="重置" icon="fa-trash" clickFun="TPointProducts.resetSearch()" space="true"/>
+                    </div>
+                </div>
+                <div class="hidden-xs" id="TPointProductsTableToolbar" role="group">
+                    <#button name="添加" icon="fa-plus" clickFun="TPointProducts.openAddTPointProducts()"/>
+                    <#button name="编辑" icon="fa-edit" clickFun="TPointProducts.openEditPage()" space="true"/>
+                    <#button name="上架" icon="fa-remove" clickFun="TPointProducts.onShelf()" space="true"/>
+                    <#button name="下架" icon="fa-remove" clickFun="TPointProducts.offShelf()" space="true"/>
+                    <#button name="查看详情" icon="fa-remove" clickFun="TPointProducts.detail()" space="true"/>
+                    <#button name="购买详情" icon="fa-remove" clickFun="TPointProducts.payDetail()" space="true"/>
+                </div>
+                <#table id="TPointProductsTable"/>
+            </div>
+        </div>
+    </div>
+</div>
+</div>
+</div>
+<script src="${ctxPath}/modular/system/ticket/ticket.js"></script>
+@}
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
new file mode 100644
index 0000000..3de0427
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ticket/ticket_add.html
@@ -0,0 +1,357 @@
+@layout("/common/_container.html"){
+<style>
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        height: 100px;
+        width: 100px;
+        overflow: hidden;
+    }
+
+    .avatar-uploader .el-upload:hover {
+        border-color: #409eff;
+    }
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 100px;
+        height: 100px;
+        line-height: 100px;
+        margin-top: 34px;
+        text-align: center;
+    }
+    .avatar {
+        width: 100px;
+        height: 100px;
+        display: block;
+    }
+
+    .col-sm-12 {
+        margin-top: 20px;
+    }
+
+    .col-sm-12 select {
+        height: 33px;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <#input id="name" name="门票名称" type="text"/>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">商品类型:</label>
+                <div class="col-sm-9">
+                    <input type="radio" name="type" value="1" checked onclick="updateType(1)"> 日卡
+                    <input type="radio" name="type" value="2" > 月卡
+                    <input type="radio" name="type" value="3" > 季卡
+                    <input type="radio" name="type" value="3" > 年卡
+                </div>
+            </div>
+            <#input id="price" name="原价" type="text"/>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">兑换方式:</label>
+                <div class="col-sm-9">
+                    <input type="radio" name="redemptionMethod" value="1" checked> 积分
+                    <input type="radio" name="redemptionMethod" value="2" > 现金+积分
+                    <input type="radio" name="redemptionMethod" value="3" > 现金
+                </div>
+            </div>
+            <div class="form-group" id="y1" hidden>
+                <label class="col-sm-3 control-label">所需现金:</label>
+                <div class="col-sm-9">
+                    <input class="form-control" id="cash" name="cash" type="text">
+
+                </div>
+            </div>
+            <div class="form-group" id="y2">
+                <label class="col-sm-3 control-label">所需积分:</label>
+                <div class="col-sm-9">
+                    <input class="form-control" id="integral" name="integral" type="text">
+
+                </div>
+            </div>
+            <#avatar id="cover" name="门票封面" />
+            <div class="row" id="app" style="margin-left: 225px;" >
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">门票图片: </label>
+                        <div class="col-sm-2" style="margin-top: 2%">
+                            <el-upload
+                                    class="avatar-uploader"
+                                    action="/tCouponManage/uploadPic"
+                                    :on-success="handleAvatarSuccess"
+                                    accept=".jpg,.jpeg,.png,.JPG,.JPEG"
+                                    :on-remove="handleRemove"
+                                    :before-upload="beforeAvatarUpload">
+                                <img v-if="imageUrl" :src="imageUrl" class="avatar">
+                                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                            </el-upload>
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+
+
+            <div class="form-group">
+                <label class="col-sm-3 control-label">用户人群:</label>
+                <div class="col-sm-9">
+                    <input type="radio" name="userPopulation" value="1" checked> 全部用户
+                    <input type="radio" name="userPopulation" value="2" > 年度会员
+                    <input type="radio" name="userPopulation" value="3" > 已有学员用户
+                </div>
+            </div>
+
+            <div class="form-group">
+                <label class="col-sm-3 control-label">发放数量:</label>
+                <div class="col-sm-9">
+                    <input class="form-control" id="quantityIssued" name="quantityIssued" type="text">
+                </div>
+            </div>
+
+            <div class="form-group">
+                <label class="col-sm-3 control-label">限领数量:</label>
+                <div class="col-sm-9">
+                    <input class="form-control" id="pickUpQuantity" name="pickUpQuantity" type="text">
+                </div>
+            </div>
+            <#input id="startTime" name="有效期" type="text"/>
+            <div class="row" id="belongsCon" >
+                <div class="form-group">
+                    <div class="form-group">
+                        <div class="initialLevel col-sm-12 control-label form-group">
+                            <label class="col-sm-3">*适用范围: </label>
+                            <div class="col-sm-2" id="belongsNationwide" >
+                                <input class="col-sm-1" onclick="scopeOfApplication1()" name="company" type="radio"
+                                       value="0" checked style="margin-top: 10px"/>
+                                <label class="col-sm-1" style="width: 38%;margin-top: 7px">全国通用</label>
+                            </div>
+                            <div class="col-sm-2" id="belongsCity"  >
+                                <input class="col-sm-1" name="company" onclick="scopeOfApplication2()" type="radio"
+                                       value="1"  style="margin-top: 10px"/>
+                                <label class="col-sm-1" style="width: 38%;margin-top: 7px">指定城市</label>
+                            </div>
+                            <div class="col-sm-2" id="belongsStore"  >
+                                <input class="col-sm-1" name="company" onclick="scopeOfApplication3()" type="radio"
+                                       value="1" style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px"/>
+                                <label class="col-sm-1" style="width: 38%;margin-top: 6px;">指定门店</label>
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+
+            <div class="row" id="citySelect" hidden="hidden">
+                <div class="form-group">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*指定城市: </label>
+                        <div class="col-sm-9 control-label">
+                            <select class="col-sm-1"  id="provinceData" style="margin-top: 1%;width: 25%" onchange="changeCity(null)">
+                                <option value="">请选择</option>
+                            </select>
+                            <label class="col-sm-1"  style="width: 9%;margin-top: 7px">省</label>
+                            <select  class="col-sm-1" style="margin-top: 1%;width: 25%" id="cityData">
+                                <option value="">请选择</option>
+                            </select>
+                            <label class="col-sm-1" style="width: 7%;margin-top: 7px">市</label>
+                            <label name="addBranch" class="col-sm-1" onclick="TCarInfoDlg.addBranch()" style="border: 0px;cursor: pointer;margin-top: 1%"><i class="fa fa-plus-circle"></i></label>
+                        </div>
+                        <div id="cityDemo"></div>
+                    </div>
+
+                </div>
+            </div>
+
+            <div class="row" id="storeSelect" hidden="hidden">
+                <div class="form-group">
+                    <div class="form-group">
+                        <div class="col-sm-12">
+                            <label class="col-sm-3 control-label">*指定门店: </label>
+                            <button onclick="storeList()"
+                                    style="height: 22px;width: 82px;background-color: #4a8ff1;color: white;z-index: 15;position:relative;border: none;margin-top: 1%">
+                                选择门店
+                            </button>
+                        </div>
+                        <div class="col-sm-12" style="margin-left: -57px;margin-top: 20px">
+                            <table class="table table-bordered" style="width: 70%;margin-left: 228px;" id="storeTable">
+                                <thead>
+                                <tr>
+                                    <td>所在省市</td>
+                                    <td>所属账号</td>
+                                    <td>门店名称</td>
+                                    <td>操作</td>
+                                </tr>
+                                </thead>
+                                <tbody id="coun"></tbody>
+                            </table>
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+            <div class="form-group" style="margin-left:262px">
+                <label class="col-sm-1 control-label">兑换说明:</label>
+                <div class="col-sm-5">
+                    <textarea type="text/plain" id="editor"  style="height: 300px;width: 800px;"></textarea>
+                </div>
+            </div>
+
+            <div class="form-group">
+                <label class="col-sm-3 control-label">排序:</label>
+                <div class="col-sm-9">
+                    <input class="form-control" id="sort" name="sort" type="text">
+
+                </div>
+            </div>
+            </div>
+
+            <div id="b2" hidden>
+
+                <div class="form-group" id="provinceCode">
+                    <label class="col-sm-3 control-label">所在省:</label>
+                    <div class="col-sm-9">
+                        <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)">
+                            <option value="">选择省</option>
+                            @for(obj in list){
+                            <option value="${obj.code}">${obj.name}</option>
+                            @}
+                        </select>
+                    </div>
+                </div>
+                <div class="form-group" id="cityCode">
+                    <label class="col-sm-3 control-label">所在市:</label>
+                    <div class="col-sm-9">
+                        <select class="form-control" id="cCode" name="cCode">
+                            <option value="">选择市</option>
+                        </select>
+                    </div>
+                </div>
+
+            </div>
+
+
+        </div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.addSubmit()"/>
+        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/js/vue/vue.js"></script>
+<script src="${ctxPath}/js/elementui/index.js"></script>
+<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
+<script src="${ctxPath}/modular/system/tGoods/tGoods_info.js"></script>
+<script src="${ctxPath}/modular/system/tGoods/TStoreInfo.js"></script>
+<script>
+
+    function updateType(e) {
+        if(e==2){
+            $("#b1").hide()
+            $("#b2").show()
+        }else {
+            $("#b2  ").hide()
+            $("#b1").show()
+        }
+    }
+
+
+
+    function changeCity(n){
+
+        var provinceSelect = null;
+        if (n === undefined || n === null || n === ''){
+            provinceSelect = document.getElementById("provinceData");
+        }else {
+            provinceSelect = document.getElementById("provinceData"+n);
+        }
+
+        var citySelect = null;
+        if (n === undefined || n === null || n === ''){
+            citySelect = document.getElementById("cityData");
+        }else {
+            citySelect = document.getElementById("cityData"+n);
+        }
+
+        var selectedProvince = provinceSelect.value;
+        // 清空城市下拉框
+        citySelect.innerHTML = '<option value="">请选择</option>';
+        if (selectedProvince === "") {
+            return;
+        }
+        var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getCity", function(data){
+            data.forEach(province => {
+                var option = document.createElement("option");
+                option.value = province.id;  // 根据你的数据结构确定省份的id字段
+                option.text = province.name;  // 根据你的数据结构确定省份的name字段
+                citySelect.appendChild(option);
+            });
+        },function(data){
+            console.log('data:',data)
+            Feng.error("获取失败!" + data.responseJSON.message + "!");
+        });
+        ajax.set('province',selectedProvince);
+        ajax.start();
+    }
+
+    /**
+     * 全国通用
+     */
+    function scopeOfApplication1() {
+        $("#storeSelect").hide();
+        $("#citySelect").hide();
+    }
+    /**
+     * 指定城市
+     */
+    function scopeOfApplication2() {
+        $("#storeSelect").hide();
+        $("#citySelect").show();
+    }
+    /**
+     * 指定门店
+     */
+    function scopeOfApplication3() {
+        $("#storeSelect").show();
+        $("#citySelect").hide();
+    }
+
+
+
+
+    var vue2 = new Vue({
+        el: '#app',
+        data: {
+            autoUpload: true,//自动上传
+            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
+            dialogVisible: false
+        },
+        methods: {
+            handleAvatarSuccess(res, file) {
+                TCarInfoDlg.goodsPicArray.push(file);
+            },
+            beforeAvatarUpload(file) {
+                const isLt2M = file.size / 1024 / 1024 < 10;
+                if (!isLt2M) {
+                    this.$message.error('上传图片大小不能超过 10MB!');
+                }
+                return isLt2M;
+            },
+            handleRemove(file, fileList) {
+                couponInfoDlg.goodsPicArray = couponInfoDlg.goodsPicArray.filter(item => {
+                    return item.uid != file.uid;
+                });
+            },
+        },
+        created() {
+        },
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js b/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js
index 7a49ada..76a6b78 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js
@@ -317,6 +317,8 @@
         success: function(response) {
             if (response == "5001"){
                 Feng.error("当前课包预约人数已满!")
+            }else if(response == "5002"){
+                Feng.error("剩余课时不足,无法购买!")
             }else{
                 Feng.success("上架成功!");
                 TCompetition.close();
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/dataStatistics/tSite.js b/cloud-server-management/src/main/webapp/static/modular/system/dataStatistics/tSite.js
index f07e023..468e185 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/dataStatistics/tSite.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/dataStatistics/tSite.js
@@ -92,7 +92,3 @@
     TSite.search();
 };
 
-
-$(function () {
-
-});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/gameData/gameData.js b/cloud-server-management/src/main/webapp/static/modular/system/gameData/gameData.js
new file mode 100644
index 0000000..cba4875
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/gameData/gameData.js
@@ -0,0 +1,99 @@
+/**
+ * 跨城站点管理管理初始化
+ */
+var TSite = {
+    id: "TSiteTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1,
+    picture:"",
+    fileUrl:"",
+    img:"",
+    plan:"",
+    goodsPicArray:[],
+    validateFields: {
+    }
+};
+var TSite1 = {
+    id: "TSiteTable1",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1,
+    picture:"",
+    fileUrl:"",
+    img:"",
+    plan:"",
+    goodsPicArray:[],
+    validateFields: {
+    }
+};
+/**
+ * 初始化表格的列
+ */
+TSite.initColumn = function () {
+    return [
+        {field: 'selectItem', checkbox: true},
+        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '序号', field: 'number', visible:true, align: 'center', valign: 'middle'},
+        {title: '昵称', field: 'name', visible: true, align: 'center', valign: 'middle',},
+        {title: '成绩', field: 'score', visible: true, align: 'center', valign: 'middle'},
+    ];
+};
+/**
+ * 初始化表格的列
+ */
+TSite1.initColumn = function () {
+    return [
+        {field: 'selectItem', checkbox: true},
+        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '序号', field: 'number', visible:true, align: 'center', valign: 'middle'},
+        {title: '昵称', field: 'name', visible: true, align: 'center', valign: 'middle',},
+        {title: '成绩', field: 'score', visible: true, align: 'center', valign: 'middle'},
+    ];
+};
+
+/**
+ * 关闭此对话框
+ */
+TSite.close = function() {
+    parent.layer.close(window.parent.TSite.layerIndex);
+}
+
+TSite.search3 = function () {
+    var queryData = {};
+    queryData['province'] = $("#con3").val();
+    queryData['city'] = $("#cCode3").val();
+    queryData['siteTypeId'] = $("#site3").val();
+    TSite.table.refresh({query: queryData});
+};
+TSite1.search4 = function () {
+    var queryData = {};
+    queryData['province'] = $("#con4").val();
+    queryData['city'] = $("#cCode4").val();
+    queryData['siteTypeId'] = $("#site4").val();
+    TSite.table.refresh({query: queryData});
+};
+
+TSite.resetSearch = function () {
+    $("#pCode").val("");
+    $("#cCode").val("");
+    $("#store").val("");
+    $("#sCode").val("");
+    $("#storeName").val("");
+    $("#siteTypeId").val("");
+    $("#name").val("");
+    $("#insuranceEndTime").val("");
+    TSite.search();
+};
+
+$(function () {
+    var defaultColunms = TSite.initColumn();
+    var table = new BSTable(TSite.id, "/tSite/listAll", defaultColunms);
+    table.setPaginationType("client");
+    TSite.table = table.init();
+
+    var defaultColunms1 = TSite1.initColumn();
+    var table1 = new BSTable(TSite1.id, "/tSite/listAll", defaultColunms1);
+    table1.setPaginationType("client");
+    TSite1.table = table1.init();
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/gateData/gateData.js b/cloud-server-management/src/main/webapp/static/modular/system/gateData/gateData.js
new file mode 100644
index 0000000..03934ba
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/gateData/gateData.js
@@ -0,0 +1,52 @@
+/**
+ * 跨城站点管理管理初始化
+ */
+var TSite = {
+    id: "TSiteTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TSite.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '场地区域名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
+        {title: '入场人次', field: 'number', visible: true, align: 'center', valign: 'middle'}
+    ];
+};
+
+
+
+/**
+ * 查询跨城站点管理列表
+ */
+TSite.search = function () {
+    var queryData = {};
+    queryData['insertTime'] = $("#insertTime").val();
+    queryData['name'] = $("#name").val();
+    queryData['insertUser'] = $("#insertUser").val();
+    queryData['city'] = $("#city").val();
+    queryData['state'] = $("#state").val();
+    TSite.table.refresh({query: queryData});
+};
+
+TSite.resetSearch = function () {
+    $("#insertTime").val("");
+    $("#name").val("");
+    $("#insertUser").val("");
+    $("#city").val("");
+    $("#state").val("");
+    TSite.search();
+};
+
+$(function () {
+    var defaultColunms = TSite.initColumn();
+    var table = new BSTable(TSite.id, "/gateData/list", defaultColunms);
+    table.setPaginationType("client");
+    TSite.table = table.init();
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js b/cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js
new file mode 100644
index 0000000..57eb903
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js
@@ -0,0 +1,240 @@
+/**
+ * 跨城站点管理管理初始化
+ */
+var TSite = {
+    id: "TSiteTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1,
+    picture:"",
+    fileUrl:"",
+    img:"",
+    plan:"",
+    goodsPicArray:[],
+    validateFields: {
+    }
+};
+/**
+ * 初始化表格的列
+ */
+TSite.initColumn = function () {
+    return [
+        {field: 'selectItem', checkbox: true},
+        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '运营商名称', field: 'name', visible: true, align: 'center', valign: 'middle',width:'20%',
+
+        },
+        {title: '管理员姓名', field: 'userName', visible: true, align: 'center', valign: 'middle',
+        },
+        {title: '管理员手机号', field: 'phone', visible: true, align: 'center', valign: 'middle'},
+        {title: '管理区域', field: 'type', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return {1:"全国",2:"指定区域"}[data]
+            }
+        },
+        {title: '商户绑定状态', field: 'status', visible: true, align: 'center', valign: 'middle',
+            formatter: function (data,row) {
+                var btn = "";
+                if(data==1) {
+                    var str = '<button class="btn btn-outline btn-primary" onclick="TSite.bindOperator('+row.id+')" >去绑定</button>'
+                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>']
+                }else{
+                    var str = '<h3>已绑定</h3>'
+                    btn = [str]
+                }
+                return btn;
+            }
+        },
+        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return {1:"正常",2:"冻结",3:"删除"}[data]
+            }
+        },
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TSite.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TSite.seItem = selected[0];
+        return true;
+    }
+};
+TSite.bindOperator = function (e) {
+    var index = layer.open({
+        type: 2,
+        title: "认证",
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/operatorUser/proportion/' + e
+    });
+    this.layerIndex = index;
+
+};
+/**
+ * 上架
+ */
+TSite.onShelf = function () {
+    if (this.check()){
+        var selected = $('#' + this.id).bootstrapTable('getSelections');
+        const data1 = {
+            ids:[],
+            state:null
+        };
+        selected.forEach(function(obj) {
+            console.log("查看选中")
+            console.log(obj)
+            var id = obj.id;
+            data1.ids.push(id);
+        });
+        data1.state = 1;
+
+        $.ajax({
+            url: Feng.ctxPath + "/operator/changeState",
+            type: "POST",
+            contentType: "application/json", // 设置请求头的 Content-Type
+            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+            success: function(response) {
+                Feng.success("解冻成功!");
+                TSite.search();
+            },
+            error: function(xhr, status, error) {
+                var errorMessage = xhr.responseText ? xhr.responseText : "解冻失败!";
+            }
+        });
+    }
+};
+
+/**
+ * 下架
+ */
+TSite.offShelf = function () {
+    if (this.check()){
+        var selected = $('#' + this.id).bootstrapTable('getSelections');
+        const data1 = {
+            ids:[],
+            state:null
+        };
+        selected.forEach(function(obj) {
+            var id = obj.id;
+            data1.ids.push(id);
+        });
+        data1.state = 2;
+        $.ajax({
+            url: Feng.ctxPath + "/operator/changeState",
+            type: "POST",
+            contentType: "application/json", // 设置请求头的 Content-Type
+            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+            success: function(response) {
+                Feng.success("冻结成功!");
+                TSite.search();
+            },
+            error: function(xhr, status, error) {
+                var errorMessage = xhr.responseText ? xhr.responseText : "冻结失败!";
+            }
+        });
+    }
+};
+
+
+/**
+ * 跳转添加运营商页面
+ */
+TSite.openAddTSite = function () {
+
+    var index = layer.open({
+        type: 2,
+        title: "添加运营商",
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/operator/add'
+    });
+    this.layerIndex = index;
+};
+/**
+ * 打开场地管理查看详情
+ */
+TSite.openInfo = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length >1 ){
+        Feng.info("只能选择一个问题进行编辑!");
+    }else {
+        if (this.check()) {
+            var index = layer.open({
+                type: 2,
+                title: "编辑运营商",
+                area: ['100%', '100%'], //宽高
+                fix: false, //不固定
+                maxmin: true,
+                content: Feng.ctxPath + '/operator/update/' + TSite.seItem.id
+            });
+            this.layerIndex = index;
+        }
+    }
+};
+TSite.reload = function () {
+    if (this.check()) {
+        var selected = $('#' + this.id).bootstrapTable('getSelections');
+        const data1 = {
+            ids:[],
+            password:null
+        };
+        selected.forEach(function(obj) {
+            var id = obj.id;
+            data1.ids.push(id);
+        });
+        data1.state = 2;
+        var operation = function() {
+            $.ajax({
+                url: Feng.ctxPath + "/operator/pwd",
+                type: "POST",
+                contentType: "application/json", // 设置请求头的 Content-Type
+                data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+                success: function (response) {
+                    TSite.search();
+                },
+                error: function (xhr, status, error) {
+                    var errorMessage = xhr.responseText ? xhr.responseText : "冻结失败!";
+                }
+            });
+        }
+
+        Feng.confirm("确认重置密码?重置后密码为:a123456", operation);
+    }
+};
+/**
+ * 关闭此对话框
+ */
+TSite.close = function() {
+    parent.layer.close(window.parent.TSite.layerIndex);
+};
+
+TSite.search = function () {
+    var queryData = {};
+    queryData['userName']  = $("#name").val();
+    queryData['phone'] =$("#phone").val();
+    queryData['type'] =$("#type").val();
+    TSite.table.refresh({query: queryData});
+};
+
+TSite.resetSearch = function () {
+    $("#name").val("");
+    $("#phone").val("");
+    $("#type").val("");
+    TSite.search();
+};
+
+$(function () {
+    var defaultColunms = TSite.initColumn();
+    var table = new BSTable(TSite.id, "/operator/listAll", defaultColunms);
+    table.setPaginationType("server");
+    TSite.table = table.init();
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/operator/operator_add.js b/cloud-server-management/src/main/webapp/static/modular/system/operator/operator_add.js
new file mode 100644
index 0000000..79c70b1
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/operator/operator_add.js
@@ -0,0 +1,226 @@
+/**
+ * 跨城站点管理管理初始化
+ */
+var TSite = {
+    id: "TSiteTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1,
+    picture:"",
+    fileUrl:"",
+    img:"",
+    plan:"",
+    goodsPicArray:[],
+    validateFields: {
+    }
+};
+//删除数据
+function deleteSub(e) {
+    $(e).parent().parent().remove();
+}
+TSite.addArea = function () {
+    var province = $('#pCode option:selected').text();
+    var provinceCode = $("#pCode").val();
+    var city = $('#cCode option:selected').text();
+    var cityCode = $("#cCode").val();
+    var areaType = $("input[name='areaType']:checked").val();
+    if (2 == areaType){
+        if ("" == $("#pCode").val() || null == $("#pCode").val()){
+            Feng.error("请选择省");
+            return;
+        }
+    }
+    var subArr=[];
+    $(".areaValueClass").each(function () {
+        subArr.push({
+            province:$(this).find("input[name*='provinceName']").val(),
+            city:$(this).find("input[name*='cityName']").val(),
+            areaType:areaType,
+        })
+    });
+    //判断所选省市是否存在
+    if (city=="选择市"){
+        console.log("没有选择市")
+        city = "";
+    }
+    for(var i=0;i<subArr.length;i++){
+        var p = subArr[i].province;
+        var c = subArr[i].city;
+        console.log(c)
+        console.log(city)
+        console.log(province)
+        console.log(p)
+        console.log(provinceCode)
+        if (city==""){
+            if (c==""){
+                if (provinceCode == p) {
+                    Feng.info("当前省已添加");
+                    return;
+                }
+            }
+        }else {
+            if (cityCode == c){
+                Feng.info("当前所选省市已添加");
+                return;
+            }
+        }
+        if (provinceCode == p){
+            if (c == ""){
+                Feng.info("当前省已添加");
+                return;
+            }
+            if (city == ""){
+                Feng.info("当前省已添加");
+                return;
+            }
+        }
+    }
+    var str = '<tr class="areaValueClass">' +
+        '<td style="text-align: center;"><input type="hidden" id="provinceValue" name="provinceName" value="'+provinceCode+'"><input type="hidden" id="provinceValue" name="provinceCode" value="'+province+'">'+province+'</td>' +
+        '<td style="text-align: center;"><input type="hidden" id="cityValue" name="cityName" value="'+cityCode+'"><input type="hidden" id="provinceValue" name="cityCode" value="'+city+'">'+city+'</td>' +
+        '<td style="text-align: center;"><button onclick="deleteSub(this)">移除</button></td></tr>';
+    $("#areaValue").append(str);
+};
+
+/**
+ * 类型改变执行
+ * @param e
+ */
+TSite.areaTypeClick = function (e) {
+    if (1 == e){//全国
+        $("#areaType1Div").hide();
+        $("#areaType2Div").hide();
+        $("#data").hide();
+        $("#ensure").hide();
+    } else if (2 == e){
+        $("#areaType2Div").show();
+        $("#data").show();
+        $("#areaType1Div").show();
+        $("#ensure").show();
+
+    }
+};
+
+TSite.oneChange = function (e) {
+    console.log("进入!")
+    var oneId=$(e).val();
+    console.log(oneId)
+    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){
+        var content='<option value="">选择市</option>';
+        $.each(data, function(k,v) {
+            content += "<option value='"+v.code+"'>"+v.name+"</option>";
+        });
+        $("#cCode").empty().append(content);
+    });
+    if (oneId==""){
+            var temp = '<option value="">请先选择省</option>';
+        $("#cCode").empty().append(temp);
+    }
+    ajax.set("oneId",oneId);
+    ajax.start();
+}
+
+/**
+ * 关闭此对话框
+ */
+TSite.close = function() {
+    parent.layer.close(window.parent.TSite.layerIndex);
+}
+
+
+
+TSite.addSubmit = function(){
+    var areaType = $("input[name='areaType']:checked").val();
+    if ("" == $("#name").val() || null == $("#name").val()){
+        Feng.error("请输入运营商名称");
+        return;
+    }
+    if ("" == $("#userName").val() || null == $("#userName").val()){
+        Feng.error("请输入管理员姓名");
+        return;
+    }
+    if ("" == $("#phone").val() || null == $("#phone").val()){
+        Feng.error("请输入管理员电话");
+        return;
+    }
+    if (areaType == 2){
+        var comArr=[];
+        $(".areaValueClass").each(function () {
+            comArr.push({
+                provinceCode:$(this).find("input[name*='provinceName']").val(),
+                province:$(this).find("input[name*='provinceCode']").val(),
+                cityCode:$(this).find("input[name*='cityName']").val(),
+                city:$(this).find("input[name*='cityCode']").val(),
+                areaType:areaType,
+            })
+            console.log("循环看看")
+            console.log($(this).find("input[name*='provinceName']").text())
+            console.log($(this).find("input[name*='cityName']").text())
+        });
+        if(comArr.length <= 0){
+            Feng.error("请至少添加一个管理地区");
+            return;
+        }
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/operator/addOperator", function(data){
+        Feng.success("操作成功!");
+        window.parent.TSite.table.refresh();
+        TSite.close();
+    },function(data){
+        Feng.error("操作失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("name",$("#name").val());
+    ajax.set("userName",$("#userName").val());
+    ajax.set("phone",$("#phone").val());
+    ajax.set("type",areaType);
+    ajax.set("comArr",JSON.stringify(comArr));
+    ajax.start();
+};
+
+TSite.updateSubmit = function(){
+    var areaType = $("input[name='areaType']:checked").val();
+    if ("" == $("#name").val() || null == $("#name").val()){
+        Feng.error("请输入运营商名称");
+        return;
+    }
+    if ("" == $("#userName").val() || null == $("#userName").val()){
+        Feng.error("请输入管理员姓名");
+        return;
+    }
+    if ("" == $("#phone").val() || null == $("#phone").val()){
+        Feng.error("请输入管理员电话");
+        return;
+    }
+    var comArr=[];
+    if (areaType == 2){
+        $(".areaValueClass").each(function () {
+            comArr.push({
+                provinceCode:$(this).find("input[name*='provinceName']").val(),
+                province:$(this).find("input[name*='provinceCode']").val(),
+                cityCode:$(this).find("input[name*='cityName']").val(),
+                city:$(this).find("input[name*='cityCode']").val(),
+                areaType:areaType,
+            })
+        });
+        if(comArr.length <= 0){
+            Feng.error("请至少添加一个管理地区");
+            return;
+        }
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/operator/updateOperator", function(data){
+        Feng.success("操作成功!");
+        window.parent.TSite.table.refresh();
+        TSite.close();
+    },function(data){
+        Feng.error("操作失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("id",$("#id").val());
+    ajax.set("name",$("#name").val());
+    ajax.set("userName",$("#userName").val());
+    ajax.set("phone",$("#phone").val());
+    ajax.set("type",areaType);
+    ajax.set("comArr",JSON.stringify(comArr));
+    ajax.start();
+};
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js b/cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js
new file mode 100644
index 0000000..fab95cf
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js
@@ -0,0 +1,228 @@
+/**
+ * 跨城站点管理管理初始化
+ */
+var TSite = {
+    id: "TSiteTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1,
+    picture:"",
+    fileUrl:"",
+    img:"",
+    plan:"",
+    goodsPicArray:[],
+    validateFields: {
+    }
+};
+/**
+ * 初始化表格的列
+ */
+TSite.initColumn = function () {
+    return [
+        {field: 'selectItem', checkbox: true},
+        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '所在城市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle',width:'20%',},
+        {title: '管理员姓名', field: 'userName', visible: true, align: 'center', valign: 'middle',},
+        {title: '管理员手机号', field: 'phone', visible: true, align: 'center', valign: 'middle'},
+        {title: '认证平台', field: 'platform', visible: true, align: 'center', valign: 'middle'},
+        {title: '认证类型', field: 'type', visible: true, align: 'center', valign: 'middle'},
+        {title: '分账比例', field: 'proportion', visible: true, align: 'center', valign: 'middle'},
+        {title: '审核状态', field: 'state', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return {1:"待审核",2:"审核中",3:"已通过",4:"已拒绝"}[data]
+            }
+        },
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TSite.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TSite.seItem = selected[0];
+        return true;
+    }
+};
+/**
+ * 分账比例
+ */
+TSite.openAddTSite = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length >1 ){
+        Feng.info("只能选择一个运营商商户设置分账比例!");
+    }else {
+        if (this.check()) {
+            var index = layer.load(1,{
+                type: 1
+                , title: '添加分账比例'
+                , area: ['50%', '50%']
+                , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
+                , id: 'layerDemo' //防止重复弹出cge
+                , content: '<div class="form-horizontal">' +
+                    '                    <div class="col-sm-11" >' +
+                    '                    <div class="col-sm-11">' +
+                    '                        <div class="form-group">\n' +
+                    '                            <label class="col-sm-3 control-label">支付宝分账比例:</label>\n' +
+                    '                         <div class="col-sm-9">\n' +
+                    '                                  <input class="form-control" placeholder="请输入分账比例" type="text" id="alipay"> '+
+                    '                            </div>\n' +
+                    '                        </div>\n' +
+                    '                        <div class="form-group">\n' +
+                    '                            <label class="col-sm-3 control-label">微信分账比例:</label>\n' +
+                    '                         <div class="col-sm-9">\n' +
+                    '                                  <input class="form-control" placeholder="请输入分账比例" type="text" id="wechat"> '+
+                    '                            </div>\n' +
+                    '                        </div>\n' +
+                    '                       </div>' +
+                    '                   </div>' +
+                    '</div>'
+                , btn: ['关闭', '保存']
+                , btnAlign: 'c' //按钮居中
+                , shade:  0.5 //不显示遮罩
+                ,load:1
+                , yes: function () {
+                    layer.closeAll();
+                },
+                btn2:function () {
+                    let wechat = $("#wechat").val()
+                    let alipay = $("#alipay").val()
+                    if(alipay==''){
+                        Feng.info("请输入支付宝分账比例")
+                        return false;
+                    }
+                    if(wechat==''){
+                        Feng.info("请输入微信分账比例")
+                        return false;
+                    }
+                    var ajax = new $ax(Feng.ctxPath + "/operatorUser/addProportion", function (data) {
+                            Feng.success("设置成功!");
+                            window.location.reload();
+                            window.parent.layer.closeAll();
+                    }, function (data) {
+                        Feng.error("操作失败!")
+                    });
+                    ajax.set("id", TSite.seItem.id);
+                    ajax.set("alipay", alipay);
+                    ajax.set("wechat", wechat);
+                    ajax.start();
+                    layer.closeAll();
+                }
+            });
+            this.layerIndex = index;
+        }
+    }
+
+};
+function UploadFileFn(){
+    $('#upFile').click();
+}
+TSite.oneChange = function (e) {
+    console.log("进入!")
+    var oneId=$(e).val();
+    console.log(oneId)
+    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){
+        var content='<option value="">选择市</option>';
+        $.each(data, function(k,v) {
+            content += "<option value='"+v.code+"'>"+v.name+"</option>";
+        });
+        $("#cCode").empty().append(content);
+    });
+    if (oneId==""){
+        var temp = '<option value="">请先选择省</option>';
+        $("#cCode").empty().append(temp);
+    }
+    ajax.set("oneId",oneId);
+    ajax.start();
+}
+/**
+ * 打开场地管理查看详情
+ */
+TSite.openInfo = function () {
+    var index = layer.open({
+        type: 2,
+        title: "认证",
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/operatorUser/proportion/' + 5
+    });
+    this.layerIndex = index;
+
+};
+/**
+ * 关闭此对话框
+ */
+TSite.close = function() {
+    parent.layer.close(window.parent.TSite.layerIndex);
+};
+
+TSite.search = function () {
+    var queryData = {};
+    queryData['province']  = $("#pCode").val();
+    queryData['city'] =$("#cCode").val();
+    queryData['userName'] =$("#name").val();
+    queryData['phone'] =$("#phone").val();
+    queryData['platform'] =$("#platform").val();
+    queryData['type'] =$("#type").val();
+    queryData['state'] =$("#state").val();
+    TSite.table.refresh({query: queryData});
+};
+
+TSite.resetSearch = function () {
+    $("#pCode").val("");
+    $("#cCode").val("");
+    $("#name").val("");
+    $("#phone").val("");
+    $("#platform").val("");
+    $("#type").val("");
+    $("#state").val("");
+    TSite.search();
+};
+TSite.tradeYse = function () {
+    var tradeT = document.getElementById('tradeT');
+    var IDCardT = document.getElementById('IDCardT');
+    var tradeTime = document.getElementById('tradeTime');
+    var IDCardTime = document.getElementById('IDCardTime');
+// 判断是否被选中
+    if (tradeT.checked) {
+        tradeTime.disabled = true;
+    } else {
+        tradeTime.disabled = false;
+    }
+    if (IDCardT.checked) {
+        IDCardTime.disabled = true;
+    } else {
+        IDCardTime.disabled = false;
+    }
+};
+$(function () {
+    $("#benefit").hide()
+    var defaultColunms = TSite.initColumn();
+    var table = new BSTable(TSite.id, "/operatorUser/listAll", defaultColunms);
+    table.setPaginationType("server");
+    TSite.table = table.init();
+    var c1 = new $WebUpload("license");
+    var c2 = new $WebUpload("IDCardImg");
+    var c3 = new $WebUpload("IDCardImg1");
+    var c4 = new $WebUpload("bImg1");
+    var c5 = new $WebUpload("bImg2");
+    var c6 = new $WebUpload("Img");
+    c1.setUploadBarId("progressBar");
+    c1.init();
+    c2.setUploadBarId("progressBar");
+    c2.init();
+    c3.setUploadBarId("progressBar");
+    c3.init();
+    c4.setUploadBarId("progressBar");
+    c4.init();
+    c5.setUploadBarId("progressBar");
+    c5.init();
+    c6.setUploadBarId("progressBar");
+    c6.init();
+
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js b/cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js
index 8ad8019..47cbc02 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js
@@ -122,7 +122,6 @@
             layer.closeAll();
         }
     });
-
     this.layerIndex = index;
 };
 
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TStoreInfo.js b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TStoreInfo.js
index 9757e79..8956c84 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TStoreInfo.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tCoupon/TStoreInfo.js
@@ -145,8 +145,27 @@
     });
     ajax.set('province',selectedProvinceId);
     ajax.start();
+    citySelect.addEventListener("change", queryOperator);
 }
-
+// 获取运营商数据
+function queryOperator() {
+    var city = $('#city option:selected').text();
+    var citySelect = document.getElementById("operator");
+    citySelect.innerHTML = "";
+    var ajax = new $ax(Feng.ctxPath + "/tCouponManage/getOperator", function(data){
+        data.forEach(province => {
+            var option = document.createElement("option");
+            option.value = province.id;
+            option.text = province.name;
+            citySelect.appendChild(option);
+        });
+    },function(data){
+        console.log('data:',data)
+        Feng.error("获取失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set('city',city);
+    ajax.start();
+}
 $(function () {
     var defaultColunms = TStoreProvince.initColumn();
     var table = new BSTable(TStoreProvince.id, "/tCouponManage/storeDetailsOfSearch", defaultColunms);
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js
index aff59ba..f297923 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js
@@ -114,6 +114,18 @@
     });
     this.layerIndex = index;
 }
+// 门票管理页面的门店列表展示
+function storeList1(){
+    var index = layer.open({
+        type: 2,
+        title: '门店列表',
+        area: ['80%', '80%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tCouponManage/storeList'
+    });
+    this.layerIndex = index;
+}
 TCarInfoDlg.selecUserOpt = function (arrays){
     console.log(arrays)
     //获取所有的值
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/ticket/ticket.js b/cloud-server-management/src/main/webapp/static/modular/system/ticket/ticket.js
new file mode 100644
index 0000000..4d66d36
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/ticket/ticket.js
@@ -0,0 +1,270 @@
+/**
+ * 车辆管理管理初始化
+ */
+var TPointProducts = {
+    id: "TPointProductsTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+var language =1
+/**
+ * 初始化表格的列
+ */
+TPointProducts.initColumn = function () {
+    return [
+        {field: 'selectItem', checkbox: true},
+        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '商品名称', field: 'name', visible: true, align: 'center', valign: 'middle',
+            // formatter: function (value, row, index) {
+            //     return {1: "日卡票", 2: "月卡票", 3: "季卡票", 4: "年卡票"}[value]
+            // }
+        },
+        {title: '商品封面', field: 'cover', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row, index) {
+                value = typeof value == "undefined" || value == '' ? '/static/img/NoPIC.png' : value;
+                return '<img src="' + value + '" style="height: 100px;"/>'
+            }
+        },
+        {title:  '有效期', field: 'timeValue', visible: true, align: 'center', valign: 'middle'
+        },
+        {title: '兑换地点', field: 'useScope', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row, index) {
+                return {1: "全国", 2: "指定城市", 3: "指定门店"}[value]
+            }
+        },
+        {title: '用户人群', field: 'userPopulation', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row, index) {
+                return {1: "全部用户", 2: "年度会员", 3: "已有学员用户"}[value]
+            }
+        },
+        {title: '发放数量', field: 'quantityIssued', visible: true, align: 'center', valign: 'middle'
+        },
+        {title: '限领数量', field: 'pickUpQuantity', visible: true, align: 'center', valign: 'middle'
+        },
+        {title: '已领数量', field: 'hasPickQty', visible: true, align: 'center', valign: 'middle'
+        },
+        {title: '已兑换数量', field: 'hasExchangeQty', visible: true, align: 'center', valign: 'middle'
+        },
+        {title: '排序', field: 'sort', visible: true, align: 'center', valign: 'middle'},
+        {title: '活动状态', field: 'activeStatus', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row, index) {
+                return {1: "未开始", 2: "已开始", 3: "已结束"}[value]
+            }
+        },
+        {title: '可售状态', field: 'shelves', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row, index) {
+                return {1: "上架", 2: "下架"}[value]
+            }
+        },
+    ];
+};
+function currentTime(timestamp){
+    var time = timestamp + '';
+    if(time.length != 13){
+        timestamp = timestamp * 1000;
+    }
+    var date = new Date(timestamp);;
+    var Y = date.getFullYear() + '-';
+    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+
+    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+    var strDate = Y + M + D + h + m + s;
+    return strDate
+}
+
+function currentTime1(timestamp){
+    var time = timestamp + '';
+    if(time.length != 13){
+        timestamp = timestamp * 1000;
+    }
+    var date = new Date(timestamp);;
+    var Y = date.getFullYear() + '-';
+    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+
+    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+    var strDate = Y + M + D ;
+    return strDate
+}
+/**
+ * 检查是否选中
+ */
+TPointProducts.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+            Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TPointProducts.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 添加
+ */
+TPointProducts.openAddTPointProducts = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/ticket/add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 查看详情
+ */
+TPointProducts.detail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'编辑',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tGoods/tCity_update/' + TPointProducts.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 购买详情
+ */
+TPointProducts.payDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'购买详情',
+            area: ['70%', '70%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tGoods/tPay_detail/' + TPointProducts.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 编辑页面
+ */
+TPointProducts.openEditPage = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'编辑',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tGoods/tGoods_update/' + TPointProducts.seItem.id
+        });
+        this.layerIndex = index;
+    }
+}
+
+/**
+ * 上架处理
+ * @param m
+ */
+TPointProducts.onShelf = function () {
+    if (this.check()){
+        var selected = $('#' + this.id).bootstrapTable('getSelections');
+        const data1 = {
+            ids:[],
+            state:null
+        };
+        selected.forEach(function(obj) {
+            var id = obj.id;
+            data1.ids.push(id);
+        });
+        data1.state = 1;
+        $.ajax({
+            url: Feng.ctxPath + "/ticket/changeState",
+            type: "POST",
+            contentType: "application/json", // 设置请求头的 Content-Type
+            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+            success: function(response) {
+                Feng.success("上架成功!");
+                TPointProducts.search();
+            },
+            error: function(xhr, status, error) {
+                var errorMessage = xhr.responseText ? xhr.responseText : "修改失败!";
+                Feng.error("您的网络异常!");
+            }
+        });
+
+    }
+};
+/**
+ * 下架处理
+ * @param m
+ */
+TPointProducts.offShelf = function () {
+    if (this.check()){
+        var selected = $('#' + this.id).bootstrapTable('getSelections');
+        const data1 = {
+            ids:[],
+            state:null
+        };
+        selected.forEach(function(obj) {
+            var id = obj.id;
+            data1.ids.push(id);
+        });
+        data1.state = 2;
+        $.ajax({
+            url: Feng.ctxPath + "/ticket/changeState",
+            type: "POST",
+            contentType: "application/json", // 设置请求头的 Content-Type
+            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+            success: function(response) {
+                Feng.success("下架成功!");
+                TPointProducts.search();
+            },
+            error: function(xhr, status, error) {
+            }
+        });
+
+    }
+};
+
+
+/**
+ * 查询车辆管理列表
+ */
+TPointProducts.search = function () {
+    var queryData = {};
+    queryData['name'] = $("#name").val();
+    queryData['type'] = $("#type").val();
+    queryData['redemptionMethod'] = $("#redemptionMethod").val();
+    queryData['userPopulation'] = $("#userPopulation").val();
+    queryData['activeStatus'] = $("#activeStatus").val();
+    queryData['state'] = $("#state").val();
+    TPointProducts.table.refresh({query: queryData});
+};
+
+TPointProducts.resetSearch = function () {
+    $("#name").val("");
+    $("#type").val("");
+    $("#redemptionMethod").val("");
+    $("#userPopulation").val("");
+    $("#activeStatus").val("");
+    $("#state").val("");
+    TPointProducts.search();
+};
+
+$(function () {
+    var defaultColunms = TPointProducts.initColumn();
+    var table = new BSTable(TPointProducts.id, "/ticket/listAll", defaultColunms);
+    table.setPaginationType("client");
+    TPointProducts.table = table.init();
+});
\ No newline at end of file
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
index 220999a..5c0343c 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -62,7 +62,14 @@
     @Autowired
     private CityManagerClient cityManagerClient;
 
-
+    /**
+     * 获取所有场地
+     */
+    @RequestMapping("/base/site/getList")
+    @ResponseBody
+    public List<Site> getList(){
+        return siteService.list(new QueryWrapper<Site>().ne("state",3));
+    }
     /**
      * 获取场地预约记录
      */

--
Gitblit v1.7.1