From 74b0e0814e37d640596f44ec86d20fa9ecce9ed6 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 05 二月 2025 10:42:06 +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 | 778 ++++++- 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-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 | 14 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 | 29 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 | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 25 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 14 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 | 4 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 43 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-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java | 2 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 | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java | 3 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/TransactionRecord.java | 3 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java | 12 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 | 147 + 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-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java | 42 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 | 29 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TransactionRecordMessageVO.java | 3 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml | 19 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-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 | 195 + nacos_config_export_20250110114500.zip | 0 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 | 323 ++ 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-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 2 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 | 457 +++- 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-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml | 157 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java | 10 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java | 33 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java | 22 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java | 114 + ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml | 10 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java | 42 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java | 52 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-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java | 2 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-payment/src/main/java/com/ruoyi/payment/api/model/RefundResp.java | 17 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 | 43 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 | 33 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-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java | 7 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java | 57 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 | 228 + 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-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml | 2 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 | 2 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityController.java | 37 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java | 14 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 | 4 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java | 5 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/pom.xml | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java | 4 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java | 6 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-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 | 28 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml | 1 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/RedisLock.java | 47 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TGrantVip.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 5 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 96 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 | 5 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 | 72 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml | 10 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-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 | 81 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java | 41 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 | 21 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 2 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 148 files changed, 4,246 insertions(+), 1,346 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/nacos_config_export_20250110114500.zip b/nacos_config_export_20250110114500.zip new file mode 100644 index 0000000..bf4cb9a --- /dev/null +++ b/nacos_config_export_20250110114500.zip Binary files differ diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java index 904e7aa..cc1ff3b 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java @@ -84,7 +84,7 @@ @PostMapping(value = "/t-app-user/refundPoints/{param}") public R refundPoints(@PathVariable("param")String param); - @PostMapping(value = "/t-app-user/user/give/vip") + @PostMapping(value = "/t-app-user/user/give/vip1") public R giveVip(@RequestBody GiveVipDto giveVipDto); 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/TransactionRecord.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/TransactionRecord.java index ca08587..32306a1 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/TransactionRecord.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/TransactionRecord.java @@ -22,7 +22,7 @@ private String end_time;// 结束时间 private BigDecimal total_electricity;// 总电量 private BigDecimal loss_total_electricity;// 计损总电量 - private BigDecimal pay_amount;// 消费金额 + private BigDecimal payment_amount;// 消费金额 private Integer method;// 交易标识(1:app 启动,2:卡启动,4:离线卡启动,5: vin 码启动充电) private String trade_date;// 交易日期、时间 private Integer stop_reason;// 停止原因 @@ -183,6 +183,7 @@ private BigDecimal valley_charge12;// 谷电量 private BigDecimal loss_valley_charge12;// 计损谷电量 private BigDecimal valley_amount12;// 谷金额 + private String result;//原始字符串 } 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 2f6a4fa..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()); } 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 4739f81..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); /** * 修改充电订单 diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java index 02994b0..50ce67e 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java @@ -44,7 +44,7 @@ @PostMapping("/t-exchange-order/create") public R<ExchangeBackDto> exchangeCreate(@RequestBody ExchangeDto exchangeDto); - @PostMapping("/t-vip-order//addVipOrder") + @PostMapping("/t-vip-order/addVipOrder1") public R<Long> addVipOrder(@RequestBody TVipOrder vipOrder); @PostMapping("/t-shopping-order/create") public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto); 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/TGrantVip.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TGrantVip.java index 0c997ed..091121d 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TGrantVip.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TGrantVip.java @@ -29,7 +29,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键") - @TableId(value = "id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.NONE) private Long id; @ApiModelProperty(value = "订单编号") 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-order/src/main/java/com/ruoyi/order/api/vo/TransactionRecordMessageVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TransactionRecordMessageVO.java index 78070af..f86251f 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TransactionRecordMessageVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TransactionRecordMessageVO.java @@ -18,7 +18,7 @@ private String end_time;// 结束时间 private BigDecimal total_electricity;// 总电量 private BigDecimal loss_total_electricity;// 计损总电量 - private BigDecimal pay_amount;// 消费金额 + private BigDecimal payment_amount;// 消费金额 private Integer method;// 交易标识(1:app 启动,2:卡启动,4:离线卡启动,5: vin 码启动充电) private String trade_date;// 交易日期、时间 private Integer stop_reason;// 停止原因 @@ -167,6 +167,7 @@ private BigDecimal valley_charge12;// 谷电量 private BigDecimal loss_valley_charge12;// 计损谷电量 private BigDecimal valley_amount12;// 谷金额 + private String result;//原始字符串 } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java index cdf5d67..cc56da2 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java @@ -19,6 +19,6 @@ * 获取积分设置 * @return */ - @GetMapping("/integral/getSet") + @PostMapping("/integral/getSet2") R<TIntegralRule> getSet(); } diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/RefundResp.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/RefundResp.java index e6e4670..d86f5a1 100644 --- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/RefundResp.java +++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/model/RefundResp.java @@ -10,7 +10,22 @@ @Data public class RefundResp { /** - * 支付宝交易号 + * 状态 + */ + @JsonSetter("code") + private String code; + /** + * 描述 + */ + @JsonSetter("msg") + private String msg; + /** + * 退款时间 + */ + @JsonSetter("gmt_refund_pay") + private String gmtRefundPay; + /** + * 支付宝退款交易号 */ @JsonSetter("trade_no") private String tradeNo; 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-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-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java index ff52f59..e931bb3 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java @@ -4,6 +4,7 @@ import javax.servlet.http.HttpServletRequest; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.exception.auth.NotLoginException; import com.ruoyi.common.core.exception.user.UserAppletException; import org.apache.commons.fileupload.FileUploadBase; import org.slf4j.Logger; @@ -61,6 +62,19 @@ } /** + * 没有登录异常 + * @param e + * @param request + * @return + */ + @ExceptionHandler(NotLoginException.class) + public AjaxResult notLoginException(NotLoginException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',登录校验失败'{}'", requestURI, e.getMessage()); + return AjaxResult.error(HttpStatus.UNAUTHORIZED, e.getMessage()); + } + + /** * 请求方式不支持 */ @ExceptionHandler(HttpRequestMethodNotSupportedException.class) diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java index d748b39..d30a11f 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java @@ -5,6 +5,7 @@ import java.util.concurrent.TimeUnit; import javax.servlet.http.HttpServletRequest; +import com.ruoyi.common.core.exception.auth.NotLoginException; import com.ruoyi.common.core.exception.user.UserAppletException; import com.ruoyi.system.api.model.LoginUserApplet; import org.springframework.beans.factory.annotation.Autowired; @@ -94,7 +95,7 @@ public LoginUserApplet getLoginUserApplet() { LoginUserApplet loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); if (loginUserAppletToken == null) { - throw new RuntimeException("令牌已过期,请重新登录!"); + throw new NotLoginException("令牌已过期,请重新登录!"); } return loginUserAppletToken; } @@ -132,7 +133,7 @@ public LoginUser getLoginUser() { LoginUser loginUser = getLoginUser(ServletUtils.getRequest()); if (loginUser == null) { - throw new RuntimeException("令牌已过期,请重新登录!"); + throw new NotLoginException("令牌已过期,请重新登录!"); } return loginUser; } 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/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java index bf60f1c..ff02153 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java @@ -1,5 +1,6 @@ package com.ruoyi.gateway.filter; +import com.ruoyi.common.core.exception.auth.NotLoginException; import com.ruoyi.gateway.config.properties.AntiShakeProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -179,15 +180,15 @@ public void verifyToken(ServerHttpRequest request) throws Exception{ String token = getToken(request); if (StringUtils.isEmpty(token)) { - throw new RuntimeException("令牌不能为空"); + throw new NotLoginException("令牌不能为空"); } Claims claims = JwtUtils.parseToken(token); if (claims == null) { - throw new RuntimeException("令牌已过期或验证不正确!"); + throw new NotLoginException("令牌已过期或验证不正确!"); } String userid = JwtUtils.getUserId(claims); if (StringUtils.isEmpty(userid)) { - throw new RuntimeException("令牌验证失败"); + throw new NotLoginException("令牌验证失败"); } } 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-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 673d496..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 @@ -252,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-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..56cd613 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; @@ -81,9 +84,8 @@ private TAppUserService appUserService; @Resource private TAppUserTagService appUserTagService; - @Autowired + @Resource private OrderClient orderClient; - @Resource private TAppUserVipDetailService tAppUserVipDetailService; @Resource @@ -163,7 +165,7 @@ } - + @RequiresPermissions(value = {"/company"}, logical = Logical.OR) @ApiOperation(value = "单位管理列表", tags = {"用户管理-单位管理"}) @PostMapping(value = "/unit/page") public R<Page<TCompany>> unitPage(@RequestBody UnitListQueryDto unitListQueryDto) { @@ -176,8 +178,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 +193,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 +205,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 +224,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 +290,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 +358,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 +416,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 +465,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 +502,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 +553,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 +626,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 +638,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 +652,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 +692,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 +707,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 +718,7 @@ TAppUser byId = appUserService.getById(userId); byId.setAvatar(url); appUserService.updateById(byId); - return R.ok(); - } @ApiOperation(value = "优惠卷列表不分页(1可使用2不可用)", tags = {"小程序-个人中心"}) @@ -716,47 +780,49 @@ @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) public R giveVip(@RequestBody GiveVipDto giveVipDto) { String[] split = giveVipDto.getUserIds().split(","); for (String s : split) { - - - TAppUser nowUser = appUserService.getById(s); - - int plusDay = 0; - if (giveVipDto.getType() == 1) { - plusDay = 1; - } else if (giveVipDto.getType() == 2) { - plusDay = 3; - } else if (giveVipDto.getType() == 3) { - plusDay = 12; - } + TAppUser nowUser = appUserService.getById(s); + int plusDay = 0; + if (giveVipDto.getType() == 1) { + plusDay = 1; + } else if (giveVipDto.getType() == 2) { + plusDay = 3; + } else if (giveVipDto.getType() == 3) { + plusDay = 12; + } BigDecimal bigDecimal = new BigDecimal("0"); TVip info = vipClient.getInfo1(giveVipDto.getVipId()).getData(); - switch (giveVipDto.getType()){ - case 1: - bigDecimal = bigDecimal.add(info.getMonthlyCard()==null?new BigDecimal(0):info.getMonthlyCard()); - break; - case 2: - bigDecimal = bigDecimal.add(info.getSeasonCard()==null?new BigDecimal(0):info.getSeasonCard()); - break; - case 3: - bigDecimal = bigDecimal.add(info.getAnnualCard()==null?new BigDecimal(0):info.getAnnualCard()); - break; - } + switch (giveVipDto.getType()){ + case 1: + bigDecimal = bigDecimal.add(info.getMonthlyCard()==null?new BigDecimal(0):info.getMonthlyCard()); + break; + case 2: + bigDecimal = bigDecimal.add(info.getSeasonCard()==null?new BigDecimal(0):info.getSeasonCard()); + break; + case 3: + bigDecimal = bigDecimal.add(info.getAnnualCard()==null?new BigDecimal(0):info.getAnnualCard()); + break; + } //增加vipDetail - giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay,giveVipDto.getType()); - appUserService.updateById(nowUser); - // 新增后台赠送记录 + giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay,giveVipDto.getType()); + appUserService.updateById(nowUser); + // 新增后台赠送记录 TGrantVip tGrantVip = new TGrantVip(); tGrantVip.setCode(OrderCodeUtil.getOrderCode("ZS")); tGrantVip.setAppUserId(nowUser.getId()); @@ -768,6 +834,51 @@ } return R.ok(); } + + + + @PostMapping(value = "/user/give/vip1") + public R giveVip1(@RequestBody GiveVipDto giveVipDto) { + String[] split = giveVipDto.getUserIds().split(","); + for (String s : split) { + TAppUser nowUser = appUserService.getById(s); + int plusDay = 0; + if (giveVipDto.getType() == 1) { + plusDay = 1; + } else if (giveVipDto.getType() == 2) { + plusDay = 3; + } else if (giveVipDto.getType() == 3) { + plusDay = 12; + } + BigDecimal bigDecimal = new BigDecimal("0"); + TVip info = vipClient.getInfo1(giveVipDto.getVipId()).getData(); + switch (giveVipDto.getType()){ + case 1: + bigDecimal = bigDecimal.add(info.getMonthlyCard()==null?new BigDecimal(0):info.getMonthlyCard()); + break; + case 2: + bigDecimal = bigDecimal.add(info.getSeasonCard()==null?new BigDecimal(0):info.getSeasonCard()); + break; + case 3: + bigDecimal = bigDecimal.add(info.getAnnualCard()==null?new BigDecimal(0):info.getAnnualCard()); + break; + } + //增加vipDetail + giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay,giveVipDto.getType()); + appUserService.updateById(nowUser); + // 新增后台赠送记录 + TGrantVip tGrantVip = new TGrantVip(); + tGrantVip.setCode(OrderCodeUtil.getOrderCode("ZS")); + tGrantVip.setAppUserId(nowUser.getId()); + tGrantVip.setVipId(giveVipDto.getVipId()); + tGrantVip.setOrderAmount(bigDecimal); + tGrantVip.setCreateTime(LocalDateTime.now()); + tGrantVip.setAppUserId(nowUser.getId()); + orderClient.managementGiveVip(tGrantVip); + } + return R.ok(); + } + @ApiOperation(value = "已赠送列表", tags = {"小程序-个人中心-邀请好友"}) @PostMapping(value = "/user/invite/page") @@ -813,9 +924,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(); } @@ -896,14 +1011,10 @@ public R sign() { LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); Long userId = loginUserApplet.getUserId(); - TAppUser byId = appUserService.getById(userId); - - if (signService.lambdaQuery().eq(TAppUserSign::getSignDay, LocalDate.now()).eq(TAppUserSign::getAppUserId, userId).count()>0){ return R.fail("今日已签到"); } - //判断当前生效的vipDetail TAppUserVipDetail one = tAppUserVipDetailService.lambdaQuery().le(TAppUserVipDetail::getStartTime, LocalDateTime.now()).ge(TAppUserVipDetail::getEndTime, LocalDateTime.now()).eq(TAppUserVipDetail::getAppUserId, userId).last("limit 1").one(); boolean doubleVip = false; @@ -1017,7 +1128,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); @@ -1040,43 +1157,41 @@ if (count==0){ R<TIntegralRule> set = integralRuleClient.getSet(); TIntegralRule data = set.getData(); - JSONObject jsonObject = JSON.parseObject(data.getAddVehiclesEarnsPoints()); - - - Integer point = 0; - //增加车牌50分,必填 + if(null != data){ + JSONObject jsonObject = JSON.parseObject(data.getAddVehiclesEarnsPoints()); + Integer point = 0; + //增加车牌50分,必填 point = point+jsonObject.getInteger("num1"); if (doubleVip){ point = point+jsonObject.getInteger("num1"); } - //增加车型分 + //增加车型分 if (StringUtils.isNotEmpty(appUserCar.getVehicleModel())){ point = point+jsonObject.getInteger("num2"); if (doubleVip){ point = point+jsonObject.getInteger("num2"); } } - //增加车辆用途分 + //增加车辆用途分 if (StringUtils.isNotEmpty(appUserCar.getVehicleUse())){ point = point+jsonObject.getInteger("num3"); if (doubleVip){ point = point+jsonObject.getInteger("num3"); } } - //增加续航分 + //增加续航分 if (StringUtils.isNotEmpty(appUserCar.getEndurance())){ point = point+jsonObject.getInteger("num4"); if (doubleVip){ point = point+jsonObject.getInteger("num4"); } } - - //增加积分记录 - pointDetailUtil.addDetail(byId.getPoints(),byId.getPoints()+point,5,userId,appUserCar.getLicensePlate(),"",""); - byId.setPoints(byId.getPoints()+point); + + //增加积分记录 + pointDetailUtil.addDetail(byId.getPoints(),byId.getPoints()+point,5,userId,appUserCar.getLicensePlate(),"",""); + byId.setPoints(byId.getPoints()+point); + } byId.setFirstAdd(1); - - } CarNumDto carNumDto = CarUtil.carNum(appUserCar.getLicensePlate()); if (carNumDto==null){ @@ -1095,6 +1210,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 +1222,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 +1324,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/java/com/ruoyi/account/util/GiveVipUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java index 2e9bd75..70dda50 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java @@ -32,7 +32,6 @@ private TAppCouponService appCouponService; public void sendVip(TAppUser nowUser,Integer vipId,Integer plusDay,Integer type){ if (nowUser.getVipEndTime()==null||nowUser.getVipEndTime().isBefore(LocalDateTime.now())) { - nowUser.setVipEndTime(LocalDateTime.now().plusMonths(plusDay).minusDays(1)); nowUser.setVipId(vipId); //直接再detail里新增数据,因为不是续费 @@ -56,6 +55,7 @@ tAppUserVipDetail.setSendMonth(1); tAppUserVipDetail.setVipJson(JSON.toJSONString(info.getData())); tAppUserVipDetail.setVipType(type); + tAppUserVipDetail.setCreateTime(LocalDateTime.now()); tAppUserVipDetailService.save(tAppUserVipDetail); //直接赠送优惠卷 for (SendCouponDto sendCouponDto : javaList) { @@ -81,47 +81,24 @@ appCouponService.save(tAppCoupon); } } - - }else { -// nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1)); - //获取detail里结束时间大于当前时间的数据,并将enttime延长 -// TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getVipId,vipId).eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); -// if (tAppUserVipDetail!=null) { -// List<TAppUserVipDetail> list = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).ge(TAppUserVipDetail::getStartTime, tAppUserVipDetail.getEndTime()).list(); -// for (TAppUserVipDetail appUserVipDetail : list) { -// appUserVipDetail.setStartTime(appUserVipDetail.getStartTime().plusMonths(plusDay).minusDays(1)); -// appUserVipDetail.setEndTime(appUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); -// } -// tAppUserVipDetailService.updateBatchById(list); -// tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); -// -// tAppUserVipDetailService.updateById(tAppUserVipDetail); -// }else -// { - TAppUserVipDetail tAppUserVipDetail2 = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); - - TAppUserVipDetail tAppUserVipDetail1 = new TAppUserVipDetail(); - tAppUserVipDetail1.setAppUserId(nowUser.getId()); - tAppUserVipDetail1.setStartTime(tAppUserVipDetail2.getEndTime()); - tAppUserVipDetail1.setEndTime(tAppUserVipDetail2.getEndTime().plusMonths(plusDay).minusDays(1)); - tAppUserVipDetail1.setVipId(vipId); - - R<TVip> info = vipClient.getInfo1(vipId); - TVip vip = info.getData(); - - - tAppUserVipDetail1.setCouponIds(vip.getCoupon()); - tAppUserVipDetail1.setSendChargeNum(vip.getDiscountTimes()); - tAppUserVipDetail1.setChargeNum(vip.getDiscountTimes()); - tAppUserVipDetail1.setDiscountMoney(vip.getMaximumDeduction()); - tAppUserVipDetail1.setSendMonth(1); + TAppUserVipDetail tAppUserVipDetail2 = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); + TAppUserVipDetail tAppUserVipDetail1 = new TAppUserVipDetail(); + tAppUserVipDetail1.setAppUserId(nowUser.getId()); + tAppUserVipDetail1.setStartTime(tAppUserVipDetail2.getEndTime()); + tAppUserVipDetail1.setEndTime(tAppUserVipDetail2.getEndTime().plusMonths(plusDay).minusDays(1)); + tAppUserVipDetail1.setVipId(vipId); + R<TVip> info = vipClient.getInfo1(vipId); + TVip vip = info.getData(); + tAppUserVipDetail1.setCouponIds(vip.getCoupon()); + tAppUserVipDetail1.setSendChargeNum(vip.getDiscountTimes()); + tAppUserVipDetail1.setChargeNum(vip.getDiscountTimes()); + tAppUserVipDetail1.setDiscountMoney(vip.getMaximumDeduction()); + tAppUserVipDetail1.setSendMonth(1); tAppUserVipDetail1.setVipType(type); - tAppUserVipDetail1.setVipJson(JSON.toJSONString(info.getData())); - tAppUserVipDetailService.save(tAppUserVipDetail1); - -// } - + tAppUserVipDetail1.setVipJson(JSON.toJSONString(info.getData())); + tAppUserVipDetail1.setCreateTime(LocalDateTime.now()); + tAppUserVipDetailService.save(tAppUserVipDetail1); } } 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..a1c138f 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){ @@ -294,14 +300,15 @@ } BigDecimal multiply = bigDecimal1.multiply(new BigDecimal("24")); - BigDecimal divide = bigDecimal.divide(multiply, 0, BigDecimal.ROUND_HALF_UP); + BigDecimal divide = bigDecimal.divide(multiply, 4, BigDecimal.ROUND_HALF_EVEN).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_EVEN); record.setP1(divide); } 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 a85a941..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 @@ -2,9 +2,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.chargingPile.api.dto.TChargingGunDTO; -import com.ruoyi.chargingPile.api.model.TChargingGun; +import com.ruoyi.account.api.dto.SendMessageDTO; +import com.ruoyi.account.api.feignClient.AppUserClient; +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.service.ISiteService; +import com.ruoyi.chargingPile.service.TChargingPileNotificationService; import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.chargingPile.service.TFaultMessageService; import com.ruoyi.common.core.domain.R; @@ -14,11 +18,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.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; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.util.List; /** @@ -34,10 +41,17 @@ public class TFaultMessageController { private final TFaultMessageService faultMessageService; - + private final ISiteService siteService; + private final TChargingPileService chargingPileService; + private final TChargingPileNotificationService chargingPileNotificationService; + @Resource + private AppUserClient appUserClient; @Autowired - public TFaultMessageController(TFaultMessageService faultMessageService) { + public TFaultMessageController(TFaultMessageService faultMessageService, ISiteService siteService, TChargingPileService chargingPileService, TChargingPileNotificationService chargingPileNotificationService) { this.faultMessageService = faultMessageService; + this.siteService = siteService; + this.chargingPileService = chargingPileService; + this.chargingPileNotificationService = chargingPileNotificationService; } /** @@ -50,14 +64,14 @@ faultMessageService.add(dto); return AjaxResult.success(); } - - + /** * 获取故障信息列表 * @param siteId * @param basePage * @return */ + @RequiresPermissions(value = {"/faultInformationList"}, logical = Logical.OR) @ResponseBody @GetMapping("/getFaultMessageList") @ApiOperation(value = "获取故障信息列表数据", tags = {"管理后台-设备监控"}) @@ -69,6 +83,7 @@ } + @RequiresPermissions(value = {"/faultInformationList/add"}, logical = Logical.OR) @ResponseBody @PostMapping("/addFaultMessage") @ApiOperation(value = "添加故障信息", tags = {"管理后台-设备监控"}) @@ -79,6 +94,7 @@ } + @RequiresPermissions(value = {"/faultInformationList/del"}, logical = Logical.OR) @ResponseBody @DeleteMapping("/delFaultMessage/{id}") @ApiOperation(value = "删除故障信息", tags = {"管理后台-设备监控"}) @@ -96,6 +112,20 @@ @PostMapping("/createFaultMessage") public R<String> createFaultMessage(@RequestBody TFaultMessage faultMessage){ faultMessageService.save(faultMessage); + + Site site = siteService.getById(faultMessage.getSiteId()); + TChargingPile chargingPile = chargingPileService.getById(faultMessage.getChargingPileId()); + String siteName = site.getName(); + SendMessageDTO sendMessageDTO = new SendMessageDTO(); + sendMessageDTO.setPhone(site.getPhone()); + sendMessageDTO.setSite(site.getName()); + sendMessageDTO.setChargeGun(chargingPile.getNumber() + ""); + sendMessageDTO.setType(3); + String result = appUserClient.sendMessage(sendMessageDTO).getData(); + if(siteName.length()>10){ + siteName = siteName.substring(0,10); + } + chargingPileNotificationService.saveData(4,faultMessage.getSiteId(),faultMessage.getChargingPileId(),site.getPhone(),"检测到"+siteName+"..."+chargingPile.getNumber()+"号桩设备离线,请及时查看处理!"); return R.ok(); } /** 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..7b17c17 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(null != ids && ids.size() > 0, 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 2666ac1..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(); 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 f52b0f1..25a219e 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,17 +2,17 @@ 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; +import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO; 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; @@ -22,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; @@ -35,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; @@ -54,7 +55,6 @@ import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * <p> @@ -117,11 +117,16 @@ @Resource private SendMessageClient sendMessageClient; + @Resource + private TokenService tokenService; + @Resource + private TChargingPileNotificationService chargingPileNotificationService; + + @Resource + private AppUserClient appUserClient; - - - + /** * 获取充电桩列表数据 * @param page @@ -131,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(); //合作商 @@ -139,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(); @@ -177,18 +182,29 @@ 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()); -// } -// } + ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(chargingPile.getCode()).getData(); + if(null == showDeviceResp){ + //调用华为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("华为创建设备失败"); + } + }else{ + chargingPile.setIotdDeviceId(showDeviceResp.getDeviceId()); + } this.save(chargingPile); return AjaxResult.success(); } @@ -252,6 +268,39 @@ if(null != one && !one.getId().equals(chargingPile.getId())){ return AjaxResult.error("设备编号已存在"); } + TChargingPile tChargingPile = this.getById(chargingPile.getId()); + //桩号不相同,需要重新绑定设备 + if(!tChargingPile.getCode().equals(chargingPile.getCode())){ + ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); + if(null != showDeviceResp){ + DeleteDeviceResp deleteDeviceResp = iotInterfaceClient.deleteDevice(tChargingPile.getCode()).getData(); + if(null == deleteDeviceResp){ + return AjaxResult.error("删除设备异常,请查看华为设备管理"); + } + } + } + + ShowDeviceResp showDeviceResp = iotInterfaceClient.showDeviceRequest(tChargingPile.getCode()).getData(); + if(null == showDeviceResp){ + //调用华为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)); @@ -259,6 +308,7 @@ TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setFullNumber(chargingPile.getCode() + chargingGun.getCode()); + chargingGun1.setSiteId(chargingPile.getSiteId()); chargingGunService.updateById(chargingGun1); //下发硬件充电二维码 @@ -292,11 +342,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(); @@ -370,14 +426,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(); @@ -435,11 +491,13 @@ BigDecimal v = list.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN); List<Double> data = chargingOrderAccountingStrategyClient.getDailyChargingDegree(6, siteIds).getData(); List<Double> value2 = new ArrayList<>(); + BigDecimal multiply = new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24)); for (Double datum : data) { if(list.size() == 0){ value2.add(0D); }else{ - Double datum1 = new BigDecimal(datum).divide(new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24)), new MathContext(4, RoundingMode.HALF_EVEN)).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + Double datum1 = new BigDecimal(datum).divide(multiply, new MathContext(4, RoundingMode.HALF_EVEN)) + .multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); value2.add(datum1); } } @@ -462,14 +520,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(); @@ -513,12 +571,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){ @@ -664,6 +722,21 @@ faultMessage.setDelFlag(false); faultMessage.setContent("设备离线"); faultMessageService.save(faultMessage); + + // 发送故障短信 + Site site = siteService.getById(faultMessage.getSiteId()); + String siteName = site.getName(); + SendMessageDTO sendMessageDTO = new SendMessageDTO(); + sendMessageDTO.setPhone(site.getPhone()); + sendMessageDTO.setSite(site.getName()); + sendMessageDTO.setChargeGun(chargingPile.getNumber() + ""); + sendMessageDTO.setType(3); + String result = appUserClient.sendMessage(sendMessageDTO).getData(); + if(siteName.length()>10){ + siteName = siteName.substring(0,10); + } + chargingPileNotificationService.saveData(4,faultMessage.getSiteId(),faultMessage.getChargingPileId(),site.getPhone(),"检测到"+siteName+"..."+chargingPile.getNumber()+"号桩设备离线,请及时查看处理!"); + } } } 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 c219fc5..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 @@ -78,7 +75,7 @@ // String result = HttpUtils.post(MsgConstants.SEND_URL, reqStr); SendMessageDTO sendMessageDTO = new SendMessageDTO(); sendMessageDTO.setPhone(site.getPhone()); - sendMessageDTO.setCode(site.getName()); + sendMessageDTO.setSite(site.getName()); sendMessageDTO.setChargeGun(chargingPile.getNumber() + ""); sendMessageDTO.setType(3); String result = appUserClient.sendMessage(sendMessageDTO).getData(); @@ -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 35ede90..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())){ 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/mapper/chargingPile/SiteMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml index e9a3d00..826c3ec 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml @@ -145,6 +145,7 @@ from t_charging_gun where + del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} group by site_id) tcg on (ts.id = tcg.site_id) 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 354d63e..7f5757b 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 @@ -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, - count( 1 ) AS orders, - SUM( timeout_amount ) AS timeoutAmount + DATE_FORMAT( t1.create_time, '%H:00' ) AS time, + count( 1 ) AS orders, + 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,138 +120,162 @@ </select> <select id="parkingDataByDate" resultType="java.util.Map"> SELECT - DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time, - count( 1 ) AS orders, - SUM( timeout_amount ) AS timeoutAmount + DATE_FORMAT( t1.create_time, '%Y-%m-%d' ) AS time, + count( 1 ) AS orders, + 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 <= #{parkingRecordQueryDto.endTime} + AND t1.create_time <= #{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 - time - ORDER BY - time - - + GROUP BY time </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 <= #{parkingRecordQueryDto.endTime} + AND t1.create_time <= #{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 <= #{parkingRecordQueryDto.endTime} + AND t1.create_time <= #{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 <= #{parkingRecordQueryDto.endTime} + AND t1.create_time <= #{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/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml index 571bf94..37ad645 100644 --- a/ruoyi-service/ruoyi-integration/pom.xml +++ b/ruoyi-service/ruoyi-integration/pom.xml @@ -152,12 +152,12 @@ <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-core</artifactId> - <version>[3.0.40-rc, 3.2.0)</version> + <version>[3.0.40-rc,3.2.0)</version> </dependency> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-iotda</artifactId> - <version>[3.0.40-rc, 3.2.0)</version> + <version>[3.0.40-rc,3.2.0)</version> </dependency> <dependency> <groupId>com.huaweicloud.sdk</groupId> 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 0bf55f3..c122e98 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,8 +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)); - log.info("充电桩心跳包-返回结果:{}",result); + iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong)); sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.END_CHARGE: @@ -139,7 +139,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 +157,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 +212,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 +229,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 +269,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..3659dbc 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 @@ -1,5 +1,6 @@ package com.ruoyi.integration.iotda.utils.produce; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; @@ -26,18 +27,22 @@ @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); + request.withDeviceId(code); DeviceMessageRequest body = new DeviceMessageRequest(); body.withMessageId(UUID.randomUUID().toString()); body.withName(name); @@ -45,19 +50,14 @@ request.withBody(body); try { CreateMessageResponse response = iotBuilder.buildIot().createMessage(request); - System.out.println(response.toString()); - } catch (ConnectionException e) { + log.info("消息下发至设备结果:{}", JSON.toJSONString(response)); + return JSON.toJSONString(response); + } catch (Exception 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()); + log.info("消息下发至设备异常:code---{},msg---{}", code, e.getMessage()); + log.error("消息下发至设备异常:code---{},msg---{}", code, e.getMessage()); + return e.getMessage(); } - return null; } } \ No newline at end of file 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..32197f5 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 @@ -21,7 +21,7 @@ private String end_time;// 结束时间 private BigDecimal total_electricity;// 总电量 private BigDecimal loss_total_electricity;// 计损总电量 - private BigDecimal pay_amount;// 消费金额 + private BigDecimal payment_amount;// 消费金额 private Integer method;// 交易标识(1:app 启动,2:卡启动,4:离线卡启动,5: vin 码启动充电) private String trade_date;// 交易日期、时间 private Integer stop_reason;// 停止原因 @@ -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/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java index 8861cff..12d2fa6 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java @@ -1,6 +1,7 @@ package com.ruoyi.integration.rocket.produce; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; @@ -325,6 +326,7 @@ case SendTagConstant.TRANSACTION_RECORD: TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage(); log.info("交易记录-业务消息处理:{}",transactionRecordMessage); + transactionRecordMessage.setResult(JSONObject.toJSONString(message)); // 持久化消息 TransactionRecord transactionRecord = new TransactionRecord(); BeanUtils.copyProperties(transactionRecordMessage,transactionRecord); diff --git a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml index 60c4fde..1f10454 100644 --- a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml @@ -24,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 @@ -32,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} @@ -57,7 +57,7 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties @@ -75,7 +75,7 @@ nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos @@ -90,7 +90,7 @@ nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# server-addr: 127.0.0.1:8848 # nacos注册中心地址 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 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/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java index 6bee4c0..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 @@ -16,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; @@ -139,6 +141,9 @@ // 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) { @@ -155,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) { @@ -170,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<>(); @@ -233,6 +244,9 @@ } } } + + + @RequiresPermissions(value = {"/accountSettlementStatement/export"}, logical = Logical.OR) @ApiOperation(value = "导出", tags = {"管理后台-账户结算账单"}) @PutMapping("/exportAccount") public void exportAccount(@RequestBody ChargingListQuery dto) @@ -303,7 +317,9 @@ } } } - + + + @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"}) @PutMapping("/download") public void download(@RequestBody ExportUidDto uid) @@ -327,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>() 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..3e23724 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) { @@ -117,7 +127,7 @@ ChargingOrderTimeVO res = chargingOrderService.chargingList(dto); List<TChargingOrderExport> tChargingOrderExports = new ArrayList<>(); - List<ChargingOrderListVO> exportList = res.getList().getRecords(); + List<ChargingOrderListVO> exportList = res.getExportList(); int i = 0; for (ChargingOrderListVO chargingOrderListVO : exportList) { TChargingOrderExport tChargingOrderExport = new TChargingOrderExport(); @@ -162,12 +172,18 @@ break; } } - String s1 = DateUtils.localDateTimeToString(chargingOrderListVO.getCreateTime()); - String s2 = DateUtils.localDateTimeToString(chargingOrderListVO.getStartTime()); - String s3 = DateUtils.localDateTimeToString(chargingOrderListVO.getEndTime()); - tChargingOrderExport.setCreateTime(s1); - tChargingOrderExport.setStartTime(s2); - tChargingOrderExport.setEndTime(s3); + if (chargingOrderListVO.getCreateTime()!=null){ + String s1 = DateUtils.localDateTimeToString(chargingOrderListVO.getCreateTime()); + tChargingOrderExport.setCreateTime(s1); + } + if (chargingOrderListVO.getStartTime()!=null){ + String s2 = DateUtils.localDateTimeToString(chargingOrderListVO.getStartTime()); + tChargingOrderExport.setStartTime(s2); + } + if (chargingOrderListVO.getEndTime()!=null){ + String s3 = DateUtils.localDateTimeToString(chargingOrderListVO.getEndTime()); + tChargingOrderExport.setEndTime(s3); + } tChargingOrderExport.setRechargePaymentStatus(chargingOrderListVO.getRechargePaymentStatus()+""); tChargingOrderExport.setType("充电订单"); tChargingOrderExport.setChargingType("单桩双充"); @@ -274,6 +290,10 @@ } } } + + + + @RequiresPermissions(value = {"/summarySettlement"}, logical = Logical.OR) @GetMapping(value = "/settlementTotal") @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"}) @ApiParam(name = "time", value = "汇报时间2024-01") @@ -282,30 +302,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 2525a1c..3697270 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 @@ -1,4 +1,5 @@ package com.ruoyi.order.controller; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import java.math.BigDecimal; @@ -12,10 +13,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 +23,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 +55,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 +139,16 @@ @Resource private TOrderInvoiceService invoiceService; + @Resource + private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient; + @Resource + private PartnerClient partnerClient; + @Resource + private SysUserClient sysUserClient; + + + + /** * 远程调用 增加管理后台赠送会员记录 @@ -169,19 +181,96 @@ } 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 = {"管理后台-支付订单-订单信息"}) @@ -243,6 +332,10 @@ return R.ok(); } + + + + @ResponseBody @GetMapping(value = "/pay/order/refund/detail") @ApiOperation(value = "退款信息", tags = {"管理后台-支付订单-订单信息"}) @@ -310,20 +403,88 @@ 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()); + 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); } - return refundList; + // 查询当前登陆人按钮权限 + 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") @ApiOperation(value = "列表1", tags = {"管理后台-支付订单-退款订单"}) @@ -331,12 +492,13 @@ return chargingOrderService.getRefundList(chargingRefundDto); } - - - - - - + + + + + + + @RequiresPermissions(value = {"/chargingPileOrder"}, logical = Logical.OR) @ResponseBody @PostMapping(value = "/chargingOrder") @ApiOperation(value = "充电桩订单列表", tags = {"管理后台-订单管理"}) @@ -346,7 +508,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 = {"管理后台-订单管理"}) @@ -429,6 +593,8 @@ .between(TChargingOrder::getStartTime, req.getStartTime(), req.getEndTime())).size(); return R.ok(size); } + + //用户订单数量 @PostMapping(value = "/useOrderCount") public R<Long> useOrderCount(@RequestParam("userId") Long userId) { @@ -437,12 +603,16 @@ return R.ok(count); } + + //订单详情 @PostMapping(value = "/detail") public R<TChargingOrder> detail(@RequestParam("orderId") Long orderId) { return R.ok(chargingOrderService.getById(orderId)); } + + @PostMapping(value = "/getList") public R<List<TChargingOrder>> getList(@RequestParam("siteId") Integer siteId) { @@ -450,6 +620,8 @@ return R.ok(list); } + + @PostMapping(value = "/getBySiteIdAndTime") public R<List<ChargingOrderGroup>> getBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto) { @@ -485,6 +657,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); } @@ -631,12 +808,14 @@ - + + + @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){ @@ -646,6 +825,9 @@ } }else { siteIds.add(siteId); + } + if (siteIds.isEmpty()){ + siteIds.add(-1); } LocalDate sixBefore = PreviousSixMonths.get(); //通过siteIds进行sql查询统计 @@ -680,12 +862,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(); @@ -694,7 +877,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); @@ -703,8 +888,9 @@ return R.ok(sixCircleDtos); } - - + + + @RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR) @ResponseBody @GetMapping(value = "/six/shop") @ApiOperation(value = "购物收入", tags = {"后台-数据分析-平台收入分析"}) @@ -740,7 +926,9 @@ return months; } - + + + @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR) @ResponseBody @PostMapping(value = "/work/shop") @ApiOperation(value = "购物收入", tags = {"后台-工作台"}) @@ -750,7 +938,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 = {"后台-数据分析-平台收入分析"}) @@ -760,14 +949,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>(); @@ -783,20 +985,57 @@ return R.ok(map); } - @Resource - private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient; + + @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()); @@ -835,9 +1074,9 @@ return R.ok(page); } - - - + + + @RequiresPermissions(value = {"/chargeOrderMonitoring/del"}, logical = Logical.OR) @ResponseBody @GetMapping(value = "/watch/deletes") @ApiOperation(value = "监控订单-删除", tags = {"管理后台-订单管理"}) @@ -864,18 +1103,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) { @@ -884,6 +1123,7 @@ }else { siteIds.add(statisticsQueryDto.getSiteId()); } + if (siteIds.isEmpty())siteIds.add(-1); TCharingOrderMapVO tCharingOrderMapVO = new TCharingOrderMapVO(); @@ -1107,7 +1347,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) { @@ -1129,17 +1369,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" 的时间数据 @@ -1289,13 +1544,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) { @@ -1332,14 +1590,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) { @@ -1468,14 +1728,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) { @@ -1511,16 +1773,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) { @@ -1635,17 +1898,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) { @@ -1656,20 +1920,18 @@ } List<Map<String,Object>> capMap = chargingOrderService.getchargingCapacity(siteIds,statisticsQueryDto); List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); - //获取chargingPiles的ratedPower的总和再乘以chargingPiles的数量再乘以24 - BigDecimal totalRatedPower = chargingPiles.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(chargingPiles.size())).multiply(new BigDecimal(24)); - - //将capMap的chargingCapacity除以totalRatedPower保留两位数 + BigDecimal totalRatedPower = chargingPiles.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add); + + //每日利用率=当日充电度数/(总桩数量*桩总功率*24小时) + BigDecimal multiply1 = new BigDecimal(chargingPiles.size()).multiply(totalRatedPower).multiply(new BigDecimal(24)); + System.err.println(JSON.toJSONString(capMap) + "---" + chargingPiles.size() + "---" + totalRatedPower + "---" + multiply1); capMap.forEach(map -> { BigDecimal chargingCapacity = (BigDecimal) map.get("chargingCapacity"); - BigDecimal result = chargingCapacity.divide(totalRatedPower, 4, RoundingMode.HALF_UP); + BigDecimal result = chargingCapacity.divide(multiply1, 4, RoundingMode.HALF_UP); BigDecimal multiply = result.multiply(new BigDecimal(100)); map.put("chargingCapacity", multiply); }); - - - // // 解析 startTime 和 endTime 为 LocalDate LocalDate startDate = statisticsQueryDto.getStartTime(); LocalDate endDate = statisticsQueryDto.getEndTime(); @@ -1694,11 +1956,10 @@ startDate = startDate.plusDays(1); } return R.ok(dateRangeStatistics); - - } - + + @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR) @ResponseBody @GetMapping(value = "/work/shopOrder") @ApiOperation(value = "购物订单统计", tags = {"管理后台-工作台"}) @@ -1710,7 +1971,9 @@ counts.add(count1); return R.ok(counts); } - + + + @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR) @ResponseBody @GetMapping(value = "/work/invoice") @ApiOperation(value = "开票统计", tags = {"管理后台-工作台"}) @@ -1722,7 +1985,8 @@ counts.add(count1); return R.ok(counts); } - + + @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR) @ResponseBody @GetMapping(value = "/work/users/count") @ApiOperation(value = "用户数量", tags = {"管理后台-工作台"}) @@ -1745,49 +2009,6 @@ - private static List<TChargingOrder> getSampleData() { - // 这里可以替换为实际查询逻辑 - List<TChargingOrder> list = new ArrayList<>(); - // 示例数据 - for (int i = 0; i < 24; i++) { - TChargingOrder order = new TChargingOrder(); - order.setStartTime(LocalDateTime.now().minusHours(23 - i)); - order.setOrderAmount(BigDecimal.valueOf(i + 1)); - list.add(order); - } - return list; - } - - private static List<Map<String, BigDecimal>> processData(List<TChargingOrder> list) { - Map<LocalDateTime, BigDecimal> hourlySum = new HashMap<>(); - - // 按每个小时分组并求和 - for (TChargingOrder order : list) { - LocalDateTime hour = order.getStartTime().truncatedTo(ChronoUnit.HOURS); - BigDecimal amount = order.getOrderAmount(); - hourlySum.merge(hour, amount, BigDecimal::add); - } - - // 创建结果列表 - List<Map<String, BigDecimal>> resultList = new ArrayList<>(); - for (int i = 1; i <= 23; i++) { - LocalDateTime keyHour = LocalDateTime.now().withHour(i); - BigDecimal sum = BigDecimal.ZERO; - - // 计算键之后的一小时的数据之和 - for (int j = i + 1; j <= 23; j++) { - LocalDateTime nextHour = LocalDateTime.now().withHour(j); - sum = sum.add(hourlySum.getOrDefault(nextHour, BigDecimal.ZERO)); - } - - Map<String, BigDecimal> entry = new HashMap<>(); - entry.put(String.valueOf(i), sum); - resultList.add(entry); - } - - return resultList; - } - /** * 硬件充电结束后的处理逻辑 @@ -1799,6 +2020,8 @@ chargingOrderService.endCharge(code, 2); } + + /** * 硬件异常结束充电后的处理逻辑 * @param code 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..b58cdde 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,16 +92,36 @@ vipOrderService.saveOrUpdate(dto); return R.ok(dto.getId()); } + + + @PostMapping("/addVipOrder1") + public R<Long> addVipOrder1(@RequestBody TVipOrder dto) { + if (dto.getId()!=null){ + List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()) + .ne(TVipOrder::getId, dto.getId()).list(); + if (!list.isEmpty())return R.fail("订单编号已存在"); + }else{ + List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()).list(); + if (!list.isEmpty())return R.fail("订单编号已存在"); + } + 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){ - TVipOrder one = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, code).one(); one.setSerialNumber(outTradeNo); one.setPaymentStatus(2); @@ -99,18 +130,12 @@ giveVipDto.setVipId(one.getVipId()); giveVipDto.setType(one.getVipType()); giveVipDto.setUserIds(one.getAppUserId().toString()); - - - appUserClient.giveVip(giveVipDto); - return R.ok(); - } - @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..3bb4884 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); @@ -194,7 +194,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 +231,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 6361e2a..a20b110 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,22 +188,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()); QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>() - .between("create_time", firstDayOfMonth, lastDayOfMonth) + .between("pay_time", firstDayOfMonth.atTime(0, 0, 0), lastDayOfMonth.atTime(23, 59, 59)) .eq("status", 5) .eq("recharge_payment_status", 2); if (chargingBillListVO.getType() == 2) { @@ -343,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"))); @@ -355,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) @@ -431,6 +484,7 @@ } } } + chargingBillVO.setOrderCount(i); chargingBillVO.setChargingCapacity(chargingCapacityTotal); chargingBillVO.setPaymentAmount(paymentAmountTotal); chargingBillVO.setOrderAmount(paymentAmountTotal.subtract(refundAmountTotal).subtract(commissionAmountTotal).subtract(sharingAmountTotal)); @@ -450,6 +504,8 @@ chargingBillVO.setList(pageInfo); return chargingBillVO; } + + @Override public ChargingBillVO chargingBillList(ChargingListQuery dto) { if (dto.getState()!=null){ @@ -469,6 +525,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"); @@ -481,7 +580,29 @@ BigDecimal discountTotal = 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()){ @@ -508,22 +629,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()); QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>() - .between("create_time", firstDayOfMonth, lastDayOfMonth) + .between("pay_time", firstDayOfMonth.atTime(0, 0, 0), lastDayOfMonth.atTime(23, 59, 59)) .eq("status", 5) .eq("recharge_payment_status", 2); if (chargingBillListVO.getType() == 2) { @@ -705,8 +822,13 @@ chargingBillListVO.setChargingSecond(chargingSecond); } for (ChargingBillListVO chargingBillListVO : list1) { - if (chargingBillListVO.getType() ==2){ + if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){ continue; + } + if (roleType == 2){ + if (chargingBillListVO.getSiteId()==0){ + continue; + } } LocalDateTime billTime = chargingBillListVO.getBillTime(); // 将其转化为yyyy-MM格式字符串 @@ -716,20 +838,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) @@ -805,15 +925,21 @@ 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) { - LocalDateTime now = LocalDateTime.now(); - // 将时间转化为字符串 只保留年月日 格式为yyyy-MM-dd - String format = now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")); + LocalDateTime localDateTime = LocalDateTime.now().minusMonths(1); + // 获取 LocalDate 对象 + LocalDate date = localDateTime.toLocalDate(); +// // 获取该月份的第一天 + LocalDate firstDayOfMonth = date.withDayOfMonth(1); + // 获取该月份的最后一天 + LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth()); + System.err.println(firstDayOfMonth); + System.err.println(lastDayOfMonth); } } 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 9e8be3a..00e1c84 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; @@ -76,6 +80,7 @@ import java.time.*; import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; +import java.time.temporal.ChronoUnit; import java.time.temporal.WeekFields; import java.util.*; import java.util.concurrent.*; @@ -98,7 +103,8 @@ private ChargingGunClient chargingGunClient; @Resource private TSettlementConfirmMapper tSettlementConfirmMapper; - + @Resource + private PartnerClient partnerClient; @Resource private SiteClient siteClient; @@ -882,10 +888,13 @@ 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); + chargingOrderRefundService.save(chargingOrderRefund); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); } + chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } } @@ -932,7 +941,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(); @@ -982,6 +991,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)); @@ -1138,7 +1151,7 @@ TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId()) .orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1")); - if(null != order && order.getStatus() != 3){ + if(null != order && order.getStatus() != 4){ return; } @@ -1205,6 +1218,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"); @@ -1215,7 +1263,16 @@ BigDecimal commissionMoney = new BigDecimal("0"); BigDecimal refundMoney = new BigDecimal("0"); BigDecimal paymentMoney = new BigDecimal("0"); + List<String> collect2 = list.stream().map(TChargingOrder::getCode).collect(Collectors.toList()); for (ChargingOrderVO chargingOrderVO : list) { + 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()+""); @@ -1233,10 +1290,13 @@ // 充电订单 明细记录 List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>() .eq("charging_order_id", chargingOrderVO.getId())); - UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData(); - if (data5!=null){ - long l = data5.getCumulative_charging_time() * 60L; - chargingOrderVO.setChargingSecond(l); + if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderVO.getStartTime(); + LocalDateTime endTime = chargingOrderVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderVO.setChargingSecond(between); + } // 充电时段数 int size = chargingOrderId.size(); @@ -1257,27 +1317,31 @@ } } + + + List<Long> orderIds = list1.stream().map(TChargingOrder::getId).collect(Collectors.toList()); + if(orderIds.isEmpty())orderIds.add(-1L); + List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery() + .in(TChargingOrderRefund::getChargingOrderId, orderIds) + .eq(TChargingOrderRefund::getRefundStatus,2).list(); + 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){ - long l = data5.getCumulative_charging_time() * 60L; - chargingOrderVO.setChargingSecond(l); - time+=l; + if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderVO.getStartTime(); + LocalDateTime endTime = chargingOrderVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + time+=between; } - List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2) - .eq(TChargingOrderRefund::getChargingOrderId, chargingOrderVO.getId()).list(); + List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId())) + .collect(Collectors.toList()); 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")); @@ -1336,8 +1400,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 @@ -1365,7 +1429,8 @@ return this.baseMapper.getYearData(chargingOrderIds); } - + @Resource + private SysUserClient sysUserClient; @Override public ChargingOrderTimeVO chargingList(ChargingListQuery dto) { String startTime1 = null; @@ -1409,9 +1474,52 @@ 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); + List<Integer> siteIdsList = list.stream().map(ChargingOrderListVO::getSiteId).collect(Collectors.toList()); + if (siteIdsList.isEmpty())siteIdsList.add(-1); + List<Site> sites = siteClient.getSiteByIds(siteIdsList).getData(); + 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){ @@ -1421,9 +1529,9 @@ chargingOrderListVO.setUid(chargingOrderListVO.getId()+""); List<Integer> integers = new ArrayList<>(); integers.add(chargingOrderListVO.getSiteId()); - List<Site> data = siteClient.getSiteByIds(integers).getData(); - if (!data.isEmpty()) { - chargingOrderListVO.setSiteName(data.get(0).getName()); + Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null); + if (site!=null){ + chargingOrderListVO.setSiteName(site.getName()); } if (chargingOrderListVO.getChargingGunId()!=null && chargingOrderListVO.getChargingPileId()!=null){ TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrderListVO.getChargingGunId()).getData(); @@ -1432,13 +1540,12 @@ chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName()); } } - // 获取充电时间 - UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderListVO.getCode()).getData(); - if (data5!=null){ - if (data5.getTime_remaining()!=null){ - chargingOrderListVO.setChargingSecond(data5.getCumulative_charging_time()*60L); - - } + if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderListVO.getStartTime(); + LocalDateTime endTime = chargingOrderListVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderListVO.setChargingSecond(between); } // 获取开始SOC 结束soc if (chargingOrderListVO.getCode()!=null){ @@ -1474,7 +1581,6 @@ } } chargingOrderListVO.setPhone(data3.getPhone()); - } } List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery() @@ -1523,6 +1629,28 @@ // 不分页 PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1,999999999); List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2); + for (ChargingOrderListVO chargingOrderListVO : list1) { + List<Integer> integers = new ArrayList<>(); + integers.add(chargingOrderListVO.getSiteId()); + Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null); + if (site!=null){ + chargingOrderListVO.setSiteName(site.getName()); + } + if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderListVO.getStartTime(); + LocalDateTime endTime = chargingOrderListVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderListVO.setChargingSecond(between); + } + if (chargingOrderListVO.getChargingGunId()!=null && chargingOrderListVO.getChargingPileId()!=null){ + TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrderListVO.getChargingGunId()).getData(); + TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderListVO.getChargingPileId()).getData(); + if (data2 != null && data1 != null) { + chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName()); + } + } + } chargingOrderTimeVO.setExportList(list1); chargingOrderTimeVO.setOrderCount(list1.size()); // 计算充电总度数 @@ -1548,14 +1676,17 @@ BigDecimal feng = new BigDecimal("0"); BigDecimal ping = new BigDecimal("0"); BigDecimal gu = new BigDecimal("0"); + List<Long> collect = list1.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList()); + List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.lambdaQuery() + .in(TChargingOrderAccountingStrategy::getChargingOrderId,collect).list(); for (ChargingOrderListVO chargingOrderListVO : list1) { if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity()); if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount()); if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence()); if (chargingOrderListVO.getServiceCharge()!=null)serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge()); - List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery() - .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list(); + List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId())) + .collect(Collectors.toList()); for (TChargingOrderAccountingStrategy temp : list2) { switch (temp.getType()){ case 1: @@ -1637,6 +1768,8 @@ public ChargingOrderListInfoVO chargingInfo(String uid) { TChargingOrder chargingOrder= this.getById(uid); ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO(); + chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime()); + chargingOrderListInfoVO.setEndTime(chargingOrder.getEndTime()); chargingOrderListInfoVO.setStatus(chargingOrder.getStatus()); BigDecimal bigDecimal = new BigDecimal("0.006"); if (chargingOrder.getOrderAmount()!=null){ @@ -1713,13 +1846,12 @@ chargingOrderListInfoVO.setList(data6); } - // 获取充电时间 - UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData(); - if (data5!=null){ - if (data5.getTime_remaining()!=null){ - chargingOrderListInfoVO.setChargingSecond(data5.getCumulative_charging_time()*60L+""); - - } + if (chargingOrderListInfoVO.getStartTime()!=null && chargingOrderListInfoVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderListInfoVO.getStartTime(); + LocalDateTime endTime = chargingOrderListInfoVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderListInfoVO.setChargingSecond(between+""); } if (chargingOrder.getAppUserCarId()!=null){ @@ -1834,83 +1966,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()); @@ -1919,16 +2102,17 @@ 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()); } //已充电总度数 @@ -1938,6 +2122,7 @@ BigDecimal vipDiscountAmount = BigDecimal.ZERO; //计算优惠金额 if(null != chargingOrder.getVipDiscount()){ + //0.58折 vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())); serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()); } @@ -1953,8 +2138,6 @@ periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); total = total.add(electrovalenc.add(originalServicePrice)); } - - //原金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); @@ -2137,6 +2320,7 @@ referralReward(chargingOrder); //开始构建退款费用 + refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN); if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); //构建退款明细 @@ -2174,20 +2358,21 @@ if(2 == rechargePaymentType){ RefundReq dto = new RefundReq(); dto.setOutTradeNo(chargingOrder.getCode()); - dto.setOutRequestNo(chargingOrderRefund.getCode()); + dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); 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); - } + chargingOrderRefundService.save(chargingOrderRefund); + this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } } } } + + + @Override public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) { @@ -2210,8 +2395,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 @@ -2277,6 +2462,10 @@ private TVipOrderService vipOrderService; @Resource private TVipOrderRefundService vipOrderRefundService; + + + + @Override public R payRefund(PayOrderRefundDto payOrderQueryDto) { if (payOrderQueryDto.getType()==1){ @@ -2334,7 +2523,6 @@ dto.setRefundReason("取消订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); chargingOrderRefund.setRefundStatus(2); chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); this.baseMapper.updateById(tChargingOrder); @@ -2342,11 +2530,6 @@ } } - - - - - } if (payOrderQueryDto.getType()==2){ TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId()); @@ -2402,16 +2585,10 @@ dto.setRefundReason("取消订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); - tChargingOrder.setRefundStatus(2); tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); - - shoppingOrderService.updateById(tChargingOrder); - shoppingOrderRefundService.save(chargingOrderRefund); - } } @@ -2422,8 +2599,6 @@ if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){ return R.fail("退款金额需小于支付金额"); } - - TVipOrderRefund chargingOrderRefund = new TVipOrderRefund(); chargingOrderRefund.setVipOrderId(tChargingOrder.getId()); chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); @@ -2469,23 +2644,13 @@ dto.setRefundReason("取消订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); - tChargingOrder.setRefundStatus(2); tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); - - vipOrderService.updateById(tChargingOrder); - vipOrderRefundService.save(chargingOrderRefund); - } } - } - - - return R.ok(); } @@ -2541,7 +2706,7 @@ .eq("recharge_payment_status",2); switch (dto.getType()){ case 1: - eq.between("start_time", localDateTime, localDateTime1); + eq.between("pay_time", localDateTime, localDateTime1); break; case 2: eq.between("end_time", localDateTime, localDateTime1); @@ -2677,9 +2842,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()){ @@ -2702,12 +2907,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<>(); @@ -3010,6 +3468,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..84b6550 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(); @@ -297,10 +291,7 @@ siteIds = data; } } - }else{ - siteIds.add(pageList.getSiteId()); } - List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, siteIds, pageInfo); for (GetOrderEvaluatePageListDTO dto : list) { TAppUser appUser = appUserClient.getUserById(dto.getAppUserId()).getData(); @@ -321,6 +312,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 +409,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/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 24c7d3a..cd3f4cd 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml @@ -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,7 +56,7 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties @@ -74,7 +74,7 @@ nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos @@ -89,7 +89,7 @@ nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 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..3f47083 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 @@ -32,12 +38,19 @@ and t1.status = #{req.state} </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.bill_time between #{startTime1} and #{startTime2} + 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 bda3e7a..6620d4a 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> @@ -105,7 +111,7 @@ and t1.charging_gun_id = #{req.gunId} </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.start_time between #{startTime1} and #{startTime2}) + and (t1.pay_time between #{startTime1} and #{startTime2}) </if> <if test="endTime1 != null and endTime1!=''"> and (t1.end_time between #{endTime1} and #{endTime2}) @@ -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 >= #{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 @@ -850,7 +870,8 @@ </select> <select id="chargingList" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO"> - select t1.* ,t1.current as chargingCapacity,t1.payment_amount as paymentAmount,t1.electricity as chargingCapacity from t_charging_order t1 + select t1.*, + t1.current as chargingCapacity,t1.payment_amount as paymentAmount,t1.electricity as chargingCapacity from t_charging_order t1 where 1=1 <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') @@ -867,6 +888,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> @@ -880,7 +907,7 @@ and t1.site_id = #{req.siteId} </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.start_time between #{startTime1} and #{startTime2}) + and (t1.pay_time between #{startTime1} and #{startTime2}) </if> <if test="endTime1 != null and endTime1!=''"> and (t1.end_time between #{endTime1} and #{endTime2}) @@ -1461,8 +1488,6 @@ </foreach> </if> GROUP BY - time - ORDER BY time </select> <select id="countAllUserData" resultType="java.util.Map"> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml index 8bdfc50..8107295 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml @@ -114,7 +114,7 @@ <if test="null != query.content and '' != query.content"> and a.content like CONCAT('%', #{query.content}, '%') </if> - <if test="null != query.evaluateType"> + <if test="null != evaluationTagIds and evaluationTagIds.size() > 0"> and a.id in (select order_evaluate_id from t_order_evaluate_tag where evaluation_tag_id in <foreach collection="evaluationTagIds" item="item" index="index" open="(" separator="," close=")"> #{item} 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 fdb537f..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,6 +33,7 @@ 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; @@ -37,6 +41,7 @@ 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; @@ -44,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; /** @@ -61,7 +68,6 @@ private TGoodsService goodsService; @Autowired private TActivityService activityService; - @Resource private TokenService tokenService; @Resource @@ -74,6 +80,11 @@ private TCouponService couponService; @Resource private WxPaymentClient wxPaymentClient; + @Resource + private RedisService redisService; + + @Autowired + public RedisTemplate redisTemplate; /** @@ -87,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) @@ -95,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) @@ -105,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) @@ -115,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) { @@ -152,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) { @@ -177,7 +193,6 @@ //检查当前用户积分是否够 Long userId = tokenService.getLoginUserApplet().getUserId(); Integer point = 0; - if (exchangeDto.getGoodType()==1) { //查询当前商品信息 TGoods good = goodsService.getById(exchangeDto.getGoodId()); @@ -203,85 +218,93 @@ 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(); } 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..a029e65 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,24 @@ 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); } + + @PostMapping("/getSet2") + public R<TIntegralRule> getSet2() { + TIntegralRule res = integralRuleService.getOne(new QueryWrapper<>()); + return R.ok(res); + } + + + @GetMapping("/getSet1") @ApiOperation(tags = {"小程序-个人中心-签到"},value = "获取积分设置") public R<TIntegralRule> getSet1() { @@ -92,6 +106,8 @@ return R.ok(res); } + + @RequiresPermissions(value = {"/IntegralSetting"}, logical = Logical.OR) @PostMapping("/saveSet") @ApiOperation(tags = {"管理后台-积分管理"},value = "保存积分设置") @Log(title = "【积分管理】保存积分设置", businessType = BusinessType.INSERT) @@ -105,8 +121,10 @@ } return R.ok(); } - - + + + + @RequiresPermissions(value = {"/vipSetting/html"}, logical = Logical.OR) @GetMapping("/getInfo") @ApiOperation(tags = {"管理后台-积分管理"},value = "type 1=积分规则说明," + "2=会员折扣说明," + @@ -126,9 +144,31 @@ } return R.ok(g.getContent()); } - - - + + + @GetMapping("/getInfo1") + @ApiOperation(tags = {"小程序-积分管理"},value = "type 1=积分规则说明," + + "2=会员折扣说明," + + "3=优惠券说明," + + "4=双倍积分说明," + + "5=商城专享价说明," + + "6=会员协议," + + "7=用户协议," + + "8=隐私协议," + + "9=邀请好友说明," + + "10=资质证明," + + "11=开票说明") + public R<String> getInfo1(Integer type) { + THtml g = htmlService.getOne(new QueryWrapper<THtml>().eq("type",type)); + if (g == null){ + return R.ok(""); + } + 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 48e5837..700ba9e 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() { @@ -344,14 +361,14 @@ payMoney = byId.getMonthlyCard(); } break; - case 2: - if (byId.getSeasonCardDiscountStart()!=null&&(now.isAfter(byId.getSeasonCardDiscountStart())&&now.isBefore(byId.getSeasonCardDiscountEnd()))){ - payMoney = byId.getSeasonCard().multiply(byId.getSeasonCardDiscount().divide(new BigDecimal(10))); - discountMoney = byId.getSeasonCard().subtract(payMoney); - discount = byId.getSeasonCardDiscount(); - }else { - payMoney = byId.getSeasonCard(); - } + case 2: + if (byId.getSeasonCardDiscountStart()!=null&&(now.isAfter(byId.getSeasonCardDiscountStart())&&now.isBefore(byId.getSeasonCardDiscountEnd()))){ + payMoney = byId.getSeasonCard().multiply(byId.getSeasonCardDiscount().divide(new BigDecimal(10))); + discountMoney = byId.getSeasonCard().subtract(payMoney); + discount = byId.getSeasonCardDiscount(); + }else { + payMoney = byId.getSeasonCard(); + } break; case 3: if (byId.getAnnualCardDiscountStart()!=null&&(now.isAfter(byId.getAnnualCardDiscountStart())&&now.isBefore(byId.getAnnualCardDiscountEnd()))){ 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 6df0a5e..38db787 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 @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.OrderCodeUtil; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; @@ -87,14 +88,10 @@ @Override public Object vipInfoPay(TVip byId, BigDecimal payMoney, Integer payType,BigDecimal discountMoney,BigDecimal discount,Integer buyType, Long userId) { TAppUser user = appUserClient.getUserById(userId).getData(); - - //生成会员购买订单 - TVipOrder shopOrder = new TVipOrder(); shopOrder.setCode(OrderCodeUtil.getOrderCode("HY")); shopOrder.setType(1); - shopOrder.setAppUserId(userId); shopOrder.setType(1); shopOrder.setVipId(byId.getId()); @@ -114,9 +111,11 @@ shopOrder.setPaymentStatus(1); shopOrder.setPaymentType(payType); shopOrder.setPayTime(LocalDateTime.now()); - orderClient.addVipOrder(shopOrder).getData(); - - + R<Long> longR = orderClient.addVipOrder(shopOrder); + if(200 != longR.getCode()){ + return AjaxResult.error(longR.getMsg()); + } + if (payType==1){ //调起支付 PaymentOrder paymentOrder = new PaymentOrder(); @@ -138,7 +137,6 @@ return AjaxResult.success(data); } } - return null; } } 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 61a6efb..f251945 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml @@ -89,7 +89,7 @@ nacos: discovery: # 开发环境 -# server-addr: 127.0.0.1:8848 # nacos注册中心地址 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 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 e4dc7b4..bb0156c 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 @@ -1,6 +1,7 @@ package com.ruoyi.payment.ali.v2; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; @@ -131,7 +132,9 @@ log.info("请求参数:{}", req); log.info("返回结果:{}", response.getBody()); if (response.isSuccess()) { - return JSON.parseObject(response.getBody(), RefundResp.class); + JSONObject jsonObject = JSON.parseObject(response.getBody()); + RefundResp alipay_trade_refund_response = jsonObject.getObject("alipay_trade_refund_response", RefundResp.class); + return alipay_trade_refund_response; } }catch (Exception e){ e.printStackTrace(); diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml index 37a8ee1..c2315ed 100644 --- a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml @@ -19,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 @@ -27,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} @@ -54,7 +54,7 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties @@ -72,7 +72,7 @@ nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 +# server-addr: 127.0.0.1:8848 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos @@ -87,7 +87,7 @@ nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# server-addr: 127.0.0.1:8848 # nacos注册中心地址 # namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 -- Gitblit v1.7.1