From 7a8af8c19b40b8028e25ee0b669463d06f723a30 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期一, 21 九月 2026 15:57:24 +0800
Subject: [PATCH] bug:测试问题统一修改

---
 cloud-server-management/src/main/resources/mapper/GateMapper.xml                                                    |    3 
 cloud-server-competition/src/main/resources/mapper/ParticipantMapper.xml                                            |    1 
 cloud-server-management/src/main/resources/mapper/ServerCarModelMapper.xml                                          |    4 
 cloud-server-management/src/main/resources/mapper/TEvaluationMapper.xml                                             |    3 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html                         |   37 ++-
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TicketController.java             |   36 +-
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java        |    1 
 cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java                                   |    1 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java              |    2 
 cloud-server-management/src/main/resources/mapper/DictMapper.xml                                                    |    4 
 cloud-server-management/src/main/resources/mapper/VipMapper.xml                                                     |    3 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/audit/ManagementAuditWriter.java                  |   23 ++
 cloud-server-management/src/main/resources/mapper/OpenCityBusinessMapper.xml                                        |    6 
 cloud-server-management/src/main/resources/mapper/DeptMapper.xml                                                    |    3 
 cloud-server-management/src/main/resources/mapper/TStoreMapper.xml                                                  |   22 +
 cloud-server-management/src/main/resources/mapper/UserMapper.xml                                                    |    2 
 cloud-server-management/src/main/resources/mapper/RoleMapper.xml                                                    |    6 
 cloud-server-management/src/main/resources/mapper/TOperatorUserMapper.xml                                           |    2 
 cloud-server-management/src/main/resources/mapper/PhoneMapper.xml                                                   |    5 
 cloud-server-management/src/main/resources/mapper/OpenCityMapper.xml                                                |   12 
 cloud-server-management/src/main/resources/mapper/PushOrderMapper.xml                                               |    3 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteTypeController.java          |    2 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html                      |   41 ++-
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java               |    4 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TSiteServiceImpl.java                |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AppGuideManagementController.java |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java     |  151 ++++++++++----
 cloud-server-management/src/main/resources/mapper/SysIntegralMapper.xml                                             |    4 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java            |   24 +-
 cloud-server-management/src/main/resources/mapper/MenuMapper.xml                                                    |    2 
 cloud-server-management/src/main/resources/mapper/TNoticesMapper.xml                                                |    5 
 cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java                                  |    3 
 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java                                    |   26 +
 cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml                                               |    3 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/SensitiveDataController.java    |   45 ++++
 cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java                                |    4 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html                      |   61 +++--
 37 files changed, 365 insertions(+), 193 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java
index 78ffb22..286410c 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java
@@ -57,6 +57,7 @@
             if (ToolUtil.isNotEmpty(listQuery.getPhone())) {
                 tCityManagerLambdaQueryWrapper.like(TCityManager::getPhone, listQuery.getPhone());
             }
+            tCityManagerLambdaQueryWrapper.orderByDesc(TCityManager::getId);
             Page<TCityManager> page1 = cityService.page(page, tCityManagerLambdaQueryWrapper);
             return page1;
         } catch (Exception e) {
diff --git a/cloud-server-competition/src/main/resources/mapper/ParticipantMapper.xml b/cloud-server-competition/src/main/resources/mapper/ParticipantMapper.xml
index d39aa75..cb68d15 100644
--- a/cloud-server-competition/src/main/resources/mapper/ParticipantMapper.xml
+++ b/cloud-server-competition/src/main/resources/mapper/ParticipantMapper.xml
@@ -51,6 +51,7 @@
         <if test="state !=null and state !='' and state ==3">
             and t3.payStatus =3
         </if>
+        order by t1.insertTime desc, t1.id desc
     </select>
 
 </mapper>
diff --git a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
index cc0cc02..161ad93 100644
--- a/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
+++ b/cloud-server-course/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
@@ -188,7 +188,8 @@
      * @return
      */
     private ShardingTableRuleConfiguration getCoursePackageOrderTableRuleConfiguration() {
-        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_course_package_order", "m_$->{0}.t_course_package_order$->{1..5}");//30
+        // 兼容分表前写入基础表的历史购课记录;新订单仍按 appUserId 路由至后缀分表。
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_course_package_order", "m_$->{0}.t_course_package_order,m_$->{0}.t_course_package_order$->{1..5}");//30
         result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("appUserId", "t_course_package_order-inline"));
         result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_course_package_order-snowflake"));
         return result;
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/audit/ManagementAuditWriter.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/audit/ManagementAuditWriter.java
index 0bb2a95..2e04d6b 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/audit/ManagementAuditWriter.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/audit/ManagementAuditWriter.java
@@ -8,6 +8,7 @@
 
 import javax.annotation.Resource;
 import java.io.OutputStream;
+import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
@@ -23,7 +24,10 @@
     public void append(Map<String, Object> audit) {
         try {
             List<ServiceInstance> instances = discoveryClient.getInstances("mb-cloud-other");
-            if (instances == null || instances.isEmpty()) return;
+            if (instances == null || instances.isEmpty()) {
+                log.warn("管理端审计写入失败:未发现审计服务 mb-cloud-other");
+                return;
+            }
             URL url = new URL(instances.get(0).getUri().toString() + "/internal/audit-logs");
             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
             connection.setConnectTimeout(1000);
@@ -33,10 +37,25 @@
             connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
             byte[] body = JSON.toJSONString(audit).getBytes(StandardCharsets.UTF_8);
             try (OutputStream output = connection.getOutputStream()) { output.write(body); }
-            connection.getResponseCode();
+            int status = connection.getResponseCode();
+            if (status < HttpURLConnection.HTTP_OK || status >= HttpURLConnection.HTTP_MULT_CHOICE) {
+                log.warn("管理端审计写入失败,响应状态: {}, 响应内容: {}", status,
+                        readResponse(connection.getErrorStream()));
+            }
             connection.disconnect();
         } catch (Exception e) {
             log.warn("管理端审计写入失败", e);
         }
     }
+
+    private String readResponse(InputStream input) {
+        if (input == null) return "";
+        try (InputStream stream = input) {
+            byte[] buffer = new byte[1024];
+            int length = stream.read(buffer);
+            return length <= 0 ? "" : new String(buffer, 0, length, StandardCharsets.UTF_8);
+        } catch (Exception ignored) {
+            return "";
+        }
+    }
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AppGuideManagementController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AppGuideManagementController.java
index d0e950e..7ed0175 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AppGuideManagementController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AppGuideManagementController.java
@@ -55,7 +55,7 @@
     public Map<String, Object> data() {
         Map<String, Object> r = new HashMap<>();
         r.put("config", appGuideConfigMapper.selectOne(new QueryWrapper<AppGuideConfig>().orderByDesc("id").last("limit 1")));
-        r.put("banners", appGuideBannerMapper.selectList(new QueryWrapper<AppGuideBanner>().orderByAsc("sort").orderByDesc("id")));
+        r.put("banners", appGuideBannerMapper.selectList(new QueryWrapper<AppGuideBanner>().orderByDesc("sort").orderByDesc("id")));
         List<QrLink> links = qrLinkMapper.selectList(new QueryWrapper<QrLink>().eq("type", "SITE_BOOKING").orderByDesc("id"));
         List<Map<String, Object>> linkData = new ArrayList<>();
         for (QrLink link : links) {
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 e744bdb..208b8d3 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
@@ -82,6 +82,29 @@
     }
 
     /**
+     * 将门店统计目标限制在当前账号可见范围内。门店账号固定统计自身;运营商账号
+     * 只能统计归属自己的门店,避免其它门店的数据混入其统计结果。
+     */
+    private Integer resolveStatisticsStoreId(Integer storeId) {
+        Integer objectType = UserExt.getUser().getObjectType();
+        if (Integer.valueOf(3).equals(objectType)) {
+            return UserExt.getUser().getObjectId();
+        }
+        if (storeId == null) {
+            return null;
+        }
+        TStore store = storeService.getById(storeId);
+        if (store == null || Integer.valueOf(3).equals(store.getState())) {
+            return null;
+        }
+        if (Integer.valueOf(2).equals(objectType)
+                && !UserExt.getUser().getObjectId().equals(store.getOperatorId())) {
+            return null;
+        }
+        return storeId;
+    }
+
+    /**
      * 运营商统计的门店范围:平台(0)统计平台门店,其他值统计对应运营商门店。
      */
     private List<TStore> listStatisticsStores(Integer operatorId, boolean enabledOnly) {
@@ -91,12 +114,21 @@
         } else {
             wrapper.ne(TStore::getState, 3);
         }
-        if (Integer.valueOf(0).equals(operatorId)) {
+        if (operatorId == null) {
+            // 平台统计:所有门店总和,不按门店所属运营商过滤。
+        } else if (Integer.valueOf(0).equals(operatorId)) {
             wrapper.eq(TStore::getType, 1);
         } else {
             wrapper.eq(TStore::getType, 2).eq(TStore::getOperatorId, operatorId);
         }
         return storeService.list(wrapper);
+    }
+
+    /** 空门店范围必须显式传递无匹配值,不能让下游 SQL 因空集合而省略 IN 条件。 */
+    private List<Integer> listStatisticsStoreIds(Integer operatorId, boolean enabledOnly) {
+        List<Integer> storeIds = listStatisticsStores(operatorId, enabledOnly).stream()
+                .map(TStore::getId).collect(Collectors.toList());
+        return storeIds.isEmpty() ? Collections.singletonList(-1) : storeIds;
     }
 
     /** 获取统计范围门店发生课程、订场或赛事消费的用户。 */
@@ -116,6 +148,30 @@
                 .stream().map(SiteBooking::getAppUserId).filter(Objects::nonNull)
                 .collect(Collectors.toList()));
         List<Integer> competitionUserIds = competitionClient.queryAppUserId(storeIds);
+        if (competitionUserIds != null) {
+            userIds.addAll(competitionUserIds);
+        }
+        List<Integer> validUserIds = userIds.stream().filter(Objects::nonNull).distinct()
+                .collect(Collectors.toList());
+        return validUserIds.isEmpty() ? Collections.singletonList(-1) : validUserIds;
+    }
+
+    private List<Integer> listStatisticsAppUserIdsForStore(Integer storeId) {
+        if (storeId == null) {
+            return Collections.singletonList(-1);
+        }
+        List<Integer> userIds = new ArrayList<>();
+        List<Integer> courseUserIds = coursePackagePaymentClient.queryPaymentCoursePackage(
+                Collections.singletonList(storeId));
+        if (courseUserIds != null) {
+            userIds.addAll(courseUserIds);
+        }
+        userIds.addAll(siteBookingService.list(new QueryWrapper<SiteBooking>()
+                        .eq("storeId", storeId).eq("state", 1))
+                .stream().map(SiteBooking::getAppUserId).filter(Objects::nonNull)
+                .collect(Collectors.toList()));
+        List<Integer> competitionUserIds = competitionClient.queryAppUserId(
+                Collections.singletonList(storeId));
         if (competitionUserIds != null) {
             userIds.addAll(competitionUserIds);
         }
@@ -238,6 +294,21 @@
         } else if (Integer.valueOf(2).equals(roleType)) {
             operatorId = objectId;
             storeId = resolveStoreId(storeId);
+        }
+
+        // 下游多处查询会在门店集合为空时忽略门店过滤。运营商没有任何门店时,
+        // 直接返回完整的零值结构,避免被误统计为全平台数据。
+        if (operatorId != null && storeId == null
+                && listStatisticsStores(operatorId, false).isEmpty()) {
+            Map<String, Object> emptyIncomeData = buildIncomeStatistics(Collections.emptyList());
+            emptyIncomeData.put("incomeTypeNet", buildIncomeTypeNet(Collections.emptyList(), null));
+            Map<String, Object> emptyTicketIncome = new HashMap<>();
+            emptyTicketIncome.put("day", BigDecimal.ZERO);
+            emptyTicketIncome.put("month", BigDecimal.ZERO);
+            emptyTicketIncome.put("quarter", BigDecimal.ZERO);
+            emptyTicketIncome.put("year", BigDecimal.ZERO);
+            emptyIncomeData.put("ticketIncome", emptyTicketIncome);
+            return emptyIncomeData;
         }
 
         // 参数代表当前统计目标,而非当前登录人的角色;平台账号查看运营商/门店页时,
