From 1b6c4cd60f3882c400d30af367bd4c5960fbd4a1 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 10 四月 2023 15:02:24 +0800
Subject: [PATCH] 优化管理

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TComplaintMapper.xml            |    2 
 management/guns-admin/src/main/webapp/WEB-INF/view/blackboardBlank.html                                           |  958 +++++++++++++++++++++++++++++++++++++++++++--
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java  |    1 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java  |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml                |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java   |    3 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java   |    1 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java |  201 +++++++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/THomePageController.java |   60 ++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java         |    3 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRevenueMapper.xml              |    1 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java  |    1 
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUser.html                                  |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java    |    1 
 14 files changed, 1,173 insertions(+), 65 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java
index f23ebd0..7b9c86e 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java
@@ -175,6 +175,7 @@
         EntityWrapper<TAppUser> wrapper = tAppUserService.getUserListWrapper(createTime,nickname,phone,id,status);
         // 是否异常
         wrapper.eq("is_exception",2);
+        wrapper.orderBy("createTime",false);
         List<TAppUser> tAppUsers = tAppUserService.selectList(wrapper);
 
         return tAppUserService.getTAppUserResp(tAppUsers);
@@ -194,6 +195,7 @@
                           Integer status) {
         EntityWrapper<TAppUser> wrapper = tAppUserService.getUserListWrapper(createTime,nickname,phone,id,status);
         wrapper.ne("is_exception",2);
+        wrapper.orderBy("createTime",false);
         return tAppUserService.selectList(wrapper);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
index c1adc1a..f139140 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -297,6 +297,7 @@
     public Object list(String createTime,String phone,Integer status) {
         EntityWrapper<TDriver> wrapper = tDriverService.getPageList(createTime,phone,status);
         wrapper.ne("isException",2);
+        wrapper.orderBy("createTime",false);
         List<TDriver> tDrivers = tDriverService.selectList(wrapper);
         return tDriverService.getTDriverResp(tDrivers);
     }
@@ -318,6 +319,7 @@
     public Object exceptionList(String createTime,String phone,Integer status) {
         EntityWrapper<TDriver> wrapper = tDriverService.getPageList(createTime,phone,status);
         wrapper.eq("isException",2);
+        wrapper.orderBy("createTime",false);
         List<TDriver> tDrivers = tDriverService.selectList(wrapper);
         return tDriverService.getTDriverResp(tDrivers);
     }
@@ -336,6 +338,7 @@
         if(StringUtils.hasLength(driverId)){
             wrapper.eq("inviterId",driverId);
         }
+        wrapper.orderBy("createTime",false);
         List<TDriver> list = tDriverService.selectList(wrapper);
         List<TDriverCommissionResp> commissionResp = tDriverService.getTDriverCommissionResp(list);
         for (TDriverCommissionResp tDriverCommissionResp : commissionResp) {
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java
index 425112f..e14e2ac 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java
@@ -77,6 +77,7 @@
             wrapper.like("editionNo",editionNo);
         }
         wrapper.ne("status", StatusEnum.DELETE.getCode());
+        wrapper.orderBy("createTime",false);
         return tEditionService.selectList(wrapper);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/THomePageController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/THomePageController.java
index 99cbd75..0033e18 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/THomePageController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/THomePageController.java
@@ -59,6 +59,13 @@
      */
     @RequestMapping("/map")
     public String map(Integer agentId,Integer type,Model model) {
+
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
+
         // 查询所有代理商
         List<TAgent> agentList = tAgentService.selectList(new EntityWrapper<TAgent>()
                 .ne("status", StatusEnum.DELETE.getCode())
@@ -115,6 +122,11 @@
     @RequestMapping("/getMap")
     @ResponseBody
     public Object getMap(Integer agentId,Integer type,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         HashMap<String, Object> map = new HashMap<>();
         // 查询所有代理商
         List<TAgent> agentList = tAgentService.selectList(new EntityWrapper<TAgent>()
@@ -173,9 +185,13 @@
                     .eq("serverStatus", 2));
 
             map.put("onLineDriverCount",onLineDriver.size());
-            tOrderService.getDataStatisticsCountByIdsGetMap(ids,map);
+
+            List<TAgent> tAgentAllList = tAgentService.selectList(new EntityWrapper<TAgent>());
+            List<Integer> allIds = tAgentAllList.stream().map(TAgent::getId).collect(Collectors.toList());
+            tOrderService.getDataStatisticsCountByIdsGetMap(allIds,map);
+
             // 查询服务中的订单列表
-            List<TOrderServerResp> orderServerRespList = tOrderService.getDataStatisticsServerListByIds(ids);
+            List<TOrderServerResp> orderServerRespList = tOrderService.getDataStatisticsServerListByIds(allIds);
             // 查询司机
             for (TOrderServerResp tOrderServerResp : orderServerRespList) {
                 TDriver tDriver = tDriverService.selectById(tOrderServerResp.getDriverId());
@@ -184,7 +200,7 @@
             }
             map.put("serverList",orderServerRespList);
             // 查询今天所有订单
-            List<TOrder> allList = tOrderService.getDataStatisticsAllListByIds(ids,type);
+            List<TOrder> allList = tOrderService.getDataStatisticsAllListByIds(allIds,type);
             List<List<String>> list = new ArrayList<>(allList.size());
             for (TOrder tOrder : allList) {
                 List<String> obj = new ArrayList<>(3);
@@ -215,6 +231,11 @@
     @RequestMapping("/getServerOrder")
     @ResponseBody
     public Object getServerOrder(Integer agentId,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         HashMap<String, Object> map = new HashMap<>();
         if(Objects.nonNull(agentId)){
             // 查询服务中的订单列表
@@ -227,8 +248,7 @@
             }
             map.put("serverList",orderServerRespList);
         }else {
-            List<TAgent> tAgentList = tAgentService.selectList(new EntityWrapper<TAgent>()
-                    .eq("provinceCode", "440000"));
+            List<TAgent> tAgentList = tAgentService.selectList(new EntityWrapper<TAgent>());
             List<Integer> ids = tAgentList.stream().map(TAgent::getId).collect(Collectors.toList());
             // 查询服务中的订单列表
             List<TOrderServerResp> orderServerRespList = tOrderService.getDataStatisticsServerListByIds(ids);
@@ -248,6 +268,11 @@
      */
     @RequestMapping("/statistics")
     public String statistics(Integer agentId,String dayDate,String yearDate,String monthDate,Integer type,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         if(Objects.isNull(type)){
             type = 1;
         }
@@ -317,6 +342,11 @@
     @RequestMapping("/statisticsByAgentId")
     @ResponseBody
     public Map<String, Object> statisticsByAgentId(Integer agentId, String dayDate, String yearDate, String monthDate, Integer type, Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         Map<String, Object> map = new HashMap<>();
         if(Objects.nonNull(agentId)){
             // 统计代理商
@@ -350,6 +380,11 @@
     @RequestMapping("/statisticsMonthByAgentId")
     @ResponseBody
     public Map<String, Object> statisticsMonthByAgentId(Integer agentId, String dayDate,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         dayDate = new SimpleDateFormat("yyyy-MM").format(new Date());
         Map<String, Object> map = new HashMap<>();
         if(Objects.nonNull(agentId)){
@@ -372,6 +407,11 @@
     @RequestMapping("/statisticsYearByAgentId")
     @ResponseBody
     public Map<String, Object> statisticsYearByAgentId(Integer agentId, String yearDate,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         if(!StringUtils.hasLength(yearDate)){
             yearDate = new SimpleDateFormat("yyyy").format(new Date());
         }
@@ -395,6 +435,11 @@
     @RequestMapping("/statisticsOrderByAgentId")
     @ResponseBody
     public Map<String, Object> statisticsOrderByAgentId(Integer agentId, String monthDate,Integer type,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         if(Objects.isNull(type)){
             type = 1;
         }
@@ -434,6 +479,11 @@
     @RequestMapping("/statisticsDriverByAgentId")
     @ResponseBody
     public Map<String, Object> statisticsDriverByAgentId(Integer agentId,Model model) {
+        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer roleType = ShiroKit.getUser().getRoleType();
+        if(roleType == 3 && Objects.nonNull(objectId)){
+            agentId = objectId;
+        }
         Map<String, Object> map = new HashMap<>();
         if(Objects.nonNull(agentId)){
             // 统计司机数
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
index 31bf8a2..dd26dcb 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
@@ -150,6 +150,7 @@
         if(Objects.nonNull(userId)){
             wrapper.eq("user_id",userId);
         }
+        wrapper.orderBy("createTime",false);
         return tOrderService.selectList(wrapper);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java
index de7f098..37d17bb 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java
@@ -83,6 +83,7 @@
             wrapper.between("createTime",startTime,endTime);
         }
         wrapper.ne("status", StatusEnum.DELETE.getCode());
+        wrapper.orderBy("createTime",false);
         return tYouTuiService.selectList(wrapper);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java
index 4e8a24a..6b07807 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java
@@ -3,10 +3,14 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.stylefeng.guns.core.base.controller.BaseController;
 import com.stylefeng.guns.core.shiro.ShiroKit;
-import com.stylefeng.guns.core.util.DateUtil;
 import com.stylefeng.guns.core.util.SinataUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.controller.resp.TOrderServerResp;
+import com.stylefeng.guns.modular.system.enums.StatusEnum;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
+import com.stylefeng.guns.modular.system.util.DateUtil;
+import com.stylefeng.guns.modular.system.util.RedisUtil;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -17,7 +21,9 @@
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 总览信息
@@ -43,6 +49,18 @@
 
     @Autowired
     private ITCompanyService companyService;
+    @Autowired
+    private ITAgentService tAgentService;
+    @Autowired
+    private ITDriverService tDriverService;
+    @Autowired
+    private ITOrderService tOrderService;
+    @Autowired
+    private ITRevenueService tRevenueService;
+    @Autowired
+    private ITDriverWorkService tDriverWorkService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     private ResultUtil resultUtil;
 
@@ -50,7 +68,7 @@
      * 跳转到黑板
      */
     @RequestMapping("")
-    public String blackboard(Model model,Integer type) {
+    public String blackboard(Model model,Integer type,Integer agentId,String dayDate,String yearDate,String monthDate) {
         //查询当前用户是否有"首页"菜单的权限
         Integer id = ShiroKit.getUser().getId();
         User user = userService.selectById(id);
@@ -59,17 +77,178 @@
             return "/home.html";
         } else {
             //查询登录次数
-            int count = loginLogService.selectCount(new EntityWrapper<LoginLog>().eq("userid", ShiroKit.getUser().getId()));
-            model.addAttribute("loginNum", count);
+//            int count = loginLogService.selectCount(new EntityWrapper<LoginLog>().eq("userid", ShiroKit.getUser().getId()));
+//            model.addAttribute("loginNum", count);
+//
+//            Role role = roleService.selectById(user.getRoleid());
+//            Dept dept = deptService.selectById(user.getDeptid());
+//
+//            model.addAttribute("deptName",dept==null?"顶级":dept.getFullname());
+//            model.addAttribute("roleName", role.getName());
+//            model.addAttribute("userName", user.getName());
+//            model.addAttribute("date", DateUtil.getTime(new Date()));
+//            model.addAttribute("user", user);
+            if(Objects.isNull(type)){
+                type = 1;
+            }
+            Integer objectId = ShiroKit.getUser().getObjectId();
+            Integer roleType = ShiroKit.getUser().getRoleType();
+            if(roleType != 1){
+                if(roleType == 3 && Objects.nonNull(objectId)){
+                    // 查询所有代理商
+                    List<TAgent> agentList = tAgentService.selectList(new EntityWrapper<TAgent>()
+                            .ne("status", StatusEnum.DELETE.getCode())
+                            .ne("principal","")
+                            .eq("id",objectId));
+                    model.addAttribute("agentList",agentList);
+                    agentId = objectId;
+                }
+            }else {
+                // 查询所有代理商
+                List<TAgent> agentList = tAgentService.selectList(new EntityWrapper<TAgent>()
+                        .ne("status", StatusEnum.DELETE.getCode())
+                        .ne("principal",""));
+                model.addAttribute("agentList",agentList);
+            }
+            model.addAttribute("txt",new SimpleDateFormat("yyyy年MM月dd日").format(new Date()) + DateUtil.getWeekDay(new Date()) + ",欢迎" +
+                    Objects.requireNonNull(ShiroKit.getUser()).getName() + "登录");
+            Map<String, Object> map = new HashMap<>();
+            if(Objects.nonNull(agentId)){
+                // 统计代理商
+                tAgentService.getDataStatistics(agentId,model,map);
 
-            Role role = roleService.selectById(user.getRoleid());
-            Dept dept = deptService.selectById(user.getDeptid());
+                // 统计司机数
+                tDriverService.getDataStatistics(agentId,model,map);
 
-            model.addAttribute("deptName",dept==null?"顶级":dept.getFullname());
-            model.addAttribute("roleName", role.getName());
-            model.addAttribute("userName", user.getName());
-            model.addAttribute("date", DateUtil.getTime(new Date()));
-            model.addAttribute("user", user);
+                // 订单统计本月
+                tOrderService.getStatisticsOrderByMonth(agentId,dayDate,model,map);
+
+                // 订单统计,每年按月份
+                tOrderService.getDataStatisticsByYear(agentId,yearDate,model,map);
+
+                // 业绩排名 performanceTable
+                if (1 == type){
+                    // 单量
+                    tOrderService.getDataStatisticsOrderCount(agentId,monthDate,model,map);
+                }else {
+                    // 收入、佣金
+                    tRevenueService.getDataStatisticsIncomeOrCommission(agentId,monthDate,type,model,map);
+                }
+
+                // 查询统计在线司机,待接单,服务中,已完成,已取消
+                List<TDriver> onLineDriver = tDriverService.selectList(new EntityWrapper<TDriver>()
+                        .eq("agentId", agentId)
+                        .eq("serverStatus", 2));
+                model.addAttribute("onLineDriverCount",onLineDriver.size());
+                tOrderService.getDataStatisticsCount(agentId,model);
+                // 查询服务中的订单列表
+                List<TOrderServerResp> orderServerRespList = tOrderService.getDataStatisticsServerList(agentId);
+                // 查询司机
+                for (TOrderServerResp tOrderServerResp : orderServerRespList) {
+                    TDriver tDriver = tDriverService.selectById(tOrderServerResp.getDriverId());
+                    tOrderServerResp.setAvatar(tDriver.getAvatar());
+                    tOrderServerResp.setDriverName(tDriver.getName());
+                }
+                model.addAttribute("serverList",orderServerRespList);
+                // 查询今天所有订单
+                List<TOrder> allList = tOrderService.getDataStatisticsAllList(agentId,type);
+                List<List<String>> list = new ArrayList<>(allList.size());
+                for (TOrder tOrder : allList) {
+                    List<String> obj = new ArrayList<>(3);
+                    obj.add(tOrder.getStartLng());
+                    obj.add(tOrder.getStartLat());
+                    obj.add(String.valueOf(tOrder.getState()));
+                    list.add(obj);
+                }
+                model.addAttribute("allList",list);
+                List<List<String>> list1 = new ArrayList<>(allList.size());
+                for (TDriver tDriver : onLineDriver) {
+                    List<String> obj = new ArrayList<>(3);
+                    String value = redisUtil.getValue("DRIVER" + tDriver.getId());
+                    if(ToolUtil.isEmpty(value)){
+                        continue;
+                    }
+                    obj.add(value.split(",")[0]);// 经度
+                    obj.add(value.split(",")[1]);// 纬度
+                    obj.add(String.valueOf(tDriver.getServerStatus()));// 服务状态
+                    list1.add(obj);
+                }
+                // 拿到所有在线司机地址
+                model.addAttribute("onLineDriver",list1);
+
+            }else {
+                // 查询广东全区域数据 查询广东所有的代理商
+                List<TAgent> tAgentList = tAgentService.selectList(new EntityWrapper<TAgent>()
+                        .eq("provinceCode", "440000"));
+                List<Integer> ids = tAgentList.stream().map(TAgent::getId).collect(Collectors.toList());
+                // 统计代理商
+                tAgentService.getDataStatisticsByIds(ids,model,map);
+
+                // 统计司机数
+                tDriverService.getDataStatisticsByIds(ids,model,map);
+
+                // 订单统计本月
+                tOrderService.getStatisticsOrderByMonthIds(ids,dayDate,model,map);
+
+                // 订单统计,每年按月份
+                tOrderService.getDataStatisticsByYearByIds(ids,yearDate,model,map);
+
+                // 业绩排名 performanceTable
+                if (1 == type){
+                    // 单量
+                    tOrderService.getDataStatisticsOrderCountByIds(ids,monthDate,model,map);
+                }else {
+                    // 收入、佣金
+                    tRevenueService.getDataStatisticsIncomeOrCommissionByIds(ids,monthDate,type,model,map);
+                }
+
+                // 查询统计在线司机,待接单,服务中,已完成,已取消
+                List<TDriver> onLineDriver = tDriverService.selectList(new EntityWrapper<TDriver>()
+                        .in("agentId", ids)
+                        .eq("serverStatus", 2));
+
+                model.addAttribute("onLineDriverCount",onLineDriver.size());
+
+                List<TAgent> tAgentAllList = tAgentService.selectList(new EntityWrapper<TAgent>());
+                List<Integer> allIds = tAgentAllList.stream().map(TAgent::getId).collect(Collectors.toList());
+
+                tOrderService.getDataStatisticsCountByIds(allIds,model);
+                // 查询服务中的订单列表 所有
+                List<TOrderServerResp> orderServerRespList = tOrderService.getDataStatisticsServerListByIds(allIds);
+                // 查询司机
+                for (TOrderServerResp tOrderServerResp : orderServerRespList) {
+                    TDriver tDriver = tDriverService.selectById(tOrderServerResp.getDriverId());
+                    tOrderServerResp.setAvatar(tDriver.getAvatar());
+                    tOrderServerResp.setDriverName(tDriver.getName());
+                }
+                model.addAttribute("serverList",orderServerRespList);
+                // 查询今天所有订单  所有
+                List<TOrder> allList = tOrderService.getDataStatisticsAllListByIds(allIds,type);
+                List<List<String>> list = new ArrayList<>(allList.size());
+                for (TOrder tOrder : allList) {
+                    List<String> obj = new ArrayList<>(3);
+                    obj.add(tOrder.getStartLng());
+                    obj.add(tOrder.getStartLat());
+                    obj.add(String.valueOf(tOrder.getState()));
+                    list.add(obj);
+                }
+                model.addAttribute("allList",list);
+                List<List<String>> list1 = new ArrayList<>(allList.size());
+                for (TDriver tDriver : onLineDriver) {
+                    List<String> obj = new ArrayList<>(3);
+                    String value = redisUtil.getValue("DRIVER" + tDriver.getId());
+                    if(ToolUtil.isEmpty(value)){
+                        continue;
+                    }
+                    obj.add(value.split(",")[0]);// 经度
+                    obj.add(value.split(",")[1]);// 纬度
+                    obj.add(String.valueOf(tDriver.getServerStatus()));// 服务状态
+                    list1.add(obj);
+                }
+                // 拿到所有在线司机地址
+                model.addAttribute("onLineDriver",list1);
+
+            }
             return "/blackboardBlank.html";
         }
     }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TComplaintMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TComplaintMapper.xml
index d31d259..a53f68d 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TComplaintMapper.xml
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TComplaintMapper.xml
@@ -50,7 +50,7 @@
                 AND d.agentId = #{objectId}
             </if>
         </where>
-        ORDER BY c.state
+        ORDER BY c.state,c.createTime DESC
     </select>
 
 </mapper>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
index 1790a30..b610408 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderMapper.xml
@@ -109,7 +109,7 @@
                 AND o.agentId = #{objectId}
             </if>
         </where>
-        ORDER BY o.createTime
+        ORDER BY o.createTime DESC
     </select>
     <select id="getDataStatisticsByYear" resultType="com.stylefeng.guns.modular.system.controller.resp.DataStatisticsOrderYearResp">
         SELECT date_format(createTime, '%m') AS `month`,COUNT(id) AS orderCount
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRevenueMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRevenueMapper.xml
index 4d42051..d5a5bd9 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRevenueMapper.xml
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRevenueMapper.xml
@@ -101,6 +101,7 @@
                 AND t.agentId = #{objectId}
             </if>
         </where>
+        ORDER BY t.businessTime DESC
     </select>
     <select id="commissionOrBalanceDetail" resultType="com.stylefeng.guns.modular.system.controller.resp.RevenueExpenditureResp">
         SELECT
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java
index 3ba17f6..3a4712f 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java
@@ -77,6 +77,7 @@
             wrapper.eq("id",ShiroKit.getUser().getObjectId());
         }
         wrapper.ne("status", StatusEnum.DELETE.getCode());
+        wrapper.orderBy("createTime",false);
         return wrapper;
     }
 
@@ -107,7 +108,7 @@
                 && Objects.nonNull(order.getCouponId()) && order.getAgentId().equals(tAgent.getId())).collect(Collectors.toList());
         model.addAttribute("usedCoupon",usedCoupon.size());
         // 已使用优惠券金额求和,已使用优惠券id
-        List<Integer> usedCouponId = usedCoupon.stream().map(TOrder::getCouponId).collect(Collectors.toList());
+//        List<Integer> usedCouponId = usedCoupon.stream().map(TOrder::getCouponId).collect(Collectors.toList());
 //        if(CollectionUtils.isEmpty(usedCouponId)){
 //            // 如果优惠券为空
 //            model.addAttribute("couponPriceSum", BigDecimal.ZERO);
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java
index d5bb0f3..a82dbcc 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java
@@ -128,6 +128,7 @@
             wrapper.eq("status",status);
         }
         wrapper.ne("status", StatusEnum.DELETE.getCode());
+        wrapper.orderBy("createTime",false);
         // 判断代理商 分公司
         Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
         Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/blackboardBlank.html b/management/guns-admin/src/main/webapp/WEB-INF/view/blackboardBlank.html
index 816af83..f79cdf6 100644
--- a/management/guns-admin/src/main/webapp/WEB-INF/view/blackboardBlank.html
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/blackboardBlank.html
@@ -1,59 +1,927 @@
 @layout("/common/_container.html"){
-<style>
-	.contact-box {
-		background: unset;
-		border: unset;
-	}
-	strong{
-		line-height: 23px;
-	}
-</style>
-
-<div class="wrapper wrapper-content animated fadeInRight">
+<div class="container-fluid" style="padding: 0 !important;">
 	<div class="row">
-		<div class="col-sm-6">
-			<div class="contact-box">
-				<div class="col-sm-4">
-					<div class="text-center">
-						@if(user.avatar!=null){
-							<img alt="image" class="img-circle " src="${user.avatar}" style="width: 120px;height: 120px " >
-						@}
-						@if(user.avatar==null){
-							<img alt="image" class="img-circle " src="${ctxPath}/static/img/login-background.jpg" style="width: 120px;height: 120px" >
-						@}
+		<div class="col-sm-12">
+			<div class="row" style="border-style: none none solid; border-color: #e7eaec; border-width: 1px 0px;">
+				<ul class="breadcrumb" style="height: 45px; line-height: 45px; padding-left: 20px;">
+					<li><a href="#" class="statistics">运营数据总览</a></li>
+					<li><a href="#" class="map">车辆地图总览</a></li>
+					<li><a href="#" class="order">订单热点图</a></li>
+				</ul>
+			</div>
 
-						<div class="m-t-xs font-bold">${deptName}</div>
+			<div class="row content" id="statisticsDiv">
+				<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+					<div class="initialLevel col-sm-3 control-label form-group"  >
+						<span class="control-label" style="font-size: 30px">今天</span>
 					</div>
 				</div>
-				<div class="col-sm-8">
-					<h3><strong>${user.name}</strong></h3>
-					<p><i class="fa fa-user-secret"></i> ${roleName}</p>
-					<address>
-						<strong>E-mail:${user.email}</strong><br>
-						<strong>Tel:${user.phone}</strong><br>
-						<strong>登录次数:${loginNum}次</strong><br>
-						<strong>登录时间:${date}</strong><br>
-					</address>
+				<div class="initialLevel col-sm-12 control-label form-group" >
+					<div class="initialLevel col-sm-8 control-label form-group" style="cursor: pointer;text-align: left;" >
+						<label>${txt}</label>
+					</div>
+					<div class="initialLevel col-sm-4  form-group" style="cursor: pointer;text-align: right;" >
+						<label class="col-sm-2">代理商</label>
+						<select class="col-sm-2 " id="agentName" style="width: 200px;height: 33px" name="agentName">
+							<option value="">请选择</option>
+							@for(i in agentList){
+							<option value="${i.id}">${i.principal}</option>
+							@}
+						</select>
+					</div>
 				</div>
-				<div class="clearfix"></div>
+				<div class="initialLevel col-sm-12 control-label form-group" >
+					<div class="initialLevel col-sm-3 control-label form-group"  style="border: 1px solid;border-color: #c2ccd1;height: 130px">
+						<br/>
+						<div class="ibox float-e-margins">
+							<div class="col-sm-3" ><br/>
+								<label style="font-size: 16px">代理商</label><br/>
+								<img src="https://newok.oss-cn-shenzhen.aliyuncs.com/img/0e257d6fe5af4275919d039b40e30e19.png">
+							</div>
+							<div class="initialLevel col-sm-9 control-label form-group" >
+								<div>
+									<div class="col-sm-8" style="font-size: 16px">总数</div>
+									<div class="col-sm-1" id="agentTotal">${agentTotal}</div>
+								</div><br/>
+								<div id="pro1" style="height: 20px"></div><br/>
+								<div>
+									<div class="col-sm-8" style="font-size: 16px">近一月新增</div>
+									<div class="col-sm-1" id="agentMonthTotal">${agentMonthTotal}</div>
+								</div><br/>
+								<div id="pro2" style="height: 20px"></div>
+							</div>
+						</div>
+					</div>
+					<div class="col-sm-1"></div>
+					<div class="initialLevel col-sm-3 control-label form-group" style="border: 1px solid;border-color: #c2ccd1;height: 130px">
+						<br/>
+						<div class="ibox float-e-margins">
+							<div class="col-sm-3" ><br/>
+								<label style="font-size: 16px">司机</label><br/>
+								<img src="https://newok.oss-cn-shenzhen.aliyuncs.com/img/0e257d6fe5af4275919d039b40e30e19.png" >
+							</div>
+							<div class="initialLevel col-sm-9 control-label form-group" >
+								<div>
+									<div class="col-sm-8" style="font-size: 16px">总数</div>
+									<div class="col-sm-1" id="driverTotal">${driverTotal}</div>
+								</div><br/>
+								<div id="pro3" style="height: 20px"></div><br/>
+								<div>
+									<div class="col-sm-8" style="font-size: 16px">近一月新增</div>
+									<div class="col-sm-1" id="driverMonthTotal">${driverMonthTotal}</div>
+								</div><br/>
+								<div id="pro4" style="height: 20px"></div>
+							</div>
+						</div>
+					</div>
+					<div class="col-sm-1"></div>
+					<div class="initialLevel col-sm-4 control-label form-group" style="border: 1px solid;border-color: #c2ccd1;height: 600px"><br/>
+						<div>
+							<div class="initialLevel col-sm-4 control-label form-group" >
+								<label style="font-size: 20px">业绩排名</label>
+							</div>
+							<div class="col-sm-2"></div>
+							<div class="initialLevel col-sm-6 control-label form-group" >
+								<div style="font-size: 0px;width: 100%">
+									<button  id="btn1" onclick="queryOrderCount()">单量</button>
+									<button  id="btn2" onclick="queryIncome()">收入</button>
+									<button  id="btn3" onclick="queryCommission()">佣金</button>
+								</div>
+								<div>
+									<input type="text" class="form-control layer-date" placeholder="请选择"  id="insertTimeMonth">
+								</div>
+							</div>
+						</div>
+						<div id="performanceResp">
+						</div>
+					</div>
+				</div>
+				<div class="initialLevel col-sm-12 control-label form-group" ><br/><br/>
+					<div class="initialLevel col-sm-3 control-label form-group"  style="border: 1px solid;border-color: #c2ccd1;margin-top: -400px;height: 300px">
+						<br/>
+						<div class="col-sm-5" >
+							<label style="font-size: 16px">订单统计(本月)</label>
+						</div>
+						<div class="col-sm-3"></div>
+						<div class="initialLevel col-sm-4 control-label form-group" style="text-align: right" >
+						</div>
+						<div id="chart2" style="height: 90%;width: 100%"></div>
+					</div>
+					<div class="col-sm-1"></div>
+					<div class="initialLevel col-sm-3 control-label form-group" style="border: 1px solid;border-color: #c2ccd1;margin-top: -400px;margin-left: 25%;height: 300px">
+						<br/>
+						<div>
+							<div class="col-sm-5" >
+								<label style="font-size: 16px">订单统计(年份)</label>
+							</div>
+							<div class="col-sm-3"></div>
+							<div class="initialLevel col-sm-4 control-label form-group" style="text-align: right">
+								<input type="text" class="form-control layer-date" placeholder="请选择"  id="insertTime">
+							</div>
+						</div><br/>
+						<div id="chart1" style="height: 90%;width: 100%"></div>
+					</div>
+
+					<div class="initialLevel col-sm-4 control-label form-group" >
+					</div>
+
+				</div>
 			</div>
+
+			<div class="row content" id="mapDiv">
+				<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+					<div class="initialLevel col-sm-2 control-label form-group"  >
+						<select class="input-group" id="agentId" style="width: 200px;height: 34px" name="agentId">
+							<option value="">请选择代理商</option>
+							@for(i in agentList){
+							<option value="${i.id}">${i.principal}</option>
+							@}
+						</select>
+					</div>
+					<div class="initialLevel col-sm-2 control-label form-group" >
+						<#button name="搜索" icon="fa-search" clickFun="getData()"/>
+						<#button name="重置" icon="fa-trash" clickFun="reset()" space="true"/>
+					</div>
+				</div>
+				<div class="col-sm-12" >
+					<input hidden id="onLineDriver" value="${onLineDriver}">
+					<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+						<div class="initialLevel col-sm-12 control-label form-group"  >
+							<div id="container" ></div>
+							<div id="panel" ></div>
+						</div>
+					</div>
+
+					<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+						<div class="initialLevel col-sm-2 control-label form-group"  >
+							<label>在线司机:</label>
+							<label id="onLineDriverCount">${onLineDriverCount}</label>
+							<label>人</label>
+						</div>
+					</div>
+				</div>
+			</div>
+
+			<div class="row content" id="orderDiv">
+				<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+					<div class="initialLevel col-sm-2 control-label form-group"  >
+						<select class="input-group" id="orderType" style="width: 180px;height: 33px" name="orderType">
+							<option value="">请选择订单类型</option>
+							<option value="1">未接单</option>
+							<option value="2">服务中</option>
+							<option value="3">已完成</option>
+							<option value="4">已取消</option>
+						</select>
+					</div>
+					<div class="initialLevel col-sm-2 control-label form-group"  >
+						<#button name="搜索" icon="fa-search" clickFun="getDataOrder()"/>
+						<#button name="重置" icon="fa-trash" clickFun="resetOrder()" space="true"/>
+					</div>
+				</div>
+				<div class="col-sm-10" >
+					<input hidden id="allList" value="${allList}">
+					<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+						<div class="initialLevel col-sm-12 control-label form-group"  >
+							<div id="containerOrder" ></div>
+							<div id="panelOrder" ></div>
+						</div>
+					</div>
+
+					<div class="initialLevel col-sm-12 control-label form-group" style="cursor: pointer;text-align: left;">
+						<div class="initialLevel col-sm-2 control-label form-group"  >
+							<label>未接单</label>
+							<label id="pendingOrderCount">${pendingOrderCount}</label>
+						</div>
+						<div class="initialLevel col-sm-2 control-label form-group"  >
+							<label>服务中</label>
+							<label id="serverCount">${serverCount}</label>
+						</div>
+						<div class="initialLevel col-sm-2 control-label form-group"  >
+							<label>已完成</label>
+							<label id="finishCount">${finishCount}</label>
+						</div>
+						<div class="initialLevel col-sm-2 control-label form-group"  >
+							<label>已取消</label>
+							<label id="cancelCount">${cancelCount}</label>
+						</div>
+					</div>
+				</div>
+				<div class="col-sm-2">
+					<div class="ibox float-e-margins">
+						<div class="ibox-content">
+							<div class="form-horizontal" id="serverOrder" style="overflow:scroll;width: 100%; height:650px;">
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+
 		</div>
 	</div>
 </div>
-<script>
-    $(document).ready(function () {
-        $('.contact-box').each(function () {
-            animationHover(this, 'pulse');
-        });
-        $(".row").css({
-            height: window.innerHeight+"px",
-            display:"flex",
-            alignItems: "center",
-            justifyContent: "center",
-        })
-    });
-</script>
 
 <script type="text/javascript" src="http://tajs.qq.com/stats?sId=9051096" charset="UTF-8"></script>
+<script src="${ctxPath}/static/modular/system/tCoupon/tAgent_info.js"></script>
+<script src="${ctxPath}/static/modular/system/tCoupon/tAgent.js"></script>
+
+<link rel="stylesheet" href="${ctxPath}/static/css/plugins/lineProgressbar/jquery.lineProgressbar.css">
+<script src="${ctxPath}/static/js/plugins/lineProgressbar/jquery.lineProgressbar.js"></script>
+
+<script src="${ctxPath}/static/modular/system/tHomePage/tOrder.js"></script>
+<script src="https://webapi.amap.com/loader.js"></script>
+
+<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
+
+<style>
+	.name1{
+		width:25%;
+		font-size:2px
+	}
+	#container {
+		background-color: white;
+		height: 620px;
+		width: 100%;
+		flex-grow: initial;
+		flex-shrink: initial;
+		flex-basis: initial;
+		align-self: initial;
+	}
+	#panel {
+		position: fixed;
+		background-color: white;
+		max-height: 90%;
+		overflow-y: auto;
+		top: 10px;
+		right: 10px;
+		width: 280px;
+	}
+	#containerOrder {
+		background-color: white;
+		height: 620px;
+		width: 100%;
+		flex-grow: initial;
+		flex-shrink: initial;
+		flex-basis: initial;
+		align-self: initial;
+	}
+	#panelOrder {
+		position: fixed;
+		background-color: white;
+		max-height: 90%;
+		overflow-y: auto;
+		top: 10px;
+		right: 10px;
+		width: 280px;
+	}
+	#panel .amap-call {
+		background-color: #009cf9;
+		border-top-left-radius: 4px;
+		border-top-right-radius: 4px;
+	}
+	#panel .amap-lib-driving {
+		border-bottom-left-radius: 4px;
+		border-bottom-right-radius: 4px;
+		overflow: hidden;
+	}
+	img{
+		height: 30px;
+		width: 30px;
+	}
+	#chart1 {
+		position: relative;
+		height: 100vh;
+		overflow: hidden;
+	}
+	button{
+		width: 70px;
+		height: 25px;
+		margin-bottom: 5px;
+	}
+	#btn1{
+		border-top-left-radius: 5px;
+		border-bottom-left-radius: 5px;
+		font-size: 1px;
+	}
+	#btn2{
+		font-size: 1px;
+	}
+	#btn3{
+		border-top-right-radius: 5px;
+		border-bottom-right-radius: 5px;
+		font-size: 1px;
+	}
+	.orderTh{
+		text-align: center;
+	}
+	.orderTd{
+		width:100px;
+		height:40px
+	}
+</style>
+<script type="text/javascript">
+
+	$(function (){
+
+		$('#mapDiv').hide()
+		$('#orderDiv').hide()
+		loading()
+		orderByMonth(new Date().getMonth() + 1)
+		orderByYear(new Date().getFullYear())
+		queryOrderCount()
+
+		var first = $('.breadcrumb').children('li:first').children('a');
+		first.css({
+			'color': '#AB2626'
+		})
+		var className = first.attr('class');
+		$('.content').hide();
+		$('#' + className + 'Div').show();
+
+		$('.breadcrumb').find('a').on('click', function () {
+			$('.breadcrumb').children('li').each(function () {
+				$(this).children('a').removeAttr('style');
+			})
+
+			$(this).css({
+				'color': '#AB2626'
+			});
+			var className = $(this).attr('class');
+			$('.content').hide();
+			$('#' + className + "Div").show();
+			switch (className) {
+				case "statistics":
+					$('#mapDiv').hide()
+					$('#orderDiv').hide()
+					loading()
+					orderByMonth(new Date().getMonth() + 1)
+					orderByYear(new Date().getFullYear())
+					queryOrderCount()
+					break;
+				case "map":
+					map("");
+					break;
+				case "order":
+					mapOrder("");
+					getOrderData();
+					break;
+			}
+
+		})
+		// $('#mapDiv').hide()
+		// $('#orderDiv').hide()
+		// loading()
+		// orderByMonth(new Date().getMonth() + 1)
+		// orderByYear(new Date().getFullYear())
+		// queryOrderCount()
+	})
+
+	function selectYear(e){
+		orderByYear(e)
+	}
+	function selectMonth(e){
+		// 查询排行榜
+		if($('#btn1').val() != null && $('#btn1').val() != ''){
+			console.log(11111)
+			getOrder($('#btn1').val(),e)
+		}
+		if($('#btn2').val() != null && $('#btn2').val() != ''){
+			console.log(22222)
+			getOrder($('#btn2').val(),e)
+		}
+		if($('#btn3').val() != null && $('#btn3').val() != ''){
+			console.log(33333)
+			getOrder($('#btn3').val(),e)
+		}
+	}
+	laydate.render({
+		elem: '#insertTime',
+		range: false,
+		type: "year",
+		change:function(value,date) {
+			selectYear(value)// change 每点一次都会监听一遍
+		}
+	});
+	laydate.render({
+		elem: '#insertTimeMonth',
+		range: false,
+		type: "month",
+		change:function(value,date) {
+			selectMonth(value)// change 每点一次都会监听一遍
+		}
+	});
+
+	// 进度条加载
+	function loading(){
+		var options = $.extend({
+			percentage : $('#agentTotal').text(),
+			ShowProgressCount: false,
+			duration: 10,
+
+			// Styling Options
+			fillBackgroundColor: '#3498db',
+			backgroundColor: '#EEEEEE',
+			radius: '10px',
+			height: '20px',
+			width: '80%'
+		});
+		$('#pro1').LineProgressbar(options);
+		var options = $.extend({
+			percentage : $('#agentMonthTotal').text(),
+			ShowProgressCount: false,
+			duration: 10,
+
+			// Styling Options
+			fillBackgroundColor: '#3498db',
+			backgroundColor: '#EEEEEE',
+			radius: '10px',
+			height: '20px',
+			width: '80%'
+		});
+		$('#pro2').LineProgressbar(options);
+		var options = $.extend({
+			percentage : $('#driverTotal').text(),
+			ShowProgressCount: false,
+			duration: 10,
+
+			// Styling Options
+			fillBackgroundColor: '#3498db',
+			backgroundColor: '#EEEEEE',
+			radius: '10px',
+			height: '20px',
+			width: '80%'
+		});
+		$('#pro3').LineProgressbar(options);
+		var options = $.extend({
+			percentage : $('#driverMonthTotal').text(),
+			ShowProgressCount: false,
+			duration: 10,
+
+			// Styling Options
+			fillBackgroundColor: '#3498db',
+			backgroundColor: '#EEEEEE',
+			radius: '10px',
+			height: '20px',
+			width: '80%'
+		});
+		$('#pro4').LineProgressbar(options);
+	}
+
+	// 单量
+	function queryOrderCount(){
+		$('#btn1').css("backgroundColor","dodgerblue")
+		$('#btn1').css("borderColor","dodgerblue")
+		$('#btn1').css("color","#FFFFFF")
+		$('#btn2').css("backgroundColor","#FFFFFF")
+		$('#btn2').css("borderColor","dodgerblue")
+		$('#btn2').css("color","black")
+		$('#btn3').css("backgroundColor","#FFFFFF")
+		$('#btn3').css("borderColor","dodgerblue")
+		$('#btn3').css("color","black")
+		$('#btn1').val(1)
+		$('#btn2').val('')
+		$('#btn3').val('')
+		getOrder($('#btn1').val(),$('#insertTimeMonth').val())
+	}
+	// 收入
+	function queryIncome(){
+		$('#btn1').css("backgroundColor","#FFFFFF")
+		$('#btn1').css("borderColor","dodgerblue")
+		$('#btn1').css("color","black")
+		$('#btn2').css("backgroundColor","dodgerblue")
+		$('#btn2').css("borderColor","dodgerblue")
+		$('#btn2').css("color","#FFFFFF")
+		$('#btn3').css("backgroundColor","#FFFFFF")
+		$('#btn3').css("borderColor","dodgerblue")
+		$('#btn3').css("color","black")
+		$('#btn1').val('')
+		$('#btn2').val(2)
+		$('#btn3').val('')
+		getOrder($('#btn2').val(),$('#insertTimeMonth').val())
+	}
+	// 佣金
+	function queryCommission(){
+		$('#btn1').css("backgroundColor","#FFFFFF")
+		$('#btn1').css("borderColor","dodgerblue")
+		$('#btn1').css("color","black")
+		$('#btn2').css("backgroundColor","#FFFFFF")
+		$('#btn2').css("borderColor","dodgerblue")
+		$('#btn2').css("color","black")
+		$('#btn3').css("backgroundColor","dodgerblue")
+		$('#btn3').css("borderColor","dodgerblue")
+		$('#btn3').css("color","#FFFFFF")
+		$('#btn1').val('')
+		$('#btn2').val('')
+		$('#btn3').val(3)
+		getOrder($('#btn3').val(),$('#insertTimeMonth').val())
+	}
+
+	// 通过年查询订单数量(查询每月)
+	function orderByYear(e){
+		var dom = document.getElementById('chart1');
+		var ajax = new $ax(Feng.ctxPath+"/tHomePage/statisticsYearByAgentId",function(data){
+			data = data.yearResp
+			var myChart = echarts.init(dom, null, {
+				renderer: 'canvas',
+				useDirtyRect: false
+			});
+			var option;
+			option = {
+				tooltip: {
+					trigger: 'axis', //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
+					axisPointer: {// 坐标轴指示器,坐标轴触发有效
+						type: 'line' // 默认为直线,可选为:'line' | 'shadow'
+					},
+					formatter: '日期: {b} <br/>订单数量 : {c}'
+				},
+				xAxis: {
+					type: 'category',
+					data: [data[0].month+'月',data[1].month+'月', data[2].month+'月', data[3].month+'月',data[4].month+'月',data[5].month+'月',data[6].month+'月',data[7].month+'月',data[8].month+'月',data[9].month+'月',data[10].month+'月',data[11].month+'月']
+				},
+				yAxis: {
+					type: 'value'
+				},
+				series: [
+					{
+						data: [data[0].orderCount,data[1].orderCount, data[2].orderCount, data[3].orderCount,data[4].orderCount,data[5].orderCount,data[6].orderCount,data[7].orderCount,data[8].orderCount,data[9].orderCount,data[10].orderCount,data[11].orderCount],
+						type: 'line',
+						color: '#00b7ee'
+					}
+				]
+			};
+			option && myChart.setOption(option);
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentName").val());
+		if(e==''){
+			ajax.set("yearDate",$("#year").val());
+		}else{
+			ajax.set("yearDate",e);
+		}
+
+		ajax.start();
+	}
+
+	// 通过本月查询订单数量(查询本月每天)
+	function orderByMonth(){
+		var dom = document.getElementById('chart2');
+		var ajax = new $ax(Feng.ctxPath+"/tHomePage/statisticsMonthByAgentId",function(data){
+			data = data.monthResp
+			var mon = new Date().getMonth()+1;
+			if(mon < 10){
+				mon = '0'+mon;
+			}
+			var yResp = [];
+			var xResp = [];
+			for (var i =0;i<data.length;i++){
+				yResp.push({
+					value:data[i].orderCount,
+				})
+				xResp.push({
+					value:mon+'-'+data[i].month,
+				})
+			}
+			var myChart = echarts.init(dom, null, {
+				renderer: 'canvas',
+				useDirtyRect: false
+			});
+			var option;
+			option = {
+				tooltip: {
+					trigger: 'axis', //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
+					axisPointer: {// 坐标轴指示器,坐标轴触发有效
+						type: 'line' // 默认为直线,可选为:'line' | 'shadow'
+					},
+					formatter: '日期: {b} <br/>订单数量 : {c}'
+				},
+
+				xAxis: {
+					type: 'category',
+					data: xResp
+				},
+				yAxis: {
+					type: 'value'
+				},
+				series: [
+					{
+						data: yResp,
+						type: 'line',
+						color: '#00b7ee'
+					}
+				]
+			};
+			option && myChart.setOption(option);
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentName").val());
+		ajax.start();
+	}
+
+	function getOrder(type,e){
+		$.ajax({
+			url: Feng.ctxPath + '/tHomePage/statisticsOrderByAgentId',
+			type: 'POST',
+			data: {
+				agentId: $("#agentName").val(),
+				monthDate: e,
+				type: type
+			},
+			success: function (res) {
+				var str = '<table border="1" style="border: #c2ccd1;border-radius: 1px;height: 90%;width: 100%;text-align:center;table-layout:fixed;tword-break:break-all;">\n' +
+						'                                        <tr style="text-align: center;width:100px;height:40px">\n' +
+						'                                            <th class="orderTh">排名</th>\n' +
+						'                                            <th class="orderTh">时间</th>\n' +
+						'                                            <th class="orderTh">姓名</th>\n';
+				if(type == 1){
+					str +=  '                                            <th class="orderTh">单量</th>\n' +
+							'                                        </tr>';
+				}
+				if(type == 2){
+					str +=  '                                            <th class="orderTh">收入</th>\n' +
+							'                                        </tr>';
+				}
+				if(type == 3){
+					str +=  '                                            <th class="orderTh">佣金</th>\n' +
+							'                                        </tr>';
+				}
+				if(!$.isEmptyObject(res)){
+					var order = res.performanceResp
+					if(order.length > 0){
+						for(var i in order){
+							var a=parseInt(i)+1
+							str +=
+									'<tr><td class="orderTd">' + a + '</td><td class="orderTd">' + order[i].monthTime + '</td><td class="orderTd">' + order[i].userName + '</td><td class="orderTd">' + order[i].amount + '</td></tr>';
+						}
+					}
+				}
+				str += '</table>';
+				$('#performanceResp').html('');
+				$('#performanceResp').html(str);
+			}
+		});
+	}
+
+	// 动态查询代理商司机数量
+	function getInfo(){
+		var ajax = new $ax(Feng.ctxPath+"/tHomePage/statisticsDriverByAgentId",function(data){
+			$("#agentTotal").text(data.agentTotal)
+			$("#agentMonthTotal").text(data.agentMonthTotal)
+			$("#driverTotal").text(data.driverTotal)
+			$("#driverMonthTotal").text(data.driverMonthTotal)
+			loading()
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentName").val());
+		ajax.start();
+	}
+
+	// 代理商选择事件
+	$('#agentName').change(function(){
+		// 查询代理商 查询司机
+		getInfo()
+		// 查询月度报表
+		orderByMonth()
+		// 通过年查询订单报表
+		orderByYear($('#insertTime').val())
+		// 查询排行榜
+		if($('#btn1').val() != null && $('#btn1').val() != ''){
+			console.log(111)
+			getOrder($('#btn1').val(),$('#insertTimeMonth').val())
+		}
+		if($('#btn2').val() != null && $('#btn2').val() != ''){
+			console.log(222)
+			getOrder($('#btn2').val(),$('#insertTimeMonth').val())
+		}
+		if($('#btn3').val() != null && $('#btn3').val() != ''){
+			console.log(333)
+			getOrder($('#btn3').val(),$('#insertTimeMonth').val())
+		}
+	})
+
+
+
+
+	function getData(){
+		var ajax = new $ax(Feng.ctxPath + "/tHomePage/getMap", function (data) {
+			document.getElementById("onLineDriverCount").innerText=data.onLineDriverCount
+			document.getElementById("pendingOrderCount").innerText=data.pendingOrderCount
+			document.getElementById("serverCount").innerText=data.serverCount
+			document.getElementById("finishCount").innerText=data.finishCount
+			document.getElementById("cancelCount").innerText=data.cancelCount
+			$('#allList').val(data.allList);
+			console.log(data.allList)
+			map(data.allList)
+			getOrderData()
+
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentId").val());
+		ajax.set("type",$("#orderType").val());
+		ajax.start();
+	}
+	function reset(){
+		$("#agentId").val('')
+		$("#orderType").val('')
+		var ajax = new $ax(Feng.ctxPath + "/tHomePage/getMap", function (data) {
+			document.getElementById("onLineDriverCount").innerText=data.onLineDriverCount
+			document.getElementById("pendingOrderCount").innerText=data.pendingOrderCount
+			document.getElementById("serverCount").innerText=data.serverCount
+			document.getElementById("finishCount").innerText=data.finishCount
+			document.getElementById("cancelCount").innerText=data.cancelCount
+			$('#allList').val(data.allList);
+			map(data.allList)
+			getOrderData()
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentId").val());
+		ajax.set("type",$("#orderType").val());
+		ajax.start();
+	}
+
+	function getDataOrder(){
+		var ajax = new $ax(Feng.ctxPath + "/tHomePage/getMap", function (data) {
+			document.getElementById("onLineDriverCount").innerText=data.onLineDriverCount
+			document.getElementById("pendingOrderCount").innerText=data.pendingOrderCount
+			document.getElementById("serverCount").innerText=data.serverCount
+			document.getElementById("finishCount").innerText=data.finishCount
+			document.getElementById("cancelCount").innerText=data.cancelCount
+			$('#allList').val(data.allList);
+			console.log(data.allList)
+			mapOrder(data.allList)
+			getOrderData()
+
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentId").val());
+		ajax.set("type",$("#orderType").val());
+		ajax.start();
+	}
+	function resetOrder(){
+		$("#agentId").val('')
+		$("#orderType").val('')
+		var ajax = new $ax(Feng.ctxPath + "/tHomePage/getMap", function (data) {
+			document.getElementById("onLineDriverCount").innerText=data.onLineDriverCount
+			document.getElementById("pendingOrderCount").innerText=data.pendingOrderCount
+			document.getElementById("serverCount").innerText=data.serverCount
+			document.getElementById("finishCount").innerText=data.finishCount
+			document.getElementById("cancelCount").innerText=data.cancelCount
+			$('#allList').val(data.allList);
+			mapOrder(data.allList)
+			getOrderData()
+		}, function (data) {
+		});
+		ajax.set("agentId",$("#agentId").val());
+		ajax.set("type",$("#orderType").val());
+		ajax.start();
+	}
+
+
+	function map(e){
+		window._AMapSecurityConfig = {
+			securityJsCode:'b62d9146929db08c4c2f4537d045320d',
+		};
+		laydate.render({
+			elem: '#createTime',
+			type: 'date',
+			range: true
+		});
+
+		AMapLoader.reset() // 需要把这个reset一下
+		AMapLoader.load({
+			"key": "1d43098bcd98ab124623e7e4bcc9595e",              // 申请好的Web端开发者Key,首次调用 load 时必填
+			"version": "2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
+			"plugins": ['AMap.Driving'],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
+			"AMapUI": {             // 是否加载 AMapUI,缺省不加载
+				"version": '1.1',   // AMapUI 版本
+				"plugins":['overlay/SimpleMarker'],       // 需要加载的 AMapUI ui插件
+			},
+			"Loca":{                // 是否加载 Loca, 缺省不加载
+				"version": '2.0'  // Loca 版本
+			},
+		}).then((AMap)=>{
+			//初始化地图对象,加载地图
+			var map = new AMap.Map('container', {
+				viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D',
+				zoom:10, //初始化地图层级
+				center: [104.043246,30.641849] //初始化地图中心点
+			});
+			// map.clearMap();  // 清除地图覆盖物
+			// 经纬度坐标数组
+			const  onLineDriver = $('#onLineDriver').val();
+			var list1 = JSON.stringify(onLineDriver)
+			const jsonArr = JSON.parse(list1)
+			const jsonArr1 = JSON.parse(jsonArr);
+			console.log(jsonArr1)
+			M = jsonArr1;
+			M.forEach(function(marker) {
+				new AMap.Marker({
+					map: map,
+					icon: marker[2]==1?'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-5.png':'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-6.png',
+					position: [marker[0], marker[1]],
+					offset: new AMap.Pixel(-13, -30)
+				});
+			});
+
+			// var center = map.getCenter();
+			// var centerText = '当前中心点坐标:' + center.getLng() + ',' + center.getLat();
+			// 添加事件监听, 使地图自适应显示到合适的范围
+			AMap.event.addDomListener(document.getElementById('container'), 'click', function() {
+				var newCenter = map.setFitView();
+			});
+		}).catch((e)=>{
+			console.error(e);  //加载错误提示
+		});
+	}
+
+	function mapOrder(e){
+		window._AMapSecurityConfig = {
+			securityJsCode:'b62d9146929db08c4c2f4537d045320d',
+		};
+		AMapLoader.reset() // 需要把这个reset一下
+		AMapLoader.load({
+			"key": "1d43098bcd98ab124623e7e4bcc9595e",              // 申请好的Web端开发者Key,首次调用 load 时必填
+			"version": "2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
+			"plugins": ['AMap.Driving'],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
+			"AMapUI": {             // 是否加载 AMapUI,缺省不加载
+				"version": '1.1',   // AMapUI 版本
+				"plugins":['overlay/SimpleMarker'],       // 需要加载的 AMapUI ui插件
+			},
+			"Loca":{                // 是否加载 Loca, 缺省不加载
+				"version": '2.0'  // Loca 版本
+			},
+		}).then((AMap)=>{
+			//初始化地图对象,加载地图
+			var map = new AMap.Map('containerOrder', {
+				viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D',
+				zoom:10, //初始化地图层级
+				center: [104.043246,30.641849] //初始化地图中心点
+			});
+			// map.clearMap();  // 清除地图覆盖物
+			// 经纬度坐标数组
+			var  allList;
+			if(e==""){
+				allList = $('#allList').val();
+				console.log(1111111111)
+				var list = JSON.stringify(allList)
+				console.log(2222222222)
+				const jsonArray = JSON.parse(list)
+				console.log(3333333333333)
+				const jsonArray1 = JSON.parse(jsonArray);
+				console.log(jsonArray1)
+				M = jsonArray1;
+			}else{
+				M=e;
+			}
+			console.log(M)
+			M.forEach(function(marker) {
+				new AMap.Marker({
+					map: map,
+					icon: marker[2]==301?'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-1.png':((marker[2]==109||marker[2]==107||marker[2]==108)?'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-2.png':
+									(marker[2]==101?'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-3.png':'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-4.png')
+					),
+					position: [marker[0], marker[1]],
+					offset: new AMap.Pixel(-13, -30)
+				});
+			});
+			// var center = map.getCenter();
+			// var centerText = '当前中心点坐标:' + center.getLng() + ',' + center.getLat();
+			// 添加事件监听, 使地图自适应显示到合适的范围
+			AMap.event.addDomListener(document.getElementById('containerOrder'), 'click', function() {
+				var newCenter = map.setFitView();
+			});
+		}).catch((e)=>{
+			console.error(e);  //加载错误提示
+		});
+	}
+
+	function getOrderData(){
+		$.ajax({
+			url: Feng.ctxPath + '/tHomePage/getServerOrder',
+			type: 'POST',
+			data: {
+				agentId: $("#agentId").val()
+			},
+			success: function (res) {
+				var order = res.serverList
+				var str = '<table><tr><h3>服务中</h3></tr><hr/><br>';
+				if(order.length > 0){
+					for(var i in order){
+						console.log(order[i].startTime)
+						str +=
+								'<tr><img src=' + order[i].avatar + ' style="height: 40px;width: 40px"></img>' + order[i].driverName +'</tr><br>' +
+								'<table><tr><td class="name1">驾龄</td><td class="name1">' + order[i].drivingExperience + '年'+'</td><td class="name1">代驾次数</td><td class="name1">' + order[i].valetDrivingCount + '次'+'</td></tr><br></table>' +
+								'<table><br><tr><td class="name1">出行时间</td><td class="name1">' + order[i].startTime + '</td></tr>' +
+								'<tr><td class="name1">起点</td><td class="name1">' + order[i].startAddress + '</td></tr>' +
+								'<tr><td class="name1">终点</td><td class="name1">' + order[i].endAddress + '</td></tr></table><br>' +
+								'<table><tr><td class="name1">预估费用</td><td class="name1">' + order[i].estimatedPrice + '元'+'</td><td class="name1">行驶里程</td><td class="name1">' + order[i].mileageTraveled + '公里'+'</td></tr>' +
+								'<tr><td class="name1">等待时间</td><td class="name1">' + order[i].waitTime + '分钟'+'</td><td class="name1">行驶时间</td><td class="name1">' + order[i].goTime + '分钟'+'</td></tr></table><hr/>';
+					}
+				}
+				str += '</table>';
+				$('#serverOrder').html(str);
+			}
+		});
+	}
+
+</script>
 @}
 
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUser.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUser.html
index 8b60e4a..d1c0757 100644
--- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUser.html
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUser.html
@@ -36,7 +36,7 @@
                                 @if(shiro.hasPermission("/tAppUser/export-userInfo")){
                                 <#button name="导出" icon="" clickFun="TAppUser.export()"/>
                                 @}
-                                @if(shiro.hasPermission("/tAppUser/add")){
+                                @if(shiro.hasPermission("/tAppUser/tAppUser_exception")){
                                 <#button name="异常" icon="" clickFun="TAppUserException.tAppUserException()"/>
                                 @}
                                 @if(shiro.hasPermission("/tAppUser/sendCoupon")){

--
Gitblit v1.7.1