From 88ac2574d89aed7c28b9c0370b19b8bb2d0364eb Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 07 一月 2025 19:02:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java                                        |    8 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java                                    |    5 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                                   | 1217 +++++++++-
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java                                        |   12 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java                                          |    3 
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentReq.java                                                 |    4 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/ChargingOrderQuery.java                                             |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java                                             |    4 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java                                           |   29 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java                     |   41 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java                                   |    3 
 ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml                                                                            |   60 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java                                       |   25 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java                       |   34 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java                       |   42 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java                                 |    8 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java                                        |   21 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java                                                             |  152 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java                                      |   15 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                                                    |   40 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java                                        |   68 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java                          |   24 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java                                |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java                                                          |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TNoticeController.java                                             |   14 
 ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml                                                                            |   61 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java |    3 
 ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml                                                                          |   56 
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java                                          |   88 
 ruoyi-gateway/src/main/resources/bootstrap.yml                                                                                        |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java                      |   12 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TVipService.java                                                      |    3 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java                              |   29 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java                      |  107 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/Page.java                                                                |   35 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java                                             |    7 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java                         |   53 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java                         |   48 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java                             |    8 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java                                      |   42 
 ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml                                                                           |   55 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java                                                    |   12 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java                      |   27 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml                                                     |   17 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java                                                   |    2 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java                      |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java                                  |   65 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java                                        |  137 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/domain/SiteMenu.java                                        |  153 +
 ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java                                               |   43 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java                          |   17 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/THtmlController.java                                               |   13 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingLotServiceImpl.java                        |   15 
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/config/AliProperties.java                                             |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java                                            |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java          |    6 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java                                              |  222 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java                   |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java                           |   22 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java                                        |  196 +
 ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/account/RuoYiAccountApplicationTests.java                                         |   24 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserTagController.java                                     |   18 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java                               |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                                      |  409 +++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java                                           |    2 
 ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/RuoYiChargingPileApplicationTests.java                          |   17 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml                                      |  149 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java                       |   10 
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/PaymentReq.java                                                 |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java                                        |  133 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java                                        |   22 
 ruoyi-auth/src/main/resources/bootstrap.yml                                                                                           |   56 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java                        |  114 +
 ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml                                                                      |   68 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java                         |    5 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java                                       |   25 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java    |    5 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java                                       |    5 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java                                        |    8 
 ruoyi-gateway/pom.xml                                                                                                                 |   30 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java                                             |   52 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java                                                |    2 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java                                                             |  100 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java                                               |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java                             |   30 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java                            |   30 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java                           |    9 
 ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java                             |   10 
 nacos_config_export_20241211152150.zip                                                                                                |    0 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java                                                |   31 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java                                   |    8 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java                             |    9 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java                          |    8 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java                                      |   43 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java                                   |   48 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml                                                |   12 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TCarportController.java                              |    8 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java                            |    8 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java                                          |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java                                      |   15 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java                                    |  262 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java                                        |    2 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java                                       |    2 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java                                           |   14 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/MongoChargingOrderQuery.java                                   |    1 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java             |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java                                 |   22 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java                                 |    7 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java                                           |   37 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java                                     |   16 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TransactionRecordMessage.java                        |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java                    |   43 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java                           |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java                               |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java                                              |    4 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml                                                                     |   55 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java                               |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java                                                           |    8 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java                           |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java                                                   |   12 
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentResp.java                                                |    6 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java                               |  326 ++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java                        |   12 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java                      |    5 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/RedisLock.java                                                           |   47 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/SwitchwayGateService.java                      |    2 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java                       |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java                                 |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                                            |   11 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java                                  |   94 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TMonitoringEquipmentServiceImpl.java               |   12 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java                      |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java          |   10 
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/v2/AppletPayUtil.java                                                 |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java                                          |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java                                                       |   24 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java                                              |    4 
 /dev/null                                                                                                                             |   50 
 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml                                                                          |   56 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java                                              |    2 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java                                           |   29 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java                |   12 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java                               |   36 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java                                 |   61 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java                                           |   19 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java                                      |    9 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java                                |   23 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java                      |   20 
 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java                                     |    7 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java                                        |    9 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java                                    |    3 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java                                  |    3 
 152 files changed, 4,950 insertions(+), 1,426 deletions(-)

diff --git a/nacos_config_export_20240805184122.zip b/nacos_config_export_20240805184122.zip
deleted file mode 100644
index 1844473..0000000
--- a/nacos_config_export_20240805184122.zip
+++ /dev/null
Binary files differ
diff --git a/nacos_config_export_20241211152150.zip b/nacos_config_export_20241211152150.zip
new file mode 100644
index 0000000..f312029
--- /dev/null
+++ b/nacos_config_export_20241211152150.zip
Binary files differ
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/domain/SiteMenu.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/domain/SiteMenu.java
new file mode 100644
index 0000000..31b6597
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/domain/SiteMenu.java
@@ -0,0 +1,153 @@
+package com.ruoyi.chargingPile.api.domain;
+
+
+import java.util.Arrays;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/9 15:28
+ */
+public enum SiteMenu {
+	//站点管理
+	SITE_LIST("/data/site"),
+	//站点计费策略
+	SITE_ACCOUNTING_STRATEGY("/data/site/accounting_strategy"),
+	//站点编辑
+	SITE_UPDATE("/data/site/update"),
+	//站点删除
+	SITE_DELETE("/data/site/delete"),
+	//充电桩信息
+	CHARGING_PILE("/data/charging_pile"),
+	//充电桩查看
+	CHARGING_PILE_QUERY_INFO("/data/charging_pile/query_info"),
+	//充电桩编辑
+	CHARGING_PILE_UPDATE("/data/charging_pile/update"),
+	//充电桩删除
+	CHARGING_PILE_DELETE("/data/charging_pile/delete"),
+	//充电桩新增接口
+	CHARGING_PILE_ADD_CHARGING_GUN("/data/charging_pile/add_charging_gun"),
+	//接口信息
+	CHARGING_GUN("/data/charging_gun"),
+	//接口编辑
+	CHARGING_GUN_UPDATE("/data/charging_gun/update"),
+	//接口删除
+	CHARGING_GUN_DELETE("/data/charging_gun/delete"),
+	//接口查看费率
+	CHARGING_GUN_VIEW_RATES("/data/charging_gun/view_rates"),
+	//接口下载二维码
+	CHARGING_GUN_DOWNLOAD_QR_CODE("/data/charging_gun/download_qr_code"),
+	//接口查看详情
+	CHARGING_GUN_QUERY_INFO("/data/charging_gun/query_info"),
+	//接口结束充电
+	CHARGING_GUN_END_CHARGE("/data/charging_gun/end_charge"),
+	//停车场配置
+	PARKING_LOT("/data/parking_lot"),
+	//停车场查看
+	PARKING_LOT_QUERY_INFO("/data/parking_lot/query_info"),
+	//停车场编辑
+	PARKING_LOT_UPDATE("/data/parking_lot/update"),
+	//停车场删除
+	PARKING_LOT_DELETE("/data/parking_lot/delete"),
+	//停车场监控
+	PARKING_LOT_MONITOR("/data/parking_lot/monitor"),
+	//停车场新增车库
+	PARKING_LOT_ADD_GARAGE("/data/parking_lot/add_garage"),
+	//监控管理
+	MONITOR("/data/monitor"),
+	//监控查看
+	MONITOR_QUERY_INFO("/data/monitor/query_info"),
+	//充电桩订单
+	CHARGING_PILE_ORDER("/data/charging_pile_order"),
+	//记录
+	CHARGING_PILE_ORDER_RECORD("/data/charging_pile_order/record"),
+	//充电订单监控记录
+	CHARGING_PILE_ORDER_MONITORING_RECORD("/data/charging_pile_order/monitoring_record"),
+	//详情
+	CHARGING_PILE_ORDER_MONITORING_RECORD_INFO("/data/charging_pile_order/monitoring_record/info"),
+	//删除
+	CHARGING_PILE_ORDER_MONITORING_RECORD_DEL("/data/charging_pile_order/monitoring_record/del"),
+	//订单申诉
+	ORDER_APPEAL("/data/order_appeal"),
+	//查看
+	ORDER_APPEAL_VIEW("/data/order_appeal/view"),
+	//处理
+	ORDER_APPEAL_HANDLE("/data/order_appeal/handle"),
+	//停车记录
+	PARKING_RECORD("/data/parking_record"),
+	//查看
+	PARKING_RECORD_VIEW("/data/parking_record/view"),
+	//已出场
+	PARKING_RECORD_EXIT_PARKING_LOT("/data/parking_record/exit_parking_lot"),
+	//充电评价
+	CHARGE_EVALUATION("/data/charge_evaluation"),
+	//回复
+	CHARGE_EVALUATION_ANSWER("/data/charge_evaluation/answer"),
+	//删除
+	CHARGE_EVALUATION_DEL("/data/charge_evaluation/del"),
+	//充电时段统计
+	CHARGING_PERIOD_STATISTICS("/data/charging_period_statistics"),
+	//订单详情
+	CHARGING_PERIOD_STATISTICS_ORDER_INFO("/data/charging_period_statistics/order_info"),
+	//充电曲线
+	CHARGING_PERIOD_STATISTICS_CHARGING_CURVE("/data/charging_period_statistics/charging_curve"),
+	//充电算账单
+	CHARGE_BILL_ORDER("/data/charge_bill_order"),
+	//下载
+	CHARGE_BILL_ORDER_DOWNLOAD("/data/charge_bill_order/download"),
+	//停车缴费订单
+	PARKING_PAYMENT_ORDER("/data/parking_payment_order"),
+	//账户结算账单
+	ACCOUNT_SETTLEMENT("/data/account_settlement"),
+	//下载
+	ACCOUNT_SETTLEMENT_DOWNLOAD("/data/account_settlement/download"),
+	//结算汇总表
+	SETTLEMENT_SUMMARY("/data/settlement_summary"),
+	//结算表记录
+	BALANCE_SHEET_RECORD("/data/balance_sheet_record"),
+	//下载
+	BALANCE_SHEET_RECORD_DOWNLOAD("/data/balance_sheet_record/download"),
+	//删除
+	BALANCE_SHEET_RECORD_DEL("/data/balance_sheet_record/del"),
+	//生成结算表
+	GENERATE_STATEMENT("/data/generate_statement"),
+	//充电设施监控
+	CHARGING_FACILITY_MONITORING("/data/charging_facility_monitoring"),
+	//故障信息列表
+	FAULT_INFORMATION_LIST("/data/fault_information_list"),
+	//删除
+	FAULT_INFORMATION_LIST_DEL("/data/fault_information_list/del"),
+	//报修记录
+	REPAIR_RECORD("/data/repair_record"),
+	//删除
+	REPAIR_RECORD_DEL("/data/repair_record/del"),
+	//电站分布
+	POWER_STATION_DISTRIBUTION("/data/power_station_distribution"),
+	//充电运营分析
+	CHARGING_OPERATION_ANALYSIS("/data/charging_operation_analysis"),
+	//充电用户分析
+	CHARGING_USER_ANALYSIS("/data/charging_user_analysis"),
+	//设备运营分析
+	PLANT_OPERATION_ANALYSIS("/data/plant_operation_analysis"),
+	//车场运营分析
+	PARKING_OPERATION_ANALYSIS("/data/parking_operation_analysis")
+	;
+	private String value;
+	
+	
+	SiteMenu(String value) {
+		this.value = value;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+	
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	public static SiteMenu getSiteMenu(String v){
+		SiteMenu siteMenu = Arrays.stream(SiteMenu.values()).filter(s -> s.getValue().equals(v)).findFirst().get();
+		return siteMenu;
+	}
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java
index 74e56bf..3caeadd 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java
@@ -49,6 +49,11 @@
             public R<TParkingLot> getParkingLotByAppKey(String appKey) {
                 return R.fail("根据停车场标识查询失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<Integer> getSiteIdByOrderId(Long id) {
+                return null;
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java
index f5053f5..b614702 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java
@@ -7,6 +7,7 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Set;
 
 
@@ -34,6 +35,56 @@
 			public R<Set<Integer>> authSite(Integer partnerId, String siteMenu) {
 				return R.fail("获取合作商授权的站点数据失败:" + throwable.getMessage());
 			}
-		};
+			
+			@Override
+			public Boolean authMenu(Integer partnerId, Integer siteId, String siteMenu) {
+				return false;
+			}
+
+            @Override
+            public R<List<Boolean>> getChargingBillMenu(Integer partnerId, Integer siteId) {
+				return R.fail("获取合作商授权的充电算帐单按钮权限失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public R<List<Boolean>> getChargingOrderMenu(Integer partnerId, Integer siteId) {
+                return null;
+            }
+
+			@Override
+			public R<List<Boolean>> getChargingListMenu(Integer partnerId, Integer siteId) {
+				return null;
+			}
+
+			@Override
+			public R<List<Boolean>> getSettlementListMenu(Integer partnerId, Integer siteId) {
+				return null;
+			}
+
+			@Override
+            public R<List<Boolean>> getAccountMenu(Integer partnerId, Integer siteId) {
+                return null;
+            }
+
+            @Override
+            public R<List<Boolean>> managePageListMenu(Integer partnerId, Integer siteId) {
+                return null;
+            }
+
+			@Override
+			public R<List<Boolean>> parkingRecordListMenu(Integer partnerId, Integer siteId) {
+				return null;
+			}
+
+			@Override
+			public R<List<Boolean>> watchChargingOrder(Integer partnerId, Integer siteId) {
+				return null;
+			}
+
+            @Override
+            public R<List<Boolean>> chargeEvaluation(Integer partnerId, Integer siteId) {
+                return null;
+            }
+        };
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
index 2751195..d1fd062 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
@@ -43,4 +43,6 @@
      */
     @PostMapping(value = "/t-parking-lot/getParkingLotByAppKey")
     R<TParkingLot> getParkingLotByAppKey(@RequestParam("appKey") String appKey);
+    @PostMapping(value = "/t-parking-lot/getSiteIdByOrderId")
+    R<Integer> getSiteIdByOrderId(@RequestParam("id") Long id);
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java
index 5d3aa49..5ef81e0 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java
@@ -10,6 +10,7 @@
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -37,4 +38,32 @@
 	 */
 	@PostMapping("/partner/authSite/{partnerId}")
 	R<Set<Integer>> authSite(@PathVariable("partnerId") Integer partnerId, @RequestParam("siteMenu") String siteMenu);
+	
+	/**
+	 * 判断合作商权限
+	 * @param partnerId
+	 * @param siteId
+	 * @param siteMenu
+	 * @return
+	 */
+	@PostMapping("/partner/authMenu/{partnerId}")
+	Boolean authMenu(@PathVariable("partnerId") Integer partnerId, @RequestParam("siteId") Integer siteId, @RequestParam("siteMenu") String siteMenu);
+	@PostMapping("/partner/getChargingBillMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getChargingBillMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/getChargingOrderMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getChargingOrderMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/getChargingListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getChargingListMenu(@PathVariable("partnerId")Integer partnerId, @PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/getSettlementListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getSettlementListMenu(@PathVariable("partnerId")Integer partnerId, @PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/getAccountMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getAccountMenu(@PathVariable("partnerId")Integer partnerId, @PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/managePageListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> managePageListMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/parkingRecordListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> parkingRecordListMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/watchChargingOrder/{partnerId}/{siteId}")
+	R<List<Boolean>> watchChargingOrder(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId);
+	@PostMapping("/partner/chargeEvaluation/{partnerId}/{siteId}")
+	R<List<Boolean>> chargeEvaluation(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId);
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
index aa03bed..5dbc974 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
@@ -72,5 +72,8 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField("end_time")
     private LocalDateTime endTime;
+    @ApiModelProperty(value = "删除权限")
+    @TableField(exist = false)
+    private boolean authDelete = true;
 
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
index 4e0d5ec..441ea7f 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
@@ -128,5 +128,13 @@
 
     @TableField(exist = false)
     private String parkName;
+    @ApiModelProperty(value = "查看按钮权限 ")
+    @TableField(exist = false)
+
+    private Boolean authInfo = true;
+    @ApiModelProperty(value = "已出场按钮权限 ")
+    @TableField(exist = false)
+
+    private Boolean authOut = true;
 
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java
index 7038166..6d3b172 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java
@@ -59,6 +59,9 @@
     @DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime repairTime;
+    @ApiModelProperty(value = "删除权限")
+    @TableField(exist = false)
+    private boolean authDelete = true;
 
 
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java
index 224a867..e47f886 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java
@@ -22,5 +22,7 @@
 
     @ApiModelProperty(value = "停车场id集合 前端忽略")
     private List<Integer> lotIds;
+    @ApiModelProperty(value = "站点id集合 前端忽略")
+    private List<Integer> siteIds;
 
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
index c7050fa..741048a 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java
@@ -3,10 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.integration.api.feignClient.IotInterfaceClient;
 import com.ruoyi.integration.api.feignClient.SwitchwayGateClient;
-import com.ruoyi.integration.api.vo.AddDevice;
-import com.ruoyi.integration.api.vo.AddDeviceResp;
-import com.ruoyi.integration.api.vo.DeleteDeviceResp;
-import com.ruoyi.integration.api.vo.SwitchwayGateReq;
+import com.ruoyi.integration.api.vo.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -35,6 +32,11 @@
 			public R<DeleteDeviceResp> deleteDevice(String deviceId) {
 				return R.fail("删除设备失败:" + throwable.getMessage());
 			}
+			
+			@Override
+			public R<ShowDeviceResp> showDeviceRequest(String deviceId) {
+				return R.fail("查询设备失败:" + throwable.getMessage());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
index 13f7b58..207907f 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java
@@ -6,6 +6,7 @@
 import com.ruoyi.integration.api.vo.AddDevice;
 import com.ruoyi.integration.api.vo.AddDeviceResp;
 import com.ruoyi.integration.api.vo.DeleteDeviceResp;
+import com.ruoyi.integration.api.vo.ShowDeviceResp;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -35,4 +36,12 @@
 	 */
 	@PostMapping("/iotInterface/deleteDevice")
 	R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId);
+	
+	/**
+	 * 查询设备
+	 * @param deviceId
+	 * @return
+	 */
+	@PostMapping("/iotInterface/showDeviceRequest")
+	R<ShowDeviceResp> showDeviceRequest(@RequestParam("deviceId") String deviceId);
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java
index 5937ecf..c85ee4c 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java
@@ -218,7 +218,10 @@
 
     @ApiModelProperty(value = "时段数")
     private Integer count;
-
+    @ApiModelProperty(value = "查看按钮权限 ")
+    private Boolean authInfo = true;
+    @ApiModelProperty(value = "删除按钮权限 ")
+    private Boolean authDelete = true;
 
 
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java
index 69c7681..56edb57 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ConfirmTransactionRecord.java
@@ -13,7 +13,7 @@
 @Document(collection = "confirm_transaction_record") //指定要对应的文档名(表名)
 @Accessors(chain = true)
 public class ConfirmTransactionRecord extends BaseModel {
-    private String transaction_serial_number;// 桩编码
+    private String transaction_serial_number;// 交易流水号
     private Integer confirm_result;// 确认结果(0:上传成功,1:非法账单)
 
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
index 17e5517..b11f82f 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
@@ -58,6 +58,10 @@
     private Integer status; //状态(0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束)"
     private LocalDateTime startTime; //充电开始时间
     private LocalDateTime endTime; //充电结束时间
+    @ApiModelProperty(value = "查看按钮权限 ")
+    private Boolean authInfo = true;
+    @ApiModelProperty(value = "删除按钮权限 ")
+    private Boolean authDelete = true;
 
 }
 
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java
new file mode 100644
index 0000000..fc2a57c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/ShowDeviceResp.java
@@ -0,0 +1,68 @@
+package com.ruoyi.integration.api.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/12/31 16:19
+ */
+@Data
+public class ShowDeviceResp {
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("app_id")
+	private String appId;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("app_name")
+	private String appName;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("device_id")
+	private String deviceId;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("node_id")
+	private String nodeId;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("gateway_id")
+	private String gatewayId;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("device_name")
+	private String deviceName;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("node_type")
+	private String nodeType;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("description")
+	private String description;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("fw_version")
+	private String fwVersion;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("sw_version")
+	private String swVersion;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("device_sdk_version")
+	private String deviceSdkVersion;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("product_id")
+	private String productId;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("product_name")
+	private String productName;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("status")
+	private String status;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("create_time")
+	private String createTime;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("connection_status_update_time")
+	private String connectionStatusUpdateTime;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("active_time")
+	private String activeTime;
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	@JsonProperty("extension_info")
+	private Object extensionInfo;
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
index d838d05..0062651 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -109,7 +109,7 @@
             }
 
             @Override
-            public R<SettlementTotalVO> settlementTotalR(String time) {
+            public R<SettlementTotalVO> settlementTotalR(String time,Long userId) {
                 return R.fail("查询结算汇总表导出列表失败:" + throwable.getMessage());
             }
 
@@ -129,6 +129,11 @@
             }
     
             @Override
+            public void chargingOrderALICallback(String out_trade_no, String transaction_id, String attach) {
+                log.error("充电支付成功回调通知失败:" + throwable.getMessage());
+            }
+    
+            @Override
             public void chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) {
                 log.error("远程启动失败后退款通知失败:" + throwable.getMessage());
             }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
index 78ef068..e54666c 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -120,8 +120,8 @@
     @GetMapping(value = "/financial/settlement/downloadSettlement/{uid}")
     public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid);
 
-    @GetMapping(value = "/financial/settlement/settlementTotalR/{time}")
-    public R<SettlementTotalVO> settlementTotalR(@PathVariable("time")String time);
+    @GetMapping(value = "/financial/settlement/settlementTotalR/{time}/{userId}")
+    public R<SettlementTotalVO> settlementTotalR(@PathVariable("time")String time,@PathVariable("userId")Long userId);
 
     /**
      * 修改充电订单
@@ -153,6 +153,17 @@
     
     
     /**
+     * 充电支付成功回调通知
+     * @param out_trade_no
+     * @param transaction_id
+     * @param attach
+     */
+    @PostMapping("/t-charging-order/chargingOrderALICallback")
+    void chargingOrderALICallback(@RequestParam("out_trade_no") String out_trade_no,
+                                  @RequestParam("transaction_id") String transaction_id,
+                                  @RequestParam("attach") String attach);
+    
+    /**
      * 远程启动失败后退款回调
      * @param out_refund_no
      * @param refund_id
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
index 842cad4..255976e 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
@@ -44,5 +44,7 @@
     private List<Long> userIds;
     @ApiModelProperty("车辆ids 前端忽略")
     private List<Long> carIds;
+    @ApiModelProperty("站点ids 前端忽略")
+    private List<Integer> siteIds;
 
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java
index 344daa0..ec0c2c5 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java
@@ -30,7 +30,9 @@
     @ApiModelProperty(value = "主键")
     @TableId(value = "id", type = IdType.NONE)
     private Long id;
-
+    @ApiModelProperty(value = "uid")
+    @TableField(exist = false)
+    private String uid;
     @ApiModelProperty(value = "订单类型(1=充电订单,2=购物订单,3=兑换订单,4=会员订单)")
     @TableField("order_type")
     private Integer orderType;
@@ -70,9 +72,13 @@
     @ApiModelProperty(value = "申诉反馈")
     @TableField("feedback")
     private String feedback;
-    @TableField(exist = false)
-    private String uid;
 
+    @ApiModelProperty(value = "查看按钮权限 ")
+    @TableField(exist = false)
+    private Boolean authInfo = true;
+    @TableField(exist = false)
+    @ApiModelProperty(value = "处理按钮权限 ")
+    private Boolean authHandle = true;
     @ApiModelProperty(value = "反馈人id")
     @TableField("feedback_user_id")
     private Integer feedbackUserId;
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
index 5aefedb..6ec0528 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -197,4 +197,11 @@
     @TableField(exist = false)
     private Integer electronicRefund;
 
+    @ApiModelProperty(value = "下载权限")
+    @TableField(exist = false)
+    private boolean authDownLoad = true;
+
+    @ApiModelProperty(value = "删除权限")
+    @TableField(exist = false)
+    private boolean authDelete = true;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/ChargingOrderQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/ChargingOrderQuery.java
index a7ecf9f..523c6b6 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/ChargingOrderQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/ChargingOrderQuery.java
@@ -33,4 +33,6 @@
     private Integer orderSource;
     @ApiModelProperty(value = "用户ids 前端忽略")
     private List<Long> userIds;
+    @ApiModelProperty(value = "站点ids 前端忽略")
+    private List<Integer> siteIds;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java
index d85c948..d7ff768 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java
@@ -15,6 +15,8 @@
     private Integer type;
     @ApiModelProperty(value = "站点ids 选择全部 不传")
     private Integer siteIds;
+    @ApiModelProperty(value = "站点ids 选择全部 不传")
+    private List<Integer> siteIdss;
     @ApiModelProperty(value = "合作商id ")
     private Integer partnerId;
     @ApiModelProperty(value = "开始时间2020-01-01 00:00:00")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java
index b99cac8..7fbe580 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountingStrategyDetailOrderVo.java
@@ -40,8 +40,5 @@
 	
 	@ApiModelProperty(value = "充电订单id")
 	private Long chargingOrderId;
-	
-	private Long start;
-	private Long end;
 	private BigDecimal chargingCapacity;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java
index 8fabc3d..5814a48 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java
@@ -41,4 +41,6 @@
     private BigDecimal chargingCapacity;
     @ApiModelProperty(value = "入账金额")
     private BigDecimal billMoney;
+    @ApiModelProperty(value = "下载按钮权限 ")
+    private Boolean authDownLoad = true;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
index 1c7c508..68c1847 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
@@ -88,4 +88,8 @@
     private Long id;
     @ApiModelProperty(value = "订单uid")
     private String uid;
+    @ApiModelProperty(value = "订单详情按钮权限 ")
+    private Boolean authInfo = true;
+    @ApiModelProperty(value = "充电曲线按钮权限 ")
+    private Boolean authCurve = true;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java
index 48a0b5c..f1304f5 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java
@@ -30,6 +30,8 @@
     private String phone;
     @ApiModelProperty(value = "uid")
     private String uid;
+    @ApiModelProperty(value = "记录按钮权限 ")
+    private Boolean authRecord = true;
 
 
     @ApiModelProperty(value = "时段数")
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java
index 496217c..357bdc9 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java
@@ -11,6 +11,7 @@
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * @author zhibing.pu
@@ -26,7 +27,7 @@
 	 * @return
 	 */
 	@PostMapping("/ali/payment")
-	R<AliPaymentResp> payment(AliPaymentReq req);
+	R<AliPaymentResp> payment(@RequestBody AliPaymentReq req);
 	
 	
 	/**
@@ -35,14 +36,14 @@
 	 * @return
 	 */
 	@PostMapping("/ali/query")
-	R<AliQueryOrder> query(String outTradeNo);
+	R<AliQueryOrder> query(@RequestParam("outTradeNo") String outTradeNo);
 	
 	/**
 	 * 关闭订单
 	 * @param outTradeNo
 	 */
 	@PostMapping("/ali/close")
-	void close(String outTradeNo);
+	void close(@RequestParam("outTradeNo") String outTradeNo);
 	/**
 	 * 后台退款 远程调用
 	 */
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/PaymentReq.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/PaymentReq.java
index 9d067aa..5cc7d7a 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/PaymentReq.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/PaymentReq.java
@@ -41,6 +41,10 @@
 	 * 如果请求时传递了该参数,支付宝会在异步通知时将该参数原样返回。
 	 */
 	private String passbackParams;
+	/**
+	 * 支付回调通知
+	 */
+	private String notifyUrl;
 	
 	/**
 	 * 初始化默认数据
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentReq.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentReq.java
index f2f0858..07c3b52 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentReq.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentReq.java
@@ -42,6 +42,10 @@
 	 */
 	private String passbackParams;
 	/**
+	 * 支付回调通知
+	 */
+	private String notifyUrl;
+	/**
 	 * 初始化默认数据
 	 */
 	public AliPaymentReq() {
diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentResp.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentResp.java
index 273a5fc..2d64eee 100644
--- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentResp.java
+++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/AliPaymentResp.java
@@ -16,9 +16,5 @@
 	 */
 	@ApiModelProperty("支付单号")
 	private String tradeNo;
-	/**
-	 * 回调通知地址
-	 */
-	@ApiModelProperty("回调通知地址")
-	private String notifyUrl;
+	private String orderId;
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
index ef266a0..9266a9a 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
@@ -57,6 +57,10 @@
      * 用户信息
      */
     private SysUser sysUser;
+    /**
+     * 用户类型(系统用户,小程序用户)
+     */
+    private String userType;
 
     public String getToken()
     {
@@ -147,4 +151,12 @@
     {
         this.sysUser = sysUser;
     }
+    
+    public String getUserType() {
+        return userType;
+    }
+    
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
 }
diff --git a/ruoyi-auth/src/main/resources/bootstrap.yml b/ruoyi-auth/src/main/resources/bootstrap.yml
index 866e429..20ccecd 100644
--- a/ruoyi-auth/src/main/resources/bootstrap.yml
+++ b/ruoyi-auth/src/main/resources/bootstrap.yml
@@ -6,8 +6,8 @@
 spring:
   profiles:
     # 环境配置
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
   application:
     # 应用名称
     name: ruoyi-auth
@@ -56,52 +56,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 192.168.110.169:8848 # nacos注册中心地址
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
index 0748dd4..108f0ac 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -11,7 +11,7 @@
      * 缓存有效期,默认720(分钟)
      */
     public final static long EXPIRATION = 720;
-    public final static long EXPIRATION_APPLET = 7*24*60*60;
+    public final static long EXPIRATION_APPLET = 7 * 24 * 60;
 
     /**
      * 缓存刷新时间,默认120(分钟)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java
index 08b4f8c..1f8e948 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java
@@ -4,10 +4,13 @@
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Set;
 
 @Data
 public class ChargingPercentProvinceDto {
     String provinceCode;
     LocalDate date1;
     LocalDate date2;
+    Set<Integer> siteIds;
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/MongoChargingOrderQuery.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/MongoChargingOrderQuery.java
index f9b33fb..5eb904e 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/MongoChargingOrderQuery.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/MongoChargingOrderQuery.java
@@ -32,4 +32,5 @@
     private Integer orderSource;
     @ApiModelProperty(value = "用户ids 前端忽略")
     private List<Long> userIds;
+    private List<Integer> siteIds;
 }
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
index fa04637..2cde5b4 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
@@ -3,6 +3,12 @@
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
+
+import com.ruoyi.common.core.utils.JwtUtils;
+import com.ruoyi.common.security.handler.GlobalExceptionHandler;
+import io.jsonwebtoken.Claims;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.util.PatternMatchUtils;
 import com.ruoyi.common.core.context.SecurityContextHolder;
 import com.ruoyi.common.core.exception.auth.NotLoginException;
@@ -25,6 +31,7 @@
  */
 public class AuthLogic
 {
+    private static final Logger log = LoggerFactory.getLogger(AuthLogic.class);
     /** 所有权限标识 */
     private static final String ALL_PERMISSION = "*:*:*";
 
@@ -74,11 +81,17 @@
         {
             throw new NotLoginException("未提供token");
         }
+        Claims claims = JwtUtils.parseToken(token);
+        String userType = JwtUtils.getUserType(claims);
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if (loginUser == null)
+        if (loginUser == null && "system".equals(userType))
         {
             throw new NotLoginException("无效的token");
         }
+        if(loginUser == null && "applet".equals(userType)){
+            loginUser = new LoginUser();
+        }
+        loginUser.setUserType(userType);
         return loginUser;
     }
 
@@ -154,6 +167,9 @@
     public void checkPermiAnd(String... permissions)
     {
         Set<String> permissionList = getPermiList();
+        if(null == permissionList || permissionList.size() == 0){
+            return;
+        }
         for (String permission : permissions)
         {
             if (!hasPermi(permissionList, permission))
@@ -337,6 +353,9 @@
         try
         {
             LoginUser loginUser = getLoginUser();
+            if(null == loginUser.getPermissions()){
+                return new HashSet<>();
+            }
             return loginUser.getPermissions();
         }
         catch (Exception e)
diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml
index f858a41..eb0d3a8 100644
--- a/ruoyi-gateway/pom.xml
+++ b/ruoyi-gateway/pom.xml
@@ -81,22 +81,22 @@
         </dependency>
 
         <!-- Swagger -->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${swagger.fox.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>${swagger.fox.version}</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>io.springfox</groupId>-->
+<!--            <artifactId>springfox-swagger-ui</artifactId>-->
+<!--            <version>${swagger.fox.version}</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>io.springfox</groupId>-->
+<!--            <artifactId>springfox-swagger2</artifactId>-->
+<!--            <version>${swagger.fox.version}</version>-->
+<!--        </dependency>-->
 
-        <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-micro-spring-boot-starter</artifactId>
-            <version>2.0.8</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.github.xiaoymin</groupId>-->
+<!--            <artifactId>knife4j-micro-spring-boot-starter</artifactId>-->
+<!--            <version>2.0.8</version>-->
+<!--        </dependency>-->
 
         <!-- 引入Druid依赖,阿里巴巴所提供的数据源 -->
         <dependency>
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
index 495dd46..239eb2a 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
@@ -1,76 +1,76 @@
-package com.ruoyi.gateway.config;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.gateway.config.GatewayProperties;
-import org.springframework.cloud.gateway.route.RouteLocator;
-import org.springframework.cloud.gateway.support.NameUtils;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.config.ResourceHandlerRegistry;
-import org.springframework.web.reactive.config.WebFluxConfigurer;
-import springfox.documentation.swagger.web.SwaggerResource;
-import springfox.documentation.swagger.web.SwaggerResourcesProvider;
-
-/**
- * 聚合系统接口
- *
- * @author ruoyi
- */
-@Component
-public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer {
-	/**
-	 * Swagger2默认的url后缀
-	 */
-	public static final String SWAGGER2URL = "/v2/api-docs";
-	
-	/**
-	 * 网关路由
-	 */
-	@Lazy
-	@Autowired
-	private RouteLocator routeLocator;
-	
-	@Autowired
-	private GatewayProperties gatewayProperties;
-	
-	/**
-	 * 聚合其他服务接口
-	 *
-	 * @return
-	 */
-	@Override
-	public List<SwaggerResource> get() {
-		List<SwaggerResource> resourceList = new ArrayList<>();
-		List<String> routes = new ArrayList<>();
-		// 获取网关中配置的route
-		routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
-		gatewayProperties.getRoutes().stream()
-				.filter(routeDefinition -> routes
-						.contains(routeDefinition.getId()))
-				.forEach(routeDefinition -> routeDefinition.getPredicates().stream()
-						.filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
-						.filter(predicateDefinition -> !"ruoyi-auth".equalsIgnoreCase(routeDefinition.getId()))
-						.forEach(predicateDefinition -> resourceList
-								.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs()
-										.get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER2URL)))));
-		return resourceList;
-	}
-	
-	private SwaggerResource swaggerResource(String name, String location) {
-		SwaggerResource swaggerResource = new SwaggerResource();
-		swaggerResource.setName(name);
-		swaggerResource.setLocation(location);
-		swaggerResource.setSwaggerVersion("2.0");
-		return swaggerResource;
-	}
-	
-	@Override
-	public void addResourceHandlers(ResourceHandlerRegistry registry) {
-		/** swagger-ui 地址 */
-		registry.addResourceHandler("/swagger-ui/**", "*/doc.html")
-				.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
-	}
-}
+//package com.ruoyi.gateway.config;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.cloud.gateway.config.GatewayProperties;
+//import org.springframework.cloud.gateway.route.RouteLocator;
+//import org.springframework.cloud.gateway.support.NameUtils;
+//import org.springframework.context.annotation.Lazy;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.reactive.config.ResourceHandlerRegistry;
+//import org.springframework.web.reactive.config.WebFluxConfigurer;
+//import springfox.documentation.swagger.web.SwaggerResource;
+//import springfox.documentation.swagger.web.SwaggerResourcesProvider;
+//
+///**
+// * 聚合系统接口
+// *
+// * @author ruoyi
+// */
+//@Component
+//public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer {
+//	/**
+//	 * Swagger2默认的url后缀
+//	 */
+//	public static final String SWAGGER2URL = "/v2/api-docs";
+//
+//	/**
+//	 * 网关路由
+//	 */
+//	@Lazy
+//	@Autowired
+//	private RouteLocator routeLocator;
+//
+//	@Autowired
+//	private GatewayProperties gatewayProperties;
+//
+//	/**
+//	 * 聚合其他服务接口
+//	 *
+//	 * @return
+//	 */
+//	@Override
+//	public List<SwaggerResource> get() {
+//		List<SwaggerResource> resourceList = new ArrayList<>();
+//		List<String> routes = new ArrayList<>();
+//		// 获取网关中配置的route
+//		routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
+//		gatewayProperties.getRoutes().stream()
+//				.filter(routeDefinition -> routes
+//						.contains(routeDefinition.getId()))
+//				.forEach(routeDefinition -> routeDefinition.getPredicates().stream()
+//						.filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
+//						.filter(predicateDefinition -> !"ruoyi-auth".equalsIgnoreCase(routeDefinition.getId()))
+//						.forEach(predicateDefinition -> resourceList
+//								.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs()
+//										.get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER2URL)))));
+//		return resourceList;
+//	}
+//
+//	private SwaggerResource swaggerResource(String name, String location) {
+//		SwaggerResource swaggerResource = new SwaggerResource();
+//		swaggerResource.setName(name);
+//		swaggerResource.setLocation(location);
+//		swaggerResource.setSwaggerVersion("2.0");
+//		return swaggerResource;
+//	}
+//
+//	@Override
+//	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+//		/** swagger-ui 地址 */
+//		registry.addResourceHandler("/swagger-ui/**", "*/doc.html")
+//				.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
+//	}
+//}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
index eeb58a1..9fc2126 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
@@ -1,50 +1,50 @@
-package com.ruoyi.gateway.handler;
-
-import java.util.Optional;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import reactor.core.publisher.Mono;
-import springfox.documentation.swagger.web.SecurityConfiguration;
-import springfox.documentation.swagger.web.SecurityConfigurationBuilder;
-import springfox.documentation.swagger.web.SwaggerResourcesProvider;
-import springfox.documentation.swagger.web.UiConfiguration;
-import springfox.documentation.swagger.web.UiConfigurationBuilder;
-
-@RestController
-@RequestMapping("/swagger-resources")
-public class SwaggerHandler {
-	private final SwaggerResourcesProvider swaggerResources;
-	@Autowired(required = false)
-	private SecurityConfiguration securityConfiguration;
-	@Autowired(required = false)
-	private UiConfiguration uiConfiguration;
-	
-	@Autowired
-	public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
-		this.swaggerResources = swaggerResources;
-	}
-	
-	@GetMapping("/configuration/security")
-	public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
-		return Mono.just(new ResponseEntity<>(
-				Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()),
-				HttpStatus.OK));
-	}
-	
-	@GetMapping("/configuration/ui")
-	public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
-		return Mono.just(new ResponseEntity<>(
-				Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
-	}
-	
-	@SuppressWarnings("rawtypes")
-	@GetMapping("")
-	public Mono<ResponseEntity> swaggerResources() {
-		return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
-	}
-}
+//package com.ruoyi.gateway.handler;
+//
+//import java.util.Optional;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.http.HttpStatus;
+//import org.springframework.http.ResponseEntity;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//import reactor.core.publisher.Mono;
+//import springfox.documentation.swagger.web.SecurityConfiguration;
+//import springfox.documentation.swagger.web.SecurityConfigurationBuilder;
+//import springfox.documentation.swagger.web.SwaggerResourcesProvider;
+//import springfox.documentation.swagger.web.UiConfiguration;
+//import springfox.documentation.swagger.web.UiConfigurationBuilder;
+//
+//@RestController
+//@RequestMapping("/swagger-resources")
+//public class SwaggerHandler {
+//	private final SwaggerResourcesProvider swaggerResources;
+//	@Autowired(required = false)
+//	private SecurityConfiguration securityConfiguration;
+//	@Autowired(required = false)
+//	private UiConfiguration uiConfiguration;
+//
+//	@Autowired
+//	public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
+//		this.swaggerResources = swaggerResources;
+//	}
+//
+//	@GetMapping("/configuration/security")
+//	public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
+//		return Mono.just(new ResponseEntity<>(
+//				Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()),
+//				HttpStatus.OK));
+//	}
+//
+//	@GetMapping("/configuration/ui")
+//	public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
+//		return Mono.just(new ResponseEntity<>(
+//				Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
+//	}
+//
+//	@SuppressWarnings("rawtypes")
+//	@GetMapping("")
+//	public Mono<ResponseEntity> swaggerResources() {
+//		return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
+//	}
+//}
diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml
index 48963f2..7598ca6 100644
--- a/ruoyi-gateway/src/main/resources/bootstrap.yml
+++ b/ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -12,8 +12,8 @@
     allow-bean-definition-overriding: true
   profiles:
     # 环境配置
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
 ---
 spring:
   config:
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java
index 7982c50..de6a003 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java
@@ -4,6 +4,8 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.system.api.domain.SysLoginLog;
 import com.ruoyi.system.service.ISysLoginLogService;
 import com.ruoyi.system.service.ISysUserService;
@@ -27,7 +29,7 @@
 	
 	
 	
-	
+	@RequiresPermissions(value = {"/entryLog"}, logical = Logical.OR)
 	@GetMapping("/pageList")
 	@ApiOperation(value = "获取登录日志列表", tags = {"管理后台-登录日志"})
 	public AjaxResult<PageInfo<SysLoginLog>> pageList(String name, BasePage basePage){
@@ -36,6 +38,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/entryLog/add"}, logical = Logical.OR)
 	@PostMapping("/addLoginLog")
 	@ApiOperation(value = "添加登录日志", tags = {"管理后台-登录日志"})
 	public AjaxResult addLoginLog(@RequestBody SysLoginLog loginLog){
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
index cea9bb7..1dafd6e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
@@ -4,6 +4,8 @@
 import java.util.List;
 import java.util.Map;
 
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.domain.SysMenu;
 import com.ruoyi.system.domain.SysMenus;
 import io.swagger.annotations.Api;
@@ -29,6 +31,8 @@
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.service.ISysMenuService;
 
+import javax.annotation.Resource;
+
 /**
  * 菜单信息
  * 
@@ -45,6 +49,7 @@
     /**
      * 获取菜单列表
      */
+    @RequiresPermissions(value = {"/roleManagement"}, logical = Logical.OR)
     @GetMapping("/list")
     @ApiOperation("所有菜单列表")
     public AjaxResult list()
@@ -61,14 +66,15 @@
     {
         return success(menuService.selectMenuById(menuId));
     }
-
+    @Resource
+    private TokenService tokenService;
     /**
      * 获取菜单下拉树列表
      */
     @GetMapping("/treeselect")
     public AjaxResult treeselect(SysMenu menu)
     {
-        Long userId = SecurityUtils.getUserId();
+        Long userId = tokenService.getLoginUser().getUserid();
         List<SysMenu> menus = menuService.selectMenuList(menu, userId);
         ArrayList<SysMenus> sysMenus = new ArrayList<>();
         for (SysMenu sysMenu : menus) {
@@ -86,7 +92,7 @@
     @GetMapping(value = "/roleMenuTreeselect/{roleId}")
     public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
     {
-        Long userId = SecurityUtils.getUserId();
+        Long userId = tokenService.getLoginUser().getUserid();
         List<SysMenu> menus = menuService.selectMenuList(userId);
         AjaxResult ajax = AjaxResult.success();
         ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
@@ -162,7 +168,7 @@
     @GetMapping("getRouters")
     public AjaxResult getRouters()
     {
-        Long userId = SecurityUtils.getUserId();
+        Long userId = tokenService.getLoginUser().getUserid();
         List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
         return success(menuService.buildMenus(menus));
     }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
index 8eefd52..2c72a37 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
 import com.ruoyi.system.query.SysOperLogQuery;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +39,7 @@
 	private ISysOperLogService operLogService;
 	
 	
+	@RequiresPermissions(value = {"/operationLog/list"}, logical = Logical.OR)
 	@GetMapping("/list")
 	@ApiOperation(value = "获取操作日志列表", tags = {"管理后台-操作日志"})
 	public AjaxResult<PageInfo<SysOperLog>> list(SysOperLogQuery query) {
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
index ebe7214..927370a 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
@@ -18,6 +18,7 @@
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
 import com.ruoyi.other.api.domain.TRoleSite;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.system.api.model.GetSysRoleByIds;
@@ -86,6 +87,9 @@
 	private SiteClient siteClient;
 	
 	
+	
+	@RequiresPermissions(value = {"/systemUserManagement", "/systemUserManagement/add", "/systemUserManagement/update", "/roleManagement", "/partners",
+			"/partners/add", "/partners/seleete", "/partners/update"}, logical = Logical.OR)
 	@ApiOperation(value = "获取角色列表", tags = {"管理后台-系统用户管理"})
 	@GetMapping("/list")
 	public AjaxResult list() {
@@ -94,6 +98,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/roleManagement"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/listPage")
 	@ApiOperation(value = "获取角色列表", tags = {"管理后台-角色管理"})
@@ -119,6 +124,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/roleManagement/add"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/roleAdd")
 	@ApiOperation(value = "添加角色", tags = {"管理后台-角色管理"})
@@ -141,19 +147,23 @@
 		role.setCreateBy(SecurityUtils.getUsername());
 		role.setCreateTime(new Date());
 		roleService.insertRole(role);
+		
 		//添加站点权限
-		List<TRoleSite> roleSites = new ArrayList<>();
-		for (Integer siteId : dto.getSiteIds()) {
-			TRoleSite roleSite = new TRoleSite();
-			roleSite.setRoleId(role.getRoleId().intValue());
-			roleSite.setSiteId(siteId);
-			roleSites.add(roleSite);
+		if(null != dto.getSiteIds()){
+			List<TRoleSite> roleSites = new ArrayList<>();
+			for (Integer siteId : dto.getSiteIds()) {
+				TRoleSite roleSite = new TRoleSite();
+				roleSite.setRoleId(role.getRoleId().intValue());
+				roleSite.setSiteId(siteId);
+				roleSites.add(roleSite);
+			}
+			roleSiteClient.addRoleSite(roleSites);
 		}
-		roleSiteClient.addRoleSite(roleSites);
 		return AjaxResult.success();
 	}
 	
 	
+	@RequiresPermissions(value = {"/roleManagement/info", "/roleManagement/update"}, logical = Logical.OR)
 	@GetMapping("/roleInfo")
 	@ApiOperation(value = "角色详情", tags = {"管理后台-角色管理"})
 	public AjaxResult roleInfo(@RequestParam Long id) {
@@ -197,6 +207,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/roleManagement/update"}, logical = Logical.OR)
 	@PostMapping("/roleUpdate")
 	@ApiOperation(value = "编辑角色", tags = {"管理后台-角色管理"})
 	@GlobalTransactional(rollbackFor = Exception.class)//分布式事务
@@ -256,6 +267,7 @@
 	/**
 	 * 删除角色
 	 */
+	@RequiresPermissions(value = {"/roleManagement/del"}, logical = Logical.OR)
 	@Log(title = "角色管理", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{roleIds}")
 	@ApiOperation(value = "删除角色", tags = {"管理后台-角色管理"})
@@ -267,6 +279,7 @@
 	/**
 	 * 查询已分配用户角色列表
 	 */
+	@RequiresPermissions("/roleManagement")
 	@GetMapping("/authUser/allocatedList")
 	public TableDataInfo allocatedList(SysUser user) {
 		startPage();
@@ -277,6 +290,7 @@
 	/**
 	 * 查询未分配用户角色列表
 	 */
+	@RequiresPermissions("/roleManagement")
 	@GetMapping("/authUser/unallocatedList")
 	public TableDataInfo unallocatedList(SysUser user) {
 		startPage();
@@ -288,6 +302,7 @@
 	/**
 	 * 获取对应角色部门树列表
 	 */
+	@RequiresPermissions("")
 	@GetMapping(value = "/deptTree/{roleId}")
 	public AjaxResult deptTree(@PathVariable("roleId") Long roleId) {
 		AjaxResult ajax = AjaxResult.success();
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index d69b216..e14b510 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -10,6 +10,8 @@
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.annotation.Logical;
 import com.ruoyi.other.api.domain.TUserSite;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -88,6 +90,7 @@
     /**
      * 获取用户列表
      */
+    @RequiresPermissions(value = {"/systemUserManagement", "/roleManagement/info"}, logical = Logical.OR)
     @GetMapping("/list")
     @ApiOperation(value = "获取系统用户列表", tags = {"管理后台-系统用户管理", "管理后台-角色管理"})
     public AjaxResult list(GetSysUserList getSysUserList) {
@@ -108,6 +111,7 @@
     /**
      * 新增用户
      */
+    @RequiresPermissions(value = {"/systemUserManagement/add"}, logical = Logical.OR)
     @Log(title = "用户管理", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @ApiOperation(value = "添加系统用户", tags = {"管理后台-系统用户管理"})
@@ -144,6 +148,7 @@
     }
     
     
+    @RequiresPermissions(value = {"/systemUserManagement/add", "/systemUserManagement/update"}, logical = Logical.OR)
     @GetMapping("/verifyUserNameRepeat/{username}")
     @ApiOperation(value = "校验账号是否重复", tags = {"管理后台-系统用户管理"})
     public AjaxResult verifyUserNameRepeat(@PathVariable String username){
@@ -155,6 +160,9 @@
         return success();
     }
     
+
+
+    @RequiresPermissions(value = {"/systemUserManagement/update"}, logical = Logical.OR)
     @GetMapping("/getRoleSiteName/{roleId}")
     @ApiOperation(value = "获取角色对应的站点名称", tags = {"管理后台-系统用户管理"})
     public AjaxResult<List<String>> getRoleSiteName(@PathVariable Integer roleId){
@@ -199,6 +207,7 @@
     /**
      * 修改用户
      */
+    @RequiresPermissions(value = {"/systemUserManagement/update"}, logical = Logical.OR)
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
     @PutMapping("/update")
     @ApiOperation(value = "编辑系统用户", tags = {"管理后台-系统用户管理"})
@@ -243,7 +252,15 @@
         user.setUpdateBy(SecurityUtils.getUsername());
         user.setUpdateTime(new Date());
         userService.updateUser(user);
-    
+        
+        //删除旧的角色数据,添加新的角色
+        userRoleService.remove(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, user.getUserId()));
+        //添加新的角色数据
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(user.getUserId());
+        userRole.setRoleId(user.getRoleId());
+        userRoleService.save(userRole);
+        
         //删除旧的站点数据后添加新的
         userSiteClient.delUserSite(user.getUserId());
         List<Integer> siteIds = user.getSiteIds();
@@ -258,15 +275,17 @@
         return success();
     }
 
-
+    @Resource
+    private TokenService tokenService;
     /**
      * 删除用户
      */
+    @RequiresPermissions(value = {"/systemUserManagement/del"}, logical = Logical.OR)
     @Log(title = "用户管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{userIds}")
     @ApiOperation(value = "删除系统用户", tags = {"管理后台-系统用户管理"})
     public AjaxResult remove(@PathVariable Long[] userIds) {
-        if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) {
+        if (ArrayUtils.contains(userIds, tokenService.getLoginUser().getUserid())) {
             return error("当前用户不能删除");
         }
         return toAjax(userService.deleteUserByIds(userIds));
@@ -275,6 +294,7 @@
     
 
 
+    @RequiresPermissions(value = {"/systemUserManagement/forbidden"}, logical = Logical.OR)
     @PostMapping("/shopUserStart")
     @ApiOperation(value = "账号管理--禁用/启用", tags = {"管理后台-系统用户管理"})
     public AjaxResult shopUserStart(@RequestBody ShopUserStart shopUserStart) {
@@ -509,7 +529,7 @@
      */
     @GetMapping("/getInfo")
     public AjaxResult getInfo() {
-        SysUser user = userService.selectUserById(SecurityUtils.getUserId());
+        SysUser user = userService.selectUserById(tokenService.getLoginUser().getUserid());
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(user);
         // 权限集合
@@ -525,6 +545,7 @@
     /**
      * 重置密码
      */
+    @RequiresPermissions(value = {"/systemUserManagement/reset_passwords"}, logical = Logical.OR)
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
     @PutMapping("/resetPwd")
     @ApiOperation(value = "重置密码", tags = {"管理后台-系统用户管理"})
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 2fe6613..08a1a72 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -5,6 +5,7 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.domain.vo.TreeSelect;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.mapper.SysRoleMapper;
@@ -22,6 +23,8 @@
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
 
+import javax.annotation.Resource;
+
 /**
  * 部门管理 服务实现
  * 
@@ -32,7 +35,8 @@
 {
     @Autowired
     private SysDeptMapper deptMapper;
-
+    @Resource
+    private TokenService tokenService;
     @Autowired
     private SysRoleMapper roleMapper;
 
@@ -191,7 +195,7 @@
     @Override
     public void checkDeptDataScope(Long deptId)
     {
-        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
+        if (!SysUser.isAdmin(tokenService.getLoginUser().getUserid()))
         {
             SysDept dept = new SysDept();
             dept.setDeptId(deptId);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index 3c52cfc..3c6198c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -7,6 +7,7 @@
 import java.util.Set;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.domain.SysRoleDept;
 import com.ruoyi.system.domain.SysRoleMenu;
 import com.ruoyi.system.domain.SysUserRole;
@@ -27,6 +28,8 @@
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
 
+import javax.annotation.Resource;
+
 /**
  * 角色 业务层处理
  *
@@ -36,7 +39,8 @@
 public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService {
 	@Autowired
 	private SysRoleMapper roleMapper;
-	
+	@Resource
+	private TokenService tokenService;
 	@Autowired
 	private SysRoleMenuMapper roleMenuMapper;
 	
@@ -180,7 +184,7 @@
 	 */
 	@Override
 	public void checkRoleDataScope(Long roleId) {
-		if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
+		if (!SysUser.isAdmin(tokenService.getLoginUser().getUserid())) {
 			SysRole role = new SysRole();
 			role.setRoleId(roleId);
 			List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 16f9f89..c8116bc 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
 import com.ruoyi.system.api.query.ChangeUserQuery;
@@ -89,6 +90,9 @@
 	
 	@Resource
 	private ISysRoleService sysRoleService;
+	
+	@Resource
+	private TokenService tokenService;
 	
 	
 	/**
@@ -235,7 +239,8 @@
 	 */
 	@Override
 	public void checkUserAllowed(SysUser user) {
-		if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
+		Long userid = tokenService.getLoginUser().getUserid();
+		if (StringUtils.isNotNull(user.getUserId()) && !userid.equals(user.getUserId()) && user.isAdmin()) {
 			throw new ServiceException("不允许操作超级管理员用户");
 		}
 	}
@@ -247,7 +252,7 @@
 	 */
 	@Override
 	public void checkUserDataScope(Long userId) {
-		if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
+		if (!SysUser.isAdmin(tokenService.getLoginUser().getUserid())) {
 			SysUser user = new SysUser();
 			user.setUserId(userId);
 			List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
index d837d2b..c8f030b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -11,7 +11,8 @@
     allow-bean-definition-overriding: true
   profiles:
     # 环境配置
-    active: dev
+#    active: dev
+    active: prod
 ---
 spring:
   config:
@@ -54,52 +55,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 192.168.110.169:8848 # nacos注册中心地址
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
index 2b2d386..0ddf5fa 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
@@ -96,9 +96,13 @@
     @ApiOperation(tags = {"小程序-用户地址"},value = "设置默认地址")
     @GetMapping(value = "/setDefaultAddress")
     public AjaxResult<String> setDefaultAddress(@RequestParam(value = "id") Long  id) {
+        TAppUserAddress appUserAddress = appUserAddressService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!appUserAddress.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         // 修改用户默认地址
         appUserAddressService.updateDefaultAddress(1,tokenService.getLoginUserApplet().getUserId());
-        TAppUserAddress appUserAddress = appUserAddressService.getById(id);
         appUserAddress.setDefaultAddress(1);
         appUserAddressService.updateById(appUserAddress);
         return AjaxResult.success();
@@ -110,8 +114,13 @@
     @ApiOperation(tags = {"小程序-用户地址"},value = "修改用户地址")
     @PostMapping(value = "/update")
     public AjaxResult<Boolean> update(@RequestBody TAppUserAddress dto) {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        TAppUserAddress userAddress = appUserAddressService.getById(dto.getId());
+        if(!userAddress.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         // 用户id
-        dto.setAppUserId(tokenService.getLoginUserApplet().getUserId());
+        dto.setAppUserId(userId);
         // 修改用户默认地址
         appUserAddressService.updateDefaultAddress(dto.getDefaultAddress(),dto.getAppUserId());
         return AjaxResult.ok(appUserAddressService.updateById(dto));
@@ -126,6 +135,10 @@
     @GetMapping(value = "/getDetailById")
     public R<TAppUserAddress> getDetailById(@RequestParam(value = "id")Long id) {
         TAppUserAddress appUserAddress = appUserAddressService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!appUserAddress.getAppUserId().equals(userId)){
+            return R.fail("权限不足");
+        }
         appUserAddress.setUid(appUserAddress.getId().toString());
         return R.ok(appUserAddress);
     }
@@ -136,6 +149,11 @@
     @ApiOperation(tags = {"小程序-用户地址"},value = "删除用户地址")
     @DeleteMapping(value = "/deleteById")
     public AjaxResult<Boolean> deleteById(@RequestParam("id") Long id) {
+        TAppUserAddress appUserAddress = appUserAddressService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!appUserAddress.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         return AjaxResult.ok(appUserAddressService.removeById(id));
     }
     
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index e97b7bc..1d17e96 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -29,6 +29,8 @@
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.auth.AuthUtil;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
@@ -45,6 +47,7 @@
 import com.ruoyi.other.api.feignClient.IntegralRuleClient;
 import com.ruoyi.other.api.feignClient.OtherClient;
 import com.ruoyi.other.api.feignClient.VipClient;
+import com.ruoyi.system.api.model.LoginUser;
 import com.ruoyi.system.api.model.LoginUserApplet;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -163,7 +166,7 @@
     }
     
     
-    
+    @RequiresPermissions(value = {"/company"}, logical = Logical.OR)
     @ApiOperation(value = "单位管理列表", tags = {"用户管理-单位管理"})
     @PostMapping(value = "/unit/page")
     public R<Page<TCompany>> unitPage(@RequestBody UnitListQueryDto unitListQueryDto) {
@@ -176,8 +179,10 @@
         }
         return R.ok(data);
     }
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/appUser/list", "/appUser/add", "/appUser/update", "/appUser/updateCompany"}, logical = Logical.OR)
     @ApiOperation(value = "单位下拉框", tags = {"用户管理-单位管理"})
     @GetMapping(value = "/unit/select")
     public R<List<TCompany>> unitSelect() {
@@ -189,8 +194,10 @@
 
         return R.ok(pageR.getData().getRecords());
     }
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/company/add", "/company/update"}, logical = Logical.OR)
     @ApiOperation(value = "单位管理添加或编辑", tags = {"用户管理-单位管理"})
     @PostMapping(value = "/unit/addOrUpdate")
     @Log(title = "【单位管理】添加或编辑单位", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
@@ -199,10 +206,10 @@
        otherClient.unitAddorUpadate(tCompany);
         return R.ok();
     }
-
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/company/del"}, logical = Logical.OR)
     @ApiOperation(value = "单位管理删除", tags = {"用户管理-单位管理"})
     @DeleteMapping(value = "/unit/delete")
     @Log(title = "【单位管理】删除单位", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
@@ -218,8 +225,9 @@
         return R.ok();
 
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/appUser/list"}, logical = Logical.OR)
     @ApiOperation(value = "用户列表", tags = {"用户管理-用户列表"})
     @PostMapping(value = "/user/page")
     public R<Page<TAppUser>> userPage(@RequestBody UserListQueryDto userListQueryDto) {
@@ -283,7 +291,9 @@
         }
         return R.ok(page);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/vipList"}, logical = Logical.OR)
     @ApiOperation(value = "会员列表", tags = {"用户管理-会员列表"})
     @PostMapping(value = "/user/vip/page")
     public R<Page<TAppUser>> vipPage(@RequestBody UserListQueryDto userListQueryDto) {
@@ -349,7 +359,9 @@
         }
         return R.ok(page);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/coupon/send"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券发放-选择人员")
     @PostMapping("/choiceUser")
     public R<Page<TAppUser>> choiceUser(@RequestBody ChoiceUserListQueryDto userListQueryDto) {
@@ -405,8 +417,9 @@
         }
         return R.ok(page);
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/appUser/add", "/appUser/update"}, logical = Logical.OR)
     @ApiOperation(value = "用户添加编辑", tags = {"用户管理-用户列表"})
     @PostMapping(value = "/user/addOrUpdate")
     @Log(title = "【用户列表】添加编辑用户", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
@@ -453,7 +466,9 @@
         appUserService.saveOrUpdate(tAppUser);
         return R.ok();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/appUser/select", "/vipList/select"}, logical = Logical.OR)
     @ApiOperation(value = "用户详情", tags = {"用户管理-用户列表"})
     @GetMapping(value = "/user/detail/{id}")
     public R<UserDetailDto> userDetail(@PathVariable Long id) {
@@ -488,8 +503,9 @@
 
         return R.ok(userDetailDto);
     }
-
-    @ApiOperation(value = "用户详情积分明细", tags = {"后台-用户管理-用户列表","小程序-个人中心"})
+    
+    @RequiresPermissions(value = {"/appUser/select", "/vipList/select"}, logical = Logical.OR)
+    @ApiOperation(value = "用户详情积分明细", tags = {"后台-用户管理-用户列表"})
     @PostMapping(value = "/user/points/page")
     public R<Page<TAppUserIntegralChange>> pointsDetail(@RequestBody PointsQueryDto pointsQueryDto) {
         if (pointsQueryDto.getUserId()==null){
@@ -538,11 +554,68 @@
         return R.ok(page);
 
     }
+    
+    
+    
+    @ApiOperation(value = "用户详情积分明细", tags = {"小程序-个人中心"})
+    @PostMapping(value = "/user/points/page1")
+    public R<Page<TAppUserIntegralChange>> pointsDetail1(@RequestBody PointsQueryDto pointsQueryDto) {
+        if (pointsQueryDto.getUserId()==null){
+            pointsQueryDto.setUserId(tokenService.getLoginUserApplet().getUserId());
+        }
+        List<Integer> types = new ArrayList<>();
+        if (pointsQueryDto.getType()==null){
+            types.add(1);
+            types.add(2);
+            types.add(3);
+            types.add(4);
+            types.add(5);
+            types.add(6);
+        }else if (pointsQueryDto.getType()==1){
+            types.add(1);
+            types.add(2);
+            types.add(3);
+            types.add(4);
+            types.add(5);
+        }else if (pointsQueryDto.getType()==2){
+            types.add(6);
+        }
+        Page<TAppUserIntegralChange> page = integralChangeService.lambdaQuery()
+                .eq(TAppUserIntegralChange::getAppUserId, pointsQueryDto.getUserId())
+                .orderByDesc(TAppUserIntegralChange::getCreateTime)
+                .eq(pointsQueryDto.getChangeType() != null, TAppUserIntegralChange::getChangeType, pointsQueryDto.getChangeType())
+                .in(!types.isEmpty(), TAppUserIntegralChange::getChangeType, types).page(Page.of(pointsQueryDto.getPageCurr(), pointsQueryDto.getPageSize()));
+        
+        for (TAppUserIntegralChange record : page.getRecords()) {
+            record.setDateTime(record.getCreateTime());
+            record.setUid(record.getId().toString());
+            if (record.getChangeType()==2||record.getChangeType()==3){
+                R<TChargingOrder> tChargingOrderR = chargingOrderClient.orderDetail(Long.valueOf(record.getExtension()));
+                if (tChargingOrderR.getData()!=null) {
+                    record.setOrderNum(tChargingOrderR.getData().getCode());
+                }
+            }
+            if (record.getChangeType()==6){
+                R<TExchangeOrder> tExchangeOrderR = exchangeOrderClient.orderDetail(Long.valueOf(record.getExtension()));
+                if (tExchangeOrderR.getData()!=null){
+                    record.setOrderNum(tExchangeOrderR.getData().getCode());
+                }
+            }
+        }
+        
+        return R.ok(page);
+        
+    }
+    
 
     @ApiOperation(value = "积分详情", tags = {"小程序-个人中心"})
     @GetMapping(value = "/user/points/detail")
     public R<TAppUserIntegralChange> pointsDetail(String id) {
         TAppUserIntegralChange byId = integralChangeService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!byId.getAppUserId().equals(userId)){
+            return R.fail("权限不足");
+        }
         if (byId.getChangeType()==6) {
             TExchangeOrder data = exchangeOrderClient.orderDetail(Long.valueOf(byId.getExtension())).getData();
             if (data != null) {
@@ -554,7 +627,8 @@
         }
         return R.ok(byId);
     }
-
+    
+    @RequiresPermissions(value = {"/appUser/freeze"}, logical = Logical.OR)
     @ApiOperation(value = "冻结解冻用户", tags = {"后台-用户管理-用户列表"})
     @PostMapping(value = "/user/status/change")
     @Log(title = "【用户列表】冻结解冻用户", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
@@ -565,7 +639,9 @@
         appUserService.updateById(appUser);
         return R.ok();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/appUser/updateCompany"}, logical = Logical.OR)
     @ApiOperation(value = "修改单位", tags = {"后台-用户管理-用户列表"})
     @PostMapping(value = "/user/unit/change")
     @Log(title = "【用户列表】修改用户单位", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
@@ -577,7 +653,9 @@
         }
     return R.ok();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/appUser/del"}, logical = Logical.OR)
     @ApiOperation(value = "删除用户", tags = {"后台-用户管理-用户列表"})
     @DeleteMapping(value = "/user/delete")
     @Log(title = "【用户列表】删除用户", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
@@ -615,10 +693,6 @@
             appUserInfoDto.setVipCouponNum(count);
             appUserInfoDto.setIsVip(1);
             appUserInfoDto.setVipExpireTime(byId.getVipEndTime());
-
-
-
-
         }
         //判断当天是否签到
         Long count = signService.lambdaQuery().eq(TAppUserSign::getAppUserId,userId).eq(TAppUserSign::getSignDay, LocalDate.now()).count();
@@ -634,14 +708,7 @@
         appUserInfoDto.setUserCars(list);
         appUserInfoDto.setFirstAdd(byId.getFirstAdd()!=null?byId.getFirstAdd():0);
         appUserInfoDto.setPoints(byId.getPoints()==null?0:byId.getPoints());
-
-
-
-
-
         return R.ok(appUserInfoDto);
-
-
     }
 
 
@@ -652,9 +719,7 @@
         TAppUser byId = appUserService.getById(userId);
         byId.setAvatar(url);
         appUserService.updateById(byId);
-
         return R.ok();
-
     }
 
     @ApiOperation(value = "优惠卷列表不分页(1可使用2不可用)", tags = {"小程序-个人中心"})
@@ -716,12 +781,17 @@
     @PostMapping(value = "/user/coupon/getById")
     public R<TAppCoupon> couponGetById(@RequestParam("id")Long id) {
         TAppCoupon appCoupon = appCouponService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!appCoupon.getAppUserId().equals(userId)){
+            return R.fail("权限不足");
+        }
         appCoupon.setUid(id.toString());
         return R.ok(appCoupon);
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/appUser/giftVip", "/appUser/gift_vip"}, logical = Logical.OR)
     @ApiOperation(value = "赠送会员", tags = {"用户管理-用户列表"})
     @PostMapping(value = "/user/give/vip")
     @Log(title = "【用户列表】赠送会员", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
@@ -813,9 +883,13 @@
         }
         // 获取当前用户信息
         Long userId = tokenService.getLoginUserApplet().getUserId();
-        TAppUser appUser = appUserService.getById(userId);
-        appUser.setPhone(dto.getPhone());
-        appUserService.updateById(appUser);
+        TAppUser appUser = appUserService.getOne(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getPhone, dto.getPhone()).eq(TAppUser::getDelFlag, 0).eq(TAppUser::getStatus, 3));
+        if (Objects.nonNull(appUser)){
+            return AjaxResult.error("手机号已使用,请更换其他手机号");
+        }
+        TAppUser appUser1 = appUserService.getById(userId);
+        appUser1.setPhone(dto.getPhone());
+        appUserService.updateById(appUser1);
         return AjaxResult.success();
     }
 
@@ -1017,7 +1091,13 @@
     @ApiOperation(value = "添加编辑车辆", tags = {"小程序-个人中心-车辆"})
     @PostMapping(value = "/user/car/addOrUpdate")
     public R carAdd(@RequestBody TAppUserCar appUserCar) {
-
+        if(null != appUserCar.getId()){
+            TAppUserCar userCar = appUserCarService.getById(appUserCar.getId());
+            Long userId = tokenService.getLoginUserApplet().getUserId();
+            if(!userCar.getAppUserId().equals(userId)){
+                return R.fail("权限不足");
+            }
+        }
         LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet();
         Long userId = loginUserApplet.getUserId();
         TAppUser byId = appUserService.getById(userId);
@@ -1095,6 +1175,11 @@
     @ApiOperation(value = "添加编辑车辆", tags = {"小程序-个人中心-车辆"})
     @GetMapping(value = "/user/car/delete")
     public R carDelete(String id) {
+        TAppUserCar appUserCar = appUserCarService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!appUserCar.getAppUserId().equals(userId)){
+            return R.fail("权限不足");
+        }
         boolean b = appUserCarService.removeById(id);
         return R.ok();
     }
@@ -1102,6 +1187,10 @@
     @GetMapping(value = "/user/car/detail")
     public R<TAppUserCar> carDetail(String id) {
         TAppUserCar byId = appUserCarService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!byId.getAppUserId().equals(userId)){
+            return R.fail("权限不足");
+        }
         return R.ok(byId);
     }
 
@@ -1200,6 +1289,29 @@
                 return R.ok(result3);
         }
     }
-
+    
+    
+    @PostMapping(value = "/user/logOut")
+    @ApiOperation(value = "退出登录", tags = {"小程序-个人中心"})
+    public AjaxResult logOut(){
+        String token = tokenService.getLoginUserApplet().getToken();
+        redisService.deleteObject("login_tokens:" + token);
+        return AjaxResult.success();
+    }
+    
+    
+    
+    @PostMapping("/refresh")
+    @ApiOperation(value = "刷新token过期时间", tags = {"小程序-个人中心"})
+    public R<?> refresh(HttpServletRequest request) {
+        LoginUserApplet loginUser = tokenService.getLoginUserAppletToken(request);
+        if (StringUtils.isNotNull(loginUser)) {
+            // 刷新令牌有效期
+            tokenService.refreshToken1(loginUser);
+            return R.ok();
+        }
+        return R.ok();
+    }
+    
 }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserTagController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserTagController.java
index dd40be3..54bd6b0 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserTagController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserTagController.java
@@ -6,6 +6,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.dto.TagListQueryDto;
 import com.ruoyi.account.api.model.TAppUserTag;
 import com.ruoyi.account.service.TAppUserTagService;
@@ -33,7 +35,9 @@
     private OtherClient otherClient;
     @Resource
     private TAppUserTagService appUserTagService;
-
+    
+    
+    @RequiresPermissions(value = {"/coupon", "/userTag"}, logical = Logical.OR)
     @ApiOperation(value = "标签管理列表", tags = {"用户管理-用户标签管理"})
     @PostMapping(value = "/tags/page")
     public R<Page<TUserTag>> tagPage(@RequestBody TagListQueryDto tagListQueryDto) {
@@ -46,6 +50,9 @@
         }
         return R.ok(data);
     }
+    
+    
+    @RequiresPermissions(value = {"/appUser/list"}, logical = Logical.OR)
     @ApiOperation(value = "标签管理列表", tags = {"用户管理-用户标签管理"})
     @GetMapping(value = "/tags/select")
     public R<List<TUserTag>> select() {
@@ -55,8 +62,9 @@
         R<Page<TUserTag>> pageR = otherClient.queryTagPage(tagListQueryDto);
         return R.ok(pageR.getData().getRecords());
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/userTag/add", "/userTag/update"}, logical = Logical.OR)
     @ApiOperation(value = "标签添加或修改", tags = {"用户管理-用户标签管理"})
     @PostMapping(value = "/tags/add")
     @Log(title = "【用户标签管理】标签添加或修改", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
@@ -65,7 +73,9 @@
         otherClient.addorUpdateTag(tUserTag);
         return R.ok();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/userTag/del"}, logical = Logical.OR)
     @ApiOperation(value = "标签删除", tags = {"用户管理-用户标签管理"})
     @DeleteMapping(value = "/tags/delete")
     @Log(title = "【用户标签管理】删除标签", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java
index f501947..b5cfe15 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java
@@ -79,6 +79,10 @@
 	@ApiOperation(value = "获取开票抬头详情数据", tags = {"小程序-充电发票"})
 	public AjaxResult<TInvoiceInformation> getInvoiceInformationInfo(@PathVariable String id){
 		TInvoiceInformation information = invoiceInformationService.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!information.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
 		return AjaxResult.success(information);
 	}
 	
@@ -89,6 +93,11 @@
 	@ApiOperation(value = "编辑开票抬头数据", tags = {"小程序-充电发票"})
 	public AjaxResult editInvoiceInformation(@RequestBody TInvoiceInformation invoiceInformation){
 		Long userId = tokenService.getLoginUserApplet().getUserId();
+		TInvoiceInformation information = invoiceInformationService.getById(invoiceInformation.getId());
+		if(!information.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
+		
 		//如果当前是默认抬头,则需要去除其他的默认配置
 		if(null != invoiceInformation.getIsDefault() && 1 == invoiceInformation.getIsDefault()){
 			TInvoiceInformation one = invoiceInformationService.getOne(new LambdaQueryWrapper<TInvoiceInformation>().eq(TInvoiceInformation::getDelFlag, 0)
diff --git a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml
index ce8973a..32d84d4 100644
--- a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml
@@ -12,8 +12,8 @@
     allow-circular-references: true
   profiles:
     # 环境配置
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
 ---
 spring:
   config:
@@ -56,52 +56,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 192.168.110.169:8848 # nacos注册中心地址
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 192.168.0.137:8080  #  Sentinel控制台地址
diff --git a/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/account/RuoYiAccountApplicationTests.java b/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/account/RuoYiAccountApplicationTests.java
index 5d28046..af00dff 100644
--- a/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/account/RuoYiAccountApplicationTests.java
+++ b/ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/account/RuoYiAccountApplicationTests.java
@@ -1,8 +1,30 @@
 package com.ruoyi.account;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.system.api.model.LoginUserApplet;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.HashMap;
+import java.util.Map;
 
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiAccountApplication.class)
 public class RuoYiAccountApplicationTests {
-
+	@Autowired
+	private TokenService tokenService;
+	
+	@Test
+	public void test(){
+		LoginUserApplet loginUserApplet = new LoginUserApplet();
+		loginUserApplet.setUserId(1839480334642704385L);
+		loginUserApplet.setUserIdStr("1839480334642704385");
+		loginUserApplet.setName("158****3127");
+		loginUserApplet.setPhone("15828353127");
+		loginUserApplet.setAvatar("");
+		loginUserApplet.setAddress("");
+		Map<String, Object> tokenInfos = new HashMap<>();
+		System.err.println(tokenService.createTokenApplet(loginUserApplet));
+	}
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java
index 71006ef..1fd839d 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/CodeController.java
@@ -19,6 +19,9 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
@@ -28,7 +31,7 @@
 
     @Autowired
     private RedisService redisService;
-    @Autowired
+    @Resource
     private AppUserClient appUserClient;
     @Autowired
     private TChargingPileNotificationService chargingPileNotificationService;
@@ -41,11 +44,36 @@
      */
     @ApiOperation(value = "获取验证码",notes = "获取验证码",tags = {"更换手机号获取验证码"})
     @GetMapping("/getCode")
-    public AjaxResult getCode(@RequestParam("phone") String phone)
-    {
+    public AjaxResult getCode(@RequestParam("phone") String phone) {
+        String regex = "^1[3-9]\\d{9}$";
+        if(!phone.matches(regex)){
+            return AjaxResult.error("无效的手机号");
+        }
+        Map<String, Object> cacheMap = redisService.getCacheMap("sms_code_" + phone);
+        if(null == cacheMap || cacheMap.size() == 0){
+            cacheMap = new HashMap<>();
+            cacheMap.put("timestamp", System.currentTimeMillis());
+            cacheMap.put("time", 1);
+            redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
+        }else{
+            Integer time = (Integer) cacheMap.get("time");
+            Long timestamp = (Long) cacheMap.get("timestamp");
+            if(System.currentTimeMillis() - timestamp > 60000){
+                cacheMap.put("timestamp", System.currentTimeMillis());
+                cacheMap.put("time", 1);
+                redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
+            } else if(System.currentTimeMillis() - timestamp <= 60000 && time < 3){
+                time++;
+                cacheMap.put("time", time);
+                redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
+            }else if(System.currentTimeMillis() - timestamp < 60000 && time >= 3){
+                return AjaxResult.error("请求太频繁,请稍后再试!");
+            }
+        }
+    
         TAppUser appUser = appUserClient.selectByPhone(phone).getData();
         if (Objects.nonNull(appUser)){
-            return AjaxResult.error("该手机号已绑定账号");
+            return AjaxResult.error();
         }
         String code = MsgUtil.createCode();
         redisService.setCacheObject(phone+ Constants.UPDATE_PHONE,code,5L, TimeUnit.MINUTES);
@@ -69,8 +97,33 @@
      */
     @ApiOperation(value = "获取验证码",notes = "获取验证码",tags = {"申请建桩获取验证码"})
     @GetMapping("/getApplyCode")
-    public AjaxResult getApplyCode(@RequestParam("phone") String phone)
-    {
+    public AjaxResult getApplyCode(@RequestParam("phone") String phone) {
+        String regex = "^1[3-9]\\d{9}$";
+        if(!phone.matches(regex)){
+            return AjaxResult.error("无效的手机号");
+        }
+        Map<String, Object> cacheMap = redisService.getCacheMap("sms_code_" + phone);
+        if(null == cacheMap || cacheMap.size() == 0){
+            cacheMap = new HashMap<>();
+            cacheMap.put("timestamp", System.currentTimeMillis());
+            cacheMap.put("time", 1);
+            redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
+        }else{
+            Integer time = (Integer) cacheMap.get("time");
+            Long timestamp = (Long) cacheMap.get("timestamp");
+            if(System.currentTimeMillis() - timestamp > 60000){
+                cacheMap.put("timestamp", System.currentTimeMillis());
+                cacheMap.put("time", 1);
+                redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
+            } else if(System.currentTimeMillis() - timestamp <= 60000 && time < 3){
+                time++;
+                cacheMap.put("time", time);
+                redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
+            }else if(System.currentTimeMillis() - timestamp < 60000 && time >= 3){
+                return AjaxResult.error("请求太频繁,请稍后再试!");
+            }
+        }
+        
         String code = MsgUtil.createCode();
         redisService.setCacheObject(phone+ Constants.APPLY_CHARGING,code,5L, TimeUnit.MINUTES);
         SendMessageDTO sendMessageDTO = new SendMessageDTO();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
index 8494f33..1c514cd 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
@@ -1,29 +1,37 @@
 package com.ruoyi.chargingPile.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.ruoyi.chargingPile.api.dto.GetPermissionConfigurationDTO;
 import com.ruoyi.chargingPile.api.dto.PartnerListDTO;
 import com.ruoyi.chargingPile.api.model.Partner;
+import com.ruoyi.chargingPile.api.model.TPartnerSite;
+import com.ruoyi.chargingPile.api.model.TSiteMenu;
 import com.ruoyi.chargingPile.api.query.GetPartnerList;
 import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ResetPassword;
 import com.ruoyi.chargingPile.service.IPartnerService;
+import com.ruoyi.chargingPile.service.TPartnerSiteService;
+import com.ruoyi.chargingPile.service.TSiteMenuService;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
@@ -40,11 +48,15 @@
 	
 	@Resource
 	private SysUserClient sysUserClient;
-	
+	@Resource
+	private TSiteMenuService siteMenuService;
 
+	@Resource
+	private TPartnerSiteService partnerSiteService;
 	
 	
 	
+	@RequiresPermissions(value = {"/balanceSheetRecord", "/partners", "/chargingPile/add", "/chargingPile/select", "/chargingPile/update"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getPartnerList")
 	@ApiOperation(value = "获取合作商列表", tags = {"管理后台-合作商管理"})
@@ -54,6 +66,8 @@
 	}
 	
 	
+
+	@RequiresPermissions(value = {"/partners/add"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/addPartner")
 	@ApiOperation(value = "添加合作商", tags = {"管理后台-合作商管理"})
@@ -64,6 +78,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/partners/seleete", "/partners/update"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getPartner/{id}")
 	@ApiOperation(value = "获取合作商详情", tags = {"管理后台-合作商管理", "管理后台-充电桩信息"})
@@ -74,6 +89,9 @@
 		Partner partner = partnerService.getPartner(id);
 		return AjaxResult.success(partner);
 	}
+
+
+
 	@ResponseBody
 	@GetMapping("/getPartnerR/{id}")
 	public R<Partner> getPartnerR(@PathVariable("id") Integer id){
@@ -83,6 +101,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/partners/update"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/editPartner")
 	@ApiOperation(value = "编辑合作商", tags = {"管理后台-合作商管理"})
@@ -93,6 +112,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/partners/del"}, logical = Logical.OR)
 	@ResponseBody
 	@DeleteMapping("/delPartner")
 	@ApiOperation(value = "删除合作商", tags = {"管理后台-合作商管理"})
@@ -105,6 +125,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/partners/resetPassword"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/resetPassword")
 	@ApiOperation(value = "合作商重置密码", tags = {"管理后台-合作商管理"})
@@ -113,12 +134,16 @@
 		return partnerService.resetPassword(resetPassword);
 	}
 	
-	
+	@Autowired
+private TokenService tokenService;
+
+
+	@RequiresPermissions(value = {"/site/add", "/site/update"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getPartner")
 	@ApiOperation(value = "获取所有合作商", tags = {"管理后台-站点管理"})
 	public AjaxResult<List<Partner>> getPartner(){
-		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
 		LambdaQueryWrapper<Partner> wrapper = new LambdaQueryWrapper<Partner>().eq(Partner::getDelFlag, 0);
@@ -131,6 +156,8 @@
 	
 	
 	
+
+	@RequiresPermissions(value = {"/site/partner_authority"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getPermissionConfiguration/{siteId}")
 	@ApiOperation(value = "获取合作商权限设置", tags = {"管理后台-站点管理"})
@@ -140,6 +167,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/site/partner_authority"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/setPermissionConfiguration/{siteId}")
 	@ApiOperation(value = "设置合作商权限", tags = {"管理后台-站点管理"})
@@ -169,7 +197,293 @@
 	 */
 	@PostMapping("/authSite/{partnerId}")
 	public R<Set<Integer>> authSite(@PathVariable("partnerId") Integer partnerId, @RequestParam("siteMenu") String siteMenu){
-		Set<Integer> integers = partnerService.authSite(partnerId, SiteMenu.valueOf(siteMenu));
+		Set<Integer> integers = partnerService.authSite(partnerId, SiteMenu.getSiteMenu(siteMenu));
 		return R.ok(integers);
 	}
+
+	/**
+	 * 判断合作商权限
+	 * @param partnerId
+	 * @param siteId
+	 * @param siteMenu
+	 * @return
+	 */
+	@PostMapping("/authMenu/{partnerId}")
+	public Boolean authMenu(@PathVariable("partnerId") Integer partnerId, @RequestParam("siteId") Integer siteId, @RequestParam("siteMenu") String siteMenu){
+		return partnerService.authMenu(partnerId, siteId, SiteMenu.getSiteMenu(siteMenu));
+	}
+	// 充电算帐单按钮权限
+	@PostMapping("/getChargingBillMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getChargingBillMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charge_bill_order/download").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charge_bill_order").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		List<Boolean> booleans = new ArrayList<>();
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 充电时段统计按钮权限
+	@PostMapping("/getChargingListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getChargingListMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		List<Boolean> booleans = new ArrayList<>();
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_period_statistics/order_info").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_period_statistics/charging_curve").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu three = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_period_statistics").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite2 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, three.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite2!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 账户结算帐单按钮权限
+	@PostMapping("/getAccountMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getAccountMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/account_settlement/download").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/account_settlement").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		List<Boolean> booleans = new ArrayList<>();
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 结算表记录按钮权限
+	@PostMapping("/getSettlementListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getSettlementListMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		List<Boolean> booleans = new ArrayList<>();
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/balance_sheet_record/download").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/balance_sheet_record/del").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu three = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/balance_sheet_record").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite2 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, three.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite2!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 充电桩订单按钮权限
+	@PostMapping("/getChargingOrderMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> getChargingOrderMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_pile_order/record").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_pile_order").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		List<Boolean> booleans = new ArrayList<>();
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 订单申诉按钮权限
+	@PostMapping("/managePageListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> managePageListMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		List<Boolean> booleans = new ArrayList<>();
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/order_appeal/view").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/order_appeal/handle").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu three = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/order_appeal").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite2 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, three.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite2!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 停车记录按钮权限
+	@PostMapping("/parkingRecordListMenu/{partnerId}/{siteId}")
+	R<List<Boolean>> parkingRecordListMenu(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		List<Boolean> booleans = new ArrayList<>();
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/parking_record/view").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/parking_record/exit_parking_lot").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu three = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/parking_record").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite2 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, three.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite2!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 充电监控记录按钮权限
+	@PostMapping("/watchChargingOrder/{partnerId}/{siteId}")
+	R<List<Boolean>> watchChargingOrder(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		List<Boolean> booleans = new ArrayList<>();
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_pile_order/monitoring_record/info").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu two = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_pile_order/monitoring_record/del").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite1 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, two.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		TSiteMenu three = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charging_pile_order/monitoring_record").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite2 = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, three.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite1!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		if (partnerSite2!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
+	// 充电评价数据权限
+	@PostMapping("/chargeEvaluation/{partnerId}/{siteId}")
+	R<List<Boolean>> chargeEvaluation(@PathVariable("partnerId")Integer partnerId,@PathVariable("siteId") Integer siteId){
+		List<Boolean> booleans = new ArrayList<>();
+		TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, "/data/charge_evaluation").eq(TSiteMenu::getStatus, 0));
+		TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
+				.eq(TPartnerSite::getPartnerId, partnerId)
+				.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
+				.eq(TPartnerSite::getSiteId, siteId));
+		if (partnerSite!=null){
+			booleans.add(true);
+		}else{
+			booleans.add(false);
+		}
+		return R.ok(booleans);
+	}
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index c4aa46d..9afe802 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -13,12 +13,13 @@
 import com.ruoyi.account.api.vo.GetAppUserVipDetail;
 import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
 import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.chargingPile.api.query.GetSiteList;
 import com.ruoyi.chargingPile.api.query.SiteDetailQuery;
 import com.ruoyi.chargingPile.api.query.SiteQuery;
 import com.ruoyi.chargingPile.api.vo.*;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ChargingPercentBack;
 import com.ruoyi.common.core.dto.ChargingOrderGroup;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
@@ -30,6 +31,8 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
@@ -54,7 +57,6 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -83,7 +85,7 @@
 	@Resource
 	private RoleSiteClient roleSiteClient;
 	@Resource
-	private ParkingLotClient parkingLotClient;
+	private SysUserRoleClient sysUserRoleClient;
 	@Resource
 	private TChargingPileService chargingPileService;
 	@Resource
@@ -236,6 +238,9 @@
 		return R.ok(siteInfoVO);
 	}
 	
+	@RequiresPermissions(value = {"/systemUserManagement/update", "/site", "/platformRevenueAnalysis", "/chargingOperationAnalysis",
+			"/chargingUserAnalysis", "/operationMaintenanceAnalysis", "/chargingEquipmentMonitoring", "/activityExpense", "/chargeEvaluation/list",
+			"/parkingLot", "/workbench"}, logical = Logical.OR)
 	@GetMapping("/getSiteList")
 	@ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"})
 	public AjaxResult<PageInfo<GetSiteListDTO>> getSiteList(GetSiteList siteList){
@@ -250,9 +255,10 @@
 		PageInfo<GetSiteListDTO> list = siteService.getSiteList1(userId);
 		return R.ok(list.getRecords());
 	}
-
-
-
+	
+	
+	
+	@RequiresPermissions(value = {"/chargeDistribution"}, logical = Logical.OR)
 	@GetMapping("/map/getSiteList")
 	@ApiOperation(value = "获取站点", tags = {"管理后台-数据分析-电站分析"})
 	public R<List<GetSiteListDTO>> getMapSiteList(GetSiteList siteList){
@@ -300,8 +306,9 @@
 		}
 		return R.ok(list.getRecords());
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/chargeDistribution"}, logical = Logical.OR)
 	@GetMapping("/map/getPercent")
 	@ApiOperation(value = "获取该充电站的利用率", tags = {"管理后台-数据分析-电站分析"})
 	public R getPercent(Integer siteId){
@@ -325,15 +332,40 @@
 		return R.ok(divide);
 	}
 
+	@Resource
+    private SiteClient siteClient;
 
 
-
+	
+	
+	
+	@RequiresPermissions(value = {"/chargeDistribution"}, logical = Logical.OR)
 	@PostMapping("/map/getPercentByprovinceCode")
 	@ApiOperation(value = "获取该充电站的利用率", tags = {"管理后台-数据分析-电站分析"})
 	public R getPercentByCityCode(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto){
-
-
-
+		Set<Integer> ids = null;
+		//校验合作商权限
+		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		Integer roleType = sysUser.getRoleType();
+		Integer objectId = sysUser.getObjectId();
+		R<Integer> admin = sysUserClient.isAdmin(SecurityUtils.getUserId());
+		//合作商
+		if(roleType == 2){
+			ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+		}else{
+			//非管理员需要根据角色和用户配置查询允许的站点数据
+			//改用roleId=1来判断
+			if(admin.getData()!=1){
+				List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
+				List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
+				if(data2.size() > 0){
+					List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
+					data.addAll(data1);
+				}
+				ids = new HashSet<>(data);
+			}
+		}
+		chargingPercentProvinceDto.setSiteIds(ids);
 
 
 		GetSiteList siteList = new GetSiteList();
@@ -349,7 +381,7 @@
 		if (chargingPercentProvinceDto.getDate1().equals(chargingPercentProvinceDto.getDate2())){
 			chargingPercentProvinceDto.setDate2(chargingPercentProvinceDto.getDate1().plusDays(1));
 		}
-			List<ChargingOrderGroup> data = chargingOrderClient.getBySiteIdAndTime(chargingPercentProvinceDto).getData();
+		List<ChargingOrderGroup> data = chargingOrderClient.getBySiteIdAndTime(chargingPercentProvinceDto).getData();
 		// 计算利用率展示
 		for (ChargingOrderGroup datum : data) {
 			List<TChargingPile> chargingPiles = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, datum.getSiteId()).list();
@@ -390,18 +422,25 @@
 	public AjaxResult<List<Site>> getSiteList1(){
 		return AjaxResult.success(siteService.list(new QueryWrapper<>()));
 	}
-
+	
+	@RequiresPermissions(value = {"/systemUserManagement", "/site", "/faultInformationList", "/repairRecord", "/balanceSheetRecord", "/chargingPileOrder",
+			"/chargeOrderMonitoring", "/chargingPile", "/chargingGun"}, logical = Logical.OR)
 	@GetMapping("/getSiteListGun")
 	@ApiOperation(value = "获取站点列表 不分页", tags = {"管理后台-接口信息使用"})
 	public AjaxResult<List<Site>> getSiteListGun(){
 		return AjaxResult.success(siteService.getSiteListGun());
 	}
-
+	
+	
+	@RequiresPermissions(value = {"/parkingLot/add", "/parkingLot/select", "/parkingLot/update"}, logical = Logical.OR)
 	@GetMapping("/getSiteListParkLot")
 	@ApiOperation(value = "获取站点列表不分页", tags = {"管理后台-停车场绑定"})
 	public AjaxResult<List<Site>> getSiteListParkLot(){
 		return AjaxResult.success(siteService.getSiteListParkLot());
 	}
+	
+	
+	
 	@ApiOperation(value = "获取站点分页列表", tags = {"小程序-站点管理-首页"})
 	@PostMapping("/pageList")
 	public AjaxResult<PageInfo<SiteVO>> pageList(@Validated @RequestBody SiteQuery query, HttpServletRequest request){
@@ -409,6 +448,8 @@
 		return AjaxResult.success(siteService.pageList(query,isLogin));
 	}
 
+	
+	
 	@ApiOperation(value = "获取站点列表", tags = {"小程序-站点管理-地图导航站点"})
 	@PostMapping("/getMapSiteList")
 	public AjaxResult<List<SiteVO>> getMapSiteList(@Validated @RequestBody SiteQuery query, HttpServletRequest request){
@@ -443,13 +484,19 @@
 		return AjaxResult.success(chargingPileService.getChargingGunList(siteId,type));
 	}
 
-	@ApiOperation(value = "获取站点下充电枪数量统计", tags = {"小程序-站点管理-站点详情","管理后台-数据分析-电站分析"})
+	@ApiOperation(value = "获取站点下充电枪数量统计", tags = {"管理后台-数据分析-电站分析"})
 	@GetMapping("/getChargingGunCount")
 	public AjaxResult<Map<String,ChargingGunCountVO>> getChargingGunCount(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId){
 		return AjaxResult.success(chargingGunService.getChargingGunCount(siteId));
 	}
-
 	
+	@ApiOperation(value = "获取站点下充电枪数量统计", tags = {"小程序-站点管理-站点详情"})
+	@GetMapping("/getChargingGunCount1")
+	public AjaxResult<Map<String,ChargingGunCountVO>> getChargingGunCount1(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId){
+		return AjaxResult.success(chargingGunService.getChargingGunCount(siteId));
+	}
+	
+	@RequiresPermissions(value = {"/site/add"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/addSite")
 	@ApiOperation(value = "添加站点", tags = {"管理后台-站点管理"})
@@ -460,6 +507,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/site/update"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/getSiteInfo/{id}")
 	@ApiOperation(value = "获取站点详情", tags = {"管理后台-站点管理"})
@@ -470,6 +518,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/site/update"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/editSite")
 	@ApiOperation(value = "编辑站点", tags = {"管理后台-站点管理"})
@@ -478,6 +527,9 @@
 		return siteService.editSite(site);
 	}
 	
+	
+	
+	@RequiresPermissions(value = {"/site/del", "/site/batch_del"}, logical = Logical.OR)
 	@ResponseBody
 	@DeleteMapping("/delSite")
 	@ApiOperation(value = "删除站点", tags = {"管理后台-站点管理"})
@@ -490,6 +542,8 @@
 	}
 	
 	
+	
+	@RequiresPermissions(value = {"/site/accounting_strategy"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/setAccountingStrategy/{id}")
 	@ApiOperation(value = "设置站点计费策略", tags = {"管理后台-站点管理"})
@@ -504,12 +558,14 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/roleManagement/add", "/roleManagement/info", "/roleManagement/update", "/systemNotification", "/chargingPeriodStatistics",
+			"/parkingPaymentOrder", "/generateStatement", "/chargingPile/add", "/chargingPile/select", "/chargingPile/update"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getAllSiteList")
 	@ApiOperation(value = "获取所有站点数据", tags = {"管理后台-充电桩信息", "管理后台-系统用户管理", "管理后台-角色管理", "管理后台-系统通知", "管理后台-充电评价"})
 	public AjaxResult<List<Site>> getAllSiteList(){
 		//校验当前账户站点权限
-		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
 		LambdaQueryWrapper<Site> wrapper = new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0);
@@ -518,7 +574,7 @@
 			wrapper.in(Site::getId, list);
 		}else{
 			//非管理员需要根据角色和用户配置查询允许的站点数据
-			if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+			if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 				List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
 				List<SysUserRoleVo> data2 = userRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
 				List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
index 1bb2f6e..de5b1ac 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -23,6 +23,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.IntegrationClient;
@@ -80,6 +82,8 @@
     /**
      * 查询计费策略列表
      */
+    @RequiresPermissions(value = {"/site/add", "/site/update", "/site/accounting_strategy", "/chargingPile/add_charging_gun", "/chargingPile/accountingStrategy",
+            "/chargingGun/update", "/accountingStrategy"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-计费策略"},value = "查询计费策略分页列表")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TAccountingStrategyVO>> pageList(@RequestBody TAccountingStrategyQuery query) {
@@ -89,6 +93,8 @@
     /**
      * 查询计费策略明细列表
      */
+    @RequiresPermissions(value = {"/billingTemplateAudit/info", "/site/accounting_strategy", "/chargingGun/select_rate", "/accountingStrategy",
+            "/accountingStrategy/select", "/accountingStrategy/update"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理", "管理后台-充电桩信息"},value = "查询计费策略明细列表")
     @GetMapping(value = "/queryAccountingStrategyDetailByStrategyId")
     public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailByStrategyId(@RequestParam("strategyId") Integer strategyId) {
@@ -137,6 +143,7 @@
     /**
      * 修改计费策略
      */
+    @RequiresPermissions(value = {"/accountingStrategy/update"}, logical = Logical.OR)
     @Log(title = "【计费策略】修改计费策略", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "修改计费策略")
     @PostMapping(value = "/update")
@@ -213,6 +220,7 @@
     /**
      * 查看计费策略详情
      */
+    @RequiresPermissions(value = {"/site/accounting_strategy", "/accountingStrategy/select", "/accountingStrategy/update"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "查看计费策略详情")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TAccountingStrategyVO> getDetailById(@RequestParam("id") Integer id) {
@@ -286,6 +294,7 @@
     /**
      * 删除计费策略
      */
+    @RequiresPermissions(value = {"/accountingStrategy/del"}, logical = Logical.OR)
     @Log(title = "【计费策略】删除计费策略", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-计费策略"},value = "删除计费策略")
     @DeleteMapping(value = "/deleteById")
@@ -305,6 +314,7 @@
     /**
      * 批量删除计费策略
      */
+    @RequiresPermissions(value = {"/accountingStrategy/del"}, logical = Logical.OR)
     @Log(title = "【计费策略】批量删除计费策略", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-计费策略"},value = "批量删除计费策略")
     @DeleteMapping(value = "/deleteByIds")
@@ -329,9 +339,10 @@
         List<TAccountingStrategyVO> list = accountingStrategyService.getPlatformAccountingStrategy();
         return AjaxResult.success(list);
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/billingTemplateAudit"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "查询计费审核分页列表")
     @PostMapping(value = "/auth/pageList")
     public AjaxResult<PageInfo<TAccountingStrategyVO>> authPageList(@RequestBody TAccountingStrategyQuery query) {
@@ -339,7 +350,8 @@
         return AjaxResult.ok(accountingStrategyService.pageList1(query));
     }
     
-
+    
+    @RequiresPermissions(value = {"/billingTemplateAudit/audit"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "审核")
     @PostMapping(value = "/auth/pass")
     @Log(title = "【计费模板审核】审核计费模板", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
index d715cb8..ecf60cb 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -14,6 +14,9 @@
 import com.ruoyi.common.core.utils.WebUtils;
 import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.ExportUidDto;
@@ -133,7 +136,9 @@
         dto.setAppUserId(userId);
         return AjaxResult.ok(applyChargingPileService.save(dto));
     }
-
+    
+    
+    @RequiresPermissions(value = {"/pileApplication/add"}, logical = Logical.OR)
     @Log(title = "【申请建桩】添加建桩申请", businessType = BusinessType.INSERT)
     @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "建桩申请")
     @PostMapping(value = "/manage/add")
@@ -141,7 +146,9 @@
 
         return AjaxResult.ok(applyChargingPileService.save(dto));
     }
-
+    
+    
+    @RequiresPermissions(value = {"/pileApplication"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "列表")
     @PostMapping(value = "/page")
     public AjaxResult<Page<TApplyChargingPile>> page(@RequestBody ApplyChargingQuery applyChargingQuery) {
@@ -151,8 +158,9 @@
                 .page(Page.of(applyChargingQuery.getPageCurr(), applyChargingQuery.getPageSize()));
         return AjaxResult.ok(page);
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/pileApplication/export"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "导出")
     @PutMapping(value = "/export")
     @Log(title = "【申请建桩】导出建桩申请列表", businessType = BusinessType.EXPORT)
@@ -266,7 +274,9 @@
         }
         return R.ok();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/chargeBill/download"}, logical = Logical.OR)
     @ApiOperation(value = "下载-已出账", tags = {"管理后台-充电算账单"})
     @PutMapping("/downloadBill")
     @Log(title = "【充电算账单】下载算账单", businessType = BusinessType.EXPORT)
@@ -309,6 +319,10 @@
         }
         return R.ok();
     }
+    
+    
+    
+    @RequiresPermissions(value = {"/accountSettlementStatement/download"}, logical = Logical.OR)
     @ApiOperation(value = "下载", tags = {"管理后台-账户结算账单"})
     @PutMapping("/downloadAccount")
     @Log(title = "【账户结算账单】下载账单", businessType = BusinessType.EXPORT)
@@ -365,13 +379,17 @@
         }
         return R.ok();
     }
-
+    
+    
+    
+    @RequiresPermissions(value = {"/summarySettlement/export", "/balanceSheetRecord/download"}, logical = Logical.OR)
     @ApiOperation(value = "导出", tags = {"管理后台-结算汇总表"})
     @PutMapping("/downloadSettlementTotal")
     @Log(title = "【结算汇总表】下载汇总表", businessType = BusinessType.EXPORT)
     public R downloadSettlementTotal(@RequestBody ExportUidDto uid,HttpServletResponse response)
     {
-        SettlementTotalVO data = chargingOrderClient.settlementTotalR(uid.getTime()).getData();
+        Long userId = tokenService.getLoginUser().getUserid();
+        SettlementTotalVO data = chargingOrderClient.settlementTotalR(uid.getTime(),userId).getData();
         try {
             response.setCharacterEncoding(Constants.UTF8);
             response.setContentType("application/vnd.ms-excel");
@@ -400,6 +418,9 @@
         }
         return R.ok();
     }
+    
+    
+    
     @Resource
     private OtherClient otherClient;
     @Resource
@@ -687,14 +708,16 @@
         );
         return pattern.matcher(url).matches();
     }
-
+    
+    @RequiresPermissions(value = {"/pileApplication/select"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "详情")
     @PostMapping(value = "/detail/{id}")
     public AjaxResult<TApplyChargingPile> detail(@PathVariable Integer id) {
 
         return AjaxResult.ok(applyChargingPileService.getById(id));
     }
-
+    
+    @RequiresPermissions(value = {"/pileApplication/remark"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "修改备注")
     @PostMapping(value = "/remark")
     @Log(title = "【申请建桩】修改备注", businessType = BusinessType.UPDATE)
@@ -704,6 +727,8 @@
         applyChargingPileService.updateById(byId);
         return AjaxResult.success();
     }
+    
+    @RequiresPermissions(value = {"/pileApplication/del"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "删除")
     @DeleteMapping(value = "/remark")
     @Log(title = "【申请建桩】删除建桩申请", businessType = BusinessType.DELETE)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TCarportController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TCarportController.java
index 56e736a..66a452d 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TCarportController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TCarportController.java
@@ -12,6 +12,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +47,7 @@
     /**
      * 通过停车场id查询车库及车道信息
      */
+    @RequiresPermissions(value = {"/parkingLot"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-车库"},value = "通过停车场id查询车库及车道信息")
     @GetMapping(value = "/queryCarportByParkId")
     public AjaxResult<List<TCarportVO>> queryCarportByParkId(@RequestParam(value = "parkingLotId", required = true) Integer parkingLotId) {
@@ -55,6 +58,7 @@
     /**
      * 添加车库管理
      */
+    @RequiresPermissions(value = {"/parkingLot/add_garage"}, logical = Logical.OR)
     @Log(title = "【车库】添加车库", businessType = BusinessType.INSERT)
     @ApiOperation(tags = {"后台-车库"},value = "添加车库")
     @PostMapping(value = "/add")
@@ -65,6 +69,7 @@
     /**
      * 修改车库
      */
+    @RequiresPermissions(value = {"/parkingLot/update_garage"}, logical = Logical.OR)
     @Log(title = "【车库】修改车库", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车库"},value = "修改车库")
     @PostMapping(value = "/update")
@@ -75,6 +80,7 @@
     /**
      * 查看车库详情
      */
+    @RequiresPermissions(value = {"/parkingLot/update_garage"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-车库"},value = "查看车库详情")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TCarport> getDetailById(@RequestParam("id") Integer id) {
@@ -84,6 +90,7 @@
     /**
      * 删除车库
      */
+    @RequiresPermissions(value = {"/parkingLot/del_garage"}, logical = Logical.OR)
     @Log(title = "【车库】删除车库", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车库"},value = "删除车库")
     @DeleteMapping(value = "/deleteById")
@@ -97,6 +104,7 @@
     /**
      * 批量删除车库
      */
+    @RequiresPermissions(value = {"/parkingLot/del_garage"}, logical = Logical.OR)
     @Log(title = "【车库】批量删除车库", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车库"},value = "批量删除车库")
     @DeleteMapping(value = "/deleteByIds")
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
index a619468..f618ef1 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -24,6 +24,9 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import io.swagger.annotations.Api;
@@ -69,6 +72,7 @@
     /**
      * 查询充电枪列表
      */
+    @RequiresPermissions(value = {"/chargingPile", "/chargingGun"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-充电枪", "管理后台-充电桩信息"},value = "查询充电枪分页列表")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TChargingGunVO>> pageList(@RequestBody TChargingGunQuery query) {
@@ -78,6 +82,7 @@
     /**
      * 添加充电枪管理
      */
+    @RequiresPermissions(value = {"/chargingPile/add_charging_gun"}, logical = Logical.OR)
     @Log(title = "【充电桩信息】添加充电枪", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "添加充电枪")
     @PostMapping(value = "/add")
@@ -88,6 +93,7 @@
     /**
      * 修改充电枪
      */
+    @RequiresPermissions(value = {"/chargingGun/update"}, logical = Logical.OR)
     @Log(title = "【充电桩信息】修改充电枪", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "修改充电枪")
     @PostMapping(value = "/update")
@@ -98,6 +104,7 @@
     /**
      * 查看充电枪详情
      */
+    @RequiresPermissions(value = {"/chargingGun/update", "/chargingGun/select"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-充电枪", "管理后台-充电桩信息"},value = "查看充电枪详情")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TChargingGun> getDetailById(@RequestParam("id") Integer id) {
@@ -107,6 +114,7 @@
     /**
      * 删除充电枪
      */
+    @RequiresPermissions(value = {"/chargingGun/del"}, logical = Logical.OR)
     @Log(title = "【充电桩信息】删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "删除充电枪")
     @DeleteMapping(value = "/deleteById")
@@ -119,6 +127,7 @@
     /**
      * 批量删除充电枪
      */
+    @RequiresPermissions(value = {"/chargingGun/del"}, logical = Logical.OR)
     @Log(title = "【充电桩信息】批量删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-充电枪"},value = "批量删除充电枪")
     @DeleteMapping(value = "/deleteByIds")
@@ -130,6 +139,7 @@
     /**
      * 结束充电
      */
+    @RequiresPermissions(value = {"/chargingGun/end_charging"}, logical = Logical.OR)
     @Log(title = "【充电桩信息】结束充电", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-充电枪"},value = "结束充电")
     @PutMapping(value = "/stopCharging")
@@ -143,6 +153,7 @@
     
     
     
+    @RequiresPermissions(value = {"/chargingGun/download_qr_code"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "下载二维码")
     @GetMapping(value = "/downloadQRCode/{id}")
     @Log(title = "【充电桩信息】下载二维码", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
@@ -190,15 +201,17 @@
             e.printStackTrace();
         }
     }
-
+    @Resource
+    private TokenService tokenService;
     /**
      * 设备状态统计
      */
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-工作台"},value = "设备状态统计")
     @PutMapping(value = "/gunStatusStatistics")
     public R<GunStatusStatisticsVO> gunStatusStatistics() {
         List<Integer> siteIds = new ArrayList<>();
-        Long userId = SecurityUtils.getUserId();
+        Long userId = tokenService.getLoginUser().getUserid();
         //获取当前登录的siteIds
         PageInfo<GetSiteListDTO> siteList1 = siteService.getSiteList1(userId);
         for (GetSiteListDTO datum : siteList1.getRecords()) {
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
index 644e120..86b27c7 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -28,6 +28,8 @@
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.vo.TChargingOrderVo;
@@ -119,7 +121,10 @@
 		return R.ok(chargingPileService.list(Wrappers.lambdaQuery(TChargingPile.class)
 				.in(!siteIds.isEmpty(),TChargingPile::getSiteId,siteIds)));
 	}
-
+	
+	
+	
+	@RequiresPermissions(value = {"/chargingPile", "/chargingGun"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/pageChargingPileList")
 	@ApiOperation(value = "获取充电桩列表数据", tags = {"管理后台-充电桩信息"})
@@ -127,7 +132,9 @@
 		PageInfo<PageChargingPileListDTO> list = chargingPileService.pageChargingPileList(page);
 		return AjaxResult.success(list);
 	}
-
+	
+	
+	@RequiresPermissions(value = {"/chargingPile/add"}, logical = Logical.OR)
 	@ResponseBody
 	@Log(title = "【充电桩信息】添加充电桩数据", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
 	@PostMapping("/addChargingPile")
@@ -135,8 +142,9 @@
 	public AjaxResult addChargingPile(@RequestBody TChargingPile chargingPile){
 		return chargingPileService.addChargingPile(chargingPile);
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/chargingPile/select", "/chargingPile/update"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getChargingPile/{id}")
 	@ApiOperation(value = "获取充电桩详情数据", tags = {"管理后台-充电桩信息"})
@@ -144,8 +152,9 @@
 		TChargingPile chargingPile = chargingPileService.getChargingPile(id);
 		return AjaxResult.success(chargingPile);
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/chargingPile/update"}, logical = Logical.OR)
 	@ResponseBody
 	@Log(title = "【充电桩信息】编辑充电桩数据", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
 	@PostMapping("/editChargingPile")
@@ -153,9 +162,10 @@
 	public AjaxResult editChargingPile(@RequestBody TChargingPile chargingPile){
 		return chargingPileService.editChargingPile(chargingPile);
 	}
-
-
-
+	
+	
+	
+	@RequiresPermissions(value = {"/chargingPile/del", "/chargingPile/batch_del"}, logical = Logical.OR)
 	@ResponseBody
 	@DeleteMapping("/delChargingPile")
 	@Log(title = "【充电桩信息】删除充电桩", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
@@ -166,8 +176,9 @@
 	public AjaxResult delChargingPile(@RequestParam("id") Integer[] id){
 		return chargingPileService.delChargingPile(id);
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/chargingPile/accountingStrategy"}, logical = Logical.OR)
 	@ResponseBody
 	@Log(title = "【充电桩信息】批量设置计费策略", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
 	@PostMapping("/batchSetAccountingStrategy")
@@ -176,8 +187,9 @@
 		chargingPileService.batchSetAccountingStrategy(setAccountingStrategy);
 		return AjaxResult.success();
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/chargingEquipmentMonitoring"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/chargeMonitoring/{siteId}")
 	@ApiOperation(value = "获取充电设施监控数据", tags = {"管理后台-充电设备监控"})
@@ -185,8 +197,9 @@
 		ChargeMonitoring chargeMonitoring = chargingPileService.chargeMonitoring(siteId);
 		return AjaxResult.success(chargeMonitoring);
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/chargingEquipmentMonitoring"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getChargingGunCountMonitoring/{siteId}")
 	@ApiOperation(value = "获取充电枪各种状态汇总监控数据", tags = {"管理后台-充电设备监控"})
@@ -194,8 +207,9 @@
 		ChargingGunCountMonitoring chargingGunCountMonitoring = chargingPileService.getChargingGunCountMonitoring(siteId);
 		return AjaxResult.success(chargingGunCountMonitoring);
 	}
-
-
+	
+	
+	@RequiresPermissions(value = {"/operationMaintenanceAnalysis", "/chargingEquipmentMonitoring"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getChargingGunMonitoring")
 	@ApiOperation(value = "获取充电枪监控数据", tags = {"管理后台-充电设备监控"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java
index 0a6bd79..b9061f4 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java
@@ -9,6 +9,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
@@ -32,6 +34,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/systemNotification"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/chargingPileNotificationPageList")
 	@ApiOperation(value = "获取系统通知列表数据", tags = {"管理后台-系统通知"})
@@ -41,6 +44,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/systemNotification/del"}, logical = Logical.OR)
 	@ResponseBody
 	@DeleteMapping("/delChargingPileNotification")
 	@ApiOperation(value = "删除系统通知", tags = {"管理后台-系统通知"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
index bc0c9c0..b47e05b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
@@ -18,6 +18,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -69,6 +71,7 @@
      * @param basePage
      * @return
      */
+    @RequiresPermissions(value = {"/faultInformationList"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping("/getFaultMessageList")
     @ApiOperation(value = "获取故障信息列表数据", tags = {"管理后台-设备监控"})
@@ -80,6 +83,7 @@
     }
     
     
+    @RequiresPermissions(value = {"/faultInformationList/add"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping("/addFaultMessage")
     @ApiOperation(value = "添加故障信息", tags = {"管理后台-设备监控"})
@@ -90,6 +94,7 @@
     }
     
     
+    @RequiresPermissions(value = {"/faultInformationList/del"}, logical = Logical.OR)
     @ResponseBody
     @DeleteMapping("/delFaultMessage/{id}")
     @ApiOperation(value = "删除故障信息", tags = {"管理后台-设备监控"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
index 7db9f8c..f3c6b43 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
@@ -21,6 +21,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -62,6 +64,7 @@
     /**
      * 查询停车场列表
      */
+    @RequiresPermissions(value = {"/parkingLot"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-停车场"},value = "查询停车场分页列表")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TParkingLotVO>> pageList(@RequestBody TParkingLotQuery query) {
@@ -71,6 +74,7 @@
     /**
      * 查询停车场列表
      */
+    @RequiresPermissions(value = {"/parkingOperationAnalysis", "/workbench"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-停车场"},value = "查询停车场列表")
     @PostMapping(value = "/list")
     public AjaxResult<List<TParkingLotVO>> list(@RequestBody TParkingLotQuery query) {
@@ -80,6 +84,7 @@
     /**
      * 添加停车场管理
      */
+    @RequiresPermissions(value = {"/parkingLot/add"}, logical = Logical.OR)
     @Log(title = "【停车场】添加停车场", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-停车场"},value = "添加停车场")
     @PostMapping(value = "/add")
@@ -90,6 +95,7 @@
     /**
      * 修改停车场
      */
+    @RequiresPermissions(value = {"/parkingLot/update"}, logical = Logical.OR)
     @Log(title = "【停车场】修改停车场", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-停车场"},value = "修改停车场")
     @PostMapping(value = "/update")
@@ -100,6 +106,7 @@
     /**
      * 查看停车场详情
      */
+    @RequiresPermissions(value = {"/parkingLot/select", "/parkingLot/update"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-停车场"},value = "查看停车场详情")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TParkingLot> getDetailById(@RequestParam("id") Integer id) {
@@ -109,6 +116,7 @@
     /**
      * 删除停车场
      */
+    @RequiresPermissions(value = {"/parkingLot/del"}, logical = Logical.OR)
     @Log(title = "【停车场】删除停车场", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-停车场"},value = "删除停车场")
     @DeleteMapping(value = "/deleteById")
@@ -125,6 +133,7 @@
     /**
      * 批量删除停车场
      */
+    @RequiresPermissions(value = {"/parkingLot/batch_del"}, logical = Logical.OR)
     @Log(title = "【停车场】批量删除停车场", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-停车场"},value = "批量删除停车场")
     @DeleteMapping(value = "/deleteByIds")
@@ -147,11 +156,16 @@
         return R.ok(parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class)
                 .eq(TParkingLot::getSiteId, siteId)));
     }
-
+    
+    
+    @RequiresPermissions(value = {"/paymentOrder/order"}, logical = Logical.OR)
     @GetMapping(value = "/getRecordById")
     public R<TParkingRecord> getRecordById(@RequestParam("id") Long id){
         return R.ok(parkingRecordService.getById(id));
     }
+    
+    
+    
     @PostMapping(value = "/getRecordAmount")
     public R<BigDecimal> getRecordAmount(@RequestParam("sixBefore") LocalDate sixBefore){
         BigDecimal sum =  parkingRecordService.getSum(sixBefore);
@@ -170,5 +184,11 @@
                 .eq(TParkingLot::getAppKey, appKey).eq(TParkingLot::getDelFlag, 0));
         return R.ok(parkingLot);
     }
+    @PostMapping(value = "/getSiteIdByOrderId")
+    R<Integer> getSiteIdByOrderId(@RequestParam("id") Long id){
+        TParkingRecord byId = parkingRecordService.getById(id);
+        TParkingLot parkingLot = parkingLotService.getById(byId.getParkingLotId());
+        return R.ok(parkingLot.getId());
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
index b071b25..9619a82 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -5,6 +5,9 @@
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.TParkingLot;
 import com.ruoyi.chargingPile.api.model.TParkingRecord;
 import com.ruoyi.chargingPile.api.query.ParkingRecordQuery;
@@ -22,9 +25,14 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.order.api.query.TOrderInvoiceQuery;
 import com.ruoyi.order.api.vo.TCharingUserEquimentVO;
 import com.ruoyi.order.api.vo.TOrderInvoiceVO;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.BeanUtils;
@@ -60,10 +68,55 @@
     private TParkingRecordService parkingRecordService;
     @Resource
     private TParkingLotService parkingLotService;
+    @Resource
+    private SiteClient siteClient;
+    @Resource
+    private TokenService tokenService;
+    @Resource
+    private PartnerClient partnerClient;
 
+    @Resource
+    private SysUserClient sysUserClient;
+    @RequiresPermissions(value = {"/parkingRecord"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "列表")
     @PostMapping(value = "/page")
     public R<Page<TParkingRecord>> page(@RequestBody ParkingRecordPageQuery query) {
+        Long userid = tokenService.getLoginUser().getUserid();
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        List<Integer> siteIds = new ArrayList<>();
+
+            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userid).getData();
+            for (GetSiteListDTO datum : data) {
+                siteIds.add(datum.getId());
+            }
+            if (siteIds.isEmpty()){
+                siteIds.add(-1);
+            }else{
+                if (roleType == 2){
+                    List<Integer> integers = new ArrayList<>();
+                    for (Integer siteId : siteIds) {
+                        // 校验有没有这个站点的权限
+                        List<Boolean> t1= partnerClient.parkingRecordListMenu(sysUser.getObjectId(),siteId).getData();
+
+                        Boolean b = t1.get(1);
+                        if (b){
+                            integers.add(siteId);
+                        }
+                    }
+                    siteIds = integers;
+                }
+            }
+            if (siteIds.isEmpty()){
+                siteIds.add(-1);
+            }
+        List<TParkingLot> list = parkingLotService.lambdaQuery().in( TParkingLot::getSiteId, siteIds).list();
+        List<Integer> ids = new ArrayList<>();
+        for (TParkingLot tParkingLot : list) {
+            ids.add(tParkingLot.getId());
+        }
+
+
         String s1 = "";
         String s2 = "";
         if (query.getTimePeriod()!=null){
@@ -71,6 +124,7 @@
              s2 = query.getTimePeriod().split(" - ")[1];
         }
         Page<TParkingRecord> page = parkingRecordService.lambdaQuery()
+                .in(TParkingRecord::getParkingLotId,ids)
                 .like(query.getLicensePlate() != null, TParkingRecord::getLicensePlate, query.getLicensePlate())
                 .eq(query.getStatus() != null, TParkingRecord::getStatus, query.getStatus())
                 .eq(query.getOutParkingType() != null, TParkingRecord::getOutParkingType, query.getOutParkingType())
@@ -85,16 +139,26 @@
             record.setUid(record.getId().toString());
             if (byId!=null) {
                 record.setParkName(byId.getName());
+                if (roleType==2){
+                    List<Boolean> data1 = partnerClient.parkingRecordListMenu(sysUser.getObjectId(), byId.getSiteId()).getData();
+                    record.setAuthInfo(data1.get(0));
+                    record.setAuthOut(data1.get(1));
+                }
             }
         }
         return R.ok(page);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/parkingPaymentOrder"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "停车缴费订单列表")
     @PostMapping(value = "/pageList")
     public R<TParkingRecordPageInfoVO> pageList(@RequestBody ParkingRecordQuery query) {
         return R.ok(parkingRecordService.pageList(query));
     }
+    
+    
+    @RequiresPermissions(value = {"/parkingPaymentOrder/export"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "导出")
     @PutMapping("/export")
     @Log(title = "【停车记录】导出停车记录", businessType = BusinessType.EXPORT,operatorType = OperatorType.MANAGE)
@@ -140,12 +204,18 @@
             }
         }
     }
+    
+    
+    
+    
     @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "详情")
     @GetMapping(value = "/detail")
     public R<TParkingRecord> detail(Long id) {
       return R.ok(parkingRecordService.getById(id));
     }
-
+    
+    
+    @RequiresPermissions(value = {"/parkingRecord/already_appeared"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "出场")
     @GetMapping(value = "/out")
     @Log(title = "【停车记录】修改出场状态", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
@@ -202,14 +272,31 @@
     public void addParkingRecord(@RequestBody TParkingRecord parkingRecord){
         parkingRecordService.save(parkingRecord);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/parkingOperationAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/parking/data")
     @ApiOperation(value = "统计", tags = {"管理后台-数据分析-车场运营分析"})
     public R<TParkLotRecordVO> data(@RequestBody ParkingRecordQueryDto parkingRecordQueryDto){
         //上方折线图
         TParkLotRecordVO tParkLotRecordVO = new TParkLotRecordVO();
-
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        Long userId = tokenService.getLoginUser().getUserid();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+        if (userId != null){
+            List<GetSiteListDTO> data2 = siteClient.getSiteListByUserId(userId).getData();
+            for (GetSiteListDTO datum : data2) {
+                siteIds.add(datum.getId());
+            }
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        parkingRecordQueryDto.setSiteIds(siteIds);
         if (parkingRecordQueryDto.getDayType()==1) {
             List<Map<String, Object>> maps = parkingRecordService.parkingData(parkingRecordQueryDto);
 
@@ -287,6 +374,9 @@
         return R.ok(tParkLotRecordVO);
 
     }
+    
+    
+    
     private static Map<String, Object> findMapWithTimeValue(List<Map<String, Object>> charMap1,String timeValue) {
         for (Map<String, Object> map : charMap1) {
             if (map.containsKey("time") && map.get("time").equals(timeValue)) {
@@ -295,6 +385,8 @@
         }
         return null; // 如果没有找到,返回 null
     }
+    
+    
 
     private Map<String, Object> findMapWithDateValue(List<Map<String, Object>> list, String date) {
         for (Map<String, Object> map : list) {
@@ -304,6 +396,10 @@
         }
         return null;
     }
+    
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/parking/work")
     @ApiOperation(value = "停车订单统计", tags = {"管理后台-工作台"})
@@ -333,6 +429,11 @@
         return R.ok(tParkLotRecordCountVo);
 
     }
+    
+    
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/parking/work1")
     @ApiOperation(value = "停车订单统计", tags = {"管理后台-工作台"})
@@ -360,7 +461,10 @@
         return R.ok(tParkLotRecordCountVo);
 
     }
-
+    
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/parking/income")
     @ApiOperation(value = "停车收入统计", tags = {"管理后台-工作台"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
index fd964e2..565ecbe 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
@@ -12,6 +12,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
@@ -60,6 +62,8 @@
 		return AjaxResult.success();
 	}
 	
+	
+	@RequiresPermissions(value = {"/repairRecord"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getRepairList")
 	@ApiOperation(value = "获取报修记录列表数据", tags = {"管理后台-设备监控"})
@@ -73,6 +77,7 @@
 	
 	
 	
+	@RequiresPermissions(value = {"/repairRecord/add"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/addRepair")
 	@ApiOperation(value = "添加报修记录", tags = {"管理后台-设备监控"})
@@ -83,6 +88,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/repairRecord/del"}, logical = Logical.OR)
 	@ResponseBody
 	@DeleteMapping("/delRepair/{id}")
 	@ApiOperation(value = "删除报修记录", tags = {"管理后台-设备监控"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java
index dfe127a..644b9f5 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java
@@ -11,6 +11,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.integration.api.feignClient.SwitchwayGateClient;
 import com.ruoyi.integration.api.vo.SwitchwayGateReq;
 import io.swagger.annotations.Api;
@@ -55,6 +57,7 @@
     /**
      * 添加车道管理
      */
+    @RequiresPermissions(value = {"/parkingLot/add_lane"}, logical = Logical.OR)
     @Log(title = "【停车场配置】添加车道", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车道"},value = "添加车道")
     @PostMapping(value = "/add")
@@ -66,6 +69,7 @@
     /**
      * 修改车道
      */
+    @RequiresPermissions(value = {"/parkingLot/update_lane"}, logical = Logical.OR)
     @Log(title = "【停车场配置】修改车道", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车道"},value = "修改车道")
     @PostMapping(value = "/update")
@@ -76,6 +80,7 @@
     /**
      * 查看车道详情
      */
+    @RequiresPermissions(value = {"/parkingLot/update_lane"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-车道"},value = "查看车道详情")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TVehicleRamp> getDetailById(@RequestParam("id") Integer id) {
@@ -85,6 +90,7 @@
     /**
      * 删除车道
      */
+    @RequiresPermissions(value = {"/parkingLot/del_lane"}, logical = Logical.OR)
     @Log(title = "【停车场配置】删除车道", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车道"},value = "删除车道")
     @DeleteMapping(value = "/deleteById")
@@ -95,6 +101,7 @@
     /**
      * 批量删除车道
      */
+    @RequiresPermissions(value = {"/parkingLot/del_lane"}, logical = Logical.OR)
     @Log(title = "【停车场配置】批量删除车道", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车道"},value = "批量删除车道")
     @DeleteMapping(value = "/deleteByIds")
@@ -106,6 +113,7 @@
     /**
      * 开关闸车道
      */
+    @RequiresPermissions(value = {"/parkingLot/open_gate", "/parkingLot/close_gate"}, logical = Logical.OR)
     @Log(title = "【停车场配置】开关闸车道", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-车道"},value = "开关闸车道")
     @PostMapping(value = "/openOrDown")
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java
deleted file mode 100644
index dfe5f0f..0000000
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.ruoyi.chargingPile.domain;
-
-
-/**
- * @author zhibing.pu
- * @Date 2024/8/9 15:28
- */
-public enum SiteMenu {
-	//站点管理
-	SITE_LIST("/data/site"),
-	//站点计费策略
-	SITE_ACCOUNTING_STRATEGY("/data/site/accounting_strategy"),
-	//站点编辑
-	SITE_UPDATE("/data/site/update"),
-	//站点删除
-	SITE_DELETE("/data/site/delete"),
-	//充电桩信息
-	CHARGING_PILE("/data/charging_pile"),
-	//充电桩查看
-	CHARGING_PILE_QUERY_INFO("/data/charging_pile/query_info"),
-	//充电桩编辑
-	CHARGING_PILE_UPDATE("/data/charging_pile/update"),
-	//充电桩删除
-	CHARGING_PILE_DELETE("/data/charging_pile/delete"),
-	//充电桩新增接口
-	CHARGING_PILE_ADD_CHARGING_GUN("/data/charging_pile/add_charging_gun"),
-	//接口信息
-	CHARGING_GUN("/data/charging_gun"),
-	//接口编辑
-	CHARGING_GUN_UPDATE("/data/charging_gun/update"),
-	//接口删除
-	CHARGING_GUN_DELETE("/data/charging_gun/delete"),
-	//接口查看费率
-	CHARGING_GUN_VIEW_RATES("/data/charging_gun/view_rates"),
-	//接口下载二维码
-	CHARGING_GUN_DOWNLOAD_QR_CODE("/data/charging_gun/download_qr_code"),
-	//接口查看详情
-	CHARGING_GUN_QUERY_INFO("/data/charging_gun/query_info"),
-	//接口结束充电
-	CHARGING_GUN_END_CHARGE("/data/charging_gun/end_charge"),
-	//停车场配置
-	PARKING_LOT("/data/parking_lot"),
-	//停车场查看
-	PARKING_LOT_QUERY_INFO("/data/parking_lot/query_info"),
-	//停车场编辑
-	PARKING_LOT_UPDATE("/data/parking_lot/update"),
-	//停车场删除
-	PARKING_LOT_DELETE("/data/parking_lot/delete"),
-	//停车场监控
-	PARKING_LOT_MONITOR("/data/parking_lot/monitor"),
-	//停车场新增车库
-	PARKING_LOT_ADD_GARAGE("/data/parking_lot/add_garage"),
-	//监控管理
-	MONITOR("/data/monitor"),
-	//监控查看
-	MONITOR_QUERY_INFO("/data/monitor/query_info"),
-	;
-	private String value;
-	
-	
-	SiteMenu(String value) {
-		this.value = value;
-	}
-	
-	public String getValue() {
-		return value;
-	}
-	
-	public void setValue(String value) {
-		this.value = value;
-	}
-}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java
index 2cecb9d..2b1cb66 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java
@@ -4,6 +4,7 @@
 import lombok.Data;
 
 import java.time.LocalDate;
+import java.util.List;
 
 @Data
 public class ParkingRecordQueryDto {
@@ -15,4 +16,6 @@
     private LocalDate startTime;
     @ApiModelProperty("结束时间")
     private LocalDate endTime;
+    @ApiModelProperty("站点ids")
+    private List<Integer> siteIds;
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java
index 24b0edf..3a6570d 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java
@@ -6,13 +6,10 @@
 import com.ruoyi.chargingPile.api.model.Partner;
 import com.ruoyi.chargingPile.api.query.GetPartnerList;
 import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ResetPassword;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 import java.util.Set;
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
index ea74c61..f56c4b4 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -7,7 +7,7 @@
 import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.chargingPile.api.query.GetPartnerList;
 import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ResetPassword;
 import com.ruoyi.chargingPile.mapper.PartnerMapper;
 import com.ruoyi.chargingPile.service.*;
@@ -15,7 +15,6 @@
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
-import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
 import com.ruoyi.system.api.domain.SysRole;
@@ -25,12 +24,7 @@
 import com.ruoyi.system.api.feignClient.SysUserRoleClient;
 import com.ruoyi.system.api.model.GetSysRoleByIds;
 import com.ruoyi.system.api.model.SysUserRoleVo;
-import io.seata.core.context.RootContext;
-import io.seata.core.exception.TransactionException;
 import io.seata.spring.annotation.GlobalTransactional;
-import io.seata.tm.api.GlobalTransaction;
-import io.seata.tm.api.GlobalTransactionContext;
-import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
index 72a8e3e..aa55790 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -15,12 +15,10 @@
 import com.ruoyi.chargingPile.api.query.SiteQuery;
 import com.ruoyi.chargingPile.api.vo.SiteDetailVO;
 import com.ruoyi.chargingPile.api.vo.SiteVO;
-import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.SiteMapper;
 import com.ruoyi.chargingPile.service.*;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -35,8 +33,8 @@
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.feignClient.SysUserRoleClient;
 import com.ruoyi.system.api.model.SysUserRoleVo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -88,6 +86,9 @@
 	@Resource
 	private TAccountingStrategyDetailService accountingStrategyDetailService;
 	
+	@Resource
+	private TPartnerSiteService partnerSiteService;
+	
 	
 	/**
 	 * 获取站点管理列表数据
@@ -99,10 +100,10 @@
 	public PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList) {
 		Set<Integer> ids = null;
 		//校验合作商权限
-		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
-		R<Integer> admin = sysUserClient.isAdmin(SecurityUtils.getUserId());
+		R<Integer> admin = sysUserClient.isAdmin(tokenService.getLoginUser().getUserid());
 		//合作商
 		if(roleType == 2){
 			ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
@@ -110,7 +111,6 @@
 			//非管理员需要根据角色和用户配置查询允许的站点数据
 			//改用roleId=1来判断
 			if(admin.getData()!=1){
-//			if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
 				List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
 				List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
 				if(data2.size() > 0){
@@ -134,6 +134,8 @@
 	}
 
 
+
+
 	@Override
 	public PageInfo<GetSiteListDTO> getSiteList1(Long userId) {
 		GetSiteList siteList = new GetSiteList();
@@ -144,7 +146,7 @@
 		SysUser sysUser = sysUserClient.getSysUser(userId).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
-		R<Integer> admin = sysUserClient.isAdmin(SecurityUtils.getUserId());
+		R<Integer> admin = sysUserClient.isAdmin(tokenService.getLoginUser().getUserid());
 
 		//合作商
 		if(roleType == 2){
@@ -211,6 +213,16 @@
 		if(null != one && !one.getCode().equals(site.getCode())){
 			return AjaxResult.error("站点编号重复");
 		}
+		
+		Site site1 = this.getById(site.getId());
+		if(!site1.getPartnerId().equals(site.getPartnerId())){
+			List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>().eq(TPartnerSite::getPartnerId, site1.getPartnerId()).eq(TPartnerSite::getSiteId, site.getId()));
+			for (TPartnerSite partnerSite : list) {
+				partnerSite.setPartnerId(site.getPartnerId());
+				partnerSiteService.updateById(partnerSite);
+			}
+		}
+		
 		this.updateById(site);
 		return AjaxResult.success();
 	}
@@ -334,7 +346,7 @@
 	public List<Site> getSiteListParkLot() {
 		Set<Integer> ids = null;
 		//校验合作商权限
-		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
 		//合作商
@@ -342,7 +354,7 @@
 			ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
 		}else{
 			//非管理员需要根据角色和用户配置查询允许的站点数据
-			if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+			if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 				List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
 				List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
 				List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -369,7 +381,7 @@
 	public List<Site> getSiteListGun() {
 		Set<Integer> ids = null;
 		//校验合作商权限
-		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
 		//合作商
@@ -377,7 +389,7 @@
 			ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
 		}else{
 			//非管理员需要根据角色和用户配置查询允许的站点数据
-			if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+			if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 				List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
 				List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
 				List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
index 82450f6..2216d2a 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -176,13 +176,13 @@
         }
         // 查询最高折扣的会员
         TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData();
-        strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount());
+        strategyPriceVO.setServiceFeeDiscount(null == monthlyCardDiscount ? new BigDecimal(10) : monthlyCardDiscount.getMonthlyCardDiscount());
         // 查询最高优惠的会员
         TVip maximumDeduction = vipClient.getVipInfoByType(1).getData();
-        strategyPriceVO.setMaxDiscountAmount(maximumDeduction.getMaximumDeduction());
+        strategyPriceVO.setMaxDiscountAmount(null == maximumDeduction ? new BigDecimal(10) : maximumDeduction.getMaximumDeduction());
         // 查询最低起步价会员
         TVip monthlyCard = vipClient.getVipInfoByType(2).getData();
-        strategyPriceVO.setVipStartPrice(monthlyCard.getMonthlyCard());
+        strategyPriceVO.setVipStartPrice(null == monthlyCard ? new BigDecimal(10) : monthlyCard.getMonthlyCard());
         // 模板折扣
         strategyPriceVO.setDiscount(accountingStrategy.getDiscount());
         return strategyPriceVO;
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
index dcea1b1..1ab951e 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -6,17 +6,13 @@
 import com.ruoyi.chargingPile.api.dto.TChargingGunDTO;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
-import com.ruoyi.chargingPile.api.model.TAccountingStrategy;
-import com.ruoyi.chargingPile.api.feignClient.SiteClient;
-import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
 import com.ruoyi.chargingPile.api.vo.*;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.TChargingGunMapper;
 import com.ruoyi.chargingPile.service.IPartnerService;
-import com.ruoyi.chargingPile.service.TAccountingStrategyService;
 import com.ruoyi.chargingPile.service.TChargingGunService;
 import com.ruoyi.chargingPile.service.TChargingPileService;
 import com.ruoyi.common.core.enums.status.ChargingGunModeEnum;
@@ -24,6 +20,7 @@
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.SendMessageClient;
 import com.ruoyi.integration.api.model.QrCodeDelivery;
@@ -76,13 +73,14 @@
     private SiteClient siteClient;
 
 
-    
+    @Resource
+    private TokenService tokenService;
     
     @Override
     public PageInfo<TChargingGunVO> pageList(TChargingGunQuery query) {
         Set<Integer> siteIds = null;
         //校验合作商权限
-        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
         Integer roleType = sysUser.getRoleType();
         Integer objectId = sysUser.getObjectId();
         //合作商
@@ -90,7 +88,7 @@
             siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_GUN);
         }else{
             //非管理员需要根据角色和用户配置查询允许的站点数据
-            if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
                 List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                 List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                 List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -306,8 +304,36 @@
         StatusModeStatisticsVO statusModeStatistics1 = this.baseMapper.getStatusModeStatistics(siteIds,1);
         StatusModeStatisticsVO statusModeStatistics2 = this.baseMapper.getStatusModeStatistics(siteIds,2);
         StatusModeStatisticsVO statusModeStatistics3 = this.baseMapper.getStatusModeStatistics(siteIds,3);
+        if (statusModeStatistics1==null){
+            StatusModeStatisticsVO vo = new StatusModeStatisticsVO();
+            vo.setChargeMode(1);
+            vo.setFreeCount(0);
+            vo.setFilledCount(0);
+            vo.setInsertCount(0);
+            vo.setChargingCount(0);
+            statusModeStatistics1 =vo;
+        }
         statusModeStatisticsVOS.add(statusModeStatistics1);
+        if (statusModeStatistics2==null){
+            StatusModeStatisticsVO vo = new StatusModeStatisticsVO();
+            vo.setChargeMode(2);
+            vo.setFreeCount(0);
+            vo.setFilledCount(0);
+            vo.setInsertCount(0);
+            vo.setChargingCount(0);
+            statusModeStatistics2 =vo;
+        }
         statusModeStatisticsVOS.add(statusModeStatistics2);
+
+        if (statusModeStatistics3==null){
+            StatusModeStatisticsVO vo = new StatusModeStatisticsVO();
+            vo.setChargeMode(3);
+            vo.setFreeCount(0);
+            vo.setFilledCount(0);
+            vo.setInsertCount(0);
+            vo.setChargingCount(0);
+            statusModeStatistics3 =vo;
+        }
         statusModeStatisticsVOS.add(statusModeStatistics3);
         gunStatusStatisticsVO.setStatusModeStatistics(statusModeStatisticsVOS);
         return gunStatusStatisticsVO;
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java
index 67f62d0..f294382 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java
@@ -4,12 +4,13 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingPileNotification;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.TChargingPileNotificationMapper;
 import com.ruoyi.chargingPile.service.IPartnerService;
 import com.ruoyi.chargingPile.service.TChargingPileNotificationService;
 import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -50,7 +51,8 @@
 	@Resource
 	private SysUserRoleClient sysUserRoleClient;
 	
-	
+	@Resource
+	private TokenService tokenService;
 	
 	
 	
@@ -66,7 +68,7 @@
 		//校验当前账户站点权限
 		Set<Integer> siteIds = null;
 		if(null == siteId){
-			SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+			SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 			Integer roleType = sysUser.getRoleType();
 			Integer objectId = sysUser.getObjectId();
 			LambdaQueryWrapper<Site> wrapper = new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0);
@@ -74,7 +76,7 @@
 				siteIds = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
 			}else{
 				//非管理员需要根据角色和用户配置查询允许的站点数据
-				if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+				if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 					List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
 					List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
 					List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index 78e5238..aacc202 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -2,7 +2,6 @@
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.dto.SendMessageDTO;
 import com.ruoyi.account.api.feignClient.AppUserCarClient;
@@ -12,9 +11,8 @@
 import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.chargingPile.api.query.BatchSetAccountingStrategy;
 import com.ruoyi.chargingPile.api.query.PageChargingPileList;
-import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
 import com.ruoyi.chargingPile.api.vo.TChargingPileVO;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ChargeMonitoring;
 import com.ruoyi.chargingPile.dto.ChargingGunCountMonitoring;
 import com.ruoyi.chargingPile.dto.ChargingGunMonitoring;
@@ -24,9 +22,9 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.IntegrationClient;
 import com.ruoyi.integration.api.feignClient.IotInterfaceClient;
@@ -37,6 +35,7 @@
 import com.ruoyi.integration.api.vo.AddDevice;
 import com.ruoyi.integration.api.vo.AddDeviceResp;
 import com.ruoyi.integration.api.vo.DeleteDeviceResp;
+import com.ruoyi.integration.api.vo.ShowDeviceResp;
 import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
@@ -56,7 +55,6 @@
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * <p>
@@ -120,13 +118,15 @@
 	@Resource
 	private SendMessageClient sendMessageClient;
 	@Resource
+	private TokenService tokenService;
+	@Resource
 	private TChargingPileNotificationService chargingPileNotificationService;
 
 	@Resource
 	private AppUserClient appUserClient;
 	
 	
-	
+
 	/**
 	 * 获取充电桩列表数据
 	 * @param page
@@ -136,7 +136,7 @@
 	public PageInfo<PageChargingPileListDTO> pageChargingPileList(PageChargingPileList page) {
 		Set<Integer> siteIds = null;
 		//校验合作商权限
-		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 		Integer roleType = sysUser.getRoleType();
 		Integer objectId = sysUser.getObjectId();
 		//合作商
@@ -144,7 +144,7 @@
 			siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_PILE);
 		}else{
 			//非管理员需要根据角色和用户配置查询允许的站点数据
-			if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+			if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 				List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                 List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                 List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -182,18 +182,23 @@
 			return AjaxResult.error("设备编号已存在");
 		}
 		//调用华为Iot创建设备
-//		AddDevice addDevice = new AddDevice();
-//		addDevice.setProductId("66da68d21837002b28b34ec0");
-//		addDevice.setNodeId(chargingPile.getCode());
-//		addDevice.setDeviceName(chargingPile.getName());
-//		addDevice.setDescription(chargingPile.getNumber().toString());
-//		AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData();
-//		if(null != deviceResp){
-//			int httpStatusCode = deviceResp.getHttpStatusCode();
-//			if(httpStatusCode == 201){
-//				chargingPile.setIotdDeviceId(deviceResp.getDeviceId());
-//			}
-//		}
+		AddDevice addDevice = new AddDevice();
+		addDevice.setProductId("66da68d21837002b28b34ec0");
+		addDevice.setNodeId(chargingPile.getCode());
+		addDevice.setDeviceName(chargingPile.getName());
+		addDevice.setDescription(chargingPile.getNumber().toString());
+		AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData();
+		if(null != deviceResp){
+			int httpStatusCode = deviceResp.getHttpStatusCode();
+			if(httpStatusCode == 201){
+				chargingPile.setIotdDeviceId(deviceResp.getDeviceId());
+			}else{
+				log.error("华为创建设备失败" + JSON.toJSONString(deviceResp));
+				return AjaxResult.error("华为创建设备失败");
+			}
+		}else{
+			return AjaxResult.error("华为创建设备失败");
+		}
 		this.save(chargingPile);
 		return AjaxResult.success();
 	}
@@ -257,6 +262,34 @@
 		if(null != one && !one.getId().equals(chargingPile.getId())){
 			return AjaxResult.error("设备编号已存在");
 		}
+		TChargingPile tChargingPile = this.getById(chargingPile.getId());
+		ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData();
+		if(null != showDeviceResp){
+			DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(tChargingPile.getCode()).getData();
+			if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){
+				return AjaxResult.error("删除设备异常,请查看华为设备管理");
+			}
+		}
+
+
+		//调用华为Iot创建设备
+		AddDevice addDevice = new AddDevice();
+		addDevice.setProductId("66da68d21837002b28b34ec0");
+		addDevice.setNodeId(chargingPile.getCode());
+		addDevice.setDeviceName(chargingPile.getName());
+		addDevice.setDescription(chargingPile.getNumber().toString());
+		AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData();
+		if(null != deviceResp){
+			int httpStatusCode = deviceResp.getHttpStatusCode();
+			if(httpStatusCode == 201){
+				chargingPile.setIotdDeviceId(deviceResp.getDeviceId());
+			}else{
+				log.error("华为创建设备失败" + JSON.toJSONString(deviceResp));
+				return AjaxResult.error("华为创建设备失败");
+			}
+		}else{
+			return AjaxResult.error("华为创建设备失败");
+		}
 		this.updateById(chargingPile);
 		
 		List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0));
@@ -297,11 +330,17 @@
 		for (Integer id : ids) {
 			TChargingPile chargingPile = this.getById(id);
 			//调用华为Iot删除设备
-//			if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){
-//				DeleteDeviceResp deviceResp = iotInterfaceClient.deleteDevice(chargingPile.getIotdDeviceId()).getData();
-//				if(null != deviceResp && deviceResp.getHttpStatusCode() == 0){
-//				}
-//			}
+			if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){
+				ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(chargingPile.getCode()).getData();
+				if(null != showDeviceResp){
+					DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(chargingPile.getCode()).getData();
+					if(null == deleteDeviceResp || (deleteDeviceResp.getHttpStatusCode() != 200 && deleteDeviceResp.getHttpStatusCode() != 201 && deleteDeviceResp.getHttpStatusCode() != 204)){
+						return AjaxResult.error("删除设备异常,请查看华为设备管理");
+					}
+					chargingPile.setIotdDeviceId("");
+				}
+
+			}
 			this.removeById(chargingPile);
 		}
 		return AjaxResult.success();
@@ -375,14 +414,14 @@
 		//获取当前登录账户的站点权限数据
 		Set<Integer> siteIds = new HashSet<>();
 		if(0 == siteId){
-			SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+			SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 			Integer roleType = sysUser.getRoleType();
 			Integer objectId = sysUser.getObjectId();
 			if(2 == roleType){
-				siteIds = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+				siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_FACILITY_MONITORING);
 			}else{
 				//非管理员需要根据角色和用户配置查询允许的站点数据
-				if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+				if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 					List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                     List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                     List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -467,14 +506,14 @@
 		//获取当前登录账户的站点权限数据
 		Set<Integer> siteIds = new HashSet<>();
 		if(0 == siteId){
-			SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+			SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
 			Integer roleType = sysUser.getRoleType();
 			Integer objectId = sysUser.getObjectId();
 			if(2 == roleType){
-				siteIds = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+				siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_FACILITY_MONITORING);
 			}else{
 				//非管理员需要根据角色和用户配置查询允许的站点数据
-				if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+				if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 					List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                     List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                     List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -518,12 +557,12 @@
 		//获取当前登录账户的站点权限数据
 		Set<Integer> siteIds = new HashSet<>();
 		if(0 == query.getSiteId()){
-			SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
-			R<Integer> admin = sysUserClient.isAdmin(SecurityUtils.getUserId());
+			SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+			R<Integer> admin = sysUserClient.isAdmin(tokenService.getLoginUser().getUserid());
 			Integer roleType = sysUser.getRoleType();
 			Integer objectId = sysUser.getObjectId();
 			if(2 == roleType){
-				siteIds = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+				siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_FACILITY_MONITORING);
 			}else{
 				//非管理员需要根据角色和用户配置查询允许的站点数据
 				if(admin.getData()!=1){
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
index 1d12693..485546a 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
@@ -1,20 +1,16 @@
 package com.ruoyi.chargingPile.service.impl;
 
-import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.dto.SendMessageDTO;
 import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.chargingPile.api.model.TFaultMessage;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.TFaultMessageMapper;
 import com.ruoyi.chargingPile.service.*;
-import com.ruoyi.common.core.constant.MsgConstants;
-import com.ruoyi.common.core.utils.HttpUtils;
-import com.ruoyi.common.core.utils.MsgUtil;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -43,7 +39,8 @@
 @Slf4j
 @Service
 public class TFaultMessageServiceImpl extends ServiceImpl<TFaultMessageMapper, TFaultMessage> implements TFaultMessageService {
-
+    @Resource
+    private TokenService tokenService;
     @Autowired
     private ISiteService siteService;
     @Autowired
@@ -101,18 +98,18 @@
     @Override
     public List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId) {
         //校验合作商权限
+        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+        Integer roleType = sysUser.getRoleType();
+        Integer objectId = sysUser.getObjectId();
         List<Integer> siteIds = new ArrayList<>();
         if(null == siteId || 0 == siteId){
-            SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
-            Integer roleType = sysUser.getRoleType();
-            Integer objectId = sysUser.getObjectId();
             //合作商
             if(roleType == 2){
-                Set<Integer> data = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+                Set<Integer> data = partnerService.authSite(objectId, SiteMenu.FAULT_INFORMATION_LIST);
                 siteIds = new ArrayList<>(data);
             }else{
                 //非管理员需要根据角色和用户配置查询允许的站点数据
-                if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+                if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
                     List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                     List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                     List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -123,6 +120,10 @@
         }else{
             siteIds.add(siteId);
         }
-        return this.baseMapper.getFaultMessageList(pageInfo, siteIds);
+        List<TFaultMessage> faultMessageList = this.baseMapper.getFaultMessageList(pageInfo, siteIds);
+        for (TFaultMessage faultMessage : faultMessageList) {
+            faultMessage.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, faultMessage.getSiteId(), SiteMenu.FAULT_INFORMATION_LIST_DEL));
+        }
+        return faultMessageList;
     }
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TMonitoringEquipmentServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TMonitoringEquipmentServiceImpl.java
index a6d6746..2dee85d 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TMonitoringEquipmentServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TMonitoringEquipmentServiceImpl.java
@@ -5,24 +5,21 @@
 import com.ruoyi.chargingPile.api.query.TMonitoringEquipmentQuery;
 import com.ruoyi.chargingPile.api.vo.TMonitoringEquipmentVO;
 import com.ruoyi.chargingPile.api.vo.TParkingLotVO;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.TMonitoringEquipmentMapper;
 import com.ruoyi.chargingPile.service.IPartnerService;
 import com.ruoyi.chargingPile.service.TMonitoringEquipmentService;
 import com.ruoyi.chargingPile.service.TParkingLotService;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.other.api.feignClient.RoleSiteClient;
-import com.ruoyi.other.api.feignClient.UserSiteClient;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -37,7 +34,8 @@
 public class TMonitoringEquipmentServiceImpl extends ServiceImpl<TMonitoringEquipmentMapper, TMonitoringEquipment> implements TMonitoringEquipmentService {
     @Resource
     private SysUserClient sysUserClient;
-
+    @Resource
+    private TokenService tokenService;
     @Resource
     private IPartnerService partnerService;
 
@@ -46,7 +44,7 @@
     @Override
     public PageInfo<TMonitoringEquipmentVO> pageList(TMonitoringEquipmentQuery query) {
         //校验合作商权限
-        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
         Integer roleType = sysUser.getRoleType();
         Integer objectId = sysUser.getObjectId();
         // 查询管理站点下的停车场
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingLotServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingLotServiceImpl.java
index 82fd275..4985685 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingLotServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingLotServiceImpl.java
@@ -1,15 +1,15 @@
 package com.ruoyi.chargingPile.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO;
 import com.ruoyi.chargingPile.api.model.TParkingLot;
 import com.ruoyi.chargingPile.api.query.TParkingLotQuery;
 import com.ruoyi.chargingPile.api.vo.TParkingLotVO;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.TParkingLotMapper;
 import com.ruoyi.chargingPile.service.IPartnerService;
 import com.ruoyi.chargingPile.service.TParkingLotService;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -36,7 +36,8 @@
 public class TParkingLotServiceImpl extends ServiceImpl<TParkingLotMapper, TParkingLot> implements TParkingLotService {
     @Resource
     private SysUserClient sysUserClient;
-
+    @Resource
+    private TokenService tokenService;
     @Resource
     private IPartnerService partnerService;
 
@@ -56,7 +57,7 @@
 
         Set<Integer> siteIds = null;
         //校验合作商权限
-        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
         Integer roleType = sysUser.getRoleType();
         Integer objectId = sysUser.getObjectId();
         //合作商
@@ -64,7 +65,7 @@
             siteIds = partnerService.authSite(objectId, SiteMenu.PARKING_LOT);
         }else{
             //非管理员需要根据角色和用户配置查询允许的站点数据
-            if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
                 List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                 List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                 List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -90,7 +91,7 @@
     public List<TParkingLotVO> getList(String name) {
         Set<Integer> siteIds = null;
         //校验合作商权限
-        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
         Integer roleType = sysUser.getRoleType();
         Integer objectId = sysUser.getObjectId();
         //合作商
@@ -98,7 +99,7 @@
             siteIds = partnerService.authSite(objectId, SiteMenu.PARKING_LOT);
         }else{
             //非管理员需要根据角色和用户配置查询允许的站点数据
-            if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
                 List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                 List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                 List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
index 1f67215..03182bb 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
@@ -2,26 +2,30 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TParkingLot;
 import com.ruoyi.chargingPile.api.model.TParkingRecord;
 import com.ruoyi.chargingPile.api.query.ParkingRecordQuery;
-import com.ruoyi.chargingPile.api.vo.TParkingLotVO;
 import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO;
 import com.ruoyi.chargingPile.api.vo.TParkingRecordVO;
-import com.ruoyi.chargingPile.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ParkingRecordQueryDto;
 import com.ruoyi.chargingPile.mapper.SiteMapper;
 import com.ruoyi.chargingPile.mapper.TParkingLotMapper;
 import com.ruoyi.chargingPile.mapper.TParkingRecordMapper;
 import com.ruoyi.chargingPile.service.TParkingRecordService;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -42,14 +46,35 @@
     private SiteMapper siteMapper;
     @Autowired
     private TParkingLotMapper parkingLotMapper;
+    @Resource
+    private SiteClient siteClient;
 
     @Override
     public BigDecimal getSum(LocalDate sixBefore) {
         return this.baseMapper.getSum(sixBefore);
     }
 
+    @Autowired
+    private TokenService tokenService;
     @Override
     public TParkingRecordPageInfoVO pageList(ParkingRecordQuery query) {
+        Long userId = tokenService.getLoginUser().getUserid();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+        if (query.getSiteId()==null){
+            if (userId != null){
+                List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                for (GetSiteListDTO datum : data) {
+                    siteIds.add(datum.getId());
+                }
+            }
+        }else {
+            siteIds.add(query.getSiteId());
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        query.setSiteIds(siteIds);
         PageInfo<TParkingRecordVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
         // 查询站点的停车场id
         if(Objects.nonNull(query.getSiteId())){
@@ -68,6 +93,18 @@
 
         }
         List<TParkingRecordVO> list = this.baseMapper.pageList(query,pageInfo);
+        for (TParkingRecordVO tParkingRecordVO : list) {
+            if (tParkingRecordVO.getParkingDuration()==null){
+                tParkingRecordVO.setFeeDuration(0);
+            }else if(tParkingRecordVO.getFreeDuration()==null){
+                tParkingRecordVO.setFeeDuration(tParkingRecordVO.getParkingDuration());
+            }else{
+                tParkingRecordVO.setFeeDuration(tParkingRecordVO.getParkingDuration()-tParkingRecordVO.getFreeDuration());
+            }
+            tParkingRecordVO.setOrderAmount(tParkingRecordVO.getOrderAmount()!=null?tParkingRecordVO.getOrderAmount():new BigDecimal("0")
+                    .add(tParkingRecordVO.getTimeoutAmount()!=null?tParkingRecordVO.getTimeoutAmount():new BigDecimal("0")));
+            tParkingRecordVO.setParkingFee(tParkingRecordVO.getOrderAmount());
+        }
         pageInfo.setRecords(list);
         // 查询总数
         TParkingRecordPageInfoVO infoVO = this.baseMapper.getParkingRecordCount(query);
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java
index 173bacf..f2669a2 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java
@@ -3,19 +3,14 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.dto.SendMessageDTO;
 import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.chargingPile.api.model.TRepair;
-import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.mapper.TRepairMapper;
 import com.ruoyi.chargingPile.service.*;
-import com.ruoyi.common.core.constant.MsgConstants;
-import com.ruoyi.common.core.utils.HttpUtils;
-import com.ruoyi.common.core.utils.MsgUtil;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -23,6 +18,7 @@
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.feignClient.SysUserRoleClient;
 import com.ruoyi.system.api.model.SysUserRoleVo;
+import jdk.nashorn.internal.parser.Token;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,7 +26,6 @@
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
@@ -70,7 +65,8 @@
 	private AppUserClient appUserClient;
 
 	
-	
+	@Autowired
+	private TokenService tokenService;
 	
 	/**
 	 * 获取报修记录列表
@@ -82,17 +78,17 @@
 	public List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, String name, Integer siteId) {
 		//校验合作商权限
 		List<Integer> siteIds = new ArrayList<>();
+		SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+		Integer roleType = sysUser.getRoleType();
+		Integer objectId = sysUser.getObjectId();
 		if(null == siteId || 0 == siteId){
-			SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
-			Integer roleType = sysUser.getRoleType();
-			Integer objectId = sysUser.getObjectId();
 			//合作商
 			if(roleType == 2){
-				Set<Integer> data = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+				Set<Integer> data = partnerService.authSite(objectId, SiteMenu.REPAIR_RECORD);
 				siteIds = new ArrayList<>(data);
 			}else{
 				//非管理员需要根据角色和用户配置查询允许的站点数据
-				if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+				if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
 					List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
 					List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
 					List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -103,7 +99,11 @@
 		}else{
 			siteIds.add(siteId);
 		}
-		return this.baseMapper.getRepairList(pageInfo, name, siteIds);
+		List<TRepair> repairList = this.baseMapper.getRepairList(pageInfo, name, siteIds);
+		for (TRepair repair : repairList) {
+			repair.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, repair.getSiteId(), SiteMenu.REPAIR_RECORD_DEL));
+		}
+		return repairList;
 	}
 
 	@Override
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
index 7570bee..742f2c5 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
@@ -12,7 +12,8 @@
     allow-circular-references: true
   profiles:
     # 环境配置
-    active: dev
+#    active: dev
+    active: prod
 ---
 spring:
   config:
@@ -55,52 +56,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 192.168.110.169:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 192.168.110.169:8848
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
index 3831658..10ab1ad 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
@@ -30,7 +30,7 @@
     <select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TParkingRecordVO">
         select
         tpr.id, tpr.code,tpr.app_user_id, tpr.license_plate, tpr.vehicle_color, tpr.charging_order_id, tpr.parking_lot_id, tpr.in_parking_time, tpr.out_parking_time,
-        tpr.parking_duration, tpr.order_amount, tpr.status, tpr.out_parking_type, tpr.create_time,(tpr.order_amount - tpr.timeout_amount) as parkingFee,tpr.timeout_amount,
+        tpr.parking_duration, tpr.order_amount, tpr.status, tpr.out_parking_type, tpr.create_time,(tpr.order_amount + tpr.timeout_amount) as parkingFee,tpr.timeout_amount,
         tpr.free_duration,(tpr.parking_duration - tpr.free_duration) as feeDuration,ts.name as siteName
         from t_parking_record tpr
         left join t_parking_lot tpl on tpr.parking_lot_id = tpl.id
@@ -51,16 +51,24 @@
                     #{item}
                 </foreach>
             </if>
+            <if test="null != query.siteIds and query.siteIds.size()>0" >
+                and tpl.site_id in
+                <foreach collection="query.siteIds" close=")" open="(" item="item" separator=",">
+                    #{item}
+                </foreach>
+            </if>
             AND tpr.status = 3
         </where>
         ORDER BY tpr.create_time DESC
     </select>
     <select id="getParkingRecordCount" resultType="com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO">
-        SELECT count(id) as orderCount,
-               sum(timeout_amount) as timeoutAmountSum,
-               sum(parking_duration - free_duration) as feeDurationSum,
-               sum(parking_duration) as parkingDurationSum
-        from t_parking_record
+        SELECT count(tpr.id) as orderCount,
+               sum(tpr.timeout_amount) as timeoutAmountSum,
+               sum(tpr.parking_duration - tpr.free_duration) as feeDurationSum,
+               sum(tpr.parking_duration) as parkingDurationSum
+        from t_parking_record tpr
+        left join t_parking_lot tpl on tpr.parking_lot_id = tpl.id
+
         <where>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                 AND create_time BETWEEN #{query.startTime} AND #{query.endTime}
@@ -77,20 +85,33 @@
                     #{item}
                 </foreach>
             </if>
+            <if test="null != query.siteIds and query.siteIds.size()>0" >
+                and tpl.site_id in
+                <foreach collection="query.siteIds" close=")" open="(" item="item" separator=",">
+                    #{item}
+                </foreach>
+            </if>
             AND status = 3
         </where>
 
     </select>
     <select id="parkingData" resultType="java.util.Map">
         SELECT
-            DATE_FORMAT( create_time, '%H:00' ) AS time,
+            DATE_FORMAT( t1.create_time, '%H:00' ) AS time,
 	count( 1 ) AS orders,
-	SUM( timeout_amount ) AS timeoutAmount
+	SUM( t1.timeout_amount ) AS timeoutAmount
         FROM
-            t_parking_record
-        where DATE(create_time ) = CURDATE()
+            t_parking_record t1
+        left join t_parking_lot t2  on t2.id = t1.parking_lot_id
+        where DATE(t1.create_time ) = CURDATE()
         <if test="parkingRecordQueryDto.parkingLotId !=null">
-            AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+            AND t1.parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+        </if>
+        <if test="null != parkingRecordQueryDto.siteIds and parkingRecordQueryDto.siteIds.size()>0" >
+            and t2.site_id in
+            <foreach collection="parkingRecordQueryDto.siteIds" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
         </if>
         GROUP BY
             time
@@ -99,31 +120,39 @@
     </select>
     <select id="parkingDataByDate" resultType="java.util.Map">
         SELECT
-            DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time,
+            DATE_FORMAT( t1.create_time, '%Y-%m-%d' ) AS time,
 	count( 1 ) AS orders,
-	SUM( timeout_amount ) AS timeoutAmount
+	SUM( t1.timeout_amount ) AS timeoutAmount
         FROM
-            t_parking_record
+        t_parking_record t1
+        left join t_parking_lot t2  on t2.id = t1.parking_lot_id
         <where>
             <if test="parkingRecordQueryDto.parkingLotId !=null">
-                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+                AND t1.parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
             </if>
             <if test="parkingRecordQueryDto.dayType == 2">
-                AND WEEKOFYEAR( create_time ) = WEEKOFYEAR( CURDATE() )
+                AND WEEKOFYEAR( t1.
+            create_time ) = WEEKOFYEAR( CURDATE() )
             </if>
             <if test="parkingRecordQueryDto.dayType == 3">
-                AND MONTH( create_time ) = MONTH(CURDATE())
+                AND MONTH( t1.create_time ) = MONTH(CURDATE())
             </if>
             <if test="parkingRecordQueryDto.dayType == 4">
-                AND YEAR( create_time ) = YEAR(CURDATE() )
+                AND YEAR( t1.create_time ) = YEAR(CURDATE() )
             </if>
             <if test="parkingRecordQueryDto.dayType == 5">
                 <if test="parkingRecordQueryDto.startTime != null">
-                    AND create_time >= #{parkingRecordQueryDto.startTime}
+                    AND t1.create_time >= #{parkingRecordQueryDto.startTime}
                 </if>
                 <if test="parkingRecordQueryDto.endTime != null">
-                    AND create_time &lt;= #{parkingRecordQueryDto.endTime}
+                    AND t1.create_time &lt;= #{parkingRecordQueryDto.endTime}
                 </if>
+            </if>
+            <if test="null != parkingRecordQueryDto.siteIds and parkingRecordQueryDto.siteIds.size()>0" >
+                and t2.site_id in
+                <foreach collection="parkingRecordQueryDto.siteIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
             </if>
         </where>
         GROUP BY
@@ -135,102 +164,124 @@
     </select>
     <select id="getCarColor" resultType="java.util.Map">
         SELECT
-            vehicle_color,count(1) as counts
+        t1.vehicle_color,count(1) as counts
         FROM
-            t_parking_record
+        t_parking_record t1
+        left join t_parking_lot t2  on t2.id = t1.parking_lot_id
+
         <where>
             <if test="parkingRecordQueryDto.parkingLotId !=null">
-                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+                AND t1.parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
             </if>
         <if test="parkingRecordQueryDto.dayType == 1">
-            AND DATE( create_time ) = CURDATE()
+            AND DATE( t1.create_time ) = CURDATE()
         </if>
         <if test="parkingRecordQueryDto.dayType == 2">
-            AND WEEKOFYEAR( create_time ) = WEEKOFYEAR( CURDATE() )
+            AND WEEKOFYEAR( t1.create_time ) = WEEKOFYEAR( CURDATE() )
         </if>
         <if test="parkingRecordQueryDto.dayType == 3">
-            AND MONTH( create_time ) = MONTH(CURDATE())
+            AND MONTH( t1.create_time ) = MONTH(CURDATE())
         </if>
         <if test="parkingRecordQueryDto.dayType == 4">
-            AND YEAR( create_time ) = YEAR(CURDATE() )
+            AND YEAR( t1.create_time ) = YEAR(CURDATE() )
         </if>
         <if test="parkingRecordQueryDto.dayType == 5">
             <if test="parkingRecordQueryDto.startTime != null">
-                AND create_time >= #{parkingRecordQueryDto.startTime}
+                AND t1.create_time >= #{parkingRecordQueryDto.startTime}
             </if>
             <if test="parkingRecordQueryDto.endTime != null">
-                AND create_time &lt;= #{parkingRecordQueryDto.endTime}
+                AND t1.create_time &lt;= #{parkingRecordQueryDto.endTime}
             </if>
         </if>
+            <if test="null != parkingRecordQueryDto.siteIds and parkingRecordQueryDto.siteIds.size()>0" >
+                and t2.site_id in
+                <foreach collection="parkingRecordQueryDto.siteIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
         </where>
-        GROUP BY vehicle_color
+        GROUP BY t1.vehicle_color
 
     </select>
     <select id="getOutType" resultType="java.util.Map">
         SELECT
-            out_parking_type,count(1) as counts
+        t1.out_parking_type,count(1) as counts
         FROM
-            t_parking_record
+        t_parking_record t1
+        left join t_parking_lot t2  on t2.id = t1.parking_lot_id
         <where>
             <if test="parkingRecordQueryDto.parkingLotId !=null">
-                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+                AND t1.parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
             </if>
             <if test="parkingRecordQueryDto.dayType == 1">
-                AND DATE( create_time ) = CURDATE()
+                AND DATE( t1.create_time ) = CURDATE()
             </if>
             <if test="parkingRecordQueryDto.dayType == 2">
-                AND WEEKOFYEAR( create_time ) = WEEKOFYEAR( CURDATE() )
+                AND WEEKOFYEAR( t1.create_time ) = WEEKOFYEAR( CURDATE() )
             </if>
             <if test="parkingRecordQueryDto.dayType == 3">
-                AND MONTH( create_time ) = MONTH(CURDATE())
+                AND MONTH( t1.create_time ) = MONTH(CURDATE())
             </if>
             <if test="parkingRecordQueryDto.dayType == 4">
-                AND YEAR( create_time ) = YEAR(CURDATE() )
+                AND YEAR( t1.create_time ) = YEAR(CURDATE() )
             </if>
             <if test="parkingRecordQueryDto.dayType == 5">
                 <if test="parkingRecordQueryDto.startTime != null">
-                    AND create_time >= #{parkingRecordQueryDto.startTime}
+                    AND t1.create_time >= #{parkingRecordQueryDto.startTime}
                 </if>
                 <if test="parkingRecordQueryDto.endTime != null">
-                    AND create_time &lt;= #{parkingRecordQueryDto.endTime}
+                    AND t1.create_time &lt;= #{parkingRecordQueryDto.endTime}
                 </if>
             </if>
+            <if test="null != parkingRecordQueryDto.siteIds and parkingRecordQueryDto.siteIds.size()>0" >
+                and t2.site_id in
+                <foreach collection="parkingRecordQueryDto.siteIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
         </where>
-        GROUP BY out_parking_type
+        GROUP BY t1.out_parking_type
     </select>
     <select id="getIsCharge" resultType="java.util.Map">
         SELECT
             CASE
-                WHEN charging_order_id IS NOT NULL THEN 'WithChargingOrder'
+                WHEN t1.charging_order_id IS NOT NULL THEN 'WithChargingOrder'
                 ELSE 'WithoutChargingOrder'
                 END AS order_status,
             COUNT(*) AS counts
         FROM
-            `t_parking_record`
+            `t_parking_record` t1
+        left join t_parking_lot t2  on t2.id = t1.parking_lot_id
         <where>
             <if test="parkingRecordQueryDto.parkingLotId !=null">
-                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+                AND t1.parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
             </if>
             <if test="parkingRecordQueryDto.dayType == 1">
-                AND DATE( create_time ) = CURDATE()
+                AND DATE( t1.create_time ) = CURDATE()
             </if>
             <if test="parkingRecordQueryDto.dayType == 2">
-                AND WEEKOFYEAR( create_time ) = WEEKOFYEAR( CURDATE() )
+                AND WEEKOFYEAR( t1.create_time ) = WEEKOFYEAR( CURDATE() )
             </if>
             <if test="parkingRecordQueryDto.dayType == 3">
-                AND MONTH( create_time ) = MONTH(CURDATE())
+                AND MONTH( t1.create_time ) = MONTH(CURDATE())
             </if>
             <if test="parkingRecordQueryDto.dayType == 4">
-                AND YEAR( create_time ) = YEAR(CURDATE() )
+                AND YEAR( t1.create_time ) = YEAR(CURDATE() )
             </if>
             <if test="parkingRecordQueryDto.dayType == 5">
                 <if test="parkingRecordQueryDto.startTime != null">
-                    AND create_time >= #{parkingRecordQueryDto.startTime}
+                    AND t1.create_time >= #{parkingRecordQueryDto.startTime}
                 </if>
                 <if test="parkingRecordQueryDto.endTime != null">
-                    AND create_time &lt;= #{parkingRecordQueryDto.endTime}
+                    AND t1.create_time &lt;= #{parkingRecordQueryDto.endTime}
                 </if>
             </if>
+            <if test="null != parkingRecordQueryDto.siteIds and parkingRecordQueryDto.siteIds.size()>0" >
+                and t2.site_id in
+                <foreach collection="parkingRecordQueryDto.siteIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
         </where>
         GROUP BY
             order_status
diff --git a/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/RuoYiChargingPileApplicationTests.java b/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/RuoYiChargingPileApplicationTests.java
index 7b8f452..9163b5f 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/RuoYiChargingPileApplicationTests.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/RuoYiChargingPileApplicationTests.java
@@ -1,8 +1,21 @@
 package com.ruoyi.chargingPile;
 
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.chargingPile.api.dto.GetPermissionConfigurationDTO;
+import com.ruoyi.chargingPile.service.IPartnerService;
+import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiChargingPileApplicationTests.class)
-public class RuoYiChargingPileApplicationTests {
+import javax.annotation.Resource;
 
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiChargingPileApplication.class)
+public class RuoYiChargingPileApplicationTests {
+	@Resource
+	private IPartnerService partnerService;
+	
+	@Test
+	public void test(){
+		GetPermissionConfigurationDTO permissionConfiguration = partnerService.getPermissionConfiguration(9, 15);
+		System.err.println(JSON.toJSONString(permissionConfiguration));
+	}
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java
index 30b9ded..e123a3c 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java
@@ -34,8 +34,9 @@
 	@ResponseBody
 	@PostMapping("/getCoupon")
 	public BaseResponse<GetCouponResp> getCoupon(GetCouponReq req){
-		log.warn("停车获取优惠券请求参数:{}", JSON.toJSONString(req));
+		log.info("停车获取优惠券请求参数:{}", JSON.toJSONString(req));
 		GetCouponResp coupon = couponService.getCoupon(req);
+		log.info("停车获取优惠券结果:{}", JSON.toJSONString(coupon));
 		return BaseResponse.ok(coupon);
 	}
 	
@@ -48,7 +49,7 @@
 	@ResponseBody
 	@PostMapping("/usedCoupon")
 	public BaseResponse usedCoupon(UsedCoupon req){
-		log.warn("停车使用优惠券请求参数:{}", JSON.toJSONString(req));
+		log.info("停车使用优惠券请求参数:{}", JSON.toJSONString(req));
 		couponService.usedCoupon(req);
 		return BaseResponse.ok();
 	}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java
index 0979a75..1d5cd38 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java
@@ -28,7 +28,7 @@
 	@ResponseBody
 	@PostMapping("/cloudParkingInOrder")
 	public BaseResponse cloudParkingInOrder(@RequestBody CloudParkingOrder order){
-		log.warn("云停车入场请求参数:{}", JSON.toJSONString(order));
+		log.info("云停车入场请求参数:{}", JSON.toJSONString(order));
 		parkingOrderService.cloudParkingInOrder(order);
 		return BaseResponse.ok();
 	}
@@ -41,7 +41,7 @@
 	@ResponseBody
 	@PostMapping("/cloudParkingOutOrder")
 	public BaseResponse cloudParkingOutOrder(@RequestBody CloudParkingOrder order){
-		log.warn("云停车出场请求参数:{}", JSON.toJSONString(order));
+		log.info("云停车出场请求参数:{}", JSON.toJSONString(order));
 		parkingOrderService.cloudParkingOutOrder(order);
 		return BaseResponse.ok();
 	}
@@ -54,7 +54,7 @@
 	@ResponseBody
 	@PostMapping("/cloudParkingSpace")
 	public BaseResponse cloudParkingSpace(@RequestBody CloudParkingSpace parkingSpace){
-		log.warn("云停车实时车位请求参数:{}", JSON.toJSONString(parkingSpace));
+		log.info("云停车实时车位请求参数:{}", JSON.toJSONString(parkingSpace));
 		parkingOrderService.cloudParkingSpace(parkingSpace);
 		return BaseResponse.ok();
 	}
@@ -67,7 +67,7 @@
 	@ResponseBody
 	@PostMapping("/offlineParkingInOrder")
 	public BaseResponse offlineParkingInOrder(@RequestBody OfflineParkingOrder order){
-		log.warn("线下停车场入场请求参数:{}", JSON.toJSONString(order));
+		log.info("线下停车场入场请求参数:{}", JSON.toJSONString(order));
 		parkingOrderService.offlineParkingInOrder(order);
 		OfflineParkingResponse offlineParkingResponse = new OfflineParkingResponse();
 		offlineParkingResponse.setCode(0);
@@ -84,7 +84,7 @@
 	@ResponseBody
 	@PostMapping("/offlineParkingOutOrder")
 	public BaseResponse offlineParkingOutOrder(@RequestBody OfflineParkingOrder order){
-		log.warn("线下停车场出场请求参数:{}", JSON.toJSONString(order));
+		log.info("线下停车场出场请求参数:{}", JSON.toJSONString(order));
 		parkingOrderService.offlineParkingOutOrder(order);
 		OfflineParkingResponse offlineParkingResponse = new OfflineParkingResponse();
 		offlineParkingResponse.setCode(0);
@@ -101,7 +101,7 @@
 	@ResponseBody
 	@PostMapping("/offlineParkingSpace")
 	public BaseResponse offlineParkingSpace(@RequestBody OfflineParkingSpace parkingSpace){
-		log.warn("线下停车场实时车位请求参数:{}", JSON.toJSONString(parkingSpace));
+		log.info("线下停车场实时车位请求参数:{}", JSON.toJSONString(parkingSpace));
 		parkingOrderService.offlineParkingSpace(parkingSpace);
 		return BaseResponse.ok();
 	}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java
index 964c335..e4bfbec 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java
@@ -11,7 +11,7 @@
 	/**
 	 * 停车场appkey
 	 */
-	private String appKey;
+	private String appkey;
 	/**
 	 * 车牌号
 	 */
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java
index 58584d8..8a3badf 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java
@@ -11,7 +11,7 @@
 	/**
 	 * 停车场appkey
 	 */
-	private String appKey;
+	private String appkey;
 	/**
 	 * 车牌号
 	 */
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java
index f028d1a..793ca4a 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java
@@ -47,7 +47,7 @@
 	public GetCouponResp getCoupon(GetCouponReq req){
 		//根据车牌查询入场时间,后再根据入场时间和车牌查询是否有充电订单
 		String carNumber = req.getCarNumber();
-		String appKey = req.getAppKey();
+		String appKey = req.getAppkey();
 		TParkingLot parkingLot = parkingLotClient.getParkingLotByAppKey(appKey).getData();
 		if(null == parkingLot){
 			return null;
@@ -70,7 +70,7 @@
 		GetCouponResp resp = new GetCouponResp();
 		resp.setRecordId(data.getId());
 		resp.setCarNumber(carNumber);
-		resp.setSysOrgId("MXCD7QjHapTJGZ8TZZz3");
+		resp.setSysOrgId("MXCD0001");
 		resp.setPosName("明星电力");
 		resp.setLssuer("admin");
 		resp.setType(4);
@@ -85,10 +85,6 @@
 		}else{
 			resp.setCouponName("充电停车时长优惠");
 			parameter.setTime(parkingLot.getChargeFreeDuration());
-			data.setFreeDuration(parkingLot.getNonChargeFreeDuration());
-			data.setChargingOrderId(tChargingOrder.getId());
-			data.setAppUserId(tChargingOrder.getAppUserId());
-			parkingRecordClient.updateParkingRecord(data);
 		}
 		resp.setParameter(parameter);
 		return resp;
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
index 6628553..75440f0 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java
@@ -1,6 +1,8 @@
 package com.ruoyi.integration.barrierGate.server;
 
 import com.ruoyi.account.api.feignClient.AppUserCarClient;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.account.api.model.TAppUserCar;
 import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient;
 import com.ruoyi.chargingPile.api.feignClient.ParkingRecordClient;
@@ -19,6 +21,7 @@
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.List;
@@ -41,6 +44,9 @@
 	
 	@Resource
 	private ChargingOrderClient chargingOrderClient;
+	
+	@Resource
+	private AppUserClient appUserClient;
 	
 	
 	
@@ -79,6 +85,7 @@
 		query.setLicensePlate(order.getPlate());
 		query.setStatus(1);
 		TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData();
+		TParkingLot parkingLot = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
 		LocalDateTime parse = LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ISO_DATE_TIME);
 		parse = parse.plusHours(8);
 		parkingRecord.setOutParkingTime(parse);
@@ -98,8 +105,19 @@
 				TChargingOrder chargingOrder = data.get(0);
 				parkingRecord.setAppUserId(chargingOrder.getAppUserId());
 				parkingRecord.setChargingOrderId(chargingOrder.getId());
+				TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+				parkingRecord.setPhone(appUser.getPhone());
+				parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
+				long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
+				parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
+				
+			}else{
+				parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
+				long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
+				parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
 			}
 		}
+		parkingRecord.setFreeAmount(parkingRecord.getOrderAmount().subtract(parkingRecord.getPayment()));
 		parkingRecordClient.updateParkingRecord(parkingRecord);
 	}
 	
@@ -146,9 +164,8 @@
 		query.setLicensePlate(order.getPlatenumber());
 		query.setStatus(1);
 		TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData();
-		LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ISO_DATE_TIME);
-		parse = parse.plusHours(8);
-		parkingRecord.setOutParkingTime(parse);
+		TParkingLot parkingLot = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
+		parkingRecord.setOutParkingTime(LocalDateTime.now());
 		parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime()));
 		parkingRecord.setOrderAmount(new BigDecimal(order.getMoney()));
 		parkingRecord.setPayment(new BigDecimal(order.getMoney()));
@@ -164,8 +181,19 @@
 				TChargingOrder chargingOrder = data.get(0);
 				parkingRecord.setAppUserId(chargingOrder.getAppUserId());
 				parkingRecord.setChargingOrderId(chargingOrder.getId());
+				TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+				parkingRecord.setPhone(appUser.getPhone());
+				parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
+				long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
+				parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
+				
+			}else{
+				parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
+				long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration();
+				parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
 			}
 		}
+		parkingRecord.setFreeAmount(parkingRecord.getOrderAmount().subtract(parkingRecord.getPayment()));
 		parkingRecordClient.updateParkingRecord(parkingRecord);
 	}
 	
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/SwitchwayGateService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/SwitchwayGateService.java
index ab49ae7..4bd5357 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/SwitchwayGateService.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/SwitchwayGateService.java
@@ -36,7 +36,7 @@
 		JSONObject jsonObject = JSON.parseObject(result);
 		Boolean success = jsonObject.getBoolean("success");
 		if(!success){
-			log.warn("调用开关道闸失败:\n请求参数:{}\n返回结果:{}", body, result);
+			log.info("调用开关道闸失败:\n请求参数:{}\n返回结果:{}", body, result);
 		}
 		return success;
 	}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
index c69b333..268335c 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
@@ -31,5 +31,21 @@
      * Instance-Id配置  	d21a37d3-c578-43aa-a1ab-be3854e7c337
      */
     private String instanceId;
+    /**
+     * 设备ID
+     */
+    private String deviceId;
+    /**
+     * 是否开启测试
+     */
+    private Boolean test;
+    /**
+     * 测试设备ID
+     */
+    private String testDeviceId;
+    /**
+     * 测试充电桩号
+     */
+    private String testDriverCode;
 
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
index e68a21f..19db25a 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java
@@ -6,6 +6,7 @@
 import com.ruoyi.integration.api.vo.AddDevice;
 import com.ruoyi.integration.api.vo.AddDeviceResp;
 import com.ruoyi.integration.api.vo.DeleteDeviceResp;
+import com.ruoyi.integration.api.vo.ShowDeviceResp;
 import com.ruoyi.integration.iotda.utils.api.IotInterfaceUtil;
 import org.springframework.web.bind.annotation.*;
 
@@ -45,4 +46,15 @@
 	public R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId){
 		return iotInterfaceUtil.deleteDeviceRequest(deviceId);
 	}
+	
+	
+	/**
+	 * 查询设备
+	 * @param deviceId
+	 * @return
+	 */
+	@PostMapping("/showDeviceRequest")
+	public R<ShowDeviceResp> showDeviceRequest(@RequestParam("deviceId") String deviceId){
+		return iotInterfaceUtil.showDeviceRequest(deviceId);
+	}
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
index bd76411..34414fd 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.integration.iotda.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.ruoyi.integration.api.model.*;
 import com.ruoyi.integration.iotda.enums.ServiceIdMenu;
 import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce;
@@ -116,10 +117,10 @@
      * @param confirmTransactionRecord 实体对象
      * @return
      */
-    @PostMapping("/confirmTransactionRecord")
-    public String confirmTransactionRecord(@RequestBody ConfirmTransactionRecord confirmTransactionRecord){
-        return  iotMessageProduce.sendMessage(confirmTransactionRecord.getTransaction_serial_number(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord));
-    }
+//    @PostMapping("/confirmTransactionRecord")
+//    public String confirmTransactionRecord(@RequestBody ConfirmTransactionRecord confirmTransactionRecord){
+//        return  iotMessageProduce.sendMessage(confirmTransactionRecord.getTransaction_serial_number(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord));
+//    }
 
     /**
      * 远程账户余额更新
@@ -235,6 +236,7 @@
      */
     @PostMapping("/qrCodeDelivery")
     public String qrCodeDelivery(@RequestBody QrCodeDelivery qrCodeDelivery){
+        log.info("二维码下发:{}", JSON.toJSONString(qrCodeDelivery));
         return  iotMessageProduce.sendMessage(qrCodeDelivery.getCharging_pile_code(), ServiceIdMenu.QR_CODE_DELIVERY.getKey(),messageUtil.qrCodeDelivery(qrCodeDelivery));
     }
 
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
index 0f2fb02..657165a 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.utils.CodeGenerateUtils;
 import com.ruoyi.integration.api.vo.AddDeviceResp;
 import com.ruoyi.integration.api.vo.DeleteDeviceResp;
+import com.ruoyi.integration.api.vo.ShowDeviceResp;
 import com.ruoyi.integration.iotda.builder.IotBuilder;
 import com.ruoyi.integration.iotda.config.IotDAConfig;
 import lombok.extern.slf4j.Slf4j;
@@ -256,4 +257,33 @@
         }
         return R.fail();
     }
+    
+    
+    /**
+     * 查询设备
+     * @param deviceId
+     * @return
+     */
+    public R<ShowDeviceResp> showDeviceRequest(String deviceId) {
+        ShowDeviceRequest request = new ShowDeviceRequest();
+        request.withDeviceId(deviceId);
+        try {
+            ShowDeviceResponse response = iotBuilder.buildIot().showDevice(request);
+            log.info("查询设备:{}",response.toString());
+            ShowDeviceResp showDeviceResp = new ShowDeviceResp();
+            BeanUtils.copyProperties(response, showDeviceResp);
+            return R.ok(showDeviceResp);
+        } catch (ConnectionException e) {
+            e.printStackTrace();
+        } catch (RequestTimeoutException e) {
+            e.printStackTrace();
+        } catch (ServiceResponseException e) {
+            e.printStackTrace();
+            System.out.println(e.getHttpStatusCode());
+            System.out.println(e.getRequestId());
+            System.out.println(e.getErrorCode());
+            System.out.println(e.getErrorMsg());
+        }
+        return R.fail();
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
index 0669173..82a0a95 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -23,6 +23,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
@@ -44,7 +45,7 @@
     private MessageUtil messageUtil;
     @Autowired
     private IotMessageProduce iotMessageProduce;
-    @Autowired
+    @Resource
     private AccountingStrategyDetailClient accountingStrategyDetailClient;
     /**
      * 设备消息监听
@@ -81,13 +82,13 @@
                 OnlineReply onlineReply = new OnlineReply();
                 onlineReply.setCharging_pile_code(onlineMessage.getCharging_pile_code());
                 onlineReply.setOnline_result(0);
-                result = iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ONLINE_REPLY.getKey(), messageUtil.onlineReply(onlineReply));
+                result = iotMessageProduce.sendMessage(onlineReply.getCharging_pile_code(), ServiceIdMenu.ONLINE_REPLY.getKey(), messageUtil.onlineReply(onlineReply));
                 log.info("充电桩登录认证-返回结果:{}",result);
                 // 响应硬件 对时设置应答
                 TimingSettingReply timingSettingReplyOnline = new TimingSettingReply();
                 timingSettingReplyOnline.setCharging_pile_code(onlineMessage.getCharging_pile_code());
                 timingSettingReplyOnline.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
-                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReplyOnline));
+                iotMessageProduce.sendMessage(timingSettingReplyOnline.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReplyOnline));
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.PING:
@@ -98,7 +99,7 @@
                 pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
                 pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
                 pong.setCharging_gun_status(0);
-                result = iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
+                result = iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
                 log.info("充电桩心跳包-返回结果:{}",result);
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
@@ -139,7 +140,7 @@
                         billingModeVerifyReply.setBilling_model_result(1);
                     }
                 }
-                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply));
+                iotMessageProduce.sendMessage(billingModeVerifyReply.getCharging_pile_code(), ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply));
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.ACQUISITION_BILLING_MODE:
@@ -157,7 +158,7 @@
                 acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString());
                 acquisitionBillingModeReply.setCharging_pile_code(acquisitionBillingModeMessage.getCharging_pile_code());
                 acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
-                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
+                iotMessageProduce.sendMessage(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA:
@@ -212,7 +213,7 @@
                 platformConfirmationCharging.setAccount_balance(BigDecimal.ZERO);
                 platformConfirmationCharging.setAuthentication(1);
                 // TODO 若是失败,给出失败原因
-                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getKey(),messageUtil.platformConfirmationCharging(platformConfirmationCharging));
+                iotMessageProduce.sendMessage(platformConfirmationCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getKey(),messageUtil.platformConfirmationCharging(platformConfirmationCharging));
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
@@ -229,12 +230,13 @@
                 break;
             case SendTagConstant.TRANSACTION_RECORD:
                 TransactionRecordMessage transactionRecordMessage = JSON.parseObject(content.toJSONString(),TransactionRecordMessage.class);
+                transactionRecordMessage.setResult(content.toJSONString());
                 chargingMessage.setTransactionRecordMessage(transactionRecordMessage);
                 // 响应硬件
                 ConfirmTransactionRecord confirmTransactionRecord = new ConfirmTransactionRecord();
                 confirmTransactionRecord.setTransaction_serial_number(transactionRecordMessage.getTransaction_serial_number());
                 confirmTransactionRecord.setConfirm_result(0);
-                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord));
+                iotMessageProduce.sendMessage(transactionRecordMessage.getCharging_pile_code(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord));
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.UPDATE_BALANCE_REPLY:
@@ -268,7 +270,7 @@
                 TimingSettingReply timingSettingReply = new TimingSettingReply();
                 timingSettingReply.setCharging_pile_code(timingSettingMessage.getCharging_pile_code());
                 timingSettingReply.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
-                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply));
+                iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply));
                 sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.SETUP_BILLING_MODEL_REPLY:
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
index ace5a25..6e7aa8d 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
@@ -26,18 +26,24 @@
 
     @Autowired
     private IotBuilder iotBuilder;
+    
+    @Autowired
+    private IotDAConfig config;
+    
 
     /**
      * 设备消息下发
-     * @param deviceId 设备id
      * @param name 消息名称
      * @param message 消息内容
      * @return
      */
     @PostMapping("/sendMessage")
-    public String sendMessage(String deviceId, String name, JSONObject message){
+    public String sendMessage(String code, String name, JSONObject message){
+        log.info("消息下发至设备:code={},name={},message={}", code, name, message);
         CreateMessageRequest request = new CreateMessageRequest();
-        request.withDeviceId(deviceId);
+        System.err.println(code);
+        System.err.println(JSONObject.toJSONString(config));
+        request.withDeviceId(code);
         DeviceMessageRequest body = new DeviceMessageRequest();
         body.withMessageId(UUID.randomUUID().toString());
         body.withName(name);
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
index 6d56cff..41ff351 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
@@ -78,6 +78,9 @@
         if (mongoChargingOrderQuery.getSiteId() != null){
             query.addCriteria(Criteria.where("siteId").is(mongoChargingOrderQuery.getSiteId()));
         }
+        if (!mongoChargingOrderQuery.getSiteIds().isEmpty()){
+            query.addCriteria(Criteria.where("siteId").in(mongoChargingOrderQuery.getSiteIds()));
+        }
         if (mongoChargingOrderQuery.getChargingPileCode() != null && !mongoChargingOrderQuery.getChargingPileCode().isEmpty()) {
             query.addCriteria(Criteria.where("charging_pile_code").is(mongoChargingOrderQuery.getChargingPileCode()));
         }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TransactionRecordMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TransactionRecordMessage.java
index 8c46e37..3220212 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TransactionRecordMessage.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TransactionRecordMessage.java
@@ -182,7 +182,7 @@
     private BigDecimal valley_charge12;// 谷电量
     private BigDecimal loss_valley_charge12;// 计损谷电量
     private BigDecimal valley_amount12;// 谷金额
-
+    private String result;//原始字符串
 
 }
 
diff --git a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml
index 834c664..1f10454 100644
--- a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml
@@ -12,15 +12,9 @@
     allow-circular-references: true
   profiles:
     # 环境配置
-    active: dev
-#    active: prod
----
-spring:
-  cloud:
-    stream:
-      rocketmq:
-        binder:
-          name-server: 127.0.0.1:9876
+#    active: dev
+    active: prod
+    
 ---
 spring:
   config:
@@ -30,7 +24,7 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
@@ -38,7 +32,7 @@
         password: nacos
       config:
         # 配置中心地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         group: DEFAULT_GROUP
         name: ${spring.application.name}
@@ -63,52 +57,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 127.0.0.1:8848 # nacos注册中心地址
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
diff --git a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
index 0e145ea..7c0b24e 100644
--- a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
+++ b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
@@ -2,6 +2,8 @@
 
 import com.alibaba.fastjson2.JSON;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
+import com.ruoyi.integration.barrierGate.model.CloudParkingOrder;
+import com.ruoyi.integration.barrierGate.server.ParkingOrderService;
 import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -13,9 +15,13 @@
 public class RuoYiIntegrationApplicationTests {
 	@Resource
 	private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
+	
+	@Resource
+	private ParkingOrderService parkingOrderService;
 	@Test
 	public void test(){
-		List<UploadRealTimeMonitoringData> list = uploadRealTimeMonitoringDataService.getDataByOrderCode("CD93220241022154810850");
-		System.err.println(JSON.toJSONString(list));
+		String json = "{\"appkey\":\"842ae0c027e64b3590af9eea6\",\"enterChannel\":\"001\",\"enterChannelName\":\"进口\",\"enterDateTime\":\"2024-11-01T11:25:15.677Z\",\"id\":\"17B51DA0983C11EFA99CA979A8A8386B\",\"kind\":\"临时卡\",\"name\":\"临时识别\",\"plate\":\"川JD34056\",\"plateColor\":\"绿色\",\"sign\":\"29A902820C2657C51FBE90235152534F\"}";
+		CloudParkingOrder order = JSON.parseObject(json, CloudParkingOrder.class);
+		parkingOrderService.cloudParkingInOrder(order);
 	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CallBackController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CallBackController.java
deleted file mode 100644
index e47e282..0000000
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CallBackController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.ruoyi.order.controller;
-
-import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.order.service.TVipOrderService;
-import com.ruoyi.payment.api.vo.AliQueryOrder;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import java.io.PrintWriter;
-
-
-@RestController
-@RequestMapping("/callBack")
-public class CallBackController {
-
-    @Resource
-    private TVipOrderService tVipOrderService;
-
-    @ResponseBody
-    @PostMapping(value = "/ali/all")
-    public void chargingOrderALICallback(@RequestBody AliQueryOrder aliQueryOrder, HttpServletResponse response) {
-        try {
-            String out_trade_no = aliQueryOrder.getOutTradeNo();
-            String transaction_id = aliQueryOrder.getTradeNo();
-            String attach = aliQueryOrder.getPassbackParams();
-            String substring = out_trade_no.substring(0, 2);
-            switch (substring){
-                //购物订单
-                case "GW":
-
-                    break;
-                case "HY":
-                    tVipOrderService.payBack(out_trade_no);
-                    break;
-            }
-
-//            AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(2, out_trade_no, transaction_id, attach);
-//            if (ajaxResult.isSuccess()) {
-//                PrintWriter writer = response.getWriter();
-//                writer.println("success");
-//                writer.flush();
-//                writer.close();
-//            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
index 7f68ade..6c2f211 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -6,6 +6,7 @@
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.common.core.domain.R;
@@ -15,6 +16,8 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.TOrderInvoiceQuery;
 import com.ruoyi.order.api.vo.AccountListVO;
@@ -41,11 +44,9 @@
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -66,7 +67,83 @@
     private SiteClient siteClient;
     @Resource
     private TChargingOrderService chargingOrderService;
-
+    @Resource
+    private TChargingOrderRefundService tChargingOrderRefundService;
+    @Resource
+    private TChargingBillService tChargingBillService;
+    @GetMapping(value = "/test")
+    public R accountAdd() {
+//        List<TChargingBill> list = tChargingBillService.lambdaQuery().list();
+//        for (TChargingBill tChargingBill : list) {
+//            tChargingBill.setStatus(2);
+//        }
+//        tChargingBillService.updateBatchById(list);
+//        List<TChargingOrder> list = chargingOrderService.lambdaQuery().list();
+//        for (TChargingOrder chargingOrder : list) {
+//            chargingOrder.setSharingAmount(new BigDecimal("0"));
+//            List<TChargingOrderRefund> list1 = tChargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, chargingOrder.getId()).list();
+//            tChargingOrderRefundService.removeBatchByIds(list1);
+//            chargingOrderService.removeById(chargingOrder);
+//        }
+//        chargingOrderService.updateBatchById(list);
+//        TChargingBill tChargingBill = new TChargingBill();
+//        Random random = new Random();
+//        String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+//                .mapToObj(String::valueOf)
+//                .collect(Collectors.joining()); // 将其连接成一个字符串
+//        tChargingBill.setCode("JSD"+randomDigits );
+//        tChargingBill.setType(1);
+//        tChargingBill.setSiteId(0);
+//        tChargingBill.setBillTime(LocalDateTime.now().plusDays(1));
+//        tChargingBill.setStatus(1);
+//        tChargingBill.setOrderState(2);
+//        tChargingBill.setBillType(1);
+//        chargingBillService.save(tChargingBill);
+//        TChargingBill tChargingBill1 = new TChargingBill();
+//        Random random1 = new Random();
+//        String randomDigits1 = random1.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+//                .mapToObj(String::valueOf)
+//                .collect(Collectors.joining()); // 将其连接成一个字符串
+//        tChargingBill1.setCode("JSD"+randomDigits1);
+//        tChargingBill1.setType(2);
+//        tChargingBill1.setSiteId(13);
+//        tChargingBill1.setBillTime(LocalDateTime.now().plusDays(1));
+//        tChargingBill1.setStatus(1);
+//        tChargingBill1.setOrderState(2);
+//        tChargingBill1.setBillType(1);
+//        chargingBillService.save(tChargingBill1);
+//
+//        TChargingBill tChargingBil3 = new TChargingBill();
+//        Random random2 = new Random();
+//        String randomDigits2 = random2.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+//                .mapToObj(String::valueOf)
+//                .collect(Collectors.joining()); // 将其连接成一个字符串
+//        tChargingBil3.setCode("JSD"+randomDigits2 );
+//        tChargingBil3.setType(1);
+//        tChargingBil3.setSiteId(0);
+//        tChargingBil3.setBillTime(LocalDateTime.now().plusDays(1));
+//        tChargingBil3.setStatus(1);
+//        tChargingBil3.setOrderState(2);
+//        tChargingBil3.setBillType(2);
+//        chargingBillService.save(tChargingBil3);
+//        TChargingBill tChargingBill14 = new TChargingBill();
+//        Random random3 = new Random();
+//        String randomDigits3 = random3.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+//                .mapToObj(String::valueOf)
+//                .collect(Collectors.joining()); // 将其连接成一个字符串
+//        tChargingBill14.setCode("JSD"+randomDigits3);
+//        tChargingBill14.setType(2);
+//        tChargingBill14.setSiteId(13);
+//        tChargingBill14.setBillTime(LocalDateTime.now().plusDays(1));
+//        tChargingBill14.setStatus(1);
+//        tChargingBill14.setOrderState(2);
+//        tChargingBill14.setBillType(2);
+//        chargingBillService.save(tChargingBill14);
+        return R.ok();
+    }
+    
+    
+    @RequiresPermissions(value = {"/accountSettlementStatement"}, logical = Logical.OR)
     @PostMapping(value = "/accountBillList")
     @ApiOperation(value = "列表查询", tags = {"管理后台-账户结算账单"})
     public R<AccountListVO> accountBillList(@RequestBody ChargingListQuery dto) {
@@ -74,8 +151,7 @@
         ChargingBillVO res = chargingBillService.chargingBillList1(dto);
         List<ChargingBillListVO> records = res.getList().getRecords();
         accountListVO.setBillCount(records.size());
-        accountListVO.setTotalAmount(res.getPaymentAmount().subtract(res.getRefundAmount())
-                .subtract(res.getCommissionAmount().setScale(2,BigDecimal.ROUND_DOWN)).subtract(res.getSharingAmount()).setScale(2, BigDecimal.ROUND_DOWN));
+        accountListVO.setTotalAmount(res.getPaymentAmount().subtract(res.getRefundAmount()).subtract(res.getCommissionAmount()).subtract(res.getSharingAmount()).setScale(2, BigDecimal.ROUND_DOWN));
         accountListVO.setPaymentAmount(res.getPaymentAmount().setScale(2, BigDecimal.ROUND_DOWN));
         accountListVO.setRefundAmount(res.getRefundAmount().setScale(2, BigDecimal.ROUND_DOWN));
         accountListVO.setCommissionAmount(res.getCommissionAmount().setScale(2, BigDecimal.ROUND_DOWN));
@@ -84,6 +160,8 @@
         accountListVO.setOrderList(res.getExportList());
         return R.ok(accountListVO);
     }
+    
+    @RequiresPermissions(value = {"/chargeBill"}, logical = Logical.OR)
     @PostMapping(value = "/chargingBillList")
     @ApiOperation(value = "充电算帐单列表查询", tags = {"管理后台-充电算账单"})
     public AjaxResult<ChargingBillVO> chargingBillList(@RequestBody ChargingListQuery dto) {
@@ -99,10 +177,14 @@
     public R<ChargingBillVO> chargingBillListExport(String uid) {
         return R.ok(null);
     }
+    
+    
+    @RequiresPermissions(value = {"/chargeBill/export"}, logical = Logical.OR)
     @ApiOperation(value = "导出", tags = {"管理后台-充电算账单"})
     @PutMapping("/export")
     public void export(@RequestBody ChargingListQuery dto)
     {
+
         ChargingBillVO res = chargingBillService.chargingBillList(dto);
         List<ChargingBillListVO> list = res.getList().getRecords();
         List<TChargingBillExport> tChargingBillExports = new ArrayList<>();
@@ -162,6 +244,9 @@
             }
         }
     }
+    
+    
+    @RequiresPermissions(value = {"/accountSettlementStatement/export"}, logical = Logical.OR)
     @ApiOperation(value = "导出", tags = {"管理后台-账户结算账单"})
     @PutMapping("/exportAccount")
     public void exportAccount(@RequestBody ChargingListQuery dto)
@@ -232,9 +317,9 @@
             }
         }
     }
-
-    @Autowired
-    private TChargingOrderRefundService tChargingOrderRefundService;
+    
+    
+    
     @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"})
     @PutMapping("/download")
     public void download(@RequestBody ExportUidDto uid)
@@ -258,23 +343,18 @@
             chargingBillExport.setSiteName(data.get(0).getName());
         }
 //        // 根据账单的出账时间 查询上个月的充电订单
-//        LocalDateTime localDate = byId.getBillTime().minusMonths(1);
+        LocalDateTime localDate = byId.getBillTime().minusMonths(1);
 //        // 账单周期
 //        // 获取 LocalDate 对象
 //        LocalDate date = localDate.toLocalDate();
 //        // 获取该月份的第一天
 //        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
-         LocalDateTime localDate = byId.getBillTime().minusDays(1);
-        // todo 临时修改为前一天
         // 获取 LocalDate 对象
         LocalDate date = localDate.toLocalDate();
-//            // 获取该月份的第一天
-//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
-//            // 获取该月份的最后一天
-//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
-        // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
-        LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
-        LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
+            // 获取该月份的第一天
+            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+            // 获取该月份的最后一天
+            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
         // 获取该月份的最后一天
 //        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
         QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
@@ -287,6 +367,7 @@
         BigDecimal paymentAmount = new BigDecimal("0");
         BigDecimal refundAmount = new BigDecimal("0");
         BigDecimal commissionAmount = new BigDecimal("0");
+        BigDecimal sharingAmount = new BigDecimal("0");
 
         List<TChargingOrder> tChargingOrders = chargingOrderService.list(eq);
         // 累加支付金额
@@ -296,8 +377,9 @@
         int i =1;
         for (TChargingOrder tChargingOrder : tChargingOrders) {
             // 账单信息
-            paymentAmount = paymentAmount.add(tChargingOrder.getChargeAmount());
-            commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(bigDecimal1));
+            paymentAmount = paymentAmount.add(tChargingOrder.getRechargeAmount());
+            commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(bigDecimal1).setScale(2, BigDecimal.ROUND_DOWN));
+            sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount()!=null?tChargingOrder.getSharingAmount():new BigDecimal("0"));
             // 退款信息
             ChargingBillRefundExport chargingBillRefundExport = new ChargingBillRefundExport();
             ChargingBillPayExport chargingBillPayExport = new ChargingBillPayExport();
@@ -341,11 +423,11 @@
             chargingBillPayExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
             chargingBillPayExport.setCode(tChargingOrder.getCode());
             chargingBillPayExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):"");
-            chargingBillPayExport.setPaymentAmount(tChargingOrder.getChargeAmount().toString());
+            chargingBillPayExport.setPaymentAmount(tChargingOrder.getRechargeAmount().toString());
             chargingBillPayExport.setTotal("");
             chargingBillPayExports.add(chargingBillPayExport);
             i++;
-            bigDecimal = bigDecimal.add(tChargingOrder.getChargeAmount());
+            bigDecimal = bigDecimal.add(tChargingOrder.getRechargeAmount());
         }
         if (!chargingBillPayExports.isEmpty()){
             chargingBillPayExports.get(0).setTotal(bigDecimal+"");
@@ -361,7 +443,8 @@
         }
         chargingBillExport.setPaymentAmount(paymentAmount);
         chargingBillExport.setRefundAmount(refundAmount);
-        chargingBillExport.setIncome(paymentAmount.subtract(refundAmount).subtract(commissionAmount).setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillExport.setIncome(paymentAmount.subtract(refundAmount).subtract(commissionAmount)
+                .subtract(sharingAmount).setScale(2, BigDecimal.ROUND_DOWN));
         chargingBillExports.add(chargingBillExport);
         // 导出
         List<Map<String, Object>> sheetsList = new ArrayList<>();
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
index 66b8377..58883a0 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -23,6 +23,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
@@ -83,18 +85,6 @@
     private TSettlementConfirmService tSettlementConfirmService;
     @Resource
     private VipClient vipClient;
-    @PostMapping(value = "/chargingList")
-    @ApiOperation(value = "充电时段统计列表", tags = {"管理后台-财务结算"})
-    public AjaxResult<ChargingOrderTimeVO> chargingList(@RequestBody ChargingListQuery dto) {
-        ChargingOrderTimeVO res = chargingOrderService.chargingList(dto);
-        return AjaxResult.success(res);
-    }
-    @GetMapping(value = "/chargingInfo")
-    @ApiOperation(value = "充电时段统计列表-查看详情", tags = {"管理后台-财务结算"})
-    public AjaxResult<ChargingOrderListInfoVO> chargingInfo(String uid) {
-        ChargingOrderListInfoVO res = chargingOrderService.chargingInfo(uid);
-        return AjaxResult.success(res);
-    }
     @Autowired
     private SiteClient siteClient;
     @Autowired
@@ -109,7 +99,27 @@
     private TChargingOrderAccountingStrategyService tChargingOrderAccountingStrategyService;
     @Resource
     private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
-
+    
+    
+    
+    @RequiresPermissions(value = {"/chargingPeriodStatistics"}, logical = Logical.OR)
+    @PostMapping(value = "/chargingList")
+    @ApiOperation(value = "充电时段统计列表", tags = {"管理后台-财务结算"})
+    public AjaxResult<ChargingOrderTimeVO> chargingList(@RequestBody ChargingListQuery dto) {
+        ChargingOrderTimeVO res = chargingOrderService.chargingList(dto);
+        return AjaxResult.success(res);
+    }
+    
+    
+    @RequiresPermissions(value = {"/chargingPeriodStatistics/order_info", "/chargingPeriodStatistics/charging_curve"}, logical = Logical.OR)
+    @GetMapping(value = "/chargingInfo")
+    @ApiOperation(value = "充电时段统计列表-查看详情", tags = {"管理后台-财务结算"})
+    public AjaxResult<ChargingOrderListInfoVO> chargingInfo(String uid) {
+        ChargingOrderListInfoVO res = chargingOrderService.chargingInfo(uid);
+        return AjaxResult.success(res);
+    }
+    
+    @RequiresPermissions(value = {"/chargingPeriodStatistics/export"}, logical = Logical.OR)
     @ApiOperation(value = "充电时段统计-导出", tags = {"管理后台-财务结算"})
     @PutMapping("/export")
     public void export(@RequestBody ChargingListQuery dto) {
@@ -274,6 +284,10 @@
             }
         }
     }
+    
+    
+    
+    @RequiresPermissions(value = {"/summarySettlement"}, logical = Logical.OR)
     @GetMapping(value = "/settlementTotal")
     @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"})
     @ApiParam(name = "time", value = "汇报时间2024-01")
@@ -282,30 +296,45 @@
         SettlementTotalVO res = chargingOrderService.settlementTotal(time);
         return AjaxResult.success(res);
     }
-    @GetMapping(value = "/settlementTotalR/{time}")
-    public R<SettlementTotalVO> settlementTotalR(@PathVariable("time")String time) {
+    
+    
+    
+    @GetMapping(value = "/settlementTotalR/{time}/{userId}")
+    public R<SettlementTotalVO> settlementTotalR(@PathVariable("time")String time,@PathVariable("userId")Long userId) {
         time = time+"-01 00:00:00";
-        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
+        SettlementTotalVO res = chargingOrderService.settlementTotalR(time,userId);
         return R.ok(res);
     }
+    
+    
+    @RequiresPermissions(value = {"/generateStatement"}, logical = Logical.OR)
     @PostMapping(value = "/settlementAdd")
     @ApiOperation(value = "结算确认表-生成/保存结算确认表", tags = {"管理后台-财务结算"})
     public R<TSettlementConfirm> settlementAdd(@RequestBody SettlementConfirmAdd dto) {
         TSettlementConfirm res = chargingOrderService.settlementAdd(dto);
         return R.ok(res);
     }
+    
+    
+    @RequiresPermissions(value = {"/balanceSheetRecord"}, logical = Logical.OR)
     @PostMapping(value = "/settlementList")
     @ApiOperation(value = "结算表记录-列表查询", tags = {"管理后台-财务结算"})
     public R<PageInfo<TSettlementConfirm>> settlementList(@RequestBody SettlementListQuery dto) {
         PageInfo<TSettlementConfirm> res = chargingOrderService.settlementList(dto);
         return R.ok(res);
     }
+    
+    
+    @RequiresPermissions(value = {"/balanceSheetRecord/del"}, logical = Logical.OR)
     @GetMapping(value = "/deleteSettlement")
     @ApiOperation(value = "结算表记录-删除", tags = {"管理后台-财务结算"})
     public R deleteSettlement(String uid) {
         tSettlementConfirmService.removeById(uid);
         return R.ok();
     }
+    
+    
+    
     @GetMapping(value = "/downloadSettlement/{uid}")
     public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid) {
         TSettlementConfirm byId = tSettlementConfirmService.getById(uid);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 05e93fc..e450b99 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -12,10 +12,7 @@
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.TAppUserCar;
 import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
-import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
-import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient;
-import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.feignClient.*;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
@@ -25,6 +22,8 @@
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -55,6 +54,8 @@
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 import com.ruoyi.payment.api.vo.AliQueryOrder;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -137,6 +138,12 @@
     
     @Resource
     private TOrderInvoiceService invoiceService;
+    @Resource
+    private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+    
+    
+    
+    
 
     /**
      * 远程调用 增加管理后台赠送会员记录
@@ -169,19 +176,90 @@
         }
         return R.ok();
     }
+
+    
+    @RequiresPermissions(value = {"/invoiceManagement/select_order", "/paymentOrder/order"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/pay/order/list")
     @ApiOperation(value = "列表", tags = {"管理后台-支付订单-订单信息"})
     public R<PageInfo<PayOrderDto>> payOrderList(@RequestBody PayOrderQueryDto payOrderQueryDto) {
-        return chargingOrderService.payOrderQuery(payOrderQueryDto);
+        Integer pageCurr = payOrderQueryDto.getPageCurr();
+        Integer pageSize = payOrderQueryDto.getPageSize();
+        payOrderQueryDto.setPageCurr(1);
+        payOrderQueryDto.setPageSize(10000999);
+        PageInfo<PayOrderDto> data = chargingOrderService.payOrderQuery(payOrderQueryDto).getData();
+        List<PayOrderDto> res = new ArrayList<>();
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        Long userId = tokenService.getLoginUser().getUserid();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+        if (userId != null){
+            List<GetSiteListDTO> data2 = siteClient.getSiteListByUserId(userId).getData();
+            for (GetSiteListDTO datum : data2) {
+                siteIds.add(datum.getId());
+            }
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+
+        for (PayOrderDto record : data.getRecords()) {
+            if (record.getType() == 1){
+                TChargingOrder byId = chargingOrderService.getById(record.getId());
+                record.setSiteId(byId.getSiteId());
+            }
+            if (record.getType()==4){
+                Integer siteId=parkingLotClient.getSiteIdByOrderId(Long.valueOf(record.getId())).getData();
+                if (siteId!=null){
+                    record.setSiteId(siteId);
+                }
+            }
+            if (roleType==1||(record.getType()!=1&&record.getType()!=4)){
+                res.add(record);
+                continue;
+            }
+            if (roleType==2 && (record.getType()==1||record.getType()==4) && siteIds.contains(record.getSiteId())){
+                res.add(record);
+            }
+
+        }
+        List<PayOrderDto> res1 = testing5(res.size(), pageCurr, pageSize, res);
+        data.setTotal(res.size());
+        data.setRecords(res1);
+        return R.ok(data);
     }
+    public static List<PayOrderDto> testing5(long total, long current, long size, List<PayOrderDto> str){
+    List<PayOrderDto> result = new ArrayList<>();
+    //获取初始化分页结构
+    com.ruoyi.order.util.Page<PayOrderDto> page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1);
+    //获取集合下标初始值
+    long startIndex = page.getStartIndex();
+    //获取集合下标结束值
+    long endInddex = 0;
+    if(startIndex + page.getCurrent() >= total || size > total){
+        endInddex = total;
+    }else {
+        endInddex = Math.min(startIndex + page.getSize(), total);
+    }
+    //如果输入的开始查询下标大于集合大小,则查询为空值
+    if(startIndex > total){
+        result = Collections.emptyList();
+    }else{
+        result = str.subList((int)startIndex,(int)endInddex);
+    }
+    return result;
+}
     @ResponseBody
     @PostMapping(value = "/pay/order/refund")
     @ApiOperation(value = "退款", tags = {"管理后台-支付订单-订单信息"})
     public R refund(@RequestBody PayOrderRefundDto payOrderQueryDto) {
         return chargingOrderService.payRefund(payOrderQueryDto);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/paymentOrder/order"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/pay/order/pay/detail")
     @ApiOperation(value = "支付信息", tags = {"管理后台-支付订单-订单信息"})
@@ -310,19 +388,83 @@
 
         return R.ok(list);
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/paymentOrder/refund"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/pay/order/refund/list")
     @ApiOperation(value = "列表", tags = {"管理后台-支付订单-退款订单"})
     public R<PageInfo<TChargingOrderRefund>> refundList(@RequestBody ChargingRefundDto chargingRefundDto) {
-        R<PageInfo<TChargingOrderRefund>> refundList = chargingOrderService.getRefundList(chargingRefundDto);
-        for (TChargingOrderRefund record : refundList.getData().getRecords()) {
-            record.setUid(record.getId().toString());
-        }
-        return refundList;
+        Integer pageCurr = chargingRefundDto.getPageCurr();
+        Integer pageSize = chargingRefundDto.getPageSize();
+//        R<PageInfo<TChargingOrderRefund>> refundList = chargingOrderService.getRefundList(chargingRefundDto);
+        chargingRefundDto.setPageCurr(1);
+        chargingRefundDto.setPageSize(199999999);
+        R<PageInfo<TChargingOrderRefund>> refundList1 = chargingOrderService.getRefundList(chargingRefundDto);
+        Long userId = tokenService.getLoginUser().getUserid();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+            if (userId != null){
+                List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                for (GetSiteListDTO datum : data) {
+                    siteIds.add(datum.getId());
+                }
+            }
 
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        List<TChargingOrderRefund> tChargingOrderRefunds = new ArrayList<>();
+        for (TChargingOrderRefund record : refundList1.getData().getRecords()) {
+            if (roleType==1){
+                tChargingOrderRefunds.add(record);
+                continue;
+            }
+            if (record.getType()!=1){
+                tChargingOrderRefunds.add(record);
+            }
+            TChargingOrder byId = chargingOrderService.getById(record.getOrderId());
+            record.setUid(record.getId().toString());
+            if (byId==null){
+                continue;
+            }
+            if (roleType==2&&siteIds.contains(byId.getSiteId())){
+
+                tChargingOrderRefunds.add(record);
+            }
+        }
+        PageInfo<TChargingOrderRefund> data = refundList1.getData();
+
+        List<TChargingOrderRefund> res1 = testing4(tChargingOrderRefunds.size(), pageCurr, pageSize, tChargingOrderRefunds);
+        data.setTotal(tChargingOrderRefunds.size());
+        data.setRecords(res1);
+        return refundList1;
+
+    }
+    public static List<TChargingOrderRefund> testing4(long total, long current, long size, List<TChargingOrderRefund> str){
+        List<TChargingOrderRefund> result = new ArrayList<>();
+        //获取初始化分页结构
+        com.ruoyi.order.util.Page<TChargingOrderRefund> page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1);
+        //获取集合下标初始值
+        long startIndex = page.getStartIndex();
+        //获取集合下标结束值
+        long endInddex = 0;
+        if(startIndex + page.getCurrent() >= total || size > total){
+            endInddex = total;
+        }else {
+            endInddex = Math.min(startIndex + page.getSize(), total);
+        }
+        //如果输入的开始查询下标大于集合大小,则查询为空值
+        if(startIndex > total){
+            result = Collections.emptyList();
+        }else{
+            result = str.subList((int)startIndex,(int)endInddex);
+        }
+        return result;
     }
     @ResponseBody
     @PostMapping(value = "/pay/order/refund/list1")
@@ -331,12 +473,13 @@
         return chargingOrderService.getRefundList(chargingRefundDto);
 
     }
-
-
-
-
-
-
+    
+    
+    
+    
+    
+    
+    @RequiresPermissions(value = {"/chargingPileOrder"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/chargingOrder")
     @ApiOperation(value = "充电桩订单列表", tags = {"管理后台-订单管理"})
@@ -346,7 +489,9 @@
         TCharingOrderVO res = chargingOrderService.chargingOrder(dto);
         return AjaxResult.success(res);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/chargingPileOrder/monitoring_record"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/chargingOrderInfo")
     @ApiOperation(value = "充电桩订单列表查看详情", tags = {"管理后台-订单管理"})
@@ -485,6 +630,11 @@
     @GetMapping(value = "/getMyChargingOrderInfo")
     @ApiOperation(value = "获取充电记订单明细", tags = {"小程序-充电记录"})
     public AjaxResult<MyChargingOrderInfo> getMyChargingOrderInfo(String id) {
+        TChargingOrder tChargingOrder = chargingOrderService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!tChargingOrder.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         MyChargingOrderInfo myChargingOrderInfo = chargingOrderService.getMyChargingOrderInfo(id);
         return AjaxResult.success(myChargingOrderInfo);
     }
@@ -548,21 +698,10 @@
      */
     @ResponseBody
     @PostMapping(value = "/chargingOrderALICallback")
-    public void chargingOrderALICallback(@RequestBody AliQueryOrder aliQueryOrder, HttpServletResponse response) {
-        try {
-            String out_trade_no = aliQueryOrder.getOutTradeNo();
-            String transaction_id = aliQueryOrder.getTradeNo();
-            String attach = aliQueryOrder.getPassbackParams();
-            AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(2, out_trade_no, transaction_id, attach);
-            if (ajaxResult.isSuccess()) {
-                PrintWriter writer = response.getWriter();
-                writer.println("success");
-                writer.flush();
-                writer.close();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+    public void chargingOrderALICallback(@RequestParam("out_trade_no") String out_trade_no,
+                                         @RequestParam("transaction_id") String transaction_id,
+                                         @RequestParam("attach") String attach) {
+        chargingOrderService.chargingOrderCallback(2, out_trade_no, transaction_id, attach);
     }
     
     
@@ -641,13 +780,21 @@
     }
     
     
+//    @PostMapping("/endChargeBillingCharge1")
+//    public void endChargeBillingCharge1(@RequestBody TransactionRecordMessageVO vo){
+//        log.info("-------------------停止充电返回账单后计算费用及修改业务状态-------------------:" + vo);
+//        chargingOrderService.endChargeBillingCharge1(vo);
+//    }
     
-
+    
+    
+    
+    @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/six/charge")
     @ApiOperation(value = "电站收入分析", tags = {"后台-数据分析-平台收入分析"})
     public R<List<SixChargingDto>> charge(Integer siteId) {
-        Long userId = SecurityUtils.getUserId();
+        Long userId = tokenService.getLoginUser().getUserid();
         //如果没传siteId,获取当前登陆人所有的siteIds
         List<Integer> siteIds = new ArrayList<>();
         if (siteId==null){
@@ -657,6 +804,9 @@
             }
         }else {
             siteIds.add(siteId);
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
         }
         LocalDate sixBefore = PreviousSixMonths.get();
         //通过siteIds进行sql查询统计
@@ -691,12 +841,13 @@
 
         return months;
     }
-
+    
+    @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/six/circle")
     @ApiOperation(value = "电站收入占比", tags = {"后台-数据分析-平台收入分析"})
     public R<List<SixCircleDto>> circle() {
-        Long userId = SecurityUtils.getUserId();
+        Long userId = tokenService.getLoginUser().getUserid();
         //获取当前登录的siteIds
         List<Integer> siteIds = new ArrayList<>();
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
@@ -705,7 +856,9 @@
             }
         //进行统计groupBySiteId
         LocalDate sixBefore = PreviousSixMonths.get();
-
+            if (siteIds.isEmpty()){
+                siteIds.add(-1);
+            }
         List<SixCircleDto> sixCircleDtos = chargingOrderService.circle(siteIds,sixBefore);
         for (SixCircleDto sixCircleDto : sixCircleDtos) {
             Site site = siteClient.getSiteByIds(Arrays.asList(sixCircleDto.getSiteId())).getData().get(0);
@@ -714,8 +867,9 @@
         return R.ok(sixCircleDtos);
 
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/six/shop")
     @ApiOperation(value = "购物收入", tags = {"后台-数据分析-平台收入分析"})
@@ -751,7 +905,9 @@
 
         return months;
     }
-
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/work/shop")
     @ApiOperation(value = "购物收入", tags = {"后台-工作台"})
@@ -761,7 +917,8 @@
         List<Map<String,Object >> shopData =  shoppingOrderService.getData(statisticsQueryDto);
         return R.ok(shopData);
     }
-
+    
+    @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/six/vip")
     @ApiOperation(value = "vip收入", tags = {"后台-数据分析-平台收入分析"})
@@ -771,14 +928,27 @@
         List<SixVipDto> vipDtos =  vipOrderService.sixBefore(sixBefore);
         return R.ok(vipDtos);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/six/total")
     @ApiOperation(value = "底部数据分类", tags = {"后台-数据分析-平台收入分析"})
     public R<Map<String,Object>> total() {
         //count近6个月的数据
         LocalDate sixBefore = PreviousSixMonths.get();
-        Map<String,Object>  map = chargingOrderService.countAll(sixBefore);
+        Long userId = tokenService.getLoginUser().getUserid();
+        //获取当前登录的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+        List<GetSiteListDTO> data9 = siteClient.getSiteListByUserId(userId).getData();
+        for (GetSiteListDTO datum : data9) {
+            siteIds.add(datum.getId());
+        }
+        //进行统计groupBySiteId
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        Map<String,Object>  map = chargingOrderService.countAll(sixBefore,siteIds);
         BigDecimal data = parkingLotClient.getRecordAmount(sixBefore).getData();
         if (map ==null){
             map = new HashMap<String,Object>();
@@ -795,19 +965,59 @@
     }
 
     @Resource
-    private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+    private PartnerClient partnerClient;
+    @Resource
+    private SysUserClient sysUserClient;
+    @RequiresPermissions(value = {"/chargeOrderMonitoring"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/watch/chargingOrder")
     @ApiOperation(value = "监控订单", tags = {"管理后台-订单管理"})
     public R watchChargingOrder(@RequestBody MongoChargingOrderQuery mongoChargingOrderQuery) {
-
+        Long userid = tokenService.getLoginUser().getUserid();
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        List<Integer> siteIds = new ArrayList<>();
+        if (mongoChargingOrderQuery.getSiteId()==null){
+            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userid).getData();
+            for (GetSiteListDTO datum : data) {
+                siteIds.add(datum.getId());
+            }
+        }else {
+            siteIds.add(mongoChargingOrderQuery.getSiteId());
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }else{
+            if (roleType == 2){
+                List<Integer> integers = new ArrayList<>();
+                for (Integer siteId : siteIds) {
+                    // 校验有没有这个站点的权限
+                    List<Boolean> t1= partnerClient.watchChargingOrder(sysUser.getObjectId(),siteId).getData();
+                    Boolean b = t1.get(1);
+                    if (b){
+                        integers.add(siteId);
+                    }
+                }
+                siteIds = integers;
+            }
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        mongoChargingOrderQuery.setSiteIds(siteIds);
         mongoChargingOrderQuery.setPageSize(10);
         R<UploadRealTimeMonitoringPageData> all = uploadRealTimeMonitoringDataClient.getAll(mongoChargingOrderQuery);
         UploadRealTimeMonitoringPageData data1 = all.getData();
 
         List<ChargingOrderAndUploadRealTimeMonitoringDataDto> dtos = new ArrayList<>();
         Map<String,ChargingOrderVO> map  = new HashMap<>();
+
         for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1.getRecords()) {
+            if (roleType==2){
+                List<Boolean> data = partnerClient.watchChargingOrder(sysUser.getObjectId(), uploadRealTimeMonitoringData.getSiteId()).getData();
+                uploadRealTimeMonitoringData.setAuthInfo(data.get(0));
+                uploadRealTimeMonitoringData.setAuthDelete(data.get(1));
+            }
             ChargingOrderAndUploadRealTimeMonitoringDataDto dataDto = new ChargingOrderAndUploadRealTimeMonitoringDataDto();
             ChargingOrderQuery dto = new ChargingOrderQuery();
             dto.setCode(uploadRealTimeMonitoringData.getTransaction_serial_number());
@@ -846,9 +1056,9 @@
 
         return R.ok(page);
     }
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/chargeOrderMonitoring/del"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/watch/deletes")
     @ApiOperation(value = "监控订单-删除", tags = {"管理后台-订单管理"})
@@ -875,18 +1085,18 @@
         return R.ok(chargingOrderService.getOne(Wrappers.lambdaQuery(TChargingOrder.class)
                 .eq(TChargingOrder::getCode,code)));
     }
-
-
-
-
-
+    
+    
+    
+    
+    @RequiresPermissions(value = {"/chargingOperationAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/charging/statistics")
     @ApiOperation(value = "统计,充电订单分析", tags = {"管理后台-数据分析-充电运营分析"})
     public R<TCharingOrderMapVO> watchChargingOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
         List<Integer> siteIds =new ArrayList<>();
         if (statisticsQueryDto.getSiteId()==null) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -895,6 +1105,7 @@
         }else {
             siteIds.add(statisticsQueryDto.getSiteId());
         }
+        if (siteIds.isEmpty())siteIds.add(-1);
         TCharingOrderMapVO tCharingOrderMapVO = new TCharingOrderMapVO();
 
 
@@ -1118,7 +1329,7 @@
     public R<TCharingOrderPowerMapVO> power(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
         List<Integer> siteIds = new ArrayList<>();
         if (statisticsQueryDto.getSiteId() == null) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -1140,17 +1351,32 @@
         return R.ok(tCharingOrderPowerMapVO);
 
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/chargingUserAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/charging/users")
     @ApiOperation(value = "除电站流量外", tags = {"管理后台-数据分析-充电用户分析"})
     public R<TCharingUserMapVO> users(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
+        Long userId = tokenService.getLoginUser().getUserid();
+
+        List<Integer> siteIds = new ArrayList<>();
+        if (statisticsQueryDto.getSiteId()==null){
+            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+            for (GetSiteListDTO datum : data) {
+                siteIds.add(datum.getId());
+            }
+        }else {
+            siteIds.add(statisticsQueryDto.getSiteId());
+        }
+        if (siteIds.isEmpty())siteIds.add(-1);
+        statisticsQueryDto.setSiteIds(siteIds);
+        
 
         TCharingUserMapVO tCharingUserMapVO = new TCharingUserMapVO();
         //上方折现
         if (statisticsQueryDto.getDayType()==1){
-        List<Map<String,Object>> map = chargingOrderService.usersDay();
+        List<Map<String,Object>> map = chargingOrderService.usersDay(statisticsQueryDto);
 
             List<Map<String, Object>> charMap = new ArrayList<>();
             // 生成从 "00:00" 到 "23:00" 的时间数据
@@ -1280,11 +1506,13 @@
             brands.add(objectMap.get("vehicle_brand").toString());
         }
 
-        Long count = chargingOrderService.countCar(brands);
-        Map<String, Object> others = new HashMap<>();
-        others.put("vehicle_brand","其他");
-        others.put("counts",count);
-        carBrandMap.add(others);
+        if (carBrandMap.size()>=5) {
+            Long count = chargingOrderService.countCar(brands);
+            Map<String, Object> others = new HashMap<>();
+            others.put("vehicle_brand", "其他");
+            others.put("counts", count);
+            carBrandMap.add(others);
+        }
         //本地车数量
         Map<String,Object> localCarMap = chargingOrderService.countLocalCar();
 
@@ -1298,13 +1526,16 @@
         return R.ok(tCharingUserMapVO);
 
     }
+    
+    
+    @RequiresPermissions(value = {"/chargingUserAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/charging/sites")
     @ApiOperation(value = "电站评价", tags = {"管理后台-数据分析-充电用户分析"})
     public R<TCharingUserEvaluateVO> sites(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
         List<Integer> siteIds =new ArrayList<>();
         if (statisticsQueryDto.getSiteId()==null) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -1341,14 +1572,16 @@
         //流量
         return R.ok(tCharingUserEvaluateVO);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/operationMaintenanceAnalysis"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/charging/equipment")
     @ApiOperation(value = "电站评价", tags = {"管理后台-数据分析-设备运维分析"})
     public R<TCharingUserEquimentVO> equipment(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
         List<Integer> siteIds =new ArrayList<>();
         if (statisticsQueryDto.getSiteId()==null||statisticsQueryDto.getSiteId()==0) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -1477,14 +1710,16 @@
         // 格式化为两位小数
         return Double.parseDouble(DF.format(average));
     }
-
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/work/charge")
     @ApiOperation(value = "上方充电数据统计", tags = {"管理后台-工作台"})
     public R<TCharingWorkVO> workCharge(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
         List<Integer> siteIds = new ArrayList<>();
         if (statisticsQueryDto.getSiteId() == null) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -1520,16 +1755,17 @@
         tCharingWorkVO.setTotalChargingCapacity(totalChargingCapacity);
         return R.ok(tCharingWorkVO);
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/work/chargeDetail")
     @ApiOperation(value = "运营情况", tags = {"管理后台-工作台"})
     public R workCharge(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
         List<Integer> siteIds = new ArrayList<>();
         if (statisticsQueryDto.getSiteId() == null) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -1644,17 +1880,18 @@
         }
         return null;
     }
-
-
-
-
+    
+    
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping(value = "/work/use")
     @ApiOperation(value = "利用率", tags = {"管理后台-工作台"})
     public R workUse(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
         List<Integer> siteIds = new ArrayList<>();
         if (statisticsQueryDto.getSiteId() == null) {
-            Long userId = SecurityUtils.getUserId();
+            Long userId = tokenService.getLoginUser().getUserid();
             //获取当前登录的siteIds
             List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
             for (GetSiteListDTO datum : data) {
@@ -1706,8 +1943,9 @@
 
 
     }
-
     
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/work/shopOrder")
     @ApiOperation(value = "购物订单统计", tags = {"管理后台-工作台"})
@@ -1719,7 +1957,9 @@
         counts.add(count1);
         return R.ok(counts);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/work/invoice")
     @ApiOperation(value = "开票统计", tags = {"管理后台-工作台"})
@@ -1731,7 +1971,8 @@
         counts.add(count1);
         return R.ok(counts);
     }
-
+    
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping(value = "/work/users/count")
     @ApiOperation(value = "用户数量", tags = {"管理后台-工作台"})
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
index 7d688c5..354ef74 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -14,6 +14,8 @@
 import com.ruoyi.common.core.dto.ExchangeBackDto;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.model.TExchangeOrder;
 import com.ruoyi.order.api.model.TShoppingOrder;
@@ -71,8 +73,16 @@
     private GoodsClient goodsClient;
     @Resource
     private CouponClient couponClient;
-
-
+    
+    @Resource
+    private SysUserClient sysUserClient;
+    
+    @Resource
+    private TokenService tokenService;
+    
+    
+    
+    @RequiresPermissions(value = {"/exchangeOrder"}, logical = Logical.OR)
     @PostMapping("/getExchangeOrderList")
     @ApiOperation(value = "列表查询", tags = {"管理后台-兑换订单"})
     public AjaxResult<PageInfo<TExchangeOrder>> getExchangeOrderList(@RequestBody ShoppingOrderQuery query) {
@@ -96,8 +106,10 @@
         PageInfo<TExchangeOrder> res = exchangeOrderService.pageList(query);
         return AjaxResult.success(res);
     }
-    @Resource
-    private SysUserClient sysUserClient;
+    
+    
+    
+    @RequiresPermissions(value = {"/exchangeOrder/deliver_goods"}, logical = Logical.OR)
     @GetMapping("/getShoppingOrderInfoById")
     @ApiOperation(value = "根据订单id查看订单详情", tags = {"管理后台-兑换订单"})
     public AjaxResult<TExchangeOrder> getShoppingOrderList(String id) {
@@ -137,14 +149,19 @@
         }
         return AjaxResult.success(byId);
     }
-    @Resource
-    private TokenService tokenService;
+    
+    
+    
+    @RequiresPermissions(value = {"/exchangeOrder/del"}, logical = Logical.OR)
     @GetMapping("/deleteShoppingOrder")
     @ApiOperation(value = "批量删除订单", tags = {"管理后台-兑换订单"})
     public AjaxResult<TExchangeOrder> deleteShoppingOrder(String ids) {
         exchangeOrderService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/exchangeOrder/cancel"}, logical = Logical.OR)
     @GetMapping("/cancelShoppingOrder")
     @ApiOperation(value = "取消订单", tags = {"管理后台-兑换订单"})
     public AjaxResult cancelShoppingOrder(String id) {
@@ -159,6 +176,10 @@
         appUserClient.refundPoints(byId.getAppUserId()+"-"+points);
         return AjaxResult.success();
     }
+    
+    
+    
+    @RequiresPermissions(value = {"/exchangeOrder/deliver_goods"}, logical = Logical.OR)
     @GetMapping("/consignerShoppingOrder")
     @ApiOperation(value = "发货", tags = {"管理后台-兑换订单"})
     public AjaxResult consignerShoppingOrder(String id,String companyName,String code) {
@@ -377,7 +398,11 @@
     @ApiOperation(value = "获取兑换订单详情", tags = {"小程序-兑换记录"})
     public AjaxResult<ExchangeOrderGoodsInfo> getGoodsExchangeOrder(@PathVariable String id){
         ExchangeOrderGoodsInfo goodsExchangeOrder = exchangeOrderService.getGoodsExchangeOrder(id);
-
+        TExchangeOrder exchangeOrder = exchangeOrderService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!exchangeOrder.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         return AjaxResult.success(goodsExchangeOrder);
     }
     
@@ -386,6 +411,10 @@
     @ApiOperation(value = "确认收货操作", tags = {"小程序-兑换记录"})
     public AjaxResult confirmReceipt(@PathVariable String id){
         TExchangeOrder tExchangeOrder = exchangeOrderService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!tExchangeOrder.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         if(tExchangeOrder.getStatus() == 3){
             return AjaxResult.error("不能重复确认收货");
         }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
index 0322582..ec9cff0 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
@@ -1,28 +1,42 @@
 package com.ruoyi.order.controller;
 
 
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.TOrderAppealQuery;
+import com.ruoyi.order.api.vo.ChargingOrderVO;
 import com.ruoyi.order.api.vo.TOrderAppealVO;
 import com.ruoyi.order.dto.ManageFeedbackDto;
 import com.ruoyi.order.dto.ManageOrderAppealQuery;
 import com.ruoyi.order.service.*;
+import com.ruoyi.other.api.feignClient.RoleSiteClient;
+import com.ruoyi.other.api.feignClient.UserSiteClient;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.ruoyi.system.api.feignClient.SysUserRoleClient;
+import com.ruoyi.system.api.model.SysUserRoleVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.Arrays;
+import java.util.*;
 
 /**
  * <p>
@@ -49,39 +63,139 @@
 
     @Resource
     private TVipOrderService vipOrderService;
-
+    
+    @Resource
+    private SysUserClient sysUserClient;
+    
+    @Resource
+    private PartnerClient partnerService;
+    
+    @Resource
+    private UserSiteClient userSiteClient;
+    
+    @Resource
+    private RoleSiteClient roleSiteClient;
+    
+    @Resource
+    private SysUserRoleClient sysUserRoleClient;
+    @Resource
+    private PartnerClient partnerClient;
 
     @Autowired
     public TOrderAppealController(TOrderAppealService orderAppealService, TokenService tokenService) {
         this.orderAppealService = orderAppealService;
         this.tokenService = tokenService;
     }
+    @Resource
+    private SiteClient siteClient;
+    
+    
+    @RequiresPermissions(value = {"/appealOrder"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "列表")
     @PostMapping(value = "/manage/pageList")
     public R<Page<TOrderAppeal>> managePageList(@RequestBody ManageOrderAppealQuery manageOrderAppealQuery) {
-
+        Integer pageCurr = manageOrderAppealQuery.getPageCurr();
+        Integer pageSize = manageOrderAppealQuery.getPageSize();
         Page<TOrderAppeal> page = orderAppealService.lambdaQuery().eq(manageOrderAppealQuery.getStatus() != null, TOrderAppeal::getStatus, manageOrderAppealQuery.getStatus())
                 .like(manageOrderAppealQuery.getCode() != null, TOrderAppeal::getCode, manageOrderAppealQuery.getCode())
                 .like(manageOrderAppealQuery.getPhone() != null, TOrderAppeal::getPhone, manageOrderAppealQuery.getPhone())
                 .eq(manageOrderAppealQuery.getOrderType() != null, TOrderAppeal::getOrderType, manageOrderAppealQuery.getOrderType())
                 .in(TOrderAppeal::getOrderType, 1, 2)
                 .orderByDesc(TOrderAppeal::getCreateTime)
-                .page(Page.of(manageOrderAppealQuery.getPageCurr(), manageOrderAppealQuery.getPageSize()));
-
+                .page(Page.of(1, 99999999));
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        List<TOrderAppeal> res = new ArrayList<>();
         for (TOrderAppeal record : page.getRecords()) {
-            record.setUid(record.getId().toString());
+            record.setUid(record.getId()+"");
+            if (record.getOrderType()!=1){
+                res.add(record);
+                continue;
+            }
+            if(roleType!=2){
+                res.add(record);
+                continue;
+            }
+            if (roleType == 2 && record.getOrderType()==1){
+                List<Integer> siteIds = new ArrayList<>();
+                    if (sysUser.getUserId() != null){
+                        List<GetSiteListDTO> data = siteClient.getSiteListByUserId(sysUser.getUserId()).getData();
+                        for (GetSiteListDTO datum : data) {
+                            siteIds.add(datum.getId());
+                        }
+                    }
+                if (siteIds.isEmpty()){
+                    siteIds.add(-1);
+                }else{
+                    List<Integer> integers = new ArrayList<>();
+                    for (Integer siteId : siteIds) {
+                        // 校验有没有这个站点的权限
+                        List<Boolean> t1= partnerClient.managePageListMenu(sysUser.getObjectId(),siteId).getData();
+
+                        Boolean b = t1.get(2);
+                        if (b){
+                            integers.add(siteId);
+                        }
+                    }
+                    siteIds = integers;
+                }
+                if (siteIds.isEmpty()){
+                    siteIds.add(-1);
+                }
+                    TChargingOrder byId = chargingOrderService.getById(record.getOrderId());
+                    if (byId!=null&&siteIds.contains(byId.getSiteId())){
+                        res.add(record);
+                        // 校验有没有这个站点的权限
+                        List<Boolean> data = partnerClient.managePageListMenu(sysUser.getObjectId(), byId.getSiteId()).getData();
+                        record.setAuthInfo(data.get(0));
+                        record.setAuthHandle(data.get(1));
+                    }
+                    if (byId==null){
+                        record.setAuthInfo(false);
+                        record.setAuthHandle(false);
+                    }
+            }
         }
+        List<TOrderAppeal> res1 = testing4(res.size(), pageCurr, pageSize, res);
+        page.setCurrent(pageCurr);
+        page.setSize(pageSize);
+        page.setTotal(res.size());
+        page.setRecords(res1);
         return R.ok(page);
-
-
     }
+    public static List<TOrderAppeal> testing4(long total, long current, long size, List<TOrderAppeal> str){
+        List<TOrderAppeal> result = new ArrayList<>();
+        //获取初始化分页结构
+        com.ruoyi.order.util.Page<TOrderAppeal> page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1);
+        //获取集合下标初始值
+        long startIndex = page.getStartIndex();
+        //获取集合下标结束值
+        long endInddex = 0;
+        if(startIndex + page.getCurrent() >= total || size > total){
+            endInddex = total;
+        }else {
+            endInddex = Math.min(startIndex + page.getSize(), total);
+        }
+        //如果输入的开始查询下标大于集合大小,则查询为空值
+        if(startIndex > total){
+            result = Collections.emptyList();
+        }else{
+            result = str.subList((int)startIndex,(int)endInddex);
+        }
+        return result;
+    }
+    
+    @RequiresPermissions(value = {"/appealOrder/del"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "删除")
     @DeleteMapping (value = "/manage/delete")
     public R<Page<TOrderAppeal>> delete(String ids) {
         orderAppealService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return R.ok();
     }
-
+    
+    
+    
+    @RequiresPermissions(value = {"/appealOrder/select", "/appealOrder/handle"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "后台-订单管理-订单申诉")
     @PostMapping(value = "/manage/feedback")
     public R manageFeedback(@RequestBody ManageFeedbackDto manageFeedbackDto) {
@@ -109,6 +223,11 @@
     @GetMapping(value = "/getDetailById")
     @ApiOperation(tags = {"小程序-订单申诉"},value = "查询订单申诉详情")
     public AjaxResult<TOrderAppealVO> getDetailById(String id) {
+        TOrderAppeal orderAppeal = orderAppealService.getById(id);
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        if(!orderAppeal.getAppUserId().equals(userId)){
+            return AjaxResult.error("权限不足");
+        }
         return AjaxResult.ok(orderAppealService.getDetailById(id));
     }
     
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
index ef11ca4..5723d6b 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
@@ -4,6 +4,9 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.model.TOrderEvaluate;
 import com.ruoyi.order.api.model.TOrderEvaluateTag;
 import com.ruoyi.order.api.query.TOrderEvaluateQuery;
@@ -43,6 +46,10 @@
     @Resource
     private TOrderEvaluateTagService orderEvaluateTagService;
     
+    @Resource
+    private TokenService tokenService;
+    
+    
     
 
 
@@ -63,7 +70,7 @@
     
     
     
-    
+    @RequiresPermissions(value = {"/chargeEvaluation/list"}, logical = Logical.OR)
     @PostMapping(value = "/getPageList")
     @ApiOperation(value = "获取充电评价列表", tags = {"管理后台-充电评价"})
     public AjaxResult<PageInfo<GetOrderEvaluatePageListDTO>> getPageList(@RequestBody GetOrderEvaluatePageList pageList){
@@ -72,7 +79,7 @@
     }
     
     
-    
+    @RequiresPermissions(value = {"/chargeEvaluation/del"}, logical = Logical.OR)
     @DeleteMapping(value = "/delOrderEvaluate/{id}")
     @ApiOperation(value = "删除充电评价", tags = {"管理后台-充电评价"})
     public AjaxResult delOrderEvaluate(@PathVariable("id") Long id){
@@ -84,7 +91,7 @@
     
     
     
-    
+    @RequiresPermissions(value = {"/chargeEvaluation/reply"}, logical = Logical.OR)
     @PostMapping(value = "/replyEvaluation")
     @ApiOperation(value = "充电评价回复", tags = {"管理后台-充电评价"})
     public AjaxResult replyEvaluation(@RequestBody ReplyEvaluationVO vo){
@@ -104,7 +111,7 @@
     
     
     
-    
+    @RequiresPermissions(value = {"/chargeEvaluation/del"}, logical = Logical.OR)
     @DeleteMapping(value = "/delOrderEvaluateReply/{id}")
     @ApiOperation(value = "删除充电评价回复", tags = {"管理后台-充电评价"})
     public AjaxResult delOrderEvaluateReply(@PathVariable("id") Long id){
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
index 5637f6c..bfef7f3 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
@@ -9,6 +9,9 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.model.TOrderInvoice;
 import com.ruoyi.order.api.query.TOrderInvoiceQuery;
 import com.ruoyi.order.api.vo.TOrderInvoiceVO;
@@ -53,6 +56,9 @@
 	@Resource
 	private TOrderInvoiceService orderInvoiceService;
 	
+	@Resource
+	private TokenService tokenService;
+	
 	
 	
 	
@@ -62,13 +68,18 @@
 	public AjaxResult addOrderInvoice(@RequestBody AddOrderInvoice addOrderInvoice){
 		return orderInvoiceService.addOrderInvoice(addOrderInvoice);
 	}
-
+	
+	
+	@RequiresPermissions(value = {"/invoiceManagement"}, logical = Logical.OR)
 	@PostMapping("/pageList")
 	@ApiOperation(value = "查询开票分页列表", tags = {"管理后台-发票管理"})
 	public AjaxResult<PageInfo<TOrderInvoiceVO>> pageList(@RequestBody TOrderInvoiceQuery query){
 		return AjaxResult.success(orderInvoiceService.pageList(query));
 	}
-
+	
+	
+	
+	@RequiresPermissions(value = {"/invoiceManagement/accept_hear_case"}, logical = Logical.OR)
 	@GetMapping("/uploadPdf")
 	@ApiOperation(value = "上传发票", tags = {"管理后台-发票管理"})
 	public AjaxResult<String> uploadPdf(@RequestParam("id") Long id,
@@ -175,7 +186,9 @@
 		}
 		return AjaxResult.success();
 	}
-
+	
+	
+	@RequiresPermissions(value = {"/invoiceManagement"}, logical = Logical.OR)
 	@PostMapping("/statusCount")
 	@ApiOperation(value = "查询开票状态数量", tags = {"管理后台-发票管理"})
 	public AjaxResult<Map<String,Integer>> statusCount(@RequestBody TOrderInvoiceQuery query){
@@ -185,6 +198,7 @@
 	/**
 	 * 发票管理导出
 	 */
+	@RequiresPermissions(value = {"/invoiceManagement/export"}, logical = Logical.OR)
 	@ApiOperation(value = "发票管理导出", tags = {"管理后台-发票管理"})
 	@Log(title = "发票管理导出", businessType = BusinessType.EXPORT)
 	@PutMapping("/export")
@@ -238,6 +252,11 @@
 	@GetMapping("/getMyOrderInvoiceInfo/{id}")
 	@ApiOperation(value = "获取开票记录详情", tags = {"小程序-充电发票"})
 	public AjaxResult<MyOrderInvoiceInfo> getMyOrderInvoiceInfo(@PathVariable String id){
+		TOrderInvoice orderInvoice = orderInvoiceService.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!orderInvoice.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
 		MyOrderInvoiceInfo myOrderInvoiceInfo = orderInvoiceService.getMyOrderInvoiceInfo(id);
 		return AjaxResult.success(myOrderInvoiceInfo);
 	}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
index f7268d3..9f1b596 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -17,6 +17,8 @@
 import com.ruoyi.common.core.utils.OrderCodeUtil;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.model.TChargingOrderRefund;
 import com.ruoyi.order.api.model.TExchangeOrder;
@@ -113,6 +115,7 @@
 		}
 	}
 	
+	@RequiresPermissions(value = {"/shoppingOrder"}, logical = Logical.OR)
 	@PostMapping("/getShoppingOrderList")
 	@ApiOperation(value = "列表查询", tags = {"管理后台-购物订单"})
 	public AjaxResult<PageInfo<TShoppingOrder>> getShoppingOrderList(@RequestBody ShoppingOrderQuery query) {
@@ -136,6 +139,7 @@
 		return AjaxResult.success(res);
 	}
 	
+	@RequiresPermissions(value = {"/shoppingOrder/deliver_goods"}, logical = Logical.OR)
 	@GetMapping("/getShoppingOrderInfoById")
 	@ApiOperation(value = "根据订单id查看订单详情", tags = {"管理后台-购物订单"})
 	public AjaxResult<TShoppingOrder> getShoppingOrderList(String id) {
@@ -176,13 +180,17 @@
 		return AjaxResult.success(byId);
 	}
 	
+	
+	@RequiresPermissions(value = {"/shoppingOrder/del"}, logical = Logical.OR)
 	@GetMapping("/deleteShoppingOrder")
 	@ApiOperation(value = "批量删除订单", tags = {"管理后台-购物订单"})
 	public AjaxResult<TShoppingOrder> deleteShoppingOrder(String ids) {
 		shoppingOrderService.removeBatchByIds(Arrays.asList(ids.split(",")));
 		return AjaxResult.success();
 	}
-
+	
+	
+	@RequiresPermissions(value = {"/shoppingOrder/cancel"}, logical = Logical.OR)
 	@GetMapping("/cancelShoppingOrder")
 	@ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"})
 	public AjaxResult cancelShoppingOrder(String id) {
@@ -264,6 +272,8 @@
 		return AjaxResult.success();
 	}
 	
+	
+	@RequiresPermissions(value = {"/shoppingOrder/deliver_goods"}, logical = Logical.OR)
 	@GetMapping("/consignerShoppingOrder")
 	@ApiOperation(value = "发货", tags = {"管理后台-购物订单"})
 	public AjaxResult consignerShoppingOrder(String id, String companyName, String code) {
@@ -304,8 +314,27 @@
 	
 	
 	@GetMapping("/getMyShoppingOrderInfo/{id}")
-	@ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单", "管理后台-支付订单-订单信息"})
+	@ApiOperation(value = "获取购买订单详情", tags = {"管理后台-支付订单-订单信息"})
 	public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id) {
+		TShoppingOrder shoppingOrder = shoppingOrderService.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!shoppingOrder.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
+		MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id);
+		return AjaxResult.success(info);
+	}
+	
+	
+	
+	@GetMapping("/getMyShoppingOrderInfo1/{id}")
+	@ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单"})
+	public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo1(@PathVariable String id) {
+		TShoppingOrder shoppingOrder = shoppingOrderService.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!shoppingOrder.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
 		MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id);
 		return AjaxResult.success(info);
 	}
@@ -315,6 +344,10 @@
 	@ApiOperation(value = "确认收货操作", tags = {"小程序-商城购买订单"})
 	public AjaxResult confirmReceipt(@PathVariable String id) {
 		TShoppingOrder shoppingOrder = shoppingOrderService.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!shoppingOrder.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
 		if (shoppingOrder.getStatus() == 3) {
 			return AjaxResult.error("不能重复确认收货");
 		}
@@ -334,6 +367,11 @@
 	@PutMapping("/cancelOrder/{id}")
 	@ApiOperation(value = "取消订单操作", tags = {"小程序-商城购买订单"})
 	public AjaxResult cancelOrder(@PathVariable String id) {
+		TShoppingOrder shoppingOrder = shoppingOrderService.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!shoppingOrder.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
+		}
 		return shoppingOrderService.cancelOrder(id);
 	}
 	
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
index e174a7d..abe14db 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -12,6 +12,8 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.order.api.model.TExchangeOrder;
 import com.ruoyi.order.api.model.TShoppingOrder;
 import com.ruoyi.order.api.model.TVipOrder;
@@ -55,6 +57,12 @@
     private TVipOrderService vipOrderService;
     @Resource
     private AppUserClient appUserClient;
+    @Resource
+    private OtherClient otherClient;
+    
+    
+    
+    @RequiresPermissions(value = {"/vipOrder"}, logical = Logical.OR)
     @PostMapping("/getVipOrderList")
     @ApiOperation(value = "列表查询", tags = {"管理后台-会员订单"})
     public AjaxResult<PageInfo<TVipOrder>> getVipOrderList(@RequestBody VipShoppingOrderQuery query) {
@@ -67,6 +75,9 @@
         PageInfo<TVipOrder> res = vipOrderService.pageList(query);
         return AjaxResult.success(res);
     }
+    
+    
+    @RequiresPermissions(value = {"/vipOrder/add"}, logical = Logical.OR)
     @PostMapping("/addVipOrder")
     @ApiOperation(value = "添加会员订单", tags = {"管理后台-会员订单"})
     public R<Long> addVipOrder(@RequestBody TVipOrder dto) {
@@ -81,12 +92,17 @@
         vipOrderService.saveOrUpdate(dto);
         return R.ok(dto.getId());
     }
+    
+    
+    @RequiresPermissions(value = {"/vipOrder/del"}, logical = Logical.OR)
     @GetMapping("/deleteVipOrder")
     @ApiOperation(value = "批量删除会员订单", tags = {"管理后台-会员订单"})
     public AjaxResult deleteVipOrder(String id) {
         vipOrderService.removeBatchByIds(Arrays.asList(id.split(",")));
         return AjaxResult.success();
     }
+    
+    
 
     @PostMapping("/callBack")
     public R callBack(@RequestParam("code")String code,@RequestParam("outTradeNo")String outTradeNo){
@@ -109,8 +125,7 @@
     }
 
 
-    @Resource
-    private OtherClient otherClient;
+    
 
     @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "导出")
     @PutMapping(value = "/export")
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java
index 0c028e2..6898294 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java
@@ -6,6 +6,7 @@
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class ChargingStatisticsQueryDto {
@@ -20,4 +21,5 @@
     @ApiModelProperty("工作台用查询参数")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GTM+8")
     private LocalDateTime selectDate;
+    private List<Integer> siteIds;
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java
index 37ac8db..a052c96 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java
@@ -37,4 +37,8 @@
 	private List<String> tags;
 	@ApiModelProperty("回复内容")
 	private String recover;
+	@ApiModelProperty("回复按钮权限")
+	private Boolean authReply;
+	@ApiModelProperty("删除按钮权限")
+	private Boolean authDelete;
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java
index ad43d21..cfc9ff3 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java
@@ -13,6 +13,8 @@
     private String id;
     @ApiModelProperty("1充电订单2购物订单3vip订单4停车订单")
     private Integer type;
+    @ApiModelProperty("站点id")
+    private Integer siteId;
     @ApiModelProperty("订单编号")
     private String code;
     @ApiModelProperty("订单标题")
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
index a1322f4..5c7d795 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -65,7 +65,7 @@
 
 	List<SixCircleDto> circle(@Param("siteIds")List<Integer> siteIds,@Param("sixBefore")LocalDate sixBefore);
 
-	Map<String, Object> countAll(@Param("sixBefore")LocalDate sixBefore);
+	Map<String, Object> countAll(@Param("sixBefore")LocalDate sixBefore,@Param("siteIds")List<Integer> siteIds);
 
     List<Map<String, Object>> getSumByType(@Param("chargingOrderIds")List<Long> chargingOrderIds);
 
@@ -88,7 +88,7 @@
 
     List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(@Param("siteIds")List<Integer> siteIds);
 
-    List<Map<String, Object>> usersDay();
+    List<Map<String, Object>> usersDay(@Param("statisticsQueryDto")ChargingStatisticsQueryDto statisticsQueryDto);
     List<Map<String, Object>> usersDay1();
 
 	List<Map<String, Object>> usersByQuery(@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java
index 260ee56..993c758 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java
@@ -29,5 +29,5 @@
 
     List<TSettlementConfirm> settlementList(@Param("pageInfo") PageInfo<TSettlementConfirm> pageInfo, @Param("req") SettlementListQuery dto);
 
-    List<TSettlementConfirm> settlementTotal(@Param("time") String time);
+    List<TSettlementConfirm> settlementTotal(@Param("time") String time,@Param("siteIds")List<Integer> siteIds);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
index 13f6333..097546f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -140,7 +140,7 @@
 
 	List<SixCircleDto> circle(List<Integer> siteIds,LocalDate sixBefore);
 
-	Map<String, Object> countAll(LocalDate sixBefore);
+	Map<String, Object> countAll(LocalDate sixBefore,List<Integer> siteIds);
 
     List<Map<String, Object>> getSumByType(List<Long> chargingOrderIds);
 
@@ -178,6 +178,12 @@
 	 */
 	void endChargeBillingCharge(TransactionRecordMessageVO vo);
 	
+//	/**
+//	 * 停止充电返回账单后计算费用
+//	 * @param vo
+//	 */
+//	void endChargeBillingCharge1(TransactionRecordMessageVO vo);
+	
 	
 
 	/**
@@ -194,7 +200,7 @@
 
 	List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(List<Integer> siteIds);
 
-	List<Map<String, Object>> usersDay();
+	List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto);
 	List<Map<String, Object>> usersDay1();
 
 	List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto);
@@ -231,6 +237,7 @@
 	PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto);
 
     SettlementTotalVO settlementTotal(String time);
+    SettlementTotalVO settlementTotalR(String time,Long userId);
 
 	List<Map<String, Object>> countBySource(List<Integer> siteIds,ChargingStatisticsQueryDto statisticsQueryDto);
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
index 12dc444..c5eed9e 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -4,13 +4,18 @@
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.account.api.model.TAppUserCar;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
 import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
 import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
+import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.TChargingOrder;
@@ -26,6 +31,9 @@
 import com.ruoyi.order.mapper.TChargingOrderMapper;
 import com.ruoyi.order.service.TChargingBillService;
 import com.ruoyi.order.service.TChargingOrderRefundService;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.ruoyi.system.api.model.SysUserRoleVo;
 import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
 import org.omg.CORBA.PRIVATE_MEMBER;
 import org.springframework.stereotype.Service;
@@ -38,9 +46,7 @@
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -53,7 +59,8 @@
  */
 @Service
 public class TChargingBillServiceImpl extends ServiceImpl<TChargingBillMapper, TChargingBill> implements TChargingBillService {
-
+    @Resource
+    private SysUserClient sysUserClient;
     @Resource
     private TChargingOrderMapper chargingOrderList;
     @Resource
@@ -70,6 +77,12 @@
     private AppUserCarClient appUserCarClient;
     @Resource
     private TChargingOrderRefundService chargingOrderRefundService;
+    @Resource
+    private TokenService tokenService;
+    @Resource
+    private PartnerClient partnerClient;
+
+
     @Override
     public ChargingBillVO chargingBillList1(ChargingListQuery dto) {
         if (dto.getState()!=null){
@@ -88,11 +101,48 @@
             startTime1 = split[0];
             startTime2 = split[1];
         }
+        Long userId = tokenService.getLoginUser().getUserid();
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        List<Integer> siteIds = new ArrayList<>();
+            //如果没传siteId,获取当前登陆人所有的siteIds
+            if (dto.getSiteId()==null){
+                if (userId != null){
+                    List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                    for (GetSiteListDTO datum : data) {
+                        siteIds.add(datum.getId());
+                    }
+                }
+            }else {
+                siteIds.add(dto.getSiteId());
+            }
+            if (siteIds.isEmpty()){
+                siteIds.add(-1);
+            }else{
+                if (roleType == 2){
+                    List<Integer> integers = new ArrayList<>();
+                    for (Integer siteId : siteIds) {
+                        // 校验有没有这个站点的权限
+                        List<Boolean> t1= partnerClient.getAccountMenu(sysUser.getObjectId(),siteId).getData();
+
+                        Boolean b = t1.get(1);
+                        if (b){
+                            integers.add(siteId);
+                        }
+                    }
+                    siteIds = integers;
+                }
+            }
+            if (siteIds.isEmpty())siteIds.add(-1);
+            dto.setSiteIds(siteIds);
+
+
         PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
         PageInfo<ChargingBillListVO> pageInfo1 = new PageInfo<>(1,9999999);
         List<ChargingBillListVO> list = this.baseMapper.chargingBillList1(pageInfo,dto,startTime1,startTime2);
         List<ChargingBillListVO> list1 = this.baseMapper.chargingBillList1(pageInfo1,dto,startTime1,startTime2);
-        chargingBillVO.setOrderCount(list1.size());
+
         BigDecimal paymentAmountTotal = new BigDecimal("0");
         BigDecimal orderAmountTotal = new BigDecimal("0");
         BigDecimal refundAmountTotal = new BigDecimal("0");
@@ -103,7 +153,15 @@
         BigDecimal chargingCapacityTotal = new BigDecimal("0");
         BigDecimal discountTotal = new BigDecimal("0");
         int orderCount = 0;
+
         for (ChargingBillListVO chargingBillListVO : list) {
+            if (roleType==2){
+                List<Boolean> data = partnerClient.getAccountMenu(sysUser.getObjectId(), chargingBillListVO.getSiteId()).getData();
+                chargingBillListVO.setAuthDownLoad(data.get(0));
+                if (chargingBillListVO.getType()==1){
+                    continue;
+                }
+            }
             String temp = "";
             String temp1 = "";
             switch (chargingBillListVO.getType()){
@@ -130,20 +188,16 @@
 
             chargingBillListVO.setUid(chargingBillListVO.getId().toString());
             // 根据账单的出账时间 查询上个月的充电订单
-//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
-            // todo 临时修改为查询昨天的充电订单
-            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
+            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
             // 账单周期
             chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
             // 获取 LocalDate 对象
             LocalDate date = localDate.toLocalDate();
 //            // 获取该月份的第一天
-//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
-//            // 获取该月份的最后一天
-//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
-            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
-            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
-            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
+            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+            // 获取该月份的最后一天
+            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
             QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                     .between("create_time", firstDayOfMonth, lastDayOfMonth)
                     .eq("status", 5)
@@ -154,6 +208,7 @@
             List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
             int chargingSecond = 0;
             BigDecimal paymentAmount = new BigDecimal("0");
+            BigDecimal rechargeAmount = new BigDecimal("0");
             BigDecimal orderAmount = new BigDecimal("0");
             BigDecimal electrovalence = new BigDecimal("0");
             BigDecimal serviceCharge = new BigDecimal("0");
@@ -265,7 +320,7 @@
                 if (data3!=null)tChargingOrder.setUserName(data3.getName());
                 // 累加实收金额 支付结算金额
                 if (tChargingOrder.getChargeAmount()!=null){
-                    paymentAmount = paymentAmount.add(tChargingOrder.getChargeAmount());
+                    paymentAmount = paymentAmount.add(tChargingOrder.getRechargeAmount());
                 }
                 // 总金额
                 if (tChargingOrder.getOrderAmount()!=null){
@@ -274,6 +329,9 @@
                 // 累加累计电费
                 if (tChargingOrder.getElectrovalence()!=null){
                     electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
+                }
+                if (tChargingOrder.getRechargeAmount()!=null){
+                    rechargeAmount = rechargeAmount.add(tChargingOrder.getRechargeAmount());
                 }
                 List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2)
                         .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list();
@@ -288,7 +346,8 @@
                 }
                 // 累加平台手续费
                 if (tChargingOrder.getOrderAmount()!=null){
-                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006)));
+                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006))
+                            .setScale(2,BigDecimal.ROUND_DOWN));
                 }
                 // 累加平台分佣
                 if (tChargingOrder.getSharingAmount()!=null){
@@ -311,7 +370,7 @@
                 chargingBillVO.setPaymentAmount(BigDecimal.ZERO);
             }
 
-            chargingBillListVO.setPaymentAmount(paymentAmount);
+            chargingBillListVO.setPaymentAmount(rechargeAmount);
             chargingBillListVO.setOrderAmount(paymentAmount == null?BigDecimal.ZERO:orderAmount.subtract(sharingAmount).subtract(commissionAmount));
             chargingBillListVO.setRefundAmount(refundAmount == null?BigDecimal.ZERO:refundAmount);
             chargingBillListVO.setElectrovalence(electrovalence == null?BigDecimal.ZERO:electrovalence);
@@ -319,7 +378,7 @@
             chargingBillListVO.setCommissionAmount(commissionAmount == null?BigDecimal.ZERO:commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
             chargingBillListVO.setSharingAmount(sharingAmount == null?BigDecimal.ZERO:sharingAmount);
             chargingBillListVO.setChargingCapacity(chargingCapacity == null?BigDecimal.ZERO:chargingCapacity);
-            chargingBillListVO.setBillMoney(paymentAmount.subtract(refundAmount==null?BigDecimal.ZERO:refundAmount)
+            chargingBillListVO.setBillMoney(rechargeAmount.subtract(refundAmount==null?BigDecimal.ZERO:refundAmount)
                             .subtract(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN)).subtract(sharingAmount).setScale(2, BigDecimal.ROUND_DOWN));
             switch (chargingBillListVO.getType()){
                 case 1:
@@ -338,11 +397,15 @@
             chargingBillListVO.setChargingSecond(chargingSecond);
         }
         BigDecimal bigDecimal = new BigDecimal("0");
-
+        int i = 0;
         for (ChargingBillListVO chargingBillListVO : list1) {
-            if (chargingBillListVO.getType()==2){
+            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
                 continue;
             }
+            if (chargingBillListVO.getType()==1){
+                continue;
+            }
+            i++;
             LocalDateTime billTime = chargingBillListVO.getBillTime();
             // 将其转化为yyyy-MM格式字符串
             chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
@@ -350,20 +413,15 @@
             chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
 
             chargingBillListVO.setUid(chargingBillListVO.getId().toString());
-//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
-            // todo 临时修改为查询昨天的充电订单
-            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
+            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
             // 账单周期
             chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
             // 获取 LocalDate 对象
             LocalDate date = localDate.toLocalDate();
-//            // 获取该月份的第一天
-//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
-//            // 获取该月份的最后一天
-//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
-            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
-            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
-            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
+            // 获取该月份的第一天
+            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+            // 获取该月份的最后一天
+            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
             QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                     .between("create_time", firstDayOfMonth, lastDayOfMonth)
                     .eq("status", 5)
@@ -378,7 +436,7 @@
             chargingBillVO.setExportList(tChargingOrders);
             for (TChargingOrder tChargingOrder : tChargingOrders) {
                 if (tChargingOrder.getOrderAmount()!=null){
-                    paymentAmountTotal = paymentAmountTotal.add(tChargingOrder.getChargeAmount());
+                    paymentAmountTotal = paymentAmountTotal.add(tChargingOrder.getRechargeAmount());
                 }
 
                 // 累加订单金额
@@ -405,7 +463,8 @@
                 }
                 // 累加平台手续费
                 if (tChargingOrder.getOrderAmount()!=null){
-                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")));
+                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
+                            .setScale(2,BigDecimal.ROUND_DOWN));
                 }
                 // 累加平台分佣
                 if (tChargingOrder.getSharingAmount()!=null){
@@ -425,6 +484,7 @@
                 }
             }
         }
+        chargingBillVO.setOrderCount(i);
         chargingBillVO.setChargingCapacity(chargingCapacityTotal);
         chargingBillVO.setPaymentAmount(paymentAmountTotal);
         chargingBillVO.setOrderAmount(paymentAmountTotal.subtract(refundAmountTotal).subtract(commissionAmountTotal).subtract(sharingAmountTotal));
@@ -444,6 +504,7 @@
         chargingBillVO.setList(pageInfo);
         return chargingBillVO;
     }
+
     @Override
     public ChargingBillVO chargingBillList(ChargingListQuery dto) {
         if (dto.getState()!=null){
@@ -463,6 +524,49 @@
         }
         PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
         PageInfo<ChargingBillListVO> pageInfo1 = new PageInfo<>(1,9999999);
+        Long userId = tokenService.getLoginUser().getUserid();
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+            //如果没传siteId,获取当前登陆人所有的siteIds
+            if (dto.getSiteId()==null){
+                if (userId != null){
+                    List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                    for (GetSiteListDTO datum : data) {
+                        siteIds.add(datum.getId());
+                    }
+                }
+            }else {
+                siteIds.add(dto.getSiteId());
+            }
+            if (siteIds.isEmpty()){
+                siteIds.add(-1);
+            }else{
+                if (roleType == 2){
+                    List<Integer> integers = new ArrayList<>();
+                    for (Integer siteId : siteIds) {
+                        // 校验有没有这个站点的权限
+                        List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
+
+                        Boolean b = t1.get(1);
+                        if (b){
+                            integers.add(siteId);
+                        }
+                    }
+                    siteIds = integers;
+                }
+            }
+
+        if (roleType==1){
+            siteIds.add(0);
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+            dto.setSiteIds(siteIds);
+
         List<ChargingBillListVO> list = this.baseMapper.chargingBillList(pageInfo,dto,startTime1,startTime2);
         List<ChargingBillListVO> list1 = this.baseMapper.chargingBillList(pageInfo1,dto,startTime1,startTime2);
         BigDecimal paymentAmountTotal = new BigDecimal("0");
@@ -473,9 +577,31 @@
         BigDecimal sharingAmountTotal = new BigDecimal("0");
         BigDecimal chargingCapacityTotal = new BigDecimal("0");
         BigDecimal discountTotal = new BigDecimal("0");
-        BigDecimal refundAmount = new BigDecimal("0");
+        BigDecimal refundAmountTotal = new BigDecimal("0");
         int orderCount = 0;
+
+
+        List<ChargingBillListVO> chargingBillListVOS = new ArrayList<>();
         for (ChargingBillListVO chargingBillListVO : list) {
+            if (roleType==2 && chargingBillListVO.getSiteId()!=0){
+                chargingBillListVOS.add(chargingBillListVO);
+            }
+            if (roleType ==1 && (siteIds.contains(chargingBillListVO.getSiteId())|| chargingBillListVO.getSiteId()==0)){
+                chargingBillListVOS.add(chargingBillListVO);
+            }
+        }
+        for (ChargingBillListVO chargingBillListVO : chargingBillListVOS) {
+            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
+                continue;
+            }
+            if (roleType == 2){
+                // 校验有没有这个站点的权限
+                List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),chargingBillListVO.getSiteId()).getData();
+                chargingBillListVO.setAuthDownLoad(t1.get(0));
+                if (chargingBillListVO.getSiteId()==0){
+                    continue;
+                }
+            }
             String temp = "";
             String temp1 = "";
             switch (chargingBillListVO.getType()){
@@ -502,20 +628,16 @@
 
             chargingBillListVO.setUid(chargingBillListVO.getId().toString());
             // 根据账单的出账时间 查询上个月的充电订单
-//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
-            // todo 临时修改为查询昨天的充电订单
-            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
+            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
             // 账单周期
             chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
             // 获取 LocalDate 对象
             LocalDate date = localDate.toLocalDate();
 //            // 获取该月份的第一天
-//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
-//            // 获取该月份的最后一天
-//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
-            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
-            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
-            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
+            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+            // 获取该月份的最后一天
+            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
             QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                     .between("create_time", firstDayOfMonth, lastDayOfMonth)
                     .eq("status", 5)
@@ -532,6 +654,7 @@
             BigDecimal commissionAmount = new BigDecimal("0");
             BigDecimal sharingAmount = new BigDecimal("0");
             BigDecimal chargingCapacity = new BigDecimal("0");
+            BigDecimal refundAmount = new BigDecimal("0");
             chargingBillVO.setCategory("");
             chargingBillListVO.setOrderCount(tChargingOrders.size());
             chargingBillVO.setExportList(tChargingOrders);
@@ -638,8 +761,8 @@
                     paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
                 }
                 // 总金额
-                if (tChargingOrder.getOrderAmount()!=null){
-                orderAmount = orderAmount.add(tChargingOrder.getPaymentAmount());
+                if (tChargingOrder.getRechargeAmount()!=null){
+                orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
                 }
                 // 累加累计电费
                 if (tChargingOrder.getElectrovalence()!=null){
@@ -654,7 +777,8 @@
                 }
                 // 累加平台手续费
                 if (tChargingOrder.getOrderAmount()!=null){
-                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006)));
+                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(BigDecimal.valueOf(0.006))
+                            .setScale(2,BigDecimal.ROUND_DOWN));
                 }
                 // 累加平台分佣
                 if (tChargingOrder.getSharingAmount()!=null){
@@ -672,9 +796,9 @@
             // 格式化为字符串
             String timeString = String.format("%d小时%d分钟%d秒", hours, minutes, seconds);
             chargingBillVO.setChargingTime(timeString);
+            chargingBillListVO.setOrderAmount(orderAmount.subtract(refundAmount));
 
-            chargingBillListVO.setPaymentAmount(orderAmount.subtract(commissionAmount).subtract(sharingAmount).setScale(2,BigDecimal.ROUND_DOWN));
-            chargingBillListVO.setOrderAmount(orderAmount);
+            chargingBillListVO.setPaymentAmount(chargingBillListVO.getOrderAmount().subtract(commissionAmount).subtract(sharingAmount).setScale(2,BigDecimal.ROUND_DOWN));
             chargingBillListVO.setElectrovalence(electrovalence);
             chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,BigDecimal.ROUND_DOWN));
             chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
@@ -697,8 +821,13 @@
             chargingBillListVO.setChargingSecond(chargingSecond);
         }
         for (ChargingBillListVO chargingBillListVO : list1) {
-            if (chargingBillListVO.getType() ==1){
+            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
                 continue;
+            }
+            if (roleType == 2){
+                if (chargingBillListVO.getSiteId()==0){
+                    continue;
+                }
             }
             LocalDateTime billTime = chargingBillListVO.getBillTime();
             // 将其转化为yyyy-MM格式字符串
@@ -708,20 +837,18 @@
 
             chargingBillListVO.setUid(chargingBillListVO.getId().toString());
             // 根据账单的出账时间 查询上个月的充电订单
-//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
-            // todo 临时修改为查询昨天的充电订单
-            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
+            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
             // 账单周期
             chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
             // 获取 LocalDate 对象
             LocalDate date = localDate.toLocalDate();
 //            // 获取该月份的第一天
-//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
-//            // 获取该月份的最后一天
-//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
-            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
-            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
-            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
+            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+            // 获取该月份的最后一天
+            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
+//            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
+//            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
             QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                     .between("create_time", firstDayOfMonth, lastDayOfMonth)
                     .eq("status", 5)
@@ -746,9 +873,9 @@
                     paymentAmountTotal = paymentAmountTotal.add(tChargingOrder.getPaymentAmount());
                 }
                 // 累加订单金额
-                if (tChargingOrder.getOrderAmount()!=null){
-                    orderAmount = orderAmount.add(tChargingOrder.getPaymentAmount());
-                    orderAmountTotal = orderAmountTotal.add(tChargingOrder.getPaymentAmount());
+                if (tChargingOrder.getRechargeAmount()!=null){
+                    orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+                    orderAmountTotal = orderAmountTotal.add(tChargingOrder.getRechargeAmount());
                 }
                 // 累加累计电费
                 if (tChargingOrder.getElectrovalence()!=null){
@@ -756,7 +883,7 @@
                     electrovalenceTotal = electrovalenceTotal.add(tChargingOrder.getElectrovalence());
                 }
                 if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus() !=null && tChargingOrder.getRefundStatus() == 2){
-                    refundAmount = refundAmount.add(tChargingOrder.getRefundAmount());
+                    refundAmountTotal = refundAmountTotal.add(tChargingOrder.getRefundAmount());
                 }
                 // 累加累计服务费
                 if (tChargingOrder.getServiceCharge()!=null){
@@ -765,8 +892,9 @@
                 }
                 // 累加平台手续费
                 if (tChargingOrder.getOrderAmount()!=null){
-                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")));
-                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")));
+                    commissionAmount = commissionAmount.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
+                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
+                            .setScale(2,BigDecimal.ROUND_DOWN));
                 }
                 // 累加平台分佣
                 if (tChargingOrder.getSharingAmount()!=null){
@@ -788,20 +916,22 @@
             }
         }
         chargingBillVO.setChargingCapacity(chargingCapacityTotal);
-        chargingBillVO.setPaymentAmount(orderAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, BigDecimal.ROUND_DOWN));
-        chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setPaymentAmount(paymentAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setOrderAmount(orderAmountTotal.subtract(refundAmountTotal).setScale(2, BigDecimal.ROUND_DOWN));
         chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, BigDecimal.ROUND_DOWN));
         chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, BigDecimal.ROUND_DOWN));
         chargingBillVO.setOrderCount(orderCount);
         chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
         chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
         chargingBillVO.setDiscount(discountTotal.setScale(2, BigDecimal.ROUND_DOWN));
-        pageInfo.setRecords(list);
+        pageInfo.setRecords(chargingBillListVOS);
         chargingBillVO.setList(pageInfo);
         return chargingBillVO;
     }
 
     public static void main(String[] args) {
+        int i = 8 % 20;
+        System.err.println(i);
         LocalDateTime now = LocalDateTime.now();
         // 将时间转化为字符串 只保留年月日 格式为yyyy-MM-dd
         String format = now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index be08b4b..d7e1276 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ruoyi.account.api.model.*;
 import com.ruoyi.account.api.vo.GetAppUserVipDetail;
 import com.ruoyi.account.api.vo.GetInviteUser;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
 import com.ruoyi.chargingPile.api.feignClient.*;
 import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
@@ -19,6 +20,7 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
 import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient;
 import com.ruoyi.integration.api.feignClient.SendMessageClient;
@@ -58,6 +60,8 @@
 import com.ruoyi.payment.api.model.RefundResp;
 import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.api.vo.*;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -98,7 +102,8 @@
 	private ChargingGunClient chargingGunClient;
 	@Resource
 	private TSettlementConfirmMapper tSettlementConfirmMapper;
-
+	@Resource
+	private PartnerClient partnerClient;
 	@Resource
 	private SiteClient siteClient;
 	
@@ -524,13 +529,13 @@
 		if(2 == addChargingOrder.getPaymentType()){
 			AliPaymentReq req = new AliPaymentReq();
 			req.setOutTradeNo(chargingOrder.getCode());
-			req.setTotalAmount(chargingOrder.getPaymentAmount().toString());
+			req.setTotalAmount(addChargingOrder.getPaymentAmount().toString());
 			req.setSubject("充电充值");
 			req.setBuyerOpenId(appUser.getAliOpenid());
 			req.setBody("充电充值");
+			req.setNotifyUrl("/payment/ali/callBack");
 			AliPaymentResp data = aliPaymentClient.payment(req).getData();
 			if(null != data){
-				data.setNotifyUrl(data.getNotifyUrl() + "/order/t-charging-order/chargingOrderALICallback");
 				return AjaxResult.success(data);
 			}
 		}
@@ -882,8 +887,7 @@
 				dto.setRefundReason("充电失败,取消充电订单");
 				RefundResp resp = aliPaymentClient.refund(dto).getData();
 				if(null != resp){
-					SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
-					AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
+					AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
 					if(success.isSuccess()){
 						chargingOrderRefundService.save(chargingOrderRefund);
 					}
@@ -933,7 +937,7 @@
 		Long userId = tokenService.getLoginUserApplet().getUserId();
 		TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, userId).eq(TChargingOrder::getChargingGunId, id)
 				.eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
-		if(null == one){
+		if(null == one || !one.getAppUserId().equals(userId)){
 			return null;
 		}
 		ChargingDetails chargingDetails = new ChargingDetails();
@@ -957,16 +961,12 @@
 			Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
 			Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
 			chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
-		}
-		//转换成UTC时间
-		ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
-		if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
-			BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity();
-			TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
-			//   续航 = 电池容量 / 续航里程 * soc
-			BigDecimal divide = bms_battery_capacity.divide(new BigDecimal(appUserCar.getEndurance()));
-			BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(divide);
-			chargingDetails.setEndurance(multiply);
+			if(null != one.getAppUserCarId()){
+				TAppUserCar appUserCar = appUserCarClient.getCarById(one.getAppUserCarId().toString()).getData();
+				//   续航 = 续航里程 * soc
+				BigDecimal multiply = new BigDecimal(data.getSoc()).divide(new BigDecimal(100)).multiply(new BigDecimal(appUserCar.getEndurance()));
+				chargingDetails.setEndurance(multiply.setScale(2, RoundingMode.HALF_EVEN));
+			}
 		}
 		return chargingDetails;
 	}
@@ -987,6 +987,10 @@
 		}
 		if(status == 4 || status == 5){
 			return AjaxResult.error("不能重复操作");
+		}
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!order.getAppUserId().equals(userId)){
+			return AjaxResult.error("权限不足");
 		}
 		TChargingOrder chargingOrder = new TChargingOrder();
 		chargingOrder.setId(Long.valueOf(id));
@@ -1092,6 +1096,7 @@
 				if(1 == doubleIntegration){
 					num1 *= 2;
 				}
+				
 			}
 			
 			GetInviteUser query = new GetInviteUser();
@@ -1209,6 +1214,41 @@
 			}
 			dto.setUserIds(data);
 		}
+		Long userId = tokenService.getLoginUser().getUserid();
+		// 查询当前登陆人按钮权限
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+		Integer roleType = sysUser.getRoleType();
+		//如果没传siteId,获取当前登陆人所有的siteIds
+		List<Integer> siteIds = new ArrayList<>();
+		if (dto.getSiteId()==null){
+			if (userId != null){
+				List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+				for (GetSiteListDTO datum : data) {
+					siteIds.add(datum.getId());
+				}
+			}
+		}else {
+			siteIds.add(dto.getSiteId());
+		}
+		if (siteIds.isEmpty()){
+			siteIds.add(-1);
+		}else{
+			if (roleType == 2){
+				List<Integer> integers = new ArrayList<>();
+				for (Integer siteId : siteIds) {
+					// 校验有没有这个站点的权限
+					List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+
+					Boolean b = t1.get(1);
+					if (b){
+						integers.add(siteId);
+					}
+				}
+				siteIds = integers;
+			}
+		}
+		if (siteIds.isEmpty())siteIds.add(-1);
+		dto.setSiteIds(siteIds);
 		List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
 		List<ChargingOrderVO> list1 = this.baseMapper.chargingOrder(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
 		 BigDecimal total = new BigDecimal("0");
@@ -1216,9 +1256,21 @@
 		 BigDecimal income = new BigDecimal("0");
 		 BigDecimal electronicMoney = new BigDecimal("0");
 		 BigDecimal serviceMoney = new BigDecimal("0");
+		 BigDecimal commissionMoney = new BigDecimal("0");
+		 BigDecimal refundMoney = new BigDecimal("0");
+		 BigDecimal paymentMoney = new BigDecimal("0");
+
 		for (ChargingOrderVO chargingOrderVO : list) {
-			chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")));
-			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")));
+			if (roleType == 2){
+				for (Integer siteId : siteIds) {
+					// 校验有没有这个站点的权限
+					List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+					chargingOrderVO.setAuthRecord(t1.get(0));
+				}
+
+			}
+			chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
+			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
 			chargingOrderVO.setUid(chargingOrderVO.getId()+"");
 			TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData();
 			TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData();
@@ -1235,7 +1287,7 @@
 			List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
 					.eq("charging_order_id", chargingOrderVO.getId()));
 			UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
-			if (data5!=null){
+			if (data5!=null && data5.getCumulative_charging_time()!=null){
 				long l = data5.getCumulative_charging_time() * 60L;
 				chargingOrderVO.setChargingSecond(l);
 			}
@@ -1259,29 +1311,33 @@
 			}
 		}
 		for (ChargingOrderVO chargingOrderVO : list1) {
+			paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0"));
+			commissionMoney = commissionMoney.add(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
 			if (chargingOrderVO.getChargingCapacity()!=null){
-				total = total.add(chargingOrderVO.getElectricity());
+				total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0"));
 			}
 			// 充电订单 明细记录
 			List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
 					.eq("charging_order_id", chargingOrderVO.getId()));
 			UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
-			if (data5!=null){
+			if (data5!=null && data5.getCumulative_charging_time()!=null){
 				long l = data5.getCumulative_charging_time() * 60L;
 				chargingOrderVO.setChargingSecond(l);
 				time+=l;
 			}
-			electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence());
-			serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge());
-
-			income = income.add(chargingOrderVO.getPaymentAmount());
-
-
-
+			List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2)
+					.eq(TChargingOrderRefund::getChargingOrderId, chargingOrderVO.getId()).list();
+			for (TChargingOrderRefund tChargingOrderRefund : list2) {
+				if (tChargingOrderRefund.getRefundStatus()==2){
+					refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
+				}
+			}
+			electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()!=null?chargingOrderVO.getElectrovalence():new BigDecimal("0"));
+			serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0"));
 		}
 		tCharingOrderVO.setTotal(total);
 		tCharingOrderVO.setTime(time);
-		tCharingOrderVO.setIncome(income);
+		tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
 		tCharingOrderVO.setElectronicMoney(electronicMoney);
 		tCharingOrderVO.setServiceMoney(serviceMoney);
 		pageInfo.setRecords(list);
@@ -1333,8 +1389,8 @@
 	}
 
 	@Override
-	public Map<String, Object> countAll(LocalDate sixBefore) {
-		return this.baseMapper.countAll(sixBefore);
+	public Map<String, Object> countAll(LocalDate sixBefore,List<Integer> siteIds) {
+		return this.baseMapper.countAll(sixBefore,siteIds);
 	}
 
 	@Override
@@ -1362,7 +1418,8 @@
 		return this.baseMapper.getYearData(chargingOrderIds);
 	}
 
-	
+	@Resource
+	private SysUserClient sysUserClient;
 	@Override
 	public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
 		String startTime1 = null;
@@ -1406,9 +1463,49 @@
 				dto.setCarIds(carIds);
 			}
 		}
+		Long userId = tokenService.getLoginUser().getUserid();
+		// 查询当前登陆人按钮权限
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+		Integer roleType = sysUser.getRoleType();
+		//如果没传siteId,获取当前登陆人所有的siteIds
+		List<Integer> siteIds = new ArrayList<>();
+		if (dto.getSiteId()==null){
+			if (userId != null){
+				List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+				for (GetSiteListDTO datum : data) {
+					siteIds.add(datum.getId());
+				}
+			}
+		}else {
+			siteIds.add(dto.getSiteId());
+		}
+		if (siteIds.isEmpty()){
+			siteIds.add(-1);
+		}else{
+			if (roleType == 2){
+				List<Integer> integers = new ArrayList<>();
+				for (Integer siteId : siteIds) {
+					// 校验有没有这个站点的权限
+					List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+
+					Boolean b = t1.get(1);
+					if (b){
+						integers.add(siteId);
+					}
+				}
+				siteIds = integers;
+			}
+		}
+		dto.setSiteIds(siteIds);
 		PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
 		List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
+
 		for (ChargingOrderListVO chargingOrderListVO : list) {
+			if (roleType==2){
+				List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
+				chargingOrderListVO.setAuthInfo(data.get(0));
+				chargingOrderListVO.setAuthCurve(data.get(1));
+			}
 			chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
 			BigDecimal bigDecimal = new BigDecimal("0.006");
 			if (chargingOrderListVO.getOrderAmount()!=null){
@@ -1637,7 +1734,8 @@
 		chargingOrderListInfoVO.setStatus(chargingOrder.getStatus());
 		BigDecimal bigDecimal = new BigDecimal("0.006");
 		if (chargingOrder.getOrderAmount()!=null){
-			chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getOrderAmount().multiply(bigDecimal));
+			BigDecimal multiply = chargingOrder.getPaymentAmount().multiply(bigDecimal);
+			chargingOrderListInfoVO.setCommissionAmount(multiply.setScale(2, BigDecimal.ROUND_HALF_UP));
 		}
 		chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence());
 		chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge());
@@ -1671,6 +1769,7 @@
 				}
 			}
 		}
+		chargingOrderListInfoVO.setChargingCapacity(chargingOrder.getChargingCapacity());
 
 		chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode());
 
@@ -1686,10 +1785,18 @@
 					}
 				}
 				if (!data6.isEmpty()){
-					// 第一条数据soc为开始 最后一条数据soc为结束soc
-					chargingOrderListInfoVO.setStartSoc(data6.get(data6.size()-1).getSoc().toString());
-					chargingOrderListInfoVO.setEndSoc(data6.get(0).getSoc().toString());
-					chargingOrderListInfoVO.setChargingCapacity(data6.get(data6.size()-1).getCharging_degree());
+						int min = 100;
+						int max = 0;
+						for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
+							if (uploadRealTimeMonitoringData.getSoc()>max){
+								max = uploadRealTimeMonitoringData.getSoc();
+							}
+							if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){
+								min = uploadRealTimeMonitoringData.getSoc();
+							}
+						}
+					chargingOrderListInfoVO.setEndSoc(max+"");
+					chargingOrderListInfoVO.setStartSoc(min+"");
 
 					SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 					for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
@@ -1821,83 +1928,134 @@
 		chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
 		SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
-		for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
-			Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
-			try {
-				AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
-				//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
-				Object invoke = null;
-				switch (strategyDetail.getType()){
-					case 1:
-						//充电度数
-						invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+		try {
+			//跨天
+			if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
+				//当天的
+				//开始通过计费策略遍历解析每个时段的费用明细
+				String start_time = vo.getStart_time();
+				String end_time = vo.getEnd_time();
+				long start = sdfs.parse(start_time).getTime();
+				long end = sdfs.parse(end_time).getTime();
+				Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+				/**
+				 * "start_time": "2025-01-03 23:06:43.00",
+				 * 	"end_time": "2025-01-04 00:39:39.00",
+				 */
+				for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) {
+					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1);
+					long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime();
+					if(time < start){
 						break;
-					case 2:
-						//充电度数
-						invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
-						break;
-					case 3:
-						//充电度数
-						invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
-						break;
-					case 4:
-						//充电度数
-						invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
-						break;
+					}
+					//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+					Object invoke = null;
+					switch (strategyDetail.getType()){
+						case 1:
+							//充电度数
+							invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo);
+							break;
+						case 2:
+							//充电度数
+							invoke = clazz.getMethod("getPeak_charge" + (i)).invoke(vo);
+							break;
+						case 3:
+							//充电度数
+							invoke = clazz.getMethod("getFlat_charge" + (i)).invoke(vo);
+							break;
+						case 4:
+							//充电度数
+							invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo);
+							break;
+					}
+					if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+						continue;
+					}
+					BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+					BeanUtils.copyProperties(strategyDetail, vo1);
+					vo1.setChargingCapacity(sharp_peak_charge);
+					lists.add(vo1);
 				}
-				if(null == invoke || Double.valueOf(invoke.toString()) == 0){
-					continue;
+				
+				//第二天的
+				//开始通过计费策略遍历解析每个时段的费用明细
+				for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+					long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
+					if(time > end){
+						break;
+					}
+					//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+					Object invoke = null;
+					switch (strategyDetail.getType()){
+						case 1:
+							//充电度数
+							invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+							break;
+						case 2:
+							//充电度数
+							invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+							break;
+						case 3:
+							//充电度数
+							invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+							break;
+						case 4:
+							//充电度数
+							invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+							break;
+					}
+					if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+						continue;
+					}
+					BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+					BeanUtils.copyProperties(strategyDetail, vo1);
+					vo1.setChargingCapacity(sharp_peak_charge);
+					lists.add(vo1);
 				}
-				BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
-				AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
-				BeanUtils.copyProperties(strategyDetail, vo1);
-				vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime());
-				vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime());
-				vo1.setChargingCapacity(sharp_peak_charge);
-				lists.add(vo1);
-			} catch (IllegalAccessException e) {
-				throw new RuntimeException(e);
-			} catch (InvocationTargetException e) {
-				throw new RuntimeException(e);
-			} catch (NoSuchMethodException e) {
-				throw new RuntimeException(e);
-			} catch (ParseException e) {
-				throw new RuntimeException(e);
+			}else{
+				for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+					Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+					//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+					Object invoke = null;
+					switch (strategyDetail.getType()){
+						case 1:
+							//充电度数
+							invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+							break;
+						case 2:
+							//充电度数
+							invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+							break;
+						case 3:
+							//充电度数
+							invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+							break;
+						case 4:
+							//充电度数
+							invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+							break;
+					}
+					if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+						continue;
+					}
+					BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+					BeanUtils.copyProperties(strategyDetail, vo1);
+					vo1.setChargingCapacity(sharp_peak_charge);
+					lists.add(vo1);
+				}
 			}
-		}
-		Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() {
-			public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) {
-				return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1;
-			}
-		});
-		if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
-			List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists);
-			for (AccountingStrategyDetailOrderVo orderVo : list1) {
-				Calendar start = Calendar.getInstance();
-				start.setTimeInMillis(orderVo.getStart());
-				start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
-				orderVo.setStart(start.getTimeInMillis());
-				Calendar end = Calendar.getInstance();
-				end.setTimeInMillis(orderVo.getEnd());
-				end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1);
-				orderVo.setEnd(end.getTimeInMillis());
-			}
-			lists.addAll(list1);
+		}catch (Exception e){
+			e.printStackTrace();
 		}
 		
 		//开始处理明细
-		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
-		SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
-		Date start = null;
-		Date end = null;
-		try {
-			start = sdf3.parse(vo.getStart_time());
-			end = sdf3.parse(vo.getEnd_time());
-		} catch (ParseException e) {
-			throw new RuntimeException(e);
-		}
-
-		for (AccountingStrategyDetailOrderVo strategyDetail : lists) {
+		for (int i = 0; i < lists.size(); i++) {
+			AccountingStrategyDetailOrderVo strategyDetail = lists.get(i);
 			BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
 			TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
 			chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
@@ -1906,41 +2064,42 @@
 			chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
 			chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
 			chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
-			
-			if(start.getTime() >= strategyDetail.getStart()){
-				chargingOrderAccountingStrategy.setStartTime(sdf2.format(start));
+			if(i == 0){
+				String time = vo.getStart_time().split(" ")[1];
+				chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
 			}else{
 				chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
 			}
-			if(end.getTime() >= strategyDetail.getEnd()){
-				chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
+			if(i == lists.size() - 1){
+				String time = vo.getEnd_time().split(" ")[1];
+				chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
 			}else{
-				chargingOrderAccountingStrategy.setEndTime(sdf2.format(end));
+				chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
 			}
 			
 			//已充电总度数
-			BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
-			BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
+			BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge);
+			BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge);
 			BigDecimal serviceCharge = originalServicePrice;
 			BigDecimal vipDiscountAmount = BigDecimal.ZERO;
 			//计算优惠金额
 			if(null != chargingOrder.getVipDiscount()){
-				vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN);
-				serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
+				vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
+				serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
 			}
 			chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
-			chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(2, RoundingMode.DOWN));
-			chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(2, RoundingMode.DOWN));
-			chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(2, RoundingMode.DOWN));
-			chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(2, RoundingMode.DOWN));
+			chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
+			chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
+			chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
+			chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
 			chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
 			chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
 			
-			periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc.setScale(2, RoundingMode.DOWN));
-			periodServicePrice_total = periodServicePrice_total.add(originalServicePrice.setScale(2, RoundingMode.DOWN));
-			total = total.add(electrovalenc.add(originalServicePrice.setScale(2, RoundingMode.DOWN)));
+			periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+			periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+			total = total.add(electrovalenc.add(originalServicePrice));
+			
 		}
-		
 		
 		
 		//原金额
@@ -1949,6 +2108,7 @@
 		//总金额(充值金额+会员折扣金额)
 		BigDecimal decimal = rechargeAmount.add(vipDiscountAmount);
 		//退款金额(已经计算了折扣优惠部分)
+		//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
 		BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
 		BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
 		BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue());
@@ -1967,8 +2127,6 @@
 				
 				//服务费折扣
 				discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
-				periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
-				
 				TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
 				BigDecimal maximumDeduction = vip.getMaximumDeduction();
 				//普通会员有最高优惠限制
@@ -1977,7 +2135,10 @@
 				}
 			}
 		}
+		//会员折扣金额
+		discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
 		payAmount = payAmount.subtract(discountAmount);
+		periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
 		
 		TChargingOrder order = new TChargingOrder();
 		order.setId(chargingOrder.getId());
@@ -1989,17 +2150,18 @@
 		}else{
 			order.setEndMode(1);
 		}
-		order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.DOWN));
+		order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
 		order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
 		order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
 		order.setStatus(5);
-		order.setOrderAmount(orderAmount.setScale(2, RoundingMode.DOWN));
-		order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.DOWN));
-		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.DOWN));
+		order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+		order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
+		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
 		order.setChargingCapacity(vo.getTotal_electricity());
 		order.setElectricity(vo.getTotal_electricity());
 		
 		//计算优惠券
+		BigDecimal couponDiscount = BigDecimal.ZERO;
 		if(null != chargingOrder.getAppCouponId()){
 			//判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
 			TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData();
@@ -2012,17 +2174,11 @@
 					BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
 					//如果优惠金额大于服务费金额,以服务费作为最大限制
 					if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
-						refundAmount = refundAmount.add(periodServicePrice_total);
-						order.setCouponDiscountAmount(periodServicePrice_total);
-						payAmount = payAmount.subtract(periodServicePrice_total);
+						couponDiscount = periodServicePrice_total;
 						periodServicePrice_total = BigDecimal.ZERO;
 					}else{
-						refundAmount = refundAmount.add(couponDiscountAmount);
-						order.setCouponDiscountAmount(couponDiscountAmount);
-						payAmount = payAmount.subtract(couponDiscountAmount);
-						periodServicePrice_total = periodServicePrice_total.subtract(couponDiscountAmount);
+						couponDiscount = couponDiscountAmount;
 					}
-					
 					appCoupon.setStatus(2);
 					appCouponClient.updateAppCoupon(appCoupon);
 				}else{
@@ -2039,15 +2195,10 @@
 					divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
 					//如果优惠金额大于服务费金额,以服务费作为最大限制
 					if(periodServicePrice_total.compareTo(divide) < 0){
-						refundAmount = refundAmount.add(periodServicePrice_total);
-						order.setCouponDiscountAmount(periodServicePrice_total);
-						payAmount = payAmount.subtract(periodServicePrice_total);
+						couponDiscount = periodServicePrice_total;
 						periodServicePrice_total = BigDecimal.ZERO;
 					}else{
-						refundAmount = refundAmount.add(divide);
-						order.setCouponDiscountAmount(divide);
-						payAmount = payAmount.subtract(divide);
-						periodServicePrice_total = periodServicePrice_total.subtract(divide);
+						couponDiscount = divide;
 					}
 					
 					appCoupon.setStatus(2);
@@ -2059,10 +2210,17 @@
 				}
 			}
 		}
-		
-		order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.DOWN));
-		order.setPaymentAmount(payAmount.setScale(2, RoundingMode.DOWN));
-		order.setRefundAmount(refundAmount.setScale(2, RoundingMode.DOWN));
+		//优惠券优惠金额
+		couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+		refundAmount = refundAmount.add(couponDiscount);
+		payAmount = payAmount.subtract(couponDiscount);
+		if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
+			periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
+		}
+		order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
+		order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN));
+		order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
+		order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
 		order.setRefundStatus(1);
 		this.updateById(order);
 		chargingOrder = this.getById(order.getId());
@@ -2076,8 +2234,8 @@
 				BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
 				BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
 				periodServicePrice = periodServicePrice.subtract(multiply);
-				chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.DOWN));
-				chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.DOWN));
+				chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
+				chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
 			}
 			chargingOrderAccountingStrategyService.updateBatchById(list);
 		}
@@ -2167,8 +2325,7 @@
 				dto.setRefundReason("充电完成退款");
 				RefundResp resp = aliPaymentClient.refund(dto).getData();
 				if(null != resp){
-					SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
-					AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
+					AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
 					if(success.isSuccess()){
 						chargingOrderRefundService.save(chargingOrderRefund);
 					}
@@ -2177,6 +2334,445 @@
 			
 		}
 	}
+	
+	
+//	/**
+//	 * 停止充电返回账单后计算费用
+//	 * @param vo
+//	 */
+//	@Override
+//	@GlobalTransactional(rollbackFor = Exception.class)
+//	public void endChargeBillingCharge1(TransactionRecordMessageVO vo) {
+//		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
+//		Integer status = chargingOrder.getStatus();
+////		if(status == 5){
+////			return;
+////		}
+//
+//		//如果使用优惠券需要判断优惠券是否满足使用条件
+//		//根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
+//		//退款金额=优惠券金额+剩余充电金额
+//		BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
+//		BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+//		BigDecimal total = BigDecimal.ZERO;
+//
+//		//获取订单的计费策略
+//		List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
+//		accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
+//		//开始处理计费明细数据和优惠数据
+////		chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
+//		SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//		List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
+//		try {
+//			//跨天
+//			if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
+//				//当天的
+//				//开始通过计费策略遍历解析每个时段的费用明细
+//				String start_time = vo.getStart_time();
+//				String end_time = vo.getEnd_time();
+//				long start = sdfs.parse(start_time).getTime();
+//				long end = sdfs.parse(end_time).getTime();
+//				Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+//				/**
+//				 * "start_time": "2025-01-03 23:06:43.00",
+//				 * 	"end_time": "2025-01-04 00:39:39.00",
+//				 */
+//				for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) {
+//					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1);
+//					long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime();
+//					if(time < start){
+//						break;
+//					}
+//					//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+//					Object invoke = null;
+//					switch (strategyDetail.getType()){
+//						case 1:
+//							//充电度数
+//							invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo);
+//							break;
+//						case 2:
+//							//充电度数
+//							invoke = clazz.getMethod("getPeak_charge" + (i)).invoke(vo);
+//							break;
+//						case 3:
+//							//充电度数
+//							invoke = clazz.getMethod("getFlat_charge" + (i)).invoke(vo);
+//							break;
+//						case 4:
+//							//充电度数
+//							invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo);
+//							break;
+//					}
+//					if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+//						continue;
+//					}
+//					BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+//					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+//					BeanUtils.copyProperties(strategyDetail, vo1);
+//					vo1.setChargingCapacity(sharp_peak_charge);
+//					lists.add(vo1);
+//				}
+//
+//				//第二天的
+//				//开始通过计费策略遍历解析每个时段的费用明细
+//				for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+//					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+//					long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
+//					if(time > end){
+//						break;
+//					}
+//					//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+//					Object invoke = null;
+//					switch (strategyDetail.getType()){
+//						case 1:
+//							//充电度数
+//							invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+//							break;
+//						case 2:
+//							//充电度数
+//							invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+//							break;
+//						case 3:
+//							//充电度数
+//							invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+//							break;
+//						case 4:
+//							//充电度数
+//							invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+//							break;
+//					}
+//					if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+//						continue;
+//					}
+//					BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+//					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+//					BeanUtils.copyProperties(strategyDetail, vo1);
+//					vo1.setChargingCapacity(sharp_peak_charge);
+//					lists.add(vo1);
+//				}
+//			}else{
+//				for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+//					Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+//					AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+//					//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+//					Object invoke = null;
+//					switch (strategyDetail.getType()){
+//						case 1:
+//							//充电度数
+//							invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+//							break;
+//						case 2:
+//							//充电度数
+//							invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+//							break;
+//						case 3:
+//							//充电度数
+//							invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+//							break;
+//						case 4:
+//							//充电度数
+//							invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+//							break;
+//					}
+//					if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+//						continue;
+//					}
+//					BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+//					AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+//					BeanUtils.copyProperties(strategyDetail, vo1);
+//					vo1.setChargingCapacity(sharp_peak_charge);
+//					lists.add(vo1);
+//				}
+//			}
+//		}catch (Exception e){
+//			e.printStackTrace();
+//		}
+//
+//		//开始处理明细
+//		for (int i = 0; i < lists.size(); i++) {
+//			AccountingStrategyDetailOrderVo strategyDetail = lists.get(i);
+//			BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
+//			TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
+//			chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
+//			chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
+//			chargingOrderAccountingStrategy.setType(strategyDetail.getType());
+//			chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
+//			chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
+//			chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
+//			if(i == 0){
+//				String time = vo.getStart_time().split(" ")[1];
+//				chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
+//			}else{
+//				chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
+//			}
+//			if(i == lists.size() - 1){
+//				String time = vo.getEnd_time().split(" ")[1];
+//				chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
+//			}else{
+//				chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
+//			}
+//
+//			//已充电总度数
+//			BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge);
+//			BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge);
+//			BigDecimal serviceCharge = originalServicePrice;
+//			BigDecimal vipDiscountAmount = BigDecimal.ZERO;
+//			//计算优惠金额
+//			if(null != chargingOrder.getVipDiscount()){
+//				vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
+//				serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
+//			}
+//			chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
+//			chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
+//			chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
+//			chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
+//			chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
+//			chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+////			chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
+//			System.err.println("----------"+JSON.toJSONString(chargingOrderAccountingStrategy));
+//
+//			periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+//			periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+//			total = total.add(electrovalenc.add(originalServicePrice));
+//
+//		}
+//
+//
+//		//原金额
+//		BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
+//		BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount();
+//		//总金额(充值金额+会员折扣金额)
+//		BigDecimal decimal = rechargeAmount.add(vipDiscountAmount);
+//		//退款金额(已经计算了折扣优惠部分)
+//		//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
+//		BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
+//		BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
+//		BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue());
+//		//折扣金额
+//		BigDecimal discountAmount = BigDecimal.ZERO;
+////		if(null != chargingOrder.getVipDiscount()){
+////			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+////			//判断会员是否还有充电优惠次数
+////			GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+////			getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
+////			getAppUserVipDetail.setVipId(appUser.getVipId());
+////			TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+////			if(null != data && data.getChargeNum() > 0){
+////				data.setChargeNum(data.getChargeNum() - 1);
+////				appUserVipDetailClient.updateAppUserVipDetail(data);
+////
+////				//服务费折扣
+////				discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
+////				TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+////				BigDecimal maximumDeduction = vip.getMaximumDeduction();
+////				//普通会员有最高优惠限制
+////				if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
+////					discountAmount = maximumDeduction;
+////				}
+////			}
+////		}
+//		//会员折扣金额
+//		discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
+//		payAmount = payAmount.subtract(discountAmount);
+//		periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
+//
+//		TChargingOrder order = new TChargingOrder();
+//		order.setId(chargingOrder.getId());
+//		order.setAppUserId(chargingOrder.getAppUserId());
+//		UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
+//		if(null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()){
+//			Integer soc = uploadRealTimeMonitoringData.getSoc();
+//			order.setEndMode(soc > 98 ? 2 : 3);
+//		}else{
+//			order.setEndMode(1);
+//		}
+//		order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
+//		order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+//		order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+//		order.setStatus(5);
+//		order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setChargingCapacity(vo.getTotal_electricity());
+//		order.setElectricity(vo.getTotal_electricity());
+//
+//		//计算优惠券
+//		BigDecimal couponDiscount = BigDecimal.ZERO;
+////		if(null != chargingOrder.getAppCouponId()){
+////			//判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
+////			TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData();
+////			String couponJson = appCoupon.getCouponJson();
+////			TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class);
+////			Integer preferentialMode = tCoupon.getPreferentialMode();
+////			if(1 == preferentialMode){
+////				//满减
+////				if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
+////					BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+////					//如果优惠金额大于服务费金额,以服务费作为最大限制
+////					if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
+////						couponDiscount = periodServicePrice_total;
+////						periodServicePrice_total = BigDecimal.ZERO;
+////					}else{
+////						couponDiscount = couponDiscountAmount;
+////					}
+////					appCoupon.setStatus(2);
+//////					appCouponClient.updateAppCoupon(appCoupon);
+////				}else{
+////					order.setAppCouponId(null);
+////					order.setCouponDiscountAmount(BigDecimal.ZERO);
+//////					appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+////				}
+////			}
+////			if(2 == preferentialMode){
+////				//抵扣
+////				if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
+////					//折扣金额
+////					BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
+////					divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
+////					//如果优惠金额大于服务费金额,以服务费作为最大限制
+////					if(periodServicePrice_total.compareTo(divide) < 0){
+////						couponDiscount = periodServicePrice_total;
+////						periodServicePrice_total = BigDecimal.ZERO;
+////					}else{
+////						couponDiscount = divide;
+////					}
+////
+////					appCoupon.setStatus(2);
+////					appCouponClient.updateAppCoupon(appCoupon);
+////				}else{
+////					order.setAppCouponId(null);
+////					order.setCouponDiscountAmount(BigDecimal.ZERO);
+////					appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+////				}
+////			}
+////		}
+//		//优惠券优惠金额
+//		couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+//		refundAmount = refundAmount.add(couponDiscount);
+//		payAmount = payAmount.subtract(couponDiscount);
+//		if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
+//			periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
+//		}
+//		order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
+//		order.setRefundStatus(1);
+////		this.updateById(order);
+//		System.err.println("----------"+JSON.toJSONString(order));
+////		chargingOrder = this.getById(order.getId());
+////
+////		//开始将优惠券优惠的金额添加到明细中
+////		BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
+////		if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
+////			List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
+////			BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+////			for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
+////				BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
+////				BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
+////				periodServicePrice = periodServicePrice.subtract(multiply);
+////				chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
+////				chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
+////			}
+//////			chargingOrderAccountingStrategyService.updateBatchById(list);
+////		}
+////
+////		// 将枪状态重置为空闲
+////		TChargingGun chargingGun = new TChargingGun();
+////		chargingGun.setId(chargingOrder.getChargingGunId());
+////		chargingGun.setStatus(2);
+////		chargingGun.setChargingPower(BigDecimal.ZERO);
+//////		chargingGunClient.updateChargingGunById(chargingGun);
+////
+////		//添加积分
+////		TIntegralRule integralRule = integralRuleClient.getSet().getData();
+////		if(null != integralRule){
+////			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+////			Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
+////			Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
+////			if(null != appUser.getVipId()){
+////				TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+////				Integer doubleIntegration = vip.getDoubleIntegration();
+////				//双倍积分
+////				if(1 == doubleIntegration){
+////					integral *= 2;
+////				}
+////			}
+////
+////			if(integral > 0){
+////				TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
+////				appUserIntegralChange.setAppUserId(appUser.getId());
+////				appUserIntegralChange.setChangeType(2);
+////				appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
+////				appUser.setPoints(appUser.getPoints() + integral);
+////				appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
+////				appUserIntegralChange.setCreateTime(LocalDateTime.now());
+////				appUserIntegralChange.setOrderCode(chargingOrder.getCode());
+////				appUserIntegralChange.setExtension(chargingOrder.getId().toString());
+////				appUserClient.updateAppUser(appUser);
+////				appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
+////			}
+////		}
+////
+////		//计算用户标签
+////		editUserTag(chargingOrder);
+////		//用户推荐奖励
+////		referralReward(chargingOrder);
+////
+////		//开始构建退款费用
+////		if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
+////			Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
+////			//构建退款明细
+////			TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+////			chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
+////			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+////			chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+////			chargingOrderRefund.setRefundAmount(refundAmount);
+////			chargingOrderRefund.setRefundStatus(1);
+////			chargingOrderRefund.setPayType(rechargePaymentType);
+////			chargingOrderRefund.setRefundStatus(1);
+////			chargingOrderRefund.setCode(chargingOrder.getCode());
+////			chargingOrderRefund.setRefundTitle("充电完成退款");
+////			chargingOrderRefund.setRefundContent("充电完成退款");
+////			chargingOrderRefund.setRefundReason("充电完成退款");
+////			chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
+////			chargingOrderRefund.setRefundTotalAmount(refundAmount);
+////			chargingOrderRefund.setPayAmount(rechargeAmount);
+////			if(1 == rechargePaymentType){
+////				WxPaymentRefundModel model = new WxPaymentRefundModel();
+////				model.setOut_trade_no(chargingOrder.getCode());
+////				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+////				model.setReason("充电完成退款");
+////				model.setNotify_url("/payment/wx/refund/notify");
+////				WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+////				amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
+////				amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+////				amount.setCurrency("CNY");
+////				model.setAmount(amount);
+////				R<String> orderR = wxPaymentClient.refundOrderR(model);
+////				if(200 == orderR.getCode()){
+////					chargingOrderRefundService.save(chargingOrderRefund);
+////				}
+////			}
+////			if(2 == rechargePaymentType){
+////				RefundReq dto = new RefundReq();
+////				dto.setOutTradeNo(chargingOrder.getCode());
+////				dto.setOutRequestNo(chargingOrderRefund.getCode());
+////				dto.setRefundAmount(refundAmount.toString());
+////				dto.setRefundReason("充电完成退款");
+////				RefundResp resp = aliPaymentClient.refund(dto).getData();
+////				if(null != resp){
+////					AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
+////					if(success.isSuccess()){
+////						chargingOrderRefundService.save(chargingOrderRefund);
+////					}
+////				}
+////			}
+////
+////		}
+//	}
+	
+	
 	
 	@Override
 	public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) {
@@ -2199,8 +2795,8 @@
 	}
 
 	@Override
-	public List<Map<String, Object>> usersDay() {
-		return this.baseMapper.usersDay();
+	public List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto) {
+		return this.baseMapper.usersDay(statisticsQueryDto);
 	}
 
 	@Override
@@ -2584,19 +3180,19 @@
 			}
 			if (tChargingOrder.getPaymentAmount()!=null){
 				paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+				orderCommission = orderCommission.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
+						.setScale(2,BigDecimal.ROUND_DOWN));
 			}
 
 		}
 
 		// 三方交易手续费 三方收费*0.6%
 		commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
-		// 订单手续费 订单支付金额 - 退款金额*0.6%
-		orderCommission = paymentAmount.multiply(new BigDecimal("0.006"));
 		tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setServiceCharge(serviceCharge.subtract(orderCommission).setScale(2, RoundingMode.HALF_DOWN));
-		tSettlementConfirm.setOrderCommission(orderCommission.setScale(2,BigDecimal.ROUND_DOWN));
+		tSettlementConfirm.setOrderCommission(orderCommission);
 		tSettlementConfirm.setVipDiscount(vipDiscount);
 		tSettlementConfirm.setCouponDiscount(couponDiscount);
 		tSettlementConfirm.setSiteId(dto.getSiteId());
@@ -2626,7 +3222,7 @@
 			BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner());
 			BigDecimal subtract9 = new BigDecimal("1").subtract(dto.getServicePartner());
 			// 总电损费用
-			BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN);
+			BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, BigDecimal.ROUND_DOWN);
 			// 平台承担电损
 			BigDecimal subtract1 = divide.subtract(tSettlementConfirm.getProportionMoney());
 			BigDecimal multiply = dto.getServiceMoney().multiply(subtract);
@@ -2666,9 +3262,49 @@
 		}
 		dto.setStartTime(startTime);
 		dto.setEndTime(endTime);
+		Long userId = tokenService.getLoginUser().getUserid();
+		// 查询当前登陆人按钮权限
+		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+		Integer roleType = sysUser.getRoleType();
+		//如果没传siteId,获取当前登陆人所有的siteIds
+		List<Integer> siteIds = new ArrayList<>();
+		if (dto.getSiteIds()==null){
+			if (userId != null){
+				List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+				for (GetSiteListDTO datum : data) {
+					siteIds.add(datum.getId());
+				}
+			}
+		}else {
+			siteIds.add(dto.getSiteIds());
+		}
+		if (siteIds.isEmpty()){
+			siteIds.add(-1);
+		}else{
+			if (roleType == 2){
+				List<Integer> integers = new ArrayList<>();
+				for (Integer siteId : siteIds) {
+					// 校验有没有这个站点的权限
+					List<Boolean> t1= partnerClient.getSettlementListMenu(sysUser.getObjectId(),siteId).getData();
+
+					Boolean b = t1.get(2);
+					if (b){
+						integers.add(siteId);
+					}
+				}
+				siteIds = integers;
+			}
+		}
+		dto.setSiteIdss(siteIds);
 		PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
 		List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
+
 		for (TSettlementConfirm tSettlementConfirm : list) {
+			if (roleType==2){
+				List<Boolean> data = partnerClient.getSettlementListMenu(sysUser.getObjectId(), tSettlementConfirm.getSiteId()).getData();
+				tSettlementConfirm.setAuthDownLoad(data.get(0));
+				tSettlementConfirm.setAuthDelete(data.get(1));
+			}
 			tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
 			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
 			if (!data1.isEmpty()){
@@ -2691,12 +3327,265 @@
 
 	@Override
 	public SettlementTotalVO settlementTotal(String time) {
+		Long userId = tokenService.getLoginUser().getUserid();
+		//如果没传siteId,获取当前登陆人所有的siteIds
+		List<Integer> siteIds = new ArrayList<>();
+		if (userId != null){
+				List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+				for (GetSiteListDTO datum : data) {
+					siteIds.add(datum.getId());
+				}
+		}
+		if (siteIds.isEmpty()){
+			siteIds.add(-1);
+		}
 		SettlementTotalVO res = new SettlementTotalVO();
-		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time);
+		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
 		LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
 		// 减少一个月
 		LocalDateTime minus = parse.minusMonths(1);
-		List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time);
+		List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+		// 合计
+		List<TSettlementConfirm> total = new ArrayList<>();
+
+		TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
+		BigDecimal meteringElectronic = new BigDecimal("0");
+		BigDecimal chargingElectronic = new BigDecimal("0");
+		BigDecimal lossElectronic = new BigDecimal("0");
+		BigDecimal income = new BigDecimal("0");
+		BigDecimal venue = new BigDecimal("0");
+		BigDecimal metering = new BigDecimal("0");
+		BigDecimal clean = new BigDecimal("0");
+		BigDecimal maintain = new BigDecimal("0");
+		BigDecimal cost = new BigDecimal("0");
+		BigDecimal profitMoney = new BigDecimal("0");
+		BigDecimal newMoney = new BigDecimal("0");
+		BigDecimal newSettlement = new BigDecimal("0");
+		BigDecimal supplyElectronic = new BigDecimal("0");
+		BigDecimal proportionPartner = new BigDecimal("0");
+		BigDecimal proportionMoney = new BigDecimal("0");
+		BigDecimal totalElectronic = new BigDecimal("0");
+		BigDecimal totalService = new BigDecimal("0");
+		BigDecimal servicePartner = new BigDecimal("0");
+		BigDecimal serviceMoney = new BigDecimal("0");
+		BigDecimal sharingAmount = new BigDecimal("0");
+		BigDecimal commissionAmount = new BigDecimal("0");
+		BigDecimal electrovalence = new BigDecimal("0");
+		BigDecimal serviceCharge = new BigDecimal("0");
+		BigDecimal orderCommission = new BigDecimal("0");
+		BigDecimal vipDiscount = new BigDecimal("0");
+		BigDecimal couponDiscount = new BigDecimal("0");
+//		tSettlementConfirm1.setIncomePercentage();
+//		tSettlementConfirm1.setTotalPercentage();
+		tSettlementConfirm1.setElectronicRefund(0);
+		// 上月成本合计
+		BigDecimal beforeCost= new BigDecimal("0");
+		// 上月利润合计
+		BigDecimal beforeIncome= new BigDecimal("0");
+		int i = 1;
+		for (TSettlementConfirm tSettlementConfirm : list1) {
+			tSettlementConfirm.setXuhao(i);
+			tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
+			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
+			if (!data1.isEmpty()){
+				tSettlementConfirm.setSiteName(data1.get(0).getName());
+			}
+			if (tSettlementConfirm.getMeteringElectronic()!=null){
+				meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
+				chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
+			}
+			if (tSettlementConfirm.getLossElectronic()!=null){
+				lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
+			}
+			income = income.add(tSettlementConfirm.getIncome());
+			venue = venue.add(tSettlementConfirm.getVenue());
+			metering = metering.add(tSettlementConfirm.getMetering());
+			clean = clean.add(tSettlementConfirm.getClean());
+			maintain = maintain.add(tSettlementConfirm.getMaintain());
+			cost = cost.add(tSettlementConfirm.getCost());
+			profitMoney = profitMoney.add(tSettlementConfirm.getProfitMoney());
+			newMoney = newMoney.add(tSettlementConfirm.getNewMoney());
+			newSettlement = newSettlement.add(tSettlementConfirm.getNewSettlement());
+			supplyElectronic = supplyElectronic.add(tSettlementConfirm.getSupplyElectronic());
+			proportionPartner = proportionPartner.add(tSettlementConfirm.getProportionPartner());
+			proportionMoney = proportionMoney.add(tSettlementConfirm.getProportionMoney());
+			totalElectronic = totalElectronic.add(tSettlementConfirm.getTotalElectronic());
+			totalService = totalService.add(tSettlementConfirm.getTotalService());
+			servicePartner = servicePartner.add(tSettlementConfirm.getServicePartner());
+			serviceMoney = serviceMoney.add(tSettlementConfirm.getServiceMoney());
+			sharingAmount = sharingAmount.add(tSettlementConfirm.getSharingAmount());
+			commissionAmount = commissionAmount.add(tSettlementConfirm.getCommissionAmount());
+			electrovalence = electrovalence.add(tSettlementConfirm.getElectrovalence());
+			serviceCharge = serviceCharge.add(tSettlementConfirm.getServiceCharge());
+			orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
+			vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
+			couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
+
+			// 查询结算确认单开始时间和结束时间的单子
+			QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
+					.eq("site_id", tSettlementConfirm.getSiteId())
+					.eq("recharge_payment_status",2);
+			switch (tSettlementConfirm.getType()){
+				case 1:
+					eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
+					break;
+				case 2:
+					eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
+					break;
+			}
+			List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
+			Map<String,TChargingOrder> map = new HashMap<>();
+			StringBuilder stringBuilder = new StringBuilder();
+			for (TChargingOrder tChargingOrder : tChargingOrders) {
+				stringBuilder.append(tChargingOrder.getCode()).append(",");
+
+			}
+			// 充电总时长
+
+			Long temp = 1L;
+			if (StringUtils.hasLength(stringBuilder.toString())){
+				String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
+				for (String s : substring.split(",")) {
+					UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
+					if (data6!=null){
+						temp+=(data6.getCumulative_charging_time()*60);
+
+					}
+
+				}
+			}
+			List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
+			// 计算充电桩的功率平均值
+			BigDecimal bigDecimal = new BigDecimal("0");
+			for (TChargingPile datum : data) {
+				bigDecimal = bigDecimal.add(datum.getRatedPower());
+			}
+
+
+			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
+			//利用率=充电量/(桩数量*功率*时间)
+			List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
+			BigDecimal bigDecimal2 = new BigDecimal("0");
+
+			if (data2!=null && (!data2.isEmpty())){
+				for (TChargingPile tChargingPile : data2) {
+					bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
+				}
+				BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
+				// 平均功率
+				BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
+				// 充电量
+				BigDecimal chargingElectronic1 = tSettlementConfirm.getChargingElectronic();
+				// 桩数量
+				BigDecimal bigDecimal3 = new BigDecimal(data2.size());
+				BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
+				BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
+				tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
+			}else{
+				tSettlementConfirm.setRate("");
+			}
+
+
+			for (TSettlementConfirm settlementConfirm : list2) {
+				int value = parse.getMonth().getValue();
+				settlementConfirm.setMonth(value);
+				settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
+				tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
+				if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
+					// 电站相同比较收入涨幅跌幅
+					if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
+						BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(),2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+						tSettlementConfirm.setIncomePercentage(subtract+"%");
+					}else {
+						tSettlementConfirm.setIncomePercentage("100"+"%");
+
+					}
+
+					// 比较总利润 收入合计-成本合计
+					BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
+					BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
+					BigDecimal bigDecimal1 = subtract1.subtract(subtract2)
+							.divide(subtract2, 2, RoundingMode.HALF_DOWN)
+							.multiply(new BigDecimal("100"))
+							.setScale(2, RoundingMode.HALF_DOWN);
+					tSettlementConfirm.setTotalPercentage(bigDecimal1+"%");				}
+				beforeCost = beforeCost.add(settlementConfirm.getCost());
+				beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
+			}
+			i++;
+		}
+		TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
+		tSettlementConfirm.setMonth(parse.getMonthValue());
+		tSettlementConfirm.setMeteringElectronic(meteringElectronic);
+		tSettlementConfirm.setChargingElectronic(chargingElectronic);
+		tSettlementConfirm.setLossElectronic(lossElectronic);
+		tSettlementConfirm.setIncome(income);
+		tSettlementConfirm.setVenue(venue);
+		tSettlementConfirm.setMetering(metering);
+		tSettlementConfirm.setClean(clean);
+		tSettlementConfirm.setMaintain(maintain);
+		tSettlementConfirm.setCost(cost);
+		tSettlementConfirm.setProfitMoney(profitMoney);
+		tSettlementConfirm.setNewMoney(newMoney);
+		tSettlementConfirm.setNewSettlement(newSettlement);
+		tSettlementConfirm.setSupplyElectronic(supplyElectronic);
+		tSettlementConfirm.setProportionPartner(proportionPartner);
+		tSettlementConfirm.setProportionMoney(proportionMoney);
+		tSettlementConfirm.setTotalElectronic(totalElectronic);
+		tSettlementConfirm.setTotalService(totalService);
+		tSettlementConfirm.setServicePartner(servicePartner);
+		tSettlementConfirm.setServiceMoney(serviceMoney);
+		tSettlementConfirm.setSharingAmount(sharingAmount);
+		tSettlementConfirm.setCommissionAmount(commissionAmount);
+		tSettlementConfirm.setElectrovalence(electrovalence);
+		tSettlementConfirm.setServiceCharge(serviceCharge);
+		tSettlementConfirm.setOrderCommission(orderCommission);
+		tSettlementConfirm.setVipDiscount(vipDiscount);
+		tSettlementConfirm.setCouponDiscount(couponDiscount);
+		// 本月
+		if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
+			tSettlementConfirm.setIncomePercentage(0+"%");
+			tSettlementConfirm.setIncomePercentage(0+"%");
+		}else{
+			BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+			tSettlementConfirm.setIncomePercentage(subtract+"%");
+			tSettlementConfirm.setIncomePercentage(subtract+"%");
+
+		}
+		// 比较总利润 收入合计-成本合计
+		BigDecimal subtract1 = income.subtract(cost);
+		BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
+		if (subtract2.compareTo(new BigDecimal("0")) == 0){
+			tSettlementConfirm.setTotalPercentage(0+"%");
+		}else{
+			tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+		}
+		tSettlementConfirm.setElectronicRefund(0);
+		// 查询上次汇报数据 进行比对涨幅跌幅
+		total.add(tSettlementConfirm);
+		res.setList1(list1);
+		res.setList2(total);
+		return res;
+	}
+	@Override
+	public SettlementTotalVO settlementTotalR(String time,Long userId) {
+		//如果没传siteId,获取当前登陆人所有的siteIds
+		List<Integer> siteIds = new ArrayList<>();
+		if (userId != null){
+				List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+				for (GetSiteListDTO datum : data) {
+					siteIds.add(datum.getId());
+				}
+		}
+		if (siteIds.isEmpty()){
+			siteIds.add(-1);
+		}
+		SettlementTotalVO res = new SettlementTotalVO();
+		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+		LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+		// 减少一个月
+		LocalDateTime minus = parse.minusMonths(1);
+		List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
 		// 合计
 		List<TSettlementConfirm> total = new ArrayList<>();
 
@@ -2999,6 +3888,10 @@
 	public EndOfChargePageInfo getEndOfChargePageInfo(String id) {
 		EndOfChargePageInfo info = new EndOfChargePageInfo();
 		TChargingOrder chargingOrder = this.getById(id);
+		Long userId = tokenService.getLoginUserApplet().getUserId();
+		if(!chargingOrder.getAppUserId().equals(userId)){
+			throw new RuntimeException("权限不足");
+		}
 		info.setId(id);
 		info.setCode(chargingOrder.getCode());
 		info.setPaymentAmount(chargingOrder.getPaymentAmount());
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
index dab3ba5..c79a059 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
@@ -1,9 +1,6 @@
 package com.ruoyi.order.service.impl;
 
-import cn.hutool.db.DaoTemplate;
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,15 +9,12 @@
 import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
 import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.account.api.model.TAppUserCar;
-import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.account.api.model.TAppUserIntegralChange;
+import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
-import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.HttpUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -51,7 +45,6 @@
 import com.ruoyi.system.api.model.SysUserRoleVo;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -261,8 +254,9 @@
             tagList.add(evaluationTagVO);
         }
     }
-    
-    
+
+    @Resource
+    private PartnerClient partnerClient;
     /**
      * 获取充电评价列表
      * @param pageList
@@ -279,17 +273,17 @@
     
         //校验合作商权限
         List<Integer> siteIds = new ArrayList<>();
+        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+        Integer roleType = sysUser.getRoleType();
+        Integer objectId = sysUser.getObjectId();
         if(null == pageList.getSiteId() || 0 == pageList.getSiteId()){
-            SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
-            Integer roleType = sysUser.getRoleType();
-            Integer objectId = sysUser.getObjectId();
             //合作商
             if(roleType == 2){
-                Set<Integer> data = partnerService.authSite(objectId, "/data/site").getData();
+                Set<Integer> data = partnerService.authSite(objectId, SiteMenu.CHARGE_EVALUATION.getValue()).getData();
                 siteIds = new ArrayList<>(data);
             }else{
                 //非管理员需要根据角色和用户配置查询允许的站点数据
-                if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+                if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){
                     List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                     List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
                     List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
@@ -300,7 +294,23 @@
         }else{
             siteIds.add(pageList.getSiteId());
         }
-        
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }else{
+            List<Integer> integers = new ArrayList<>();
+            for (Integer siteId : siteIds) {
+                // 校验有没有这个站点的权限
+                List<Boolean> t1= partnerClient.chargeEvaluation(sysUser.getObjectId(),siteId).getData();
+                Boolean b = t1.get(0);
+                if (b){
+                    integers.add(siteId);
+                }
+            }
+            siteIds = integers;
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
         List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, siteIds, pageInfo);
         for (GetOrderEvaluatePageListDTO dto : list) {
             TAppUser appUser = appUserClient.getUserById(dto.getAppUserId()).getData();
@@ -321,6 +331,8 @@
                 List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList());
                 dto.setTags(collect);
             }
+            dto.setAuthReply(roleType == 1 ? true : partnerService.authMenu(objectId, dto.getSiteId(), SiteMenu.CHARGE_EVALUATION_ANSWER.getValue()));
+            dto.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, dto.getSiteId(), SiteMenu.CHARGE_EVALUATION_DEL.getValue()));
         }
         return pageInfo.setRecords(list);
     }
@@ -416,6 +428,10 @@
     public OrderEvaluateVo getOrderEvaluate(String orderId, Integer orderType) {
         TOrderEvaluate orderEvaluate = this.getOne(new LambdaQueryWrapper<TOrderEvaluate>().eq(TOrderEvaluate::getOrderId, orderId).eq(TOrderEvaluate::getOrderType, orderType));
         if(null != orderEvaluate){
+            Long userId = tokenService.getLoginUserApplet().getUserId();
+            if(!orderEvaluate.getAppUserId().equals(userId)){
+                throw new RuntimeException("权限不足");
+            }
             OrderEvaluateVo orderEvaluateVo = new OrderEvaluateVo();
             BeanUtils.copyProperties(orderEvaluate, orderEvaluateVo);
             List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, orderEvaluate.getId()));
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/Page.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/Page.java
new file mode 100644
index 0000000..c358ffe
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/Page.java
@@ -0,0 +1,35 @@
+package com.ruoyi.order.util;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Page<T> implements Serializable {
+ 
+    private List<T> records; //最终查询的结果记录
+    private long total; //共有多少条记录
+    private long size;  //一页显示多少条
+    private long current; //取第几页显示
+    private long pages; //总共几页
+    private long startIndex; //从哪里开始截取集合的下标
+    //获取初始化分页对象 这里用long类型是为了与mybatisplus保持一致
+    public Page<String> getPage(long total, long size ,long current){
+        Page<String> page = new Page<>();
+        page.setTotal(total);
+        page.setSize(size);
+        //总页数的计算 如果集合总记录数能被入参size(一页几条)整除,则为对应商,否则多出部分也独立算一页
+        page.setPages(total % size == 0 ? total / size : total / size + 1);
+        //前端约定入参从1开始,但此处入参调用时会减1,此处+1恢复原值供前端展示
+        page.setCurrent(current + 1);
+        //开始索引的设置
+        page.setStartIndex(size * current);
+        return page;
+    }
+ 
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java
index b9954c8..b6b72a4 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java
@@ -41,11 +41,7 @@
 	}
 	
 	public boolean unlock() {
-		String identifier = redisTemplate.opsForValue().get(lockKey);
-		if (identifier != null && identifier.equals(UUID.randomUUID().toString())) {
-			redisTemplate.delete(lockKey);
-			return true;
-		}
-		return false;
+		redisTemplate.delete(lockKey);
+		return true;
 	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
index dd63798..24247db 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -39,21 +39,9 @@
     @Resource
     private TChargingOrderService chargingOrderService;
 
-    public static void main(String[] args) {
-        LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
-                withDayOfMonth(2);
-        String string = firstDayOfLastMonth.toString();
-        // 将-替换为空字符串
-        string = string.replace("-", "");
-        System.err.println(string);
-    }
-    // 每月2号凌晨12点执行的定时任务
-//    @Scheduled(cron = "0 0 0 2 * ?")
-    // 每天凌晨12点执行的定时任务
 
 
-@Scheduled(cron = "0 0 0 * * ?")
-//@Scheduled(fixedRate = 60000)
+    @Scheduled(cron = "0 0 0 2 * ?")
     public void taskMonth() {
         try {
             // 获取上个月的开始和结束日期
@@ -142,7 +130,7 @@
         }
     }
 
-    // 每天晚上23:59:59执行的定时任务
+    // 每个月最后一天凌晨23点执行的定时任务
     @Scheduled(cron = "0 0 23 * * ?")
     public void taskLastDay() {
         try {
@@ -156,10 +144,10 @@
             LocalDateTime endDateTime = lastDayOfLastMonth.atTime(23, 59, 59); // 设定到最后一秒
             // 构建查询条件
             LambdaQueryWrapper<TChargingBill> queryWrapper = new LambdaQueryWrapper<>();
-//            queryWrapper.ge(TChargingBill::getBillTime,
-//                            Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()))
-//                    .le(TChargingBill::getBillTime,
-//                            Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录
+            queryWrapper.ge(TChargingBill::getBillTime,
+                            Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()))
+                    .le(TChargingBill::getBillTime,
+                            Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录
             List<TChargingBill> list = chargingBillService.list(queryWrapper);
             for (TChargingBill tChargingBill : list) {
                 tChargingBill.setStatus(2);
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml
index c1a7ee9..cd3f4cd 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml
@@ -12,8 +12,8 @@
     allow-circular-references: true
   profiles:
     # 环境配置
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
 ---
 spring:
   config:
@@ -23,7 +23,7 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
@@ -31,7 +31,7 @@
         password: nacos
       config:
         # 配置中心地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         group: DEFAULT_GROUP
         name: ${spring.application.name}
@@ -56,52 +56,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 127.0.0.1:8848
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
@@ -121,7 +121,6 @@
         namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
         username: nacos
         password: nacos
-        ip: 192.168.110.111
       config:
         # 配置中心地址
         server-addr: 192.168.0.137:8848,192.168.0.123:8848
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml
index da1b20f..cd121be 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml
@@ -9,7 +9,7 @@
         <if test="req.type != null and req.type!=0">
             and t1.type = #{req.type}
         </if>
-      <if test="req.state != null ">
+        <if test="req.state != null ">
             and t1.status = #{req.state}
         </if>
         <if test="startTime1 != null and startTime1!=''">
@@ -17,6 +17,12 @@
         </if>
         <if test="req.uid != null and req.uid!=''">
             and t1.id = #{req.uid}
+        </if>
+        <if test="null != req.siteIds and req.siteIds.size()>0" >
+            and t1.site_id in
+            <foreach collection="req.siteIds" close=")" open="(" item="item" separator=",">
+            #{item}
+            </foreach>
         </if>
         and t1.billType = 1
         and t1.del_flag = 0
@@ -34,10 +40,17 @@
         <if test="startTime1 != null and startTime1!=''">
             and (t1.bill_time between #{startTime1} and #{startTime2}
         </if>
-        <if test="req.uid != null and req.uid!=''">
+        <if test="req.uid != null ">
             and t1.id = #{req.uid}
+        </if>
+        <if test="null != req.siteIds and req.siteIds.size()>0" >
+            and t1.site_id in
+            <foreach collection="req.siteIds" close=")" open="(" item="item" separator=",">
+                #{item}
+            </foreach>
         </if>
         and t1.billType = 2
         and t1.del_flag = 0
+        order by t1.create_time desc
     </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index ed930b2..6ed6f33 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -86,6 +86,12 @@
                 #{item}
             </foreach>
         </if>
+        <if test="null != req.siteIds and req.siteIds.size()>0" >
+            and t1.site_id in
+            <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
         <if test="req.orderType != null ">
             and t1.order_type = #{req.orderType}
         </if>
@@ -242,7 +248,8 @@
         co.payment_amount,
         co.create_time as pay_time,
         co.id as order_id,
-        co.app_user_id as user_id
+        co.app_user_id as user_id,
+        1 as type
         FROM t_charging_order_refund re
         LEFT JOIN t_charging_order  co ON re.charging_order_id = co.id
         UNION ALL
@@ -261,7 +268,8 @@
         so.payment_amount,
         so.create_time as pay_time,
         so.id as order_id,
-        so.app_user_id as user_id
+        so.app_user_id as user_id,
+        2 as type
         FROM t_shopping_order_refund re
         LEFT JOIN t_shopping_order so on re.shopping_order_id = so.id
         UNION ALL
@@ -280,7 +288,8 @@
         vo.payment_amount,
         vo.create_time as pay_time,
         vo.id as order_id,
-        vo.app_user_id as user_id
+        vo.app_user_id as user_id,
+        3 as type
         FROM t_vip_order_refund vr
         LEFT JOIN t_vip_order vo on vr.vip_order_id = vo.id
 
@@ -311,7 +320,12 @@
             <if test="chargingPercentProvinceDto.provinceCode != null">
                 AND ts.province_code = #{chargingPercentProvinceDto.provinceCode}
             </if>
-
+            <if test="chargingPercentProvinceDto.siteIds != null and chargingPercentProvinceDto.siteIds.size() > 0">
+                AND site_id IN
+                <foreach collection="chargingPercentProvinceDto.siteIds" item="siteId" open="(" separator="," close=")">
+                    #{siteId}
+                </foreach>
+            </if>
         </where>
         GROUP BY site_id
 
@@ -375,6 +389,12 @@
         select sum(electrovalence) as electrovalence,sum(service_charge) as service_charge,ROUND(sum(electrovalence+service_charge) * 0.006, 2) as commission_amount,sum(sharing_amount) as sharing_amount
         from t_charging_order
         where create_time &gt;= #{sixBefore} and del_flag = 0 and recharge_payment_status = 2
+        <if test="siteIds != null and siteIds.size() > 0">
+            AND site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
     </select>
     <select id="getSumByType" resultType="java.util.Map">
         SELECT
@@ -864,6 +884,12 @@
         <if test="null != req.userIds and req.userIds.size()>0" >
             and t1.app_user_id in
             <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="null != req.siteIds and req.siteIds.size()>0" >
+            and t1.site_id in
+            <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
@@ -1549,9 +1575,13 @@
         select count(1)
         from
             charging_pile_account.t_app_user_car
-        where del_flag = 0 and vehicle_brand  not in
+        where del_flag = 0
+
+        <if test="brands != null and brands.size() > 0">
+          and vehicle_brand  not in
         <foreach collection="brands" item="brand" open="(" separator="," close=")">
             #{brand}
         </foreach>
+        </if>
     </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
index f7ed17b..f90db9e 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
@@ -5,6 +5,12 @@
         select t1.* from
             t_settlement_confirm t1
         where 1=1
+        <if test="null != siteIds and siteIds.size()>0" >
+            and t1.site_id in
+            <foreach collection="siteIds" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
         <if test="time != null and time!='' ">
             AND DATE_FORMAT(t1.start_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m')
         </if>
@@ -19,6 +25,12 @@
         <if test="req.siteIds != null ">
             and t1.site_id = #{req.siteIds}
         </if>
+        <if test="null != req.siteIdss and req.siteIdss.size()>0" >
+            and t1.site_id in
+            <foreach collection="req.siteIdss" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
         <if test="req.type == 1 ">
             <if test="req.startTime != null and req.startTime!=''">
                 and (t1.start_time between #{req.startTime} and #{req.endTime})
diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
index 3bcd182..99073cb 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -16,10 +16,15 @@
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
+import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo;
+import com.ruoyi.order.api.vo.ChargingOrderInfoVO;
+import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
 import com.ruoyi.order.dto.ChargingDetails;
 import com.ruoyi.order.dto.MyChargingOrderInfo;
 import com.ruoyi.order.mapper.TSettlementConfirmMapper;
 import com.ruoyi.order.service.*;
+import com.ruoyi.order.vo.EndOfChargePageInfo;
 import com.ruoyi.other.api.feignClient.IntegralRuleClient;
 import com.ruoyi.other.api.feignClient.UserTagClient;
 import com.ruoyi.other.api.feignClient.VipClient;
@@ -31,7 +36,7 @@
 import javax.annotation.Resource;
 import java.io.PrintWriter;
 import java.math.BigDecimal;
-import java.util.Arrays;
+import java.util.*;
 
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiOrderApplication.class)
 public class RuoYiOrderApplicationTests {
@@ -136,40 +141,6 @@
 	
 	@Test
 	public void test(){
-		Integer id = 75;
-		TChargingOrder one = chargingOrderService.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, 1839480334642704385L).eq(TChargingOrder::getChargingGunId, id)
-				.eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
-		ChargingDetails chargingDetails = new ChargingDetails();
-		chargingDetails.setId(one.getId().toString());
-		TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData();
-		TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData();
-		Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0);
-		chargingDetails.setName(site.getName() + "-" + chargingPile.getName());
-		chargingDetails.setCode(one.getCode());
-		chargingDetails.setStatus(one.getStatus());
-		chargingDetails.setChargingCost(one.getResidualAmount());
-		UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
-		if(null != data){
-			chargingDetails.setChargeCurrent(data.getOutput_current());
-			chargingDetails.setChargeVoltage(data.getOutput_voltage());
-			BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000));
-			chargingDetails.setChargePower(power);
-			chargingDetails.setCompletionRatio(data.getSoc());
-			chargingDetails.setRemainingChargeTime(data.getTime_remaining());
-			chargingDetails.setChargedDegrees(data.getCharging_degree());
-			Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
-			Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
-			chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
-		}
-		ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
-		if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
-			BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity();
-			TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
-			//   续航 = 电池容量 / 续航里程 * soc
-			BigDecimal divide = bms_battery_capacity.divide(new BigDecimal(appUserCar.getEndurance()));
-			BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(divide);
-			chargingDetails.setEndurance(multiply);
-		}
-		System.err.println(JSON.toJSONString(chargingDetails));
+		MyChargingOrderInfo myChargingOrderInfo = chargingOrderService.getMyChargingOrderInfo("1852288949187297282");
 	}
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
index 54cd79b..2513b90 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.Region;
 import com.ruoyi.other.service.IRegionService;
 import io.swagger.annotations.ApiImplicitParam;
@@ -25,6 +27,8 @@
 	private IRegionService regionService;
 	
 	
+	
+	@RequiresPermissions(value = {"/coupon", "/appUser/list", "/vipList", "/coupon/send"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getRegion/{pid}")
 	@ApiOperation(value = "获取省市区数据", tags = {"管理后台-站点管理"})
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java
index d3d7f11..f704b5c 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java
@@ -6,6 +6,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.TActivity;
 import com.ruoyi.other.api.domain.TAdvertising;
 import com.ruoyi.other.api.dto.AdvertisingDTO;
@@ -31,6 +33,9 @@
 
     @Autowired
     private TActivityService activityService;
+    
+    
+    @RequiresPermissions(value = {"/activity/add"}, logical = Logical.OR)
     @PostMapping("/saveActivity")
     @ApiOperation(tags = {"管理后台-活动管理"},value = "活动添加")
     @Log(title = "【活动管理】添加活动", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
@@ -38,6 +43,9 @@
         activityService.save(dto);
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/activity/del"}, logical = Logical.OR)
     @GetMapping("/delete")
     @ApiOperation(tags = {"管理后台-活动管理"},value = "活动删除")
     @Log(title = "【活动管理】删除活动", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
@@ -45,6 +53,9 @@
         activityService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/activity/update"}, logical = Logical.OR)
     @PostMapping("/updateVip")
     @ApiOperation(tags = {"管理后台-活动管理"},value = "活动修改")
     @Log(title = "【活动管理】修改活动", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
@@ -52,16 +63,36 @@
         activityService.updateById(dto);
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/activity/select"}, logical = Logical.OR)
     @GetMapping("/getInfo")
-    @ApiOperation(tags = {"管理后台-活动管理","小程序-个人中心-活动列表"},value = "活动查看详情")
+    @ApiOperation(tags = {"管理后台-活动管理"},value = "活动查看详情")
     public AjaxResult<TActivity> getInfo(Integer id) {
         return AjaxResult.ok(activityService.getById(id));
     }
-    @ApiOperation(tags = {"管理后台-活动管理","小程序-个人中心-活动列表"},value = "活动列表分页查询")
-
+    
+    
+    @GetMapping("/getInfo1")
+    @ApiOperation(tags = {"小程序-个人中心-活动列表"},value = "活动查看详情")
+    public AjaxResult<TActivity> getInfo1(Integer id) {
+        return AjaxResult.ok(activityService.getById(id));
+    }
+    
+    
+    
+    @ApiOperation(tags = {"管理后台-活动管理"},value = "活动列表分页查询")
+    @RequiresPermissions(value = {"/activity/list"}, logical = Logical.OR)
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TActivity>> pageList(@RequestBody AdvertisingDTO dto) {
         return AjaxResult.ok(activityService.pageList(dto));
     }
+    
+    
+    @ApiOperation(tags = {"小程序-个人中心-活动列表"},value = "活动列表分页查询")
+    @PostMapping(value = "/pageList1")
+    public AjaxResult<PageInfo<TActivity>> pageList1(@RequestBody AdvertisingDTO dto) {
+        return AjaxResult.ok(activityService.pageList(dto));
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java
index cf3a218..b3d6371 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java
@@ -6,6 +6,8 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.order.api.feignClient.OrderClient;
 import com.ruoyi.order.api.query.TActivityStatisticsQuery;
 import com.ruoyi.order.api.vo.TActivityStatisticslVO;
@@ -32,9 +34,9 @@
 public class TActivityStatisticsController {
     @Autowired
     private OrderClient orderClient;
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/activityExpense"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-活动费用统计"},value = "管理后台活动费用统计")
     @PostMapping(value = "/pageList")
     public AjaxResult<TActivityVO> pageList(@RequestBody TActivityStatisticsQuery query) {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java
index e7112fb..22ecb7f 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java
@@ -9,6 +9,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.TAdvertising;
 import com.ruoyi.other.api.domain.TVip;
 import com.ruoyi.other.api.dto.AdvertisingDTO;
@@ -50,6 +52,9 @@
 
     @Autowired
     private TAdvertisingService advertisingService;
+    
+    
+    @RequiresPermissions(value = {"/advertisement/add"}, logical = Logical.OR)
     @PostMapping("/saveAdvertising")
     @ApiOperation(tags = {"管理后台-广告管理"},value = "广告添加")
     @Log(title = "【广告管理】添加广告", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
@@ -57,6 +62,9 @@
         advertisingService.save(dto);
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/advertisement/del"}, logical = Logical.OR)
     @GetMapping("/delete")
     @ApiOperation(tags = {"管理后台-广告管理"},value = "广告删除")
     @Log(title = "【广告管理】删除广告", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
@@ -64,6 +72,9 @@
         advertisingService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/advertisement/update"}, logical = Logical.OR)
     @PostMapping("/updateVip")
     @ApiOperation(tags = {"管理后台-广告管理"},value = "广告修改")
     @Log(title = "【广告管理】修改广告", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
@@ -80,14 +91,19 @@
         }
         return AjaxResult.success();
     }
+    
+    
+    
+    @RequiresPermissions(value = {"/advertisement/select"}, logical = Logical.OR)
     @GetMapping("/getInfo")
     @ApiOperation(tags = {"管理后台-广告管理"},value = "广告查看详情")
     public AjaxResult<TAdvertising> getInfo(Integer id) {
         return AjaxResult.ok(advertisingService.getById(id));
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/advertisement"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-广告管理"},value = "广告列表分页查询")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TAdvertising>> pageList(@RequestBody AdvertisingDTO dto) {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
index f666844..22124d1 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -13,6 +13,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.Region;
 import com.ruoyi.other.api.domain.TCoupon;
 import com.ruoyi.other.api.domain.TGoods;
@@ -57,6 +59,14 @@
 
     @Autowired
     private AppCouponClient appCouponClient;
+    
+    @Autowired
+    private IRegionService regionService;
+    
+    
+    
+    
+    
 
     /**
      * 远程调用 根据名称 查询优惠券ids
@@ -68,6 +78,9 @@
                 .eq("name", name)).stream().map(TCoupon::getId).collect(Collectors.toList());
         return R.ok(collect);
     }
+    
+    
+    @RequiresPermissions(value = {"/coupon/add"}, logical = Logical.OR)
     @PostMapping("/saveGoods")
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券添加")
     @Log(title = "【优惠券管理】添加优惠券", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
@@ -75,9 +88,9 @@
         tCouponService.save(dto);
         return AjaxResult.success();
     }
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/coupon/del"}, logical = Logical.OR)
     @GetMapping("/delete")
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券删除")
     @Log(title = "【优惠券管理】删除优惠券", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
@@ -85,9 +98,9 @@
         tCouponService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return AjaxResult.success();
     }
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/coupon/update"}, logical = Logical.OR)
     @PostMapping("/updateVip")
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券修改")
     @Log(title = "【优惠券管理】修改优惠券", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
@@ -95,9 +108,9 @@
         tCouponService.updateById(dto);
         return AjaxResult.success();
     }
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/coupon/select"}, logical = Logical.OR)
     @GetMapping("/getInfo")
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券查看详情")
     public AjaxResult<TCoupon> getInfo(Integer id) {
@@ -108,9 +121,9 @@
         byId.setUseCount(appCouponClient.getUseCountByCouponId(id).getData());
         return AjaxResult.ok(byId);
     }
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/coupon/select"}, logical = Logical.OR)
     @PostMapping("/exchangeRecord")
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券查看详情-兑换记录")
     public AjaxResult<PageInfo<ExchangeRecordVO>> exchangeRecord(@RequestBody ExchangeRecordGoodsQuery dto) {
@@ -137,10 +150,10 @@
         exchangeRecordVOPageInfo.setRecords(data);
         return AjaxResult.ok(exchangeRecordVOPageInfo);
     }
-
-
-    @Autowired
-    private IRegionService regionService;
+    
+    
+    
+    @RequiresPermissions(value = {"/coupon/send"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "发放优惠券")
     @PostMapping(value = "/grantCoupon")
     @Log(title = "【优惠券管理】发放优惠券", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
@@ -180,12 +193,17 @@
         appCouponClient.grantCoupon(dto);
         return AjaxResult.success();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/coupon"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券列表分页查询")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TCoupon>> pageList(@RequestBody CouponQuery dto) {
         return AjaxResult.ok(tCouponService.pageList(dto));
     }
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/list"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券列表分页查询")
     @PostMapping(value = "/pageList3")
     public AjaxResult<List<TCoupon>> pageList() {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java
index 6e3ae1c..4d800c2 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java
@@ -9,6 +9,8 @@
 import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.other.api.domain.TEnterpriseUserApplication;
 import com.ruoyi.other.query.PassDto;
@@ -57,7 +59,8 @@
         dto.setAppUserId(tokenService.getLoginUserApplet().getUserId());
         return AjaxResult.ok(enterpriseUserApplicationService.save(dto));
     }
-
+    
+    @RequiresPermissions(value = {"/groupUserApplication/add"}, logical = Logical.OR)
     @Log(title = "【集团用户申请】添加集团用户申请", businessType = BusinessType.INSERT)
     @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "后台添加集团用户申请")
     @PostMapping(value = "/back/add")
@@ -65,8 +68,9 @@
         // 用户id
         return AjaxResult.ok(enterpriseUserApplicationService.save(dto));
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/groupUserApplication"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "集团用户列表")
     @PostMapping(value = "/page")
     public R<Page<TEnterpriseUserApplication>> page(@RequestBody EnterpriseQuery enterpriseQuery) {
@@ -83,8 +87,9 @@
             return R.ok(page);
 //        }
     }
-
-
+    
+    
+    @RequiresPermissions(value = {"/groupUserApplication/export"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "导出")
     @PutMapping(value = "/export")
     @Log(title = "【申请建桩】导出建桩申请列表", businessType = BusinessType.EXPORT)
@@ -117,9 +122,10 @@
 //            }
 //        }
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/groupUserApplication/remark"}, logical = Logical.OR)
     @Log(title = "【集团用户申请】填写备注", businessType = BusinessType.INSERT)
     @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "备注")
     @PostMapping(value = "/remark")
@@ -132,6 +138,8 @@
         return AjaxResult.success();
     }
     
+    
+    @RequiresPermissions(value = {"/groupUserApplication/del"}, logical = Logical.OR)
     @Log(title = "【集团用户申请】删除申请数据", businessType = BusinessType.DELETE)
     @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "删除")
     @DeleteMapping(value = "/delete")
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
index 2d7e91c..dd476f4 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
@@ -8,6 +8,8 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.TEvaluationTag;
 import com.ruoyi.other.api.domain.TInvoiceType;
 import com.ruoyi.other.api.vo.TEvaluationTagVO;
@@ -47,9 +49,10 @@
     public R<List<TEvaluationTagVO>> getList() {
         return R.ok(evaluationTagService.getList());
     }
-
     
     
+    
+    @RequiresPermissions(value = {"/evaluationTag"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping("/pageList")
     @ApiOperation(value = "获取评价标签列表", tags = {"管理后台-评价标签设置"})
@@ -59,6 +62,7 @@
     }
     
     
+    @RequiresPermissions(value = {"/evaluationTag/add"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping("/addEvaluationTag")
     @ApiOperation(value = "添加评价标签", tags = {"管理后台-评价标签设置"})
@@ -68,6 +72,7 @@
         return AjaxResult.success();
     }
     
+    @RequiresPermissions(value = {"/evaluationTag/update"}, logical = Logical.OR)
     @ResponseBody
     @GetMapping("/getEvaluationTagInfo/{id}")
     @ApiOperation(value = "获取评价标签详情", tags = {"管理后台-评价标签设置"})
@@ -77,6 +82,7 @@
     }
     
     
+    @RequiresPermissions(value = {"/evaluationTag/update"}, logical = Logical.OR)
     @ResponseBody
     @PostMapping("/editEvaluationTag")
     @ApiOperation(value = "编辑评价标签", tags = {"管理后台-评价标签设置"})
@@ -87,6 +93,7 @@
     }
     
     
+    @RequiresPermissions(value = {"/evaluationTag/del"}, logical = Logical.OR)
     @ResponseBody
     @DeleteMapping("/delEvaluationTag")
     @ApiOperation(value = "删除评价标签", tags = {"管理后台-评价标签设置"})
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
index c003b2e..0ef3d4a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -19,6 +19,9 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.feignClient.OrderClient;
 import com.ruoyi.order.api.model.TShoppingOrder;
@@ -30,10 +33,15 @@
 import com.ruoyi.other.service.TActivityService;
 import com.ruoyi.other.service.TCouponService;
 import com.ruoyi.other.service.TGoodsService;
+import com.ruoyi.other.util.RedisLock;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.vo.AliPaymentReq;
+import com.ruoyi.payment.api.vo.AliPaymentResp;
 import com.ruoyi.payment.api.vo.PaymentOrder;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -41,6 +49,8 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -58,7 +68,6 @@
     private TGoodsService goodsService;
     @Autowired
     private TActivityService activityService;
-
     @Resource
     private TokenService tokenService;
     @Resource
@@ -71,6 +80,11 @@
     private TCouponService couponService;
     @Resource
     private WxPaymentClient wxPaymentClient;
+    @Resource
+    private RedisService redisService;
+    
+    @Autowired
+    public RedisTemplate redisTemplate;
 
 
     /**
@@ -84,7 +98,9 @@
                 .like("name", name)).stream().map(TGoods::getId).collect(Collectors.toList());
         return R.ok(collect);
     }
-
+    
+    
+    @RequiresPermissions(value = {"/goods/add"}, logical = Logical.OR)
     @PostMapping("/saveGoods")
     @ApiOperation(tags = {"管理后台-商品管理"},value = "商品添加")
     @Log(title = "【商品管理】添加商品", businessType = BusinessType.INSERT)
@@ -92,9 +108,10 @@
         goodsService.save(dto);
         return AjaxResult.success();
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/goods/del"}, logical = Logical.OR)
     @GetMapping("/delete")
     @ApiOperation(tags = {"管理后台-商品管理"},value = "商品删除")
     @Log(title = "【商品管理】删除商品", businessType = BusinessType.DELETE)
@@ -102,9 +119,10 @@
         goodsService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return AjaxResult.success();
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/goods/update"}, logical = Logical.OR)
     @PostMapping("/updateVip")
     @ApiOperation(tags = {"管理后台-商品管理"},value = "商品修改")
     @Log(title = "【商品管理】修改商品", businessType = BusinessType.UPDATE)
@@ -112,9 +130,9 @@
         goodsService.updateById(dto);
         return AjaxResult.success();
     }
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/goods/select"}, logical = Logical.OR)
     @GetMapping("/getInfo")
     @ApiOperation(tags = {"管理后台-商品管理"},value = "商品查看详情")
     public AjaxResult<TGoods> getInfo(Integer id) {
@@ -149,10 +167,11 @@
             return R.ok(byId);
             }
     }
-
-
-
-
+    
+    
+    
+    
+    @RequiresPermissions(value = {"/goods"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-商品管理"},value = "商品列表分页查询")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TGoods>> pageList(@RequestBody GoodsDTO dto) {
@@ -174,7 +193,6 @@
         //检查当前用户积分是否够
         Long userId = tokenService.getLoginUserApplet().getUserId();
         Integer point = 0;
-
         if (exchangeDto.getGoodType()==1) {
             //查询当前商品信息
             TGoods good = goodsService.getById(exchangeDto.getGoodId());
@@ -200,91 +218,102 @@
         return R.ok();
 
     }
+    
+    
+    
     @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品")
     @PostMapping(value = "/app/shop")
     public AjaxResult<PageInfo<TGoods>> shop(@RequestBody ExchangeDto exchangeDto) {
-        //检查当前用户积分是否够
-        Long userId = tokenService.getLoginUserApplet().getUserId();
-        Integer point = 0;
-        TAppUser user = appUserClient.getUserById(userId).getData();
-
-        if (exchangeDto.getGoodType()==1) {
-            //查询当前商品信息
-            TGoods good = goodsService.getById(exchangeDto.getGoodId());
-            point = good.getRedeemPoints();
-            //检查当前用户是否到达兑换上限
-            Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
-            if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) {
-                return AjaxResult.error("当前用户已兑换"+count+"张");
+        //redis锁 和支付使用同一个锁
+        RedisLock redisLock = new RedisLock(redisTemplate, "POINT_EXCHANGE_LOCK", 5, 30000);
+        try {
+            redisLock.lock();
+            Long userId = tokenService.getLoginUserApplet().getUserId();
+            Integer point = 0;
+            TAppUser user = appUserClient.getUserById(userId).getData();
+            if (exchangeDto.getGoodType()==1) {
+                //查询当前商品信息
+                TGoods good = goodsService.getById(exchangeDto.getGoodId());
+                point = good.getRedeemPoints();
+                if (user.getPoints().compareTo(good.getRedeemPoints()) < 0){
+                    return AjaxResult.error("当前用户积分不足");
+                }
+                //检查当前用户是否到达兑换上限
+                Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
+                if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) {
+                    return AjaxResult.error("当前用户已兑换"+count+"张");
+                }else {
+                    //减少库存
+                    if (good.getInventory()!=-1) {
+                        good.setInventory(good.getInventory() - exchangeDto.getNum());
+                        goodsService.updateById(good);
+                    }
+                }
             }else {
-                //减少库存
-                if (good.getInventory()!=-1) {
-                    good.setInventory(good.getInventory() - exchangeDto.getNum());
-                    goodsService.updateById(good);
+                TCoupon coupon = couponService.getById(exchangeDto.getGoodId());
+                point = coupon.getRedeemPoints();
+                if (user.getPoints().compareTo(coupon.getRedeemPoints()) < 0){
+                    return AjaxResult.error("当前用户积分不足");
+                }
+                Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
+                if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) {
+                    return AjaxResult.error("当前用户已到达兑换"+coupon+"次");
+                }else {
+                    if (coupon.getInventoryQuantity()!=-1) {
+                        coupon.setInventoryQuantity(coupon.getInventoryQuantity() - 1);
+                        couponService.updateById(coupon);
+                    }
                 }
             }
-        if (user.getPoints()<good.getRedeemPoints()){
-            return AjaxResult.error("当前用户积分不足");
-             }
-        }else {
-            TCoupon coupon = couponService.getById(exchangeDto.getGoodId());
-            point = coupon.getRedeemPoints();
-
-            Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
-            if (user.getPoints()<point){
-                return AjaxResult.error("当前用户积分不足");
-            }
-            if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) {
-                return AjaxResult.error("当前用户已到达兑换"+coupon+"次");
-            }else {
-                if (coupon.getInventoryQuantity()!=-1) {
-                    coupon.setInventoryQuantity(coupon.getInventoryQuantity() - 1);
-                    couponService.updateById(coupon);
+            exchangeDto.setPoint(point);
+            exchangeDto.setUserId(userId);
+            //生成积分兑换成功的订单
+            R<ExchangeBackDto> longR = orderClient.exchangeCreate(exchangeDto);
+            if (exchangeDto.getGoodType()==2) {
+                TCoupon coupon = couponService.getById(exchangeDto.getGoodId());
+        
+                //如果是优惠卷,赠送优惠卷给用户
+                GrantCouponDto grantCouponDto = new GrantCouponDto();
+                grantCouponDto.setUserIds(userId.toString());
+                grantCouponDto.setCouponId(exchangeDto.getGoodId());
+                grantCouponDto.setWaysToObtain(1);
+                grantCouponDto.setEndTime(LocalDateTime.now());
+                grantCouponDto.setType(3);
+                switch (coupon.getValidityPeriodMode()){
+                    case 1:
+                        grantCouponDto.setEndTime(coupon.getEndTime());
+                        break;
+                    case 2:
+                        grantCouponDto.setEndTime(LocalDateTime.now().plusDays(coupon.getDays()));
+                        break;
                 }
+                appCouponClient.grantCoupon(grantCouponDto);
             }
-
-
+            //生成消耗积分的记录
+            PointChangeDto pointChangeDto = new PointChangeDto();
+            pointChangeDto.setUserId(userId);
+            pointChangeDto.setPoints(point);
+            pointChangeDto.setRemark(String.valueOf(longR.getData().getId()));
+            pointChangeDto.setType(6);
+            pointChangeDto.setCode(longR.getData().getCode());
+            appUserClient.changeDown(pointChangeDto);
+            return AjaxResult.success(longR.getData().getId());
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            //解锁
+            redisLock.unlock();
         }
-        exchangeDto.setPoint(point);
-        exchangeDto.setUserId(userId);
-        //生成积分兑换成功的订单
-        R<ExchangeBackDto> longR = orderClient.exchangeCreate(exchangeDto);
-        if (exchangeDto.getGoodType()==2) {
-            TCoupon coupon = couponService.getById(exchangeDto.getGoodId());
-
-            //如果是优惠卷,赠送优惠卷给用户
-            GrantCouponDto grantCouponDto = new GrantCouponDto();
-            grantCouponDto.setUserIds(userId.toString());
-            grantCouponDto.setCouponId(exchangeDto.getGoodId());
-            grantCouponDto.setWaysToObtain(1);
-            grantCouponDto.setEndTime(LocalDateTime.now());
-            grantCouponDto.setType(3);
-            switch (coupon.getValidityPeriodMode()){
-                case 1:
-                    grantCouponDto.setEndTime(coupon.getEndTime());
-                    break;
-                case 2:
-                    grantCouponDto.setEndTime(LocalDateTime.now().plusDays(coupon.getDays()));
-                    break;
-            }
-            appCouponClient.grantCoupon(grantCouponDto);
-        }
-        //生成消耗积分的记录
-        PointChangeDto pointChangeDto = new PointChangeDto();
-        pointChangeDto.setUserId(userId);
-        pointChangeDto.setPoints(point);
-        pointChangeDto.setRemark(String.valueOf(longR.getData().getId()));
-        pointChangeDto.setType(6);
-        pointChangeDto.setCode(longR.getData().getCode());
-        appUserClient.changeDown(pointChangeDto);
-        return AjaxResult.success(longR.getData().getId());
-
+        return AjaxResult.success();
 
     }
 
+    @Resource
+    private AliPaymentClient aliPaymentClient;
+
     @ApiOperation(tags = {"小程序-现金商城"},value = "支付商品")
     @PostMapping(value = "/app/pay")
-    public R<Map<String, Object>> pay(@RequestBody ExchangeDto exchangeDto) {
+    public Object pay(@RequestBody ExchangeDto exchangeDto) {
         Long userId = tokenService.getLoginUserApplet().getUserId();
         TAppUser user = appUserClient.getUserById(userId).getData();
         boolean isVip = false;
@@ -361,13 +390,20 @@
             mapR.getData().put("orderId",shopOrder.getId().toString());
             return    mapR;
         }else {
-            //todo 罗 支付宝支付
-            return R.ok();
+            AliPaymentReq req = new AliPaymentReq();
+            req.setOutTradeNo(shopOrder.getCode());
+            req.setTotalAmount(shopOrder.getPaymentAmount().toString());
+            req.setSubject("购买商品");
+            req.setBuyerOpenId(user.getAliOpenid());
+            req.setBody("购买商品");
+            req.setNotifyUrl("/payment/ali/callBack");
+            AliPaymentResp data = aliPaymentClient.payment(req).getData();
+            if(null != data){
+                data.setOrderId(shopOrder.getId().toString());
+                return AjaxResult.success(data);
+            }
         }
-
-
-
-
+        return AjaxResult.success();
     }
 
     
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/THtmlController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/THtmlController.java
index 0e93b75..e301848 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/THtmlController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/THtmlController.java
@@ -5,6 +5,8 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.THtml;
 import com.ruoyi.other.api.domain.TNotice;
 import com.ruoyi.other.service.THtmlService;
@@ -26,9 +28,9 @@
 public class THtmlController {
     @Resource
     private THtmlService htmlService;
-
-
-
+    
+    
+    @RequiresPermissions(value = {"/protocolServerDescription"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-内容设置-协议服务"},value = "新增修改")
     @PostMapping(value = "/saveOrUpdate")
     @Log(title = "【协议服务】新增修改协议", businessType = BusinessType.INSERT)
@@ -42,7 +44,10 @@
         }
     return AjaxResult.success();
     }
-
+    
+    
+    
+    @RequiresPermissions(value = {"/protocolServerDescription"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-内容设置-协议服务"},value = "查询")
     @GetMapping(value = "/selectByType/{type}")
     public AjaxResult selectByType(@PathVariable Integer type) {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
index 39e822d..16bdb03 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
@@ -12,6 +12,8 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.other.api.domain.THtml;
 import com.ruoyi.other.api.domain.TIntegralRule;
@@ -67,12 +69,18 @@
     private TokenService tokenService;
     @Autowired
     private TVipService vipService;
+    
+    
+    @RequiresPermissions(value = {"/IntegralSetting"}, logical = Logical.OR)
     @GetMapping("/getSet")
-    @ApiOperation(tags = {"管理后台-积分管理","小程序-个人中心-签到"},value = "获取积分设置")
+    @ApiOperation(tags = {"管理后台-积分管理"},value = "获取积分设置")
     public R<TIntegralRule> getSet() {
         TIntegralRule res = integralRuleService.getOne(new QueryWrapper<>());
         return R.ok(res);
     }
+    
+    
+    
     @GetMapping("/getSet1")
     @ApiOperation(tags = {"小程序-个人中心-签到"},value = "获取积分设置")
     public R<TIntegralRule> getSet1() {
@@ -92,6 +100,8 @@
         return R.ok(res);
     }
     
+    
+    @RequiresPermissions(value = {"/IntegralSetting"}, logical = Logical.OR)
     @PostMapping("/saveSet")
     @ApiOperation(tags = {"管理后台-积分管理"},value = "保存积分设置")
     @Log(title = "【积分管理】保存积分设置", businessType = BusinessType.INSERT)
@@ -105,8 +115,10 @@
         }
         return R.ok();
     }
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/html"}, logical = Logical.OR)
     @GetMapping("/getInfo")
     @ApiOperation(tags = {"管理后台-积分管理"},value = "type 1=积分规则说明," +
             "2=会员折扣说明," +
@@ -126,9 +138,10 @@
         }
         return R.ok(g.getContent());
     }
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/html"}, logical = Logical.OR)
     @PostMapping("/saveInfo")
     @ApiOperation(tags = {"管理后台-积分管理"},value = "保存积分说明")
     @Log(title = "【积分管理】保存积分说明", businessType = BusinessType.INSERT)
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java
index 12d6fcb..85af561 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java
@@ -7,6 +7,8 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.TInvoiceType;
 import com.ruoyi.other.query.InvoiceTypePageList;
 import com.ruoyi.other.service.TInvoiceTypeService;
@@ -35,6 +37,7 @@
 	private TInvoiceTypeService invoiceTypeService;
 	
 	
+	@RequiresPermissions(value = {"/invoiceType"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/pageList")
 	@ApiOperation(value = "获取发票类型列表", tags = {"管理后台-发票类型管理"})
@@ -42,6 +45,9 @@
 		PageInfo<TInvoiceType> pageInfo = invoiceTypeService.pageList(pageList);
 		return AjaxResult.success(pageInfo);
 	}
+	
+	
+	@RequiresPermissions(value = {"/invoiceManagement"}, logical = Logical.OR)
 	@GetMapping("/pageListR")
 	@ApiOperation(value = "获取开票公司和类型列表", tags = {"管理后台-发票管理"})
 	public R<List<TInvoiceType>> pageListR(String invoicingCompany ){
@@ -55,6 +61,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/invoiceType/add"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/addInvoiceType")
 	@ApiOperation(value = "添加发票类型", tags = {"管理后台-发票类型管理"})
@@ -64,6 +71,9 @@
 		return AjaxResult.success();
 	}
 	
+	
+	
+	@RequiresPermissions(value = {"/invoiceType/select", "/invoiceType/update"}, logical = Logical.OR)
 	@ResponseBody
 	@GetMapping("/getInvoiceTypeInfo/{id}")
 	@ApiOperation(value = "获取发票类型详情", tags = {"管理后台-发票类型管理"})
@@ -73,6 +83,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/invoiceType/update"}, logical = Logical.OR)
 	@ResponseBody
 	@PostMapping("/editInvoiceType")
 	@ApiOperation(value = "编辑发票类型", tags = {"管理后台-发票类型管理"})
@@ -83,6 +94,7 @@
 	}
 	
 	
+	@RequiresPermissions(value = {"/invoiceType/del"}, logical = Logical.OR)
 	@ResponseBody
 	@DeleteMapping("/delInvoiceType")
 	@ApiOperation(value = "删除发票类型", tags = {"管理后台-发票类型管理"})
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TNoticeController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TNoticeController.java
index ff18893..a88c9a0 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TNoticeController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TNoticeController.java
@@ -6,6 +6,8 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.TNotice;
 import com.ruoyi.other.api.dto.NoticeQueryDto;
 import com.ruoyi.other.mapper.SysNoticeMapper;
@@ -31,7 +33,9 @@
 public class TNoticeController {
     @Resource
     private TNoticeService noticeService;
-
+    
+    
+    @RequiresPermissions(value = {"/publicAnnouncementManagement/add", "/publicAnnouncementManagement/update"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-内容设置-公告管理"},value = "新增修改")
     @PostMapping(value = "/saveOrUpdate")
     @Log(title = "【公告管理】新增修改公告", businessType = BusinessType.INSERT)
@@ -39,7 +43,9 @@
         noticeService.saveOrUpdate(notice);
         return AjaxResult.success();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/publicAnnouncementManagement/del"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-内容设置-公告管理"},value = "删除")
     @DeleteMapping(value = "/deleteById")
     @Log(title = "【公告管理】删除公告", businessType = BusinessType.DELETE)
@@ -51,7 +57,9 @@
 
         return AjaxResult.success();
     }
-
+    
+    
+    @RequiresPermissions(value = {"/publicAnnouncementManagement"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-内容设置-公告管理"},value = "查询")
     @PostMapping(value = "/pageList")
     public AjaxResult<Page<TNotice>> authPageList(@RequestBody NoticeQueryDto query) {
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
index 8aa6085..8770c49 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
@@ -5,6 +5,8 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.other.api.domain.TSystemConfiguration;
 import com.ruoyi.other.service.TSystemConfigurationService;
 import io.swagger.annotations.ApiOperation;
@@ -34,15 +36,28 @@
     /**
      * 查看系统设置
      */
-    @ApiOperation(tags = {"小程序-系统设置","后台-内容设置"},value = "联系客服,查询设置")
+    @RequiresPermissions(value = {"/customerServiceInformation", "/systemContentSetting"}, logical = Logical.OR)
+    @ApiOperation(tags = {"后台-内容设置"},value = "联系客服,查询设置")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TSystemConfiguration> getDetailById(@RequestParam("type")@ApiParam(value = "1=客服信息,2=系统设置") Integer type) {
         return AjaxResult.ok(systemConfigurationService.getOne(Wrappers.lambdaQuery(TSystemConfiguration.class)
                 .eq(TSystemConfiguration::getType, type)));
     }
-
-
-
+    
+    
+    /**
+     * 查看系统设置
+     */
+    @ApiOperation(tags = {"小程序-系统设置"},value = "联系客服,查询设置")
+    @GetMapping(value = "/getDetailById1")
+    public AjaxResult<TSystemConfiguration> getDetailById1(@RequestParam("type")@ApiParam(value = "1=客服信息,2=系统设置") Integer type) {
+        return AjaxResult.ok(systemConfigurationService.getOne(Wrappers.lambdaQuery(TSystemConfiguration.class)
+                .eq(TSystemConfiguration::getType, type)));
+    }
+    
+    
+    
+    @RequiresPermissions(value = {"/customerServiceInformation", "/systemContentSetting"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-内容设置"},value = "客户信息,系统内容设置")
     @PostMapping(value = "/save")
     @Log(title = "【系统内容设置】保存系统内容设置", businessType = BusinessType.INSERT)
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
index 8ebbd2f..02c2d68 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
@@ -17,6 +17,8 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.other.api.domain.TCoupon;
 import com.ruoyi.other.api.domain.TIntegralRule;
@@ -59,6 +61,9 @@
     private TCouponService couponService;
     @Resource
     private TokenService tokenService;
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/addOrdinaryMember", "/vipSetting/addInternalMember"}, logical = Logical.OR)
     @PostMapping("/saveVip")
     @ApiOperation(tags = {"管理后台-会员管理"},value = "会员添加")
     @Log(title = "【会员管理】添加会员", businessType = BusinessType.INSERT)
@@ -66,6 +71,9 @@
         vipService.save(dto);
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/del"}, logical = Logical.OR)
     @GetMapping("/delete")
     @ApiOperation(tags = {"管理后台-会员管理"},value = "会员删除")
     @Log(title = "【会员管理】删除会员", businessType = BusinessType.DELETE)
@@ -73,6 +81,9 @@
         vipService.removeBatchByIds(Arrays.asList(ids.split(",")));
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/update"}, logical = Logical.OR)
     @PostMapping("/updateVip")
     @ApiOperation(tags = {"管理后台-会员管理"},value = "会员修改")
     @Log(title = "【会员管理】修改会员", businessType = BusinessType.UPDATE)
@@ -80,6 +91,9 @@
             vipService.updateById(dto);
         return AjaxResult.success();
     }
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/select"}, logical = Logical.OR)
     @GetMapping("/getInfo")
     @ApiOperation(tags = {"管理后台-会员管理"},value = "会员查看详情")
     public AjaxResult<TVip> getInfo(Integer id) {
@@ -107,16 +121,19 @@
     public R<TVip> getInfo1(@RequestParam("id")Integer id) {
         return R.ok(vipService.getById(id));
     }
-
-
-
-
+    
+    
+    
+    @RequiresPermissions(value = {"/vipSetting/list", "/vipOrder"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-会员管理"},value = "会员列表分页查询")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TVip>> pageList(@RequestBody BasePage basePage) {
         return AjaxResult.ok(vipService.pageList(basePage.getPageCurr(), basePage.getPageSize()));
     }
-
+    
+    
+    
+    @RequiresPermissions(value = {"/appUser/list", "/appUser/giftVip", "/appUser/gift_vip", "/vipList"}, logical = Logical.OR)
     @ApiOperation(tags = {"会员下拉框"},value = "会员列表分页查询")
     @GetMapping(value = "/select")
     public AjaxResult<List<TVip>> select() {
@@ -322,7 +339,7 @@
 
     @ApiOperation(value = "购买会员", tags = {"小程序-个人中心"})
     @GetMapping("/vipInfo/pay")
-    public R vipInfoPay(@RequestParam("vipId")Integer vipId,@RequestParam("buyType") Integer buyType,
+    public Object vipInfoPay(@RequestParam("vipId")Integer vipId,@RequestParam("buyType") Integer buyType,
         @RequestParam("payType") Integer payType
     ) {
 
@@ -366,7 +383,7 @@
 
         Long userId = tokenService.getLoginUserApplet().getUserId();
 
-        return R.ok(vipService.vipInfoPay(byId,payMoney,payType,discountMoney,discount,buyType,userId));
+        return vipService.vipInfoPay(byId,payMoney,payType,discountMoney,discount,buyType,userId);
     }
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TVipService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TVipService.java
index 522dd5a..7908f43 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TVipService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TVipService.java
@@ -1,6 +1,7 @@
 package com.ruoyi.other.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TVip;
 
@@ -19,5 +20,5 @@
     PageInfo<TVip> pageList(Integer pageCurr,Integer pageSize);
 
 
-    Object vipInfoPay(TVip byId, BigDecimal payMoney, Integer payType,BigDecimal discountMoney,BigDecimal discount,Integer buyType, Long userId);
+    Object vipInfoPay(TVip byId, BigDecimal payMoney, Integer payType, BigDecimal discountMoney, BigDecimal discount, Integer buyType, Long userId);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java
index 0bad395..6df0a5e 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TVipServiceImpl.java
@@ -124,7 +124,7 @@
             paymentOrder.setAmount(shopOrder.getPaymentAmount());
             paymentOrder.setOpenId(user.getWxOpenid());
             paymentOrder.setDescription("购买会员");
-            return    wxPaymentClient.orderPay(paymentOrder).getData();
+            return    AjaxResult.success(wxPaymentClient.orderPay(paymentOrder).getData());
         }else {
             AliPaymentReq req = new AliPaymentReq();
             req.setOutTradeNo(shopOrder.getCode());
@@ -132,9 +132,9 @@
             req.setSubject("充电充值");
             req.setBuyerOpenId(user.getAliOpenid());
             req.setBody("充电充值");
+            req.setNotifyUrl("/payment/ali/callBack");
             AliPaymentResp data = aliPaymentClient.payment(req).getData();
             if(null != data){
-                data.setNotifyUrl(data.getNotifyUrl() + "/callBack/ali/all");
                 return AjaxResult.success(data);
             }
         }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/RedisLock.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/RedisLock.java
new file mode 100644
index 0000000..9136ab8
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/RedisLock.java
@@ -0,0 +1,47 @@
+package com.ruoyi.other.util;
+
+import org.springframework.data.redis.core.RedisTemplate;
+
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/9/26 18:43
+ */
+public class RedisLock {
+	private RedisTemplate<String, String> redisTemplate;
+	private String lockKey;
+	private int expireTime; // 锁的超时时间
+	private int timeout; // 获取锁的超时时间
+	
+	
+	public RedisLock(RedisTemplate<String, String> redisTemplate, String lockKey, int expireTime, int timeout) {
+		this.redisTemplate = redisTemplate;
+		this.lockKey = lockKey;
+		this.expireTime = expireTime;
+		this.timeout = timeout;
+	}
+	
+	public boolean lock() {
+		String identifier = UUID.randomUUID().toString();
+		long end = System.currentTimeMillis() + timeout;
+		while (System.currentTimeMillis() < end) {
+			if (redisTemplate.opsForValue().setIfAbsent(lockKey, identifier, expireTime, TimeUnit.SECONDS)) {
+				return true;
+			}
+			// 可以使用延时来减少CPU占用
+			try {
+				Thread.sleep(100);
+			} catch (InterruptedException e) {
+				Thread.currentThread().interrupt();
+			}
+		}
+		return false;
+	}
+	
+	public boolean unlock() {
+		redisTemplate.delete(lockKey);
+		return true;
+	}
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
index fc51ae5..f251945 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
@@ -12,8 +12,8 @@
     allow-circular-references: true
   profiles:
     # 环境配置
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
 ---
 spring:
   config:
@@ -23,7 +23,7 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
@@ -31,7 +31,7 @@
         password: nacos
       config:
         # 配置中心地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         group: DEFAULT_GROUP
         name: ${spring.application.name}
@@ -56,52 +56,52 @@
     type: nacos
     nacos:
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      data-id: seata-server.properties
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      data-id: seata-server.properties
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      data-id: seata-server.properties
+      username: nacos
+      password: nacos
   registry:
     type: nacos
     nacos:
       application: seata-server
       # 开发环境
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
-      group: DEFAULT_GROUP
-      username: nacos
-      password: nacos
-      # 生产环境
-#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
 #      group: DEFAULT_GROUP
 #      username: nacos
 #      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+      group: DEFAULT_GROUP
+      username: nacos
+      password: nacos
   cloud:
     nacos:
       discovery:
         # 开发环境
-        server-addr: 192.168.110.169:8848 # nacos注册中心地址
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
-        group: DEFAULT_GROUP
-        application: seata-server #Nacos 中 Seata 名称
-        username: nacos
-        password: nacos
-        # 生产环境
-#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
-#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+#        server-addr: 127.0.0.1:8848
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
 #        group: DEFAULT_GROUP
 #        application: seata-server #Nacos 中 Seata 名称
 #        username: nacos
 #        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        group: DEFAULT_GROUP
+        application: seata-server #Nacos 中 Seata 名称
+        username: nacos
+        password: nacos
     sentinel:
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/config/AliProperties.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/config/AliProperties.java
index 631dea4..dab2da2 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/config/AliProperties.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/config/AliProperties.java
@@ -3,6 +3,7 @@
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 
 /**
@@ -11,6 +12,7 @@
  */
 @Data
 @Component
+@Configuration
 @ConfigurationProperties(prefix = "payment.ali")
 public class AliProperties {
 	/**
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/v2/AppletPayUtil.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/v2/AppletPayUtil.java
index f589d48..e4dc7b4 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/v2/AppletPayUtil.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/ali/v2/AppletPayUtil.java
@@ -60,10 +60,11 @@
 			//异步返回参数
 			model.setPassbackParams(pojo.getPassbackParams());
 			request.setBizModel(model);
+			request.setNotifyUrl(aliProperties.getNotifyUrl() + pojo.getNotifyUrl());
 			
 			AlipayTradeCreateResponse response = alipayClient.execute(request);
 			log.info("-----调起支付宝支付-----");
-			log.info("请求参数:{}", pojo);
+			log.info("请求参数:{}", JSON.toJSONString(request));
 			log.info("返回结果:{}", response.getBody());
 			if (response.isSuccess()) {
 				return PaymentResp.build(response.getOutTradeNo(), response.getTradeNo());
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java
index 171369c..0d927f1 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java
@@ -1,7 +1,11 @@
 package com.ruoyi.payment.controller;
 
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.internal.util.AlipaySignature;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.feignClient.OrderClient;
 import com.ruoyi.payment.ali.config.AliProperties;
 import com.ruoyi.payment.ali.v2.AppletPayUtil;
 import com.ruoyi.payment.api.model.*;
@@ -12,8 +16,12 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 
 /**
  * @author zhibing.pu
@@ -44,7 +52,6 @@
 		if(null != payment){
 			AliPaymentResp aliPaymentResp = new AliPaymentResp();
 			aliPaymentResp.setTradeNo(payment.getTradeNo());
-			aliPaymentResp.setNotifyUrl(aliProperties.getNotifyUrl());
 			return R.ok(aliPaymentResp);
 		}
 		return R.ok();
@@ -88,28 +95,81 @@
 	}
 
 
+	@Resource
+	private OrderClient orderClient;
+	@Resource
+	private ChargingOrderClient chargingOrderClient;
 	@ResponseBody
-	@PostMapping(value = "/allCallBack")
-	public void chargingOrderALICallback(@RequestBody AliQueryOrder aliQueryOrder, HttpServletResponse response) {
+	@PostMapping(value = "/callBack")
+	public void chargingOrderALICallback(HttpServletRequest request, HttpServletResponse response) {
 		try {
-			String out_trade_no = aliQueryOrder.getOutTradeNo();
-			String transaction_id = aliQueryOrder.getTradeNo();
-			String attach = aliQueryOrder.getPassbackParams();
-//			AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(2, out_trade_no, transaction_id, attach);
-//			if (ajaxResult.isSuccess()) {
-//				PrintWriter writer = response.getWriter();
-//				writer.println("success");
-//				writer.flush();
-//				writer.close();
-//			}
+			Map<String, String> callback = alipayCallback(request);
+			if(null != callback){
+				String out_trade_no = callback.get("out_trade_no");
+				String attach = callback.get("subject");
+				String total_amount = callback.get("total_amount");
+				String transaction_id = callback.get("trade_no");
+				String substring = out_trade_no.substring(0, 2);
+				switch (substring){
+					//购物订单
+					case "GW":
+						R r = orderClient.callBack(out_trade_no, transaction_id);
+						System.err.println("----收到购物回调");
+						break;
+					case "HY":
+						orderClient.vipCallBack(out_trade_no,transaction_id);
+						System.err.println("----收到会员回调");
+						break;
+					case "CD":
+						chargingOrderClient.chargingOrderALICallback(out_trade_no, transaction_id, attach);
+						System.err.println("----充电支付回调");
+						break;
+				}
+				PrintWriter writer = response.getWriter();
+				writer.println("success");
+				writer.flush();
+				writer.close();
+			}
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
-
 	
 	
 	
 	
+	public Map<String, String> alipayCallback(HttpServletRequest request){
+		Map<String,String> params = new HashMap<String,String>();
+		Map requestParams = request.getParameterMap();
+		for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
+			String name = (String) iter.next();
+			String[] values = (String[]) requestParams.get(name);
+			String valueStr = "";
+			for (int i = 0; i < values.length; i++) {
+				valueStr = (i == values.length - 1) ? valueStr + values[i]
+						: valueStr + values[i] + ",";
+			}
+			params.put(name, valueStr);
+		}
+		try {
+			boolean flag = AlipaySignature.rsaCheckV1(params, aliProperties.getAlipayPublicKey(), "UTF-8","RSA2");
+			if(flag){
+				Map<String, String> map = new HashMap<>();
+				String out_trade_no = params.get("out_trade_no");
+				String subject = params.get("subject");
+				String total_amount = params.get("total_amount");
+				String trade_no = params.get("trade_no");
+				map.put("out_trade_no", out_trade_no);//商家订单号
+				map.put("subject", subject);
+				map.put("total_amount", total_amount);
+				map.put("trade_no", trade_no);//支付宝交易号
+				return map;
+			}
+			
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
 	
 }
diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml
index b9bff69..c2315ed 100644
--- a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml
@@ -8,7 +8,8 @@
     allow-circular-references: true
   profiles:
     # 环境配置
-    active: dev
+#    active: dev
+    active: prod
 ---
 spring:
   config:
@@ -18,7 +19,7 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
@@ -26,7 +27,7 @@
         password: nacos
       config:
         # 配置中心地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 127.0.0.1:8848
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         group: DEFAULT_GROUP
         name: ${spring.application.name}
@@ -40,7 +41,6 @@
 
 
 ---
-
 seata:
   enabled: true
   application-id: ${spring.application.name}
@@ -53,8 +53,16 @@
   config:
     type: nacos
     nacos:
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      # 开发环境
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+#      group: DEFAULT_GROUP
+#      data-id: seata-server.properties
+#      username: nacos
+#      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
       group: DEFAULT_GROUP
       data-id: seata-server.properties
       username: nacos
@@ -63,16 +71,31 @@
     type: nacos
     nacos:
       application: seata-server
-      server-addr: 192.168.110.169:8848
-      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      # 开发环境
+#      server-addr: 127.0.0.1:8848
+#      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+#      group: DEFAULT_GROUP
+#      username: nacos
+#      password: nacos
+      # 生产环境
+      server-addr: 192.168.0.137:8848,192.168.0.123:8848
+      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
       group: DEFAULT_GROUP
       username: nacos
       password: nacos
   cloud:
     nacos:
       discovery:
-        server-addr: 192.168.110.169:8848
-        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
+        # 开发环境
+#        server-addr: 127.0.0.1:8848 # nacos注册中心地址
+#        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
+#        group: DEFAULT_GROUP
+#        application: seata-server #Nacos 中 Seata 名称
+#        username: nacos
+#        password: nacos
+        # 生产环境
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
         group: DEFAULT_GROUP
         application: seata-server #Nacos 中 Seata 名称
         username: nacos
@@ -81,7 +104,6 @@
       transport:
         dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
       eager: true
-
 
 ---
 spring:
@@ -92,14 +114,18 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 127.0.0.1:8848
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
-        namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        username: nacos
+        password: nacos
       config:
         # 配置中心地址
-        server-addr: 127.0.0.1:8848
-        namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2
+        server-addr: 192.168.0.137:8848,192.168.0.123:8848
+        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
+        username: nacos
+        password: nacos
         group: DEFAULT_GROUP
         name: ${spring.application.name}
         # 配置文件格式

--
Gitblit v1.7.1