@@ -524,14 +595,11 @@
     private Map<String, Object> getTicketIncome(String time, Integer operatorId, Integer storeId) {
         List<Integer> userIds;
         if (storeId != null) {
-            userIds = appUserClient.getUserStore(storeId);
+            userIds = listStatisticsAppUserIdsForStore(storeId);
         } else if (operatorId != null) {
-            userIds = appUserClient.getUserYYs(operatorId);
+            userIds = listStatisticsAppUserIds(operatorId);
         } else {
-            List<Integer> platformUserIds = sysUserService.list(new LambdaQueryWrapper<User>()
-                            .eq(User::getObjectType, 1))
-                    .stream().map(User::getId).collect(Collectors.toList());
-            userIds = appUserClient.getUserPt(platformUserIds);
+            userIds = listStatisticsAppUserIds(null);
         }
         if (userIds == null) {
             userIds = new ArrayList<>();
@@ -902,10 +970,7 @@
     @ResponseBody
     public Object backPt(Integer type) {
         HashMap<String, Object> map = new HashMap<>();
-        List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(1));
-        if(userPt.size()==0){
-            userPt.add(-1);
-        }
+        List<Integer> userPt = listStatisticsAppUserIds(null);
         ArrayList<Object> integers = new ArrayList<>();
         int year = DateUtil.year(new Date());
         List<TBackRecord> thisYear = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, year).in(TBackRecord::getUserId,userPt));
@@ -1108,7 +1173,8 @@
     @RequestMapping(value = "/backStore")
     @ResponseBody
     public Object backStore(Integer id) {
-        List<Integer> collect1 = Arrays.asList(id);
+        id = resolveStatisticsStoreId(id);
+        List<Integer> collect1 = Collections.singletonList(id == null ? -1 : id);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1227,15 +1293,14 @@
     @RequestMapping(value = "/userAndVipPt")
     @ResponseBody
     public Object userAndVipPt(Integer type) {
-        type=1;
-        HashMap<String, Object> map = appUserClient.userAndVipPt(type);
+        HashMap<String, Object> map = appUserClient.userAndVipYys(listStatisticsAppUserIds(null));
         return map;
     }
 
     @RequestMapping(value = "/stuPt")
     @ResponseBody
     public Object stuPt() {
-        HashMap<String, Object> map = appUserClient.stuPt();
+        HashMap<String, Object> map = appUserClient.stuYys(listStatisticsAppUserIds(null));
         return map;
     }
     @RequestMapping(value = "/stuYys")
@@ -1269,7 +1334,8 @@
     @RequestMapping(value = "/stuStores")
     @ResponseBody
     public Object stuStores(Integer id) {
-        List<Integer> collect1 = Arrays.asList(id);
+        id = resolveStatisticsStoreId(id);
+        List<Integer> collect1 = Collections.singletonList(id == null ? -1 : id);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1289,7 +1355,7 @@
     @RequestMapping(value = "/coursePt")
     @ResponseBody
     public Object coursePt() {
-        List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(1));
+        List<Integer> userPt = listStatisticsAppUserIds(null);
         HashMap<String, Object> map = coursePackagePaymentClient.coursePt(userPt);
         return map;
     }
@@ -1306,7 +1372,8 @@
     @RequestMapping(value = "/courseStore")
     @ResponseBody
     public Object courseStore(Integer id) {
-        List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(id));
+        id = resolveStatisticsStoreId(id);
+        List<Integer> userPt = listStatisticsAppUserIdsForStore(id);
         HashMap<String, Object> map = coursePackagePaymentClient.coursePt(userPt);
         return map;
     }
@@ -1315,8 +1382,7 @@
     @ResponseBody
     public Object userAndVipYys(Integer id) {
         id = resolveOperatorId(id);
-        List<TStore> list4 = listStatisticsStores(id, true);
-        List<Integer> collect1 = list4.stream().map(TStore::getId).collect(Collectors.toList());
+        List<Integer> collect1 = listStatisticsStoreIds(id, true);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1334,7 +1400,8 @@
     @RequestMapping(value = "/userAndVipStore")
     @ResponseBody
     public Object userAndVipStore(Integer id) {
-        List<Integer> collect1 = Arrays.asList(id);
+        id = resolveStatisticsStoreId(id);
+        List<Integer> collect1 = Collections.singletonList(id == null ? -1 : id);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1352,10 +1419,10 @@
     @RequestMapping(value = "/actPt")
     @ResponseBody
     public Object actPt(Integer type) {
-        List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(1));
+        List<Integer> userPt = listStatisticsAppUserIds(null);
         HashMap<String, Object> map = competitionClient.actPt(userPt);
 
-        List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId, 0).ne(TStore::getState, 3));
+        List<TStore> list = listStatisticsStores(null, false);
         long l1=0;
         for (TStore tStore : list) {
             l1 += getStoreOperatingHours(tStore, new Date());
@@ -1368,8 +1435,7 @@
     public Object actYys(Integer id) {
         id = resolveOperatorId(id);
         CompetionVO competionVO = new CompetionVO();
-        List<TStore> list4 = listStatisticsStores(id, true);
-        List<Integer> collect1 = list4.stream().map(TStore::getId).collect(Collectors.toList());
+        List<Integer> collect1 = listStatisticsStoreIds(id, true);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1448,8 +1514,7 @@
 //        List<User> list = sysUserService.list(new LambdaQueryWrapper<User>().eq(User::getObjectType, 2));
 //        List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList());
 //        List<Integer> userIds = appUserClient.getUserYYs(id);
-        List<TStore> list4 = listStatisticsStores(id, true);
-        List<Integer> collect1 = list4.stream().map(TStore::getId).collect(Collectors.toList());
+        List<Integer> collect1 = listStatisticsStoreIds(id, true);
         QueryDataFee queryDataFee = new QueryDataFee(time, collect1);
         // 课程收入
         HashMap<String, Object> map3 = courseClient.queryFee(queryDataFee);
@@ -1469,7 +1534,7 @@
         }else{
             List<TSite> list = siteService.list(new QueryWrapper<TSite>().in("storeId", collect1).eq("state", 1));
             ids = list.stream().map(TSite::getId).collect(Collectors.toList());
-            if(collect1.size()==0){
+            if(ids.isEmpty()){
                 ids.add(-1);
             }
         }
@@ -1549,8 +1614,9 @@
     @ResponseBody
     @RequestMapping("/selectStore")
     public Object selectStore(Integer id,String time) {
+        id = resolveStatisticsStoreId(id);
         HashMap<String, Object> map = new HashMap<>();
-        List<Integer> collect1 = Arrays.asList(id);
+        List<Integer> collect1 = Collections.singletonList(id == null ? -1 : id);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1699,10 +1765,8 @@
     @ResponseBody
     public Object type1(String time) {
         HashMap<String, Object> map = new HashMap<>();
-        // 找出平台的用户
-        List<User> list = sysUserService.list(new LambdaQueryWrapper<User>().eq(User::getObjectType, 1));
-        List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList());
-        List<Integer> userIds = appUserClient.getUserPt(ids);
+        // 平台统计是所有门店总和,用户范围同样来自所有门店的消费用户。
+        List<Integer> userIds = listStatisticsAppUserIds(null);
         QueryDataFee queryDataFee = new QueryDataFee(time, userIds);
         // 课程和赛事接口的 ids 参数表示门店 ID;不能把平台用户 ID 传入。
         List<Integer> platformStoreIds = storeService.list(new LambdaQueryWrapper<TStore>()
@@ -1807,9 +1871,7 @@
     @RequestMapping("/stuCourseData")
     @ResponseBody
     public Object stuCourseData() {
-        ArrayList<Integer> objects = new ArrayList<>();
-        objects.add(1);
-        List<Integer> userIds = appUserClient.getUserPt(objects);
+        List<Integer> userIds = listStatisticsAppUserIds(null);
         List<Map<String,Object>> list = coursePackagePaymentClient.queryCourseData(userIds);
         ArrayList<Object> objects2 = new ArrayList<>();
         ArrayList<Object> objects3 = new ArrayList<>();
@@ -1827,9 +1889,7 @@
     @RequestMapping("/stuUserData")
     @ResponseBody
     public Object stuUserData() {
-        ArrayList<Integer> objects = new ArrayList<>();
-        objects.add(1);
-        HashMap<String, Object> map = appUserClient.queryUserAge1();
+        HashMap<String, Object> map = appUserClient.queryUserAgeYys(listStatisticsAppUserIds(null));
 
         return map;
     }
@@ -1837,8 +1897,7 @@
     @ResponseBody
     public Object stuUserDataYys(Integer id) {
         id = resolveOperatorId(id);
-        List<TStore> list4 = listStatisticsStores(id, true);
-        List<Integer> collect1 = list4.stream().map(TStore::getId).collect(Collectors.toList());
+        List<Integer> collect1 = listStatisticsStoreIds(id, true);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1855,8 +1914,8 @@
     @RequestMapping("/stuUserDataStore")
     @ResponseBody
     public Object stuUserDataStore(Integer id) {
-
-        List<Integer> collect1 = Arrays.asList(id);
+        id = resolveStatisticsStoreId(id);
+        List<Integer> collect1 = Collections.singletonList(id == null ? -1 : id);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1876,8 +1935,7 @@
     @ResponseBody
     public Object selectYysJx(Integer id) {
         id = resolveOperatorId(id);
-        List<TStore> list4 = listStatisticsStores(id, true);
-        List<Integer> collect1 = list4.stream().map(TStore::getId).collect(Collectors.toList());
+        List<Integer> collect1 = listStatisticsStoreIds(id, true);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
@@ -1909,7 +1967,8 @@
     @RequestMapping("/selectStoreJx")
     @ResponseBody
     public Object selectStoreJx(Integer id) {
-        List<Integer> collect1 = Arrays.asList(id);
+        id = resolveStatisticsStoreId(id);
+        List<Integer> collect1 = Collections.singletonList(id == null ? -1 : id);
         //课程
         List<Integer> list = coursePackagePaymentClient.queryPaymentCoursePackage(collect1);
         //场地
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
index 3e92f2d..fd3dced 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
@@ -254,6 +254,7 @@
                         .eq(!StringUtils.isEmpty(query.getProvinceCode()), TSite::getProvinceCode, query.getProvinceCode())
                         .eq(operatorId != null, TSite::getOperatorId, operatorId)
                         .ne(TSite::getState,3)
+                        .orderByDesc(TSite::getId)
                         .eq(TSite::getSign,0)
                         .eq(!StringUtils.isEmpty(query.getCityCode()), TSite::getCityCode, query.getCityCode())
                         .in(!storeIds.isEmpty(), TSite::getStoreId, storeIds));
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
index bd8d704..9b6da05 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
@@ -503,7 +503,7 @@
     @ResponseBody
     public Object listTwo1(Integer id) {
         Page<TStoreOtherConfigTrue> page = new PageFactory<TStoreOtherConfigTrue>().defaultPage();
-        List<TStoreOtherConfigTrue> list = tStoreOtherConfigTrueService.page(page,new LambdaQueryWrapper<TStoreOtherConfigTrue>().eq(TStoreOtherConfigTrue::getPid, id).eq(TStoreOtherConfigTrue::getState,1)).getRecords();
+        List<TStoreOtherConfigTrue> list = tStoreOtherConfigTrueService.page(page,new LambdaQueryWrapper<TStoreOtherConfigTrue>().eq(TStoreOtherConfigTrue::getPid, id).eq(TStoreOtherConfigTrue::getState,1).orderByDesc(TStoreOtherConfigTrue::getId)).getRecords();
         page.setRecords(list);
         return  super.packForBT(page);
     }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteTypeController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteTypeController.java
index 673042d..ebcab99 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteTypeController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteTypeController.java
@@ -166,7 +166,7 @@
     @ResponseBody
     public Object list() {
         Page<TSiteType> page = new PageFactory<TSiteType>().defaultPage();
-        Page<TSiteType> page1 = siteTypeService.page(page, new LambdaQueryWrapper<TSiteType>().ne(TSiteType::getState,3));
+        Page<TSiteType> page1 = siteTypeService.page(page, new LambdaQueryWrapper<TSiteType>().ne(TSiteType::getState,3).orderByDesc(TSiteType::getId));
         return  super.packForBT(page1);
     }
 
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
index 5f1507c..43fe181 100644
--- 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
@@ -410,26 +410,26 @@
     @RequestMapping("/writeOff")
     @ResponseBody
     public Object writeOff(String id, Integer goType) {
-        if (!Integer.valueOf(1).equals(goType) && !Integer.valueOf(2).equals(goType)) {
-            return ResultUtil.error("入园方式参数不正确");
-        }
-        Long aLong = Long.valueOf(id);
         WriteOffDTO dto = new WriteOffDTO();
-        // 核销人员ID与所属门店由登录上下文确定,不能由前端传入。
-        Integer objectId = UserExt.getUser().getId();
-        if (UserExt.getUser().getObjectType() == 1){
-            dto.setVerifiStoreId(null);
-        }else if (UserExt.getUser().getObjectType() == 2){
-            TStore store = storeService.getOne(new QueryWrapper<TStore>().eq("cityManagerId", objectId));
-            dto.setVerifiStoreId(store == null ? null : store.getId());
-        }else{
-            TStoreStaff storeByStoreStaffId = storeStaffClient.getStoreByStoreStaffId(objectId);
-            dto.setVerifiStoreId(storeByStoreStaffId.getStoreId());
-        }
-        dto.setId(aLong);
         dto.setGoType(goType);
-        dto.setVerificationUserId(objectId);
         try {
+            if (!Integer.valueOf(1).equals(goType) && !Integer.valueOf(2).equals(goType)) {
+                appendTicketWriteOffAudit(dto, "FAIL", "入园方式参数不正确");
+                return ResultUtil.error("入园方式参数不正确");
+            }
+            dto.setId(Long.valueOf(id));
+            // 核销人员ID与所属门店由登录上下文确定,不能由前端传入。
+            Integer objectId = UserExt.getUser().getId();
+            if (UserExt.getUser().getObjectType() == 1){
+                dto.setVerifiStoreId(null);
+            }else if (UserExt.getUser().getObjectType() == 2){
+                TStore store = storeService.getOne(new QueryWrapper<TStore>().eq("cityManagerId", objectId));
+                dto.setVerifiStoreId(store == null ? null : store.getId());
+            }else{
+                TStoreStaff storeByStoreStaffId = storeStaffClient.getStoreByStoreStaffId(objectId);
+                dto.setVerifiStoreId(storeByStoreStaffId.getStoreId());
+            }
+            dto.setVerificationUserId(objectId);
             pointMercharsClient.writeOff(dto);
             appendTicketWriteOffAudit(dto, "SUCCESS", null);
             return new SuccessTip<>();
@@ -449,7 +449,7 @@
             Map<String, Object> afterData = new HashMap<>(beforeData);
             afterData.put("status", "已核销");
             afterData.put("goType", dto.getGoType());
-            afterData.put("goTypeName", dto.getGoType() == 1 ? "手环" : "门票核销");
+            afterData.put("goTypeName", Integer.valueOf(1).equals(dto.getGoType()) ? "手环" : "门票核销");
             afterData.put("verificationUserId", dto.getVerificationUserId());
             afterData.put("verifiStoreId", dto.getVerifiStoreId());
 
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/SensitiveDataController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/SensitiveDataController.java
index d133c0a..d4eb803 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/SensitiveDataController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/SensitiveDataController.java
@@ -5,6 +5,8 @@
 import com.dsh.guns.core.common.exception.BizExceptionEnum;
 import com.dsh.guns.core.exception.GunsException;
 import com.dsh.guns.modular.system.audit.ManagementAuditWriter;
+import com.dsh.guns.modular.system.model.SiteBooking;
+import com.dsh.guns.modular.system.service.ISiteBookingService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -25,6 +27,7 @@
     @Resource private AppUserClient appUserClient;
     @Resource private ManagementAuditWriter auditWriter;
     @Resource private IUserService userService;
+    @Resource private ISiteBookingService siteBookingService;
 
     @GetMapping("/app-user/{id}")
     public Map<String, Object> appUser(@PathVariable Integer id) {
@@ -58,6 +61,26 @@
         return result;
     }
 
+    /**
+     * 预约管理查看关联预约人的敏感信息。
+     *
+     * <p>仅通过预约记录定位用户,避免前端以任意用户 ID 查询;该接口保留在
+     * /system/sensitive 路径下,以使用全局的脱敏豁免和网关放行策略。</p>
+     */
+    @GetMapping("/booking/{bookingId}")
+    public Map<String, Object> booking(@PathVariable Integer bookingId) {
+        assertAdmin();
+        SiteBooking booking = siteBookingService.getById(bookingId);
+        if (booking == null || booking.getAppUserId() == null) {
+            writeBookingAudit(bookingId, booking, null, "NOT_FOUND");
+            return null;
+        }
+
+        Map<String, Object> result = appUserClient.sensitiveAppUser(booking.getAppUserId());
+        writeBookingAudit(bookingId, booking, result, result == null ? "NOT_FOUND" : "SUCCESS");
+        return result;
+    }
+
     private void assertAdmin() {
         if (UserExt.getUser() == null || !"admin".equalsIgnoreCase(UserExt.getUser().getAccount())) {
             throw new GunsException(BizExceptionEnum.NO_PERMITION);
@@ -84,6 +107,28 @@
         auditWriter.append(audit);
     }
 
+    private void writeBookingAudit(Integer bookingId, SiteBooking booking,
+                                   Map<String, Object> user, String result) {
+        Map<String, Object> audit = new HashMap<String, Object>();
+        audit.put("traceId", UUID.randomUUID().toString().replace("-", ""));
+        audit.put("sourceService", "mb-cloud-management");
+        audit.put("sourceType", "HTTP");
+        audit.put("operationType", "VIEW_SENSITIVE");
+        audit.put("riskLevel", "SENSITIVE");
+        audit.put("operationName", "超级管理员从预约管理查看敏感信息");
+        audit.put("requestMethod", "GET");
+        audit.put("requestUri", "/system/sensitive/booking/" + bookingId);
+        // 审计记录只存预约、用户标识和查询结果,绝不写入手机号、身份证号等明文。
+        audit.put("requestParams", "bookingId=" + bookingId + ", appUserId="
+                + (booking == null || booking.getAppUserId() == null ? "-" : booking.getAppUserId())
+                + ", targetUserName=" + (userName(user) == null ? "-" : userName(user)));
+        audit.put("userId", UserExt.getUser().getId());
+        audit.put("userAccount", "admin");
+        audit.put("result", result);
+        audit.put("createdAt", new Date());
+        auditWriter.append(audit);
+    }
+
     private String userName(Map<String, Object> user) {
         if (user == null || user.get("name") == null) return null;
         return String.valueOf(user.get("name"));
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java
index 045f9b7..8dd2487 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java
@@ -90,8 +90,8 @@
         HttpServletRequest request = HttpKit.getRequest();
         queryCoursePackageLists.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryCoursePackageLists.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryCoursePackageLists.setSort(request.getParameter("sort"));
-        queryCoursePackageLists.setOrder(request.getParameter("order"));
+        queryCoursePackageLists.setSort("id");
+        queryCoursePackageLists.setOrder("desc");
         Page<Map<String, Object>> mapPage = coursePackageClient.queryCoursePackageLists(queryCoursePackageLists);
         List<Map<String, Object>> records = mapPage.getRecords();
         for (Map<String, Object> record : records) {
@@ -360,8 +360,8 @@
         HttpServletRequest request = HttpKit.getRequest();
         queryRegistrationRecord.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryRegistrationRecord.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryRegistrationRecord.setSort(request.getParameter("sort"));
-        queryRegistrationRecord.setOrder(request.getParameter("order"));
+        queryRegistrationRecord.setSort("id");
+        queryRegistrationRecord.setOrder("desc");
         Page<Map<String, Object>> mapPage = coursePackagePaymentClient.queryRegistrationRecord(queryRegistrationRecord);
         return mapPage;
     }
@@ -379,8 +379,8 @@
         HttpServletRequest request = HttpKit.getRequest();
         queryClassRecord.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryClassRecord.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryClassRecord.setSort(request.getParameter("sort"));
-        queryClassRecord.setOrder(request.getParameter("order"));
+        queryClassRecord.setSort("id");
+        queryClassRecord.setOrder("desc");
         Page<Map<String, Object>> mapPage = coursePackageSchedulingClient.queryCoursePackageSchedulingList(queryClassRecord);
         return mapPage;
     }
@@ -400,8 +400,8 @@
         HttpServletRequest request = HttpKit.getRequest();
         queryCoursePackageStudentList.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryCoursePackageStudentList.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryCoursePackageStudentList.setSort(request.getParameter("sort"));
-        queryCoursePackageStudentList.setOrder(request.getParameter("order"));
+        queryCoursePackageStudentList.setSort("id");
+        queryCoursePackageStudentList.setOrder("desc");
         return coursePackageStudentClient.queryCoursePackageStudentList(queryCoursePackageStudentList);
     }
 
@@ -635,8 +635,8 @@
         HttpServletRequest request = HttpKit.getRequest();
         queryWalkInStudentList.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryWalkInStudentList.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryWalkInStudentList.setSort(request.getParameter("sort"));
-        queryWalkInStudentList.setOrder(request.getParameter("order"));
+        queryWalkInStudentList.setSort("id");
+        queryWalkInStudentList.setOrder("desc");
         return coursePackagePaymentClient.queryWalkInStudentList(queryWalkInStudentList);
     }
 
@@ -755,8 +755,8 @@
         HttpServletRequest request = HttpKit.getRequest();
         queryExamineCoursePackageLists.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryExamineCoursePackageLists.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryExamineCoursePackageLists.setSort(request.getParameter("sort"));
-        queryExamineCoursePackageLists.setOrder(request.getParameter("order"));
+        queryExamineCoursePackageLists.setSort("id");
+        queryExamineCoursePackageLists.setOrder("desc");
         Page<Map<String, Object>> mapPage = coursePackageClient.queryExamineCoursePackageLists(queryExamineCoursePackageLists);
         List<Map<String, Object>> records = mapPage.getRecords();
         for (Map<String, Object> record : records) {
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java
index a91e92b..7a7705b 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CourseServiceImpl.java
@@ -45,8 +45,8 @@
         queryCourseList.setName(name);
         queryCourseList.setLimit(Integer.valueOf(request.getParameter("limit")));
         queryCourseList.setOffset(Integer.valueOf(request.getParameter("offset")));
-        queryCourseList.setSort(request.getParameter("sort"));
-        queryCourseList.setOrder(request.getParameter("order"));
+        queryCourseList.setSort("id");
+        queryCourseList.setOrder("desc");
         Page<Map<String, Object>> mapPage = courseClient.queryCourseLists(queryCourseList);
         return mapPage;
     }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TSiteServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TSiteServiceImpl.java
index 1fca8ba..eb1fa89 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TSiteServiceImpl.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TSiteServiceImpl.java
@@ -101,7 +101,7 @@
         // 通过日期 确定周X 查询设置的可以约时间段和金额 封装基础时间段数据
         LambdaQueryWrapper<TSitePrice> tSitePriceLambdaQueryWrapper = new LambdaQueryWrapper<>();
         tSitePriceLambdaQueryWrapper.eq(TSitePrice::getSiteId, id);
-        tSitePriceLambdaQueryWrapper.orderByAsc(TSitePrice::getStartTime);
+        tSitePriceLambdaQueryWrapper.orderByDesc(TSitePrice::getStartTime);
         tSitePriceLambdaQueryWrapper.eq(TSitePrice::getTargetAudience, targetAudience);
         tSitePriceLambdaQueryWrapper.eq(TSitePrice::getDayOfWeek, dayOfWeek.getValue());
         if (StringUtils.isNotBlank(halfName)) {
diff --git a/cloud-server-management/src/main/resources/mapper/DeptMapper.xml b/cloud-server-management/src/main/resources/mapper/DeptMapper.xml
index 0927bb1..8795ba9 100644
--- a/cloud-server-management/src/main/resources/mapper/DeptMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/DeptMapper.xml
@@ -38,6 +38,7 @@
             </if>
             )
         </if>
+		order by id desc
 	</select>
     <select id="list" resultType="java.util.Map">
             select * from sys_dept where 1=1
@@ -60,7 +61,7 @@
             </if>
 
 
-            order by num ASC
+            order by num DESC
     </select>
 
 
diff --git a/cloud-server-management/src/main/resources/mapper/DictMapper.xml b/cloud-server-management/src/main/resources/mapper/DictMapper.xml
index 0af7a8a..52e319c 100644
--- a/cloud-server-management/src/main/resources/mapper/DictMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/DictMapper.xml
@@ -27,7 +27,7 @@
         select
         <include refid="Base_Column_List"/>
         from sys_dict
-        where pid in(select id  from sys_dict where code = #{code}) order by num asc
+        where pid in(select id  from sys_dict where code = #{code}) order by num desc
     </select>
 
     <select id="list" resultType="map">
@@ -36,7 +36,7 @@
         <if test="condition != null and condition != ''">
             AND name like CONCAT('%',#{condition},'%')
         </if>
-        order by id ASC
+        order by id DESC
     </select>
 
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/GateMapper.xml b/cloud-server-management/src/main/resources/mapper/GateMapper.xml
index fffb4aa..2d82cc5 100644
--- a/cloud-server-management/src/main/resources/mapper/GateMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/GateMapper.xml
@@ -28,5 +28,6 @@
                 #{id}
             </foreach>
         </if>
+        order by t1.id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/MenuMapper.xml b/cloud-server-management/src/main/resources/mapper/MenuMapper.xml
index 3171fb8..2e65b69 100644
--- a/cloud-server-management/src/main/resources/mapper/MenuMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/MenuMapper.xml
@@ -174,7 +174,7 @@
         ) m3 ON m1.id = m3.id
         where m1.ismenu = 1
         and m1.status = 1
-        order by levels,num asc
+        order by levels desc,num desc
     </select>
 
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/OpenCityBusinessMapper.xml b/cloud-server-management/src/main/resources/mapper/OpenCityBusinessMapper.xml
index f86720a..e8c254c 100644
--- a/cloud-server-management/src/main/resources/mapper/OpenCityBusinessMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/OpenCityBusinessMapper.xml
@@ -41,7 +41,7 @@
         <if test="null != province">
             and b.areaName = #{province}
         </if>
-        order by a.sort
+        order by a.sort desc, a.id desc
     </select>
 
 
@@ -57,6 +57,6 @@
         updateTime as updateTime,
         updateUser as updateUser
         from t_open_city_business
-        where flag != 3 and openCityId = #{id} order by sort
+        where flag != 3 and openCityId = #{id} order by sort desc, id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/OpenCityMapper.xml b/cloud-server-management/src/main/resources/mapper/OpenCityMapper.xml
index f7ea004..d7aa87e 100644
--- a/cloud-server-management/src/main/resources/mapper/OpenCityMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/OpenCityMapper.xml
@@ -35,7 +35,7 @@
         cityName as cityName,
         provinceName as provinceName,
         flag as flag,
-        from t_open_city where flag = 1
+        from t_open_city where flag = 1 order by id desc
     </select>
 
 
@@ -54,7 +54,7 @@
         insertUser as insertUser,
         updateTime as updateTime,
         updateUser as updateUser
-        from t_open_city where flag = 1 and code = #{code}
+        from t_open_city where flag = 1 and code = #{code} order by id desc
     </select>
     <select id="selectList1" resultType="com.dsh.course.entity.OpenCity">
         select
@@ -74,7 +74,7 @@
             any_value( insertUser) as insertUser,
             any_value( updateTime) as updateTime,
             any_value( updateUser) as updateUser
-         from t_open_city where flag != 3 group by areaId
+         from t_open_city where flag != 3 group by areaId order by max(id) desc
     </select>
     <select id="selectListCity" resultType="com.dsh.course.entity.OpenCity">
         select t1.id,
@@ -112,7 +112,7 @@
         from t_open_city t1
         left join t_city t2 on (t1.areaId = t2.id)
         left join t_city t3 on (t1.cityId = t3.id)
-        where flag != 3 group by t1.areaId
+        where flag != 3 group by t1.areaId order by max(t1.id) desc
     </select>
     <select id="selectListCity1" resultType="com.dsh.course.entity.OpenCity">
         select t1.id,
@@ -150,6 +150,6 @@
         t1.insertTime,
         t1.insertUser,
         t1.updateTime,
-        t1.updateUser from t_open_city t1 left join t_city t2 on (t1.areaId = t2.id)  left join t_city t3 on (t1.cityId = t3.id) where flag != 3 and t1.areaId =#{code}
+        t1.updateUser from t_open_city t1 left join t_city t2 on (t1.areaId = t2.id)  left join t_city t3 on (t1.cityId = t3.id) where flag != 3 and t1.areaId =#{code} order by t1.id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/PhoneMapper.xml b/cloud-server-management/src/main/resources/mapper/PhoneMapper.xml
index 36fea36..05a531e 100644
--- a/cloud-server-management/src/main/resources/mapper/PhoneMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/PhoneMapper.xml
@@ -32,6 +32,7 @@
             and areaCode = #{code}
         </if>
         )
+        order by id desc
     </select>
 
 
@@ -63,6 +64,7 @@
             </if>
             )
         </if>
+        order by id desc
     </select>
 
 
@@ -80,6 +82,7 @@
         <if test="null != companyId">
             and companyId = #{companyId}
         </if>
+        order by id desc
     </select>
 
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/PushOrderMapper.xml b/cloud-server-management/src/main/resources/mapper/PushOrderMapper.xml
index 98c45c1..95d5fe6 100644
--- a/cloud-server-management/src/main/resources/mapper/PushOrderMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/PushOrderMapper.xml
@@ -30,5 +30,6 @@
         <if test="null != pushType">
             and pushType = #{pushType}
         </if>
+        order by id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/RoleMapper.xml b/cloud-server-management/src/main/resources/mapper/RoleMapper.xml
index 1165d80..63e7734 100644
--- a/cloud-server-management/src/main/resources/mapper/RoleMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/RoleMapper.xml
@@ -29,6 +29,7 @@
 		<if test="objectType == 1">
 			and rr.objType =1
 		</if>
+		order by rr.id desc
 	</select>
 
 	<delete id="deleteRolesById">
@@ -48,6 +49,7 @@
 		<if test="type == 2">
 			and version = #{creatorId}
 		</if>
+		order by id desc
 	</select>
 
 		<select id="roleTreeListByRoleId" resultType="com.dsh.course.model.node.ZTreeNode">
@@ -105,7 +107,7 @@
 			</if>
 		</where>
 		ORDER BY
-		pId,
-		num ASC
+		pId DESC,
+		num DESC
 	</select>
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/ServerCarModelMapper.xml b/cloud-server-management/src/main/resources/mapper/ServerCarModelMapper.xml
index 284d7cd..e1c3634 100644
--- a/cloud-server-management/src/main/resources/mapper/ServerCarModelMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/ServerCarModelMapper.xml
@@ -16,6 +16,6 @@
 
 
     <select id="queryServerCarModel" resultType="com.dsh.course.entity.ServerCarModel">
-        select * from t_server_carmodel where state = 1 and `type` = #{type}
+        select * from t_server_carmodel where state = 1 and `type` = #{type} order by id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/SysIntegralMapper.xml b/cloud-server-management/src/main/resources/mapper/SysIntegralMapper.xml
index 1a29bce..643273a 100644
--- a/cloud-server-management/src/main/resources/mapper/SysIntegralMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/SysIntegralMapper.xml
@@ -13,6 +13,6 @@
 
 
     <select id="query" resultType="com.dsh.course.entity.SysIntegral">
-        select * from t_sys_integral where companyId = #{companyId}
+        select * from t_sys_integral where companyId = #{companyId} order by id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/TEvaluationMapper.xml b/cloud-server-management/src/main/resources/mapper/TEvaluationMapper.xml
index d989c61..5eaaca9 100644
--- a/cloud-server-management/src/main/resources/mapper/TEvaluationMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TEvaluationMapper.xml
@@ -25,9 +25,10 @@
                 #{id}
             </foreach>
         </if>
+        order by t1.id desc
     </select>
     <select id="info" resultType="com.dsh.guns.modular.system.model.TEvaluationListVo">
         select t1.id,t1.appUserId,t1.score,t1.insertTime time,t1.imgs,t1.content,t2.name shopName,t2.province pName,t2.city cName from t_store_evaluation t1 left join t_store t2 on t1.storeId =t2.id
         where t1.id =#{id}
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/TNoticesMapper.xml b/cloud-server-management/src/main/resources/mapper/TNoticesMapper.xml
index 33e9f7b..1cc3f8a 100644
--- a/cloud-server-management/src/main/resources/mapper/TNoticesMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TNoticesMapper.xml
@@ -46,6 +46,7 @@
         <if test="type == 1">
             and isShow = 1
         </if>
+        order by id desc
     </select>
 
 
@@ -79,6 +80,6 @@
                 and o.language =#{yy}
             </if>
         </where>
-        order by o.sort asc,o.insertTime desc
+        order by o.sort desc,o.insertTime desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml b/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
index cf50d24..cb14596 100644
--- a/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
@@ -28,8 +28,9 @@
         <if test="type != null and type != ''">
             and t1.type =  #{type}
         </if>
+        order by t1.id desc
     </select>
     <select id="getBankList" resultType="com.dsh.guns.modular.system.model.Bank">
-        select * from t_bank
+        select * from t_bank order by id desc
     </select>
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/TOperatorUserMapper.xml b/cloud-server-management/src/main/resources/mapper/TOperatorUserMapper.xml
index 79aa256..e34359b 100644
--- a/cloud-server-management/src/main/resources/mapper/TOperatorUserMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TOperatorUserMapper.xml
@@ -48,7 +48,7 @@
         <if test="state !=null ">
             and t1.audit = #{state}
         </if>
-        ORDER BY t1.id;
+        ORDER BY t1.id DESC;
 
     </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 7c498eb..423ef7d 100644
--- a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
@@ -58,6 +58,7 @@
         <if test="operatorId !=null and operatorId !=''">
             and t1.operatorId = #{operatorId}
         </if>
+        order by t1.id desc
     </select>
     <select id="queryProvince" resultType="map">
         select * from (
@@ -119,21 +120,22 @@
         <if test="storeName != null and storeName != ''">
             and `name` like CONCAT('%',#{storeName},'%')
         </if>
+        order by id desc
     </select>
     <select id="listOne" resultType="java.util.Map">
-        select id,name,sort,state from t_store_other where storeId=#{id}
+        select id,name,sort,state from t_store_other where storeId=#{id} order by id desc
     </select>
     <select id="typeChange" resultType="java.util.Map">
-        select t1.id,t1.name from t_turn t1 left join  t_turn t2 on t1.pid = t2.id where t2.name  =#{name}
+        select t1.id,t1.name from t_turn t1 left join  t_turn t2 on t1.pid = t2.id where t2.name  =#{name} order by t1.id desc
     </select>
     <select id="typeChangeOne" resultType="java.util.Map">
-        select id,name from t_turn  where pid  =#{id}
+        select id,name from t_turn  where pid  =#{id} order by id desc
     </select>
     <select id="getConfig" resultType="java.lang.String">
         select name from t_turn where id =#{page}
     </select>
     <select id="listTwo" resultType="java.util.Map">
-        select id,url,name ,  page,sort from t_store_other_config
+        select id,url,name ,  page,sort from t_store_other_config order by id desc
     </select>
 
     <select id="getPage" resultType="com.dsh.guns.modular.system.model.TTurn">
@@ -146,9 +148,10 @@
                 </foreach>
             </if>
         </where>
+        order by t_turn.id desc
     </select>
     <select id="pageList" resultType="com.dsh.guns.modular.system.model.TTurn">
-        select * from t_turn where pid = 0
+        select * from t_turn where pid = 0 order by id desc
     </select>
     <select id="get" resultType="com.dsh.course.dto.JsDto">
         select * from t_js where  id = #{id}
@@ -157,7 +160,7 @@
 
 
     <select id="getConfig1" resultType="com.dsh.guns.modular.system.model.TImgConfig">
-        select * from t_img_config
+        select * from t_img_config order by id desc
     </select>
 
 
@@ -167,6 +170,7 @@
         SELECT op.id , CONCAT(us.name,'-',us.`phone`) as value
         FROM t_operator op
             LEFT JOIN sys_user us on op.userId = us.id
+        order by op.id desc
 
 
 
@@ -190,6 +194,7 @@
         <if test="shopName !=null and shopName !=''">
             and t1.name like concat("%",#{shopName},"%")
         </if>
+        order by t1.id desc
     </select>
     <select id="querySiteListOfpage" resultType="java.util.Map">
         SELECT t1.id, t2.operatorId, t1.province, t1.city, t2.name,t1.ids,t1.name as siteName
@@ -212,6 +217,7 @@
         <if test="storeId != null">
             and t1.storeId = #{storeId}
         </if>
+        order by t1.id desc
     </select>
     <select id="querySiteListOfpageOperator" resultType="java.util.Map">
         SELECT t1.id, t2.operatorId, t1.province, t1.city, t2.name,t1.ids,t1.name as siteName
@@ -235,7 +241,7 @@
                 #{id}
             </foreach>
         </if>
-
+        order by t1.id desc
     </select>
 
     <select id="listStoreAll" resultType="map">
@@ -261,6 +267,7 @@
         <if test="null != cityCode and '' != cityCode">
             and a.cityCode = #{cityCode}
         </if>
+        order by a.id desc
     </select>
 
 
@@ -279,5 +286,6 @@
         <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
             #{item}
         </foreach>
+        order by a.id desc
     </select>
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/UserMapper.xml b/cloud-server-management/src/main/resources/mapper/UserMapper.xml
index 7442ae8..116b886 100644
--- a/cloud-server-management/src/main/resources/mapper/UserMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/UserMapper.xml
@@ -53,6 +53,7 @@
 		<if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
 			and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
 		</if>
+		order by id desc
 	</select>
 
 	<update id="setStatus">
@@ -160,6 +161,7 @@
 			</if>
 			and t1.status != 3
 		</where>
+		order by t1.id desc
 	</select>
 
 </mapper>
diff --git a/cloud-server-management/src/main/resources/mapper/VipMapper.xml b/cloud-server-management/src/main/resources/mapper/VipMapper.xml
index 56e172d..731bdf8 100644
--- a/cloud-server-management/src/main/resources/mapper/VipMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/VipMapper.xml
@@ -12,5 +12,6 @@
         <if test="status != null">
             and status = #{status}
         </if>
+        order by id desc
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
index 7167686..ba206ef 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
@@ -304,6 +304,11 @@
 <script src="${ctxPath}/modular/system/dataStatistics/tSite.js"></script>
 <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script>
 <script>
+    // 仅格式化前端展示,接口返回的原始数值不作改动。
+    function formatStatisticNumber(value) {
+        var number = Number(value);
+        return isFinite(number) ? number.toFixed(2) : '0.00';
+    }
 
     var weekX = ["1周","2周","3周","4周"];
     var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
@@ -381,21 +386,21 @@
             var netIncomeAmount = document.getElementById("netIncomeAmount");
             var couponDeductionAmount = document.getElementById("couponDeductionAmount");
             var refundAmount = document.getElementById("refundAmount");
-            t1.innerText = list[0] || 0;
-            t2.innerText = "年度应收:"+list[1]+"         ";
-            netIncomeAmount.innerText = resp.netIncomeAmount || 0;
-            couponDeductionAmount.innerText = resp.couponDeductionAmount || 0;
-            refundAmount.innerText = resp.refundAmount || 0;
+            t1.innerText = formatStatisticNumber(list[0]);
+            t2.innerText = "年度应收:" + formatStatisticNumber(list[1]) + "         ";
+            netIncomeAmount.innerText = formatStatisticNumber(resp.netIncomeAmount);
+            couponDeductionAmount.innerText = formatStatisticNumber(resp.couponDeductionAmount);
+            refundAmount.innerText = formatStatisticNumber(resp.refundAmount);
             var incomeTypeNet = resp.incomeTypeNet || {};
-            $("#fee1").text(incomeTypeNet[1] || 0);
-            $("#fee2").text(incomeTypeNet[2] || 0);
-            $("#fee3").text(incomeTypeNet[3] || 0);
-            $("#fee4").text(incomeTypeNet[4] || 0);
-            $("#fee5").text(incomeTypeNet[5] || 0);
-            $("#fee7").text(incomeTypeNet[6] || 0);
-            t3.innerText = "月度营收:"+list[2]+"         ";
-            t4.innerText = "周度营收:"+list[3]+"         ";
-            t5.innerText = "日度营收:"+list[4]+"         ";
+            $("#fee1").text(formatStatisticNumber(incomeTypeNet[1]));
+            $("#fee2").text(formatStatisticNumber(incomeTypeNet[2]));
+            $("#fee3").text(formatStatisticNumber(incomeTypeNet[3]));
+            $("#fee4").text(formatStatisticNumber(incomeTypeNet[4]));
+            $("#fee5").text(formatStatisticNumber(incomeTypeNet[5]));
+            $("#fee7").text(formatStatisticNumber(incomeTypeNet[6]));
+            t3.innerText = "月度营收:" + formatStatisticNumber(list[2]) + "         ";
+            t4.innerText = "周度营收:" + formatStatisticNumber(list[3]) + "         ";
+            t5.innerText = "日度营收:" + formatStatisticNumber(list[4]) + "         ";
             var year =  resp.yearIncome;
             var month =  resp.monthIncome;
             var week =  resp.weekIncome;
@@ -1471,10 +1476,10 @@
             return;
         }
         var ajax3 = new $ax(Feng.ctxPath + "/data/backYys", function(data){
-            $("#back1").text(data.thisYear);
-            $("#back2").text(data.thisMonth);
-            $("#back3").text(data.thisWeek);
-            $("#back4").text(data.thisDay);
+            $("#back1").text(formatStatisticNumber(data.thisYear));
+            $("#back2").text(formatStatisticNumber(data.thisMonth));
+            $("#back3").text(formatStatisticNumber(data.thisWeek));
+            $("#back4").text(formatStatisticNumber(data.thisDay));
             option1 = {
                 tooltip: {
                     trigger: 'axis'
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 7dd965b..53032c3 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
@@ -350,6 +350,11 @@
 <script src="${ctxPath}/modular/system/dataStatistics/echarts.min.js"></script>
 <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script>
 <script>
+    // 仅格式化前端展示,接口返回的原始数值不作改动。
+    function formatStatisticNumber(value) {
+        var number = Number(value);
+        return isFinite(number) ? number.toFixed(2) : '0.00';
+    }
 	laydate.render({
 		elem: '#beginTime'
 		, trigger: 'click'
@@ -359,17 +364,17 @@
         var time =  $("#beginTime").val();
         // 营收卡片与收入类型卡片使用同一接口、同一时间范围,避免筛选后口径不一致。
         var incomeAjax = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){
-            $("#totalIncome").text(resp.incomeStatistics.totalIncomeAmount || 0);
-            $("#netIncomeAmount").text(resp.incomeStatistics.netIncomeAmount || 0);
-            $("#couponDeductionAmount").text(resp.incomeStatistics.couponDeductionAmount || 0);
-            $("#refundAmount").text(resp.incomeStatistics.refundAmount || 0);
+            $("#totalIncome").text(formatStatisticNumber(resp.incomeStatistics.totalIncomeAmount));
+            $("#netIncomeAmount").text(formatStatisticNumber(resp.incomeStatistics.netIncomeAmount));
+            $("#couponDeductionAmount").text(formatStatisticNumber(resp.incomeStatistics.couponDeductionAmount));
+            $("#refundAmount").text(formatStatisticNumber(resp.incomeStatistics.refundAmount));
             var incomeTypeNet = resp.incomeTypeNet || {};
-            $("#fee1").text(incomeTypeNet[1] || 0);
-            $("#fee2").text(incomeTypeNet[2] || 0);
-            $("#fee3").text(incomeTypeNet[3] || 0);
-            $("#fee4").text(incomeTypeNet[4] || 0);
-            $("#fee5").text(incomeTypeNet[5] || 0);
-            $("#fee7").text(incomeTypeNet[6] || 0);
+            $("#fee1").text(formatStatisticNumber(incomeTypeNet[1]));
+            $("#fee2").text(formatStatisticNumber(incomeTypeNet[2]));
+            $("#fee3").text(formatStatisticNumber(incomeTypeNet[3]));
+            $("#fee4").text(formatStatisticNumber(incomeTypeNet[4]));
+            $("#fee5").text(formatStatisticNumber(incomeTypeNet[5]));
+            $("#fee7").text(formatStatisticNumber(incomeTypeNet[6]));
             renderTicketIncomeChart(resp.ticketIncome || {});
         });
         incomeAjax.set("time", time);
@@ -432,18 +437,18 @@
 
     function renderIncomeStatistics(elementId, periodName, statistics) {
         document.getElementById(elementId).innerText = periodName + "统计:总营收金额 "
-            + statistics.totalIncomeAmount + ",净收入金额 " + statistics.netIncomeAmount
-            + ",优惠券抵扣金额 " + statistics.couponDeductionAmount + ",退款金额 "
-            + statistics.refundAmount;
+            + formatStatisticNumber(statistics.totalIncomeAmount) + ",净收入金额 " + formatStatisticNumber(statistics.netIncomeAmount)
+            + ",优惠券抵扣金额 " + formatStatisticNumber(statistics.couponDeductionAmount) + ",退款金额 "
+            + formatStatisticNumber(statistics.refundAmount);
     }
 
     function renderIncomeStatisticsList(elementId, title, labels, statistics) {
         var records = labels.map(function (label, index) {
             var item = statistics[index];
             return '<div class="income-period-record"><strong>' + label + '</strong>:总营收金额 '
-                + item.totalIncomeAmount + ',净收入金额 ' + item.netIncomeAmount
-                + ',优惠券抵扣金额 ' + item.couponDeductionAmount
-                + ',退款金额 ' + item.refundAmount + '</div>';
+                + formatStatisticNumber(item.totalIncomeAmount) + ',净收入金额 ' + formatStatisticNumber(item.netIncomeAmount)
+                + ',优惠券抵扣金额 ' + formatStatisticNumber(item.couponDeductionAmount)
+                + ',退款金额 ' + formatStatisticNumber(item.refundAmount) + '</div>';
         }).join('');
         document.getElementById(elementId).innerHTML = '<div class="income-period-title">' + title
             + '</div><div class="income-period-records">' + records + '</div>';
@@ -458,10 +463,10 @@
                 formatter: function (params) {
                     var item = params[0];
                     var detail = statistics[item.dataIndex];
-                    return labels[item.dataIndex] + '<br/>总营收:' + detail.totalIncomeAmount
-                        + '<br/>净收入:' + detail.netIncomeAmount
-                        + '<br/>优惠券抵扣:' + detail.couponDeductionAmount
-                        + '<br/>退款:' + detail.refundAmount;
+                    return labels[item.dataIndex] + '<br/>总营收:' + formatStatisticNumber(detail.totalIncomeAmount)
+                        + '<br/>净收入:' + formatStatisticNumber(detail.netIncomeAmount)
+                        + '<br/>优惠券抵扣:' + formatStatisticNumber(detail.couponDeductionAmount)
+                        + '<br/>退款:' + formatStatisticNumber(detail.refundAmount);
                 }
             },
             grid: {left: '5%', right: '4%', bottom: '18%', containLabel: true},
@@ -539,10 +544,10 @@
             var netIncomeAmount = document.getElementById("netIncomeAmount");
             var couponDeductionAmount = document.getElementById("couponDeductionAmount");
             var refundAmount = document.getElementById("refundAmount");
-            t1.innerText = list[0] || 0;
-            netIncomeAmount.innerText = resp.incomeStatistics.netIncomeAmount || 0;
-            couponDeductionAmount.innerText = resp.incomeStatistics.couponDeductionAmount || 0;
-            refundAmount.innerText = resp.incomeStatistics.refundAmount || 0;
+            t1.innerText = formatStatisticNumber(list[0]);
+            netIncomeAmount.innerText = formatStatisticNumber(resp.incomeStatistics.netIncomeAmount);
+            couponDeductionAmount.innerText = formatStatisticNumber(resp.incomeStatistics.couponDeductionAmount);
+            refundAmount.innerText = formatStatisticNumber(resp.incomeStatistics.refundAmount);
             renderIncomeStatisticsList("yearIncomeStatistics", "历年营收明细", resp.yearLabels, resp.yearIncomeStatistics);
             renderIncomeStatisticsList("monthIncomeStatistics", "本年各月营收明细", resp.monthLabels, resp.monthIncomeStatistics);
             renderIncomeStatisticsList("weekIncomeStatistics", "近四周营收明细", resp.weekLabels, resp.weekIncomeStatistics);
@@ -551,10 +556,10 @@
             renderIncomeTrendChart("incomeMonthChart", "本年各月营收趋势", resp.monthLabels, resp.monthIncomeStatistics);
             renderIncomeTrendChart("incomeWeekChart", "近四周营收趋势", resp.weekLabels, resp.weekIncomeStatistics);
             renderIncomeTrendChart("incomeDayChart", "近七日营收趋势", resp.dayLabels, resp.dayIncomeStatistics);
-            $("#back1").text(resp.yearIncomeStatistics[resp.yearIncomeStatistics.length - 1].refundAmount || 0);
-            $("#back2").text(resp.monthIncomeStatistics[new Date().getMonth()].refundAmount || 0);
-            $("#back3").text(resp.weekIncomeStatistics[resp.weekIncomeStatistics.length - 1].refundAmount || 0);
-            $("#back4").text(resp.dayIncomeStatistics[resp.dayIncomeStatistics.length - 1].refundAmount || 0);
+            $("#back1").text(formatStatisticNumber(resp.yearIncomeStatistics[resp.yearIncomeStatistics.length - 1].refundAmount));
+            $("#back2").text(formatStatisticNumber(resp.monthIncomeStatistics[new Date().getMonth()].refundAmount));
+            $("#back3").text(formatStatisticNumber(resp.weekIncomeStatistics[resp.weekIncomeStatistics.length - 1].refundAmount));
+            $("#back4").text(formatStatisticNumber(resp.dayIncomeStatistics[resp.dayIncomeStatistics.length - 1].refundAmount));
             renderRefundChart(myChart1, resp);
         });
         ajax.set("type",1);
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
index 3e88fa6..e7db838 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
@@ -280,6 +280,11 @@
 <script src="${ctxPath}/modular/system/dataStatistics/tSite.js"></script>
 <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script>
 <script>
+    // 仅格式化前端展示,接口返回的原始数值不作改动。
+    function formatStatisticNumber(value) {
+        var number = Number(value);
+        return isFinite(number) ? number.toFixed(2) : '0.00';
+    }
 
 
     function search(){
@@ -306,9 +311,9 @@
         var records = labels.map(function (label, index) {
             var item = statistics[index];
             return '<div class="income-period-record"><strong>' + label + '</strong>:总营收金额 '
-                + item.totalIncomeAmount + ',净收入金额 ' + item.netIncomeAmount
-                + ',优惠券抵扣金额 ' + item.couponDeductionAmount + ',退款金额 '
-                + item.refundAmount + '</div>';
+                + formatStatisticNumber(item.totalIncomeAmount) + ',净收入金额 ' + formatStatisticNumber(item.netIncomeAmount)
+                + ',优惠券抵扣金额 ' + formatStatisticNumber(item.couponDeductionAmount) + ',退款金额 '
+                + formatStatisticNumber(item.refundAmount) + '</div>';
         }).join('');
         document.getElementById(elementId).innerHTML = '<div class="income-period-title">' + title
             + '</div><div class="income-period-records">' + records + '</div>';
@@ -320,9 +325,9 @@
             title: {text: title, left: 'center', textStyle: {fontSize: 15}},
             tooltip: {trigger: 'axis', formatter: function (params) {
                 var detail = statistics[params[0].dataIndex];
-                return labels[params[0].dataIndex] + '<br/>总营收:' + detail.totalIncomeAmount
-                    + '<br/>净收入:' + detail.netIncomeAmount + '<br/>优惠券抵扣:'
-                    + detail.couponDeductionAmount + '<br/>退款:' + detail.refundAmount;
+                return labels[params[0].dataIndex] + '<br/>总营收:' + formatStatisticNumber(detail.totalIncomeAmount)
+                    + '<br/>净收入:' + formatStatisticNumber(detail.netIncomeAmount) + '<br/>优惠券抵扣:'
+                    + formatStatisticNumber(detail.couponDeductionAmount) + '<br/>退款:' + formatStatisticNumber(detail.refundAmount);
             }},
             grid: {left: '5%', right: '4%', bottom: '18%', containLabel: true},
             xAxis: {type: 'category', boundaryGap: false, data: labels, axisLabel: {rotate: labels.length > 7 ? 35 : 0, interval: 0}},
@@ -335,17 +340,17 @@
     function income(){
         var ajax = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){
             yearX = resp.year;
-            $("#totalIncome").text(resp.incomeStatistics.totalIncomeAmount || 0);
-            $("#netIncomeAmount").text(resp.incomeStatistics.netIncomeAmount || 0);
-            $("#couponDeductionAmount").text(resp.incomeStatistics.couponDeductionAmount || 0);
-            $("#refundAmount").text(resp.incomeStatistics.refundAmount || 0);
+            $("#totalIncome").text(formatStatisticNumber(resp.incomeStatistics.totalIncomeAmount));
+            $("#netIncomeAmount").text(formatStatisticNumber(resp.incomeStatistics.netIncomeAmount));
+            $("#couponDeductionAmount").text(formatStatisticNumber(resp.incomeStatistics.couponDeductionAmount));
+            $("#refundAmount").text(formatStatisticNumber(resp.incomeStatistics.refundAmount));
             var incomeTypeNet = resp.incomeTypeNet || {};
-            $("#fee1").text(incomeTypeNet[1] || 0);
-            $("#fee2").text(incomeTypeNet[2] || 0);
-            $("#fee3").text(incomeTypeNet[3] || 0);
-            $("#fee4").text(incomeTypeNet[4] || 0);
-            $("#fee5").text(incomeTypeNet[5] || 0);
-            $("#fee7").text(incomeTypeNet[6] || 0);
+            $("#fee1").text(formatStatisticNumber(incomeTypeNet[1]));
+            $("#fee2").text(formatStatisticNumber(incomeTypeNet[2]));
+            $("#fee3").text(formatStatisticNumber(incomeTypeNet[3]));
+            $("#fee4").text(formatStatisticNumber(incomeTypeNet[4]));
+            $("#fee5").text(formatStatisticNumber(incomeTypeNet[5]));
+            $("#fee7").text(formatStatisticNumber(incomeTypeNet[6]));
             renderIncomeStatisticsList("yearIncomeStatistics", "历年营收明细", resp.yearLabels, resp.yearIncomeStatistics);
             renderIncomeStatisticsList("monthIncomeStatistics", "本年各月营收明细", resp.monthLabels, resp.monthIncomeStatistics);
             renderIncomeStatisticsList("weekIncomeStatistics", "近四周营收明细", resp.weekLabels, resp.weekIncomeStatistics);
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
index b38837a..990e9d4 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
@@ -138,14 +138,14 @@
             Collections.sort(listVo, new Comparator<StoreConfigVo>() {
                 @Override
                 public int compare(StoreConfigVo o1, StoreConfigVo o2) {
-                    return o1.getSort().compareTo(o2.getSort());
+                    return Comparator.nullsLast(Integer::compareTo).compare(o1.getSort(), o2.getSort());
                 }
             });
             //排序
             Collections.sort(listVo, new Comparator<StoreConfigVo>() {
                 @Override
                 public int compare(StoreConfigVo o1, StoreConfigVo o2) {
-                    return o1.getIsTop().compareTo(o2.getIsTop()) * -1;
+                    return Comparator.nullsLast(Integer::compareTo).compare(o2.getIsTop(), o1.getIsTop());
                 }
             });
             for (int i = 0; i < listVo.size(); i++) {
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
index a01492b..d05d8818ea 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -895,6 +895,7 @@
             siteBooking.setPayMoney(BigDecimal.ZERO.doubleValue());
             siteBooking.setPayTime(new Date());
             siteBookingService.updateById(siteBooking);
+            consumeCouponAfterSuccessfulPayment(siteBooking);
             HashMap<String, String> map = new HashMap<>();
             map.put("siteBooking", siteBooking.getId().toString());
             return ResultUtil.success(map);
@@ -1043,9 +1044,25 @@
         siteBooking.setPayTime(new Date());
         siteBooking.setStatus(1);
         siteBookingService.updateById(siteBooking);
+        consumeCouponAfterSuccessfulPayment(siteBooking);
         HashMap<String, String> map = new HashMap<>();
         map.put("siteBooking", siteBooking.getId().toString());
         return ResultUtil.success(map);
+    }
+
+    /**
+     * 场地订单实际支付成功后才核销所选优惠券;避免仅创建待支付订单就提前消耗优惠券。
+     */
+    private void consumeCouponAfterSuccessfulPayment(SiteBooking siteBooking) {
+        if (siteBooking.getUserCouponId() == null || siteBooking.getUserCouponId() == 0) {
+            return;
+        }
+        UserCoupon userCoupon = userCouponClient.queryUserCouponById(
+                new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(), siteBooking.getAppUserId()));
+        if (userCoupon != null && Integer.valueOf(1).equals(userCoupon.getStatus())) {
+            userCoupon.setStatus(2);
+            userCouponClient.updateUserCoupon(userCoupon);
+        }
     }
 
 
@@ -1285,12 +1302,6 @@
             userCoupon.setStatus(2);
             userCouponClient.updateUserCoupon(userCoupon);
         }
-        if (null != couponId && payType == 3) {
-            UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(), appUser.getId()));
-            userCoupon.setStatus(1);
-            userCouponClient.updateUserCoupon(userCoupon);
-        }
-
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         siteBooking.setOrderNo(sdf.format(new Date()) + UUIDUtil.getNumberRandom(3));
 
@@ -1299,9 +1310,6 @@
             siteBooking.setPayMoney(playCoin.doubleValue());
         } else {
             siteBooking.setPayMoney(money.doubleValue());
-        }
-        if (payType == 3) {
-            siteBooking.setUserCouponId(null);
         }
         siteBookingService.updateById(siteBooking);
         if (payType == 1) {//微信支付

--
Gitblit v1.7.1