From 4d54d652b4bdb4ab2f3ee6ba670348fab9b07365 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期二, 13 八月 2024 11:00:53 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java | 39 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderEvaluateQuery.java | 26 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/RoleSiteFallbackFactory.java | 44 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java | 360 -- ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetPermissionConfigurationDTO.java | 21 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java | 27 ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml | 1 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java | 41 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java | 4 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 3 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java | 20 ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml | 1 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java | 8 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java | 48 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java | 14 ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml | 1 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml | 35 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingPileClient.java | 2 ruoyi-service/ruoyi-order/pom.xml | 21 ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java | 10 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 78 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java | 10 ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml | 14 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java | 66 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java | 21 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingPileVO.java | 31 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java | 22 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PageChargingPileListDTO.java | 8 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java | 34 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java | 484 +- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 8 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java | 7 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TApplyChargingPile.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SetPermissionConfiguration.java | 24 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 69 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 26 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 73 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java | 9 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java | 10 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java | 21 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java | 22 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java | 14 ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml | 1 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java | 32 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java | 35 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TVip.java | 15 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityVO.java | 27 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java | 11 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java | 252 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java | 9 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TEnterpriseUserApplication.java | 6 ruoyi-service/ruoyi-chargingPile/pom.xml | 6 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java | 8 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java | 16 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java | 23 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java | 27 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/ExchangeRecordVO.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java | 8 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java | 19 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderEvaluate.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java | 94 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/vo/TEvaluationTagVO.java | 15 ruoyi-modules/ruoyi-system/pom.xml | 18 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java | 5 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java | 40 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java | 17 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java | 38 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChoiceUserListQueryDto.java | 19 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/SignFilter.java | 192 + ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunModeEnum.java | 46 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateMapper.xml | 104 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java | 17 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java | 61 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RoleInfoVo.java | 14 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java | 27 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java | 6 ruoyi-api/ruoyi-api-system/pom.xml | 8 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java | 34 .gitignore | 5 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java | 36 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java | 45 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java | 24 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateTagMapper.xml | 12 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java | 17 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java | 5 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 120 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 30 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java | 36 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java | 69 ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 4 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java | 53 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java | 10 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java | 208 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java | 49 ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 1 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml | 1 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java | 162 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java | 266 - ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java | 88 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java | 3 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java | 26 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 71 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java | 64 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java | 104 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/UserListQueryDto.java | 19 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java | 12 ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java | 7 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java | 19 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java | 48 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 106 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 2 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java | 40 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java | 43 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java | 5 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java | 11 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/GrantCouponDto.java | 20 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/GetSysUserList.java | 25 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java | 26 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | 32 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TGrantVipServiceImpl.java | 23 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java | 24 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java | 10 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml | 3 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java | 49 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java | 23 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java | 55 ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml | 19 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java | 77 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 9 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java | 18 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml | 6 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java | 33 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java | 72 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 31 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java | 12 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java | 16 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java | 8 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateTagMapper.java | 10 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java | 31 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/ChargingOrderClient.java | 2 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java | 136 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java | 4 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml | 161 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java | 63 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 3 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java | 20 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java | 42 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ExchangeOrderClient.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java | 18 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java | 37 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml | 12 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java | 185 + ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java | 8 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TCarportController.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java | 199 + ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java | 30 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java | 98 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java | 73 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java | 132 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java | 37 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TActivityStatisticsQuery.java | 32 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TMonitoringEquipmentController.java | 7 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java | 29 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java | 27 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml | 21 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TGrantVipMapper.java | 19 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TGrantVipService.java | 17 ruoyi-service/ruoyi-account/pom.xml | 6 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml | 1 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml | 12 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/RequestParamGlobalFilter.java | 98 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java | 10 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TGrantVip.java | 49 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunStatusEnum.java | 50 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderEvaluateVO.java | 27 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 22 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java | 91 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java | 13 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java | 19 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SiteDetailEvaluateVO.java | 24 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileMapper.java | 11 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java | 17 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java | 28 /dev/null | 54 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java | 14 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 86 ruoyi-common/ruoyi-common-core/pom.xml | 5 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java | 51 195 files changed, 5,977 insertions(+), 1,659 deletions(-) diff --git a/.gitignore b/.gitignore index c5a7652..3e7af20 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,7 @@ generator .idea -target \ No newline at end of file +target + +*.yaml +*.yml \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChoiceUserListQueryDto.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChoiceUserListQueryDto.java new file mode 100644 index 0000000..feda3ea --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChoiceUserListQueryDto.java @@ -0,0 +1,19 @@ +package com.ruoyi.account.api.dto; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel("发放优惠券-选择人员列表DTO") +public class ChoiceUserListQueryDto extends BasePage { + @ApiModelProperty(value = "用户手机号") + String userPhone; + @ApiModelProperty(value = "市code") + String cityCode; + @ApiModelProperty(value = "省code") + String provinceCode; + @ApiModelProperty(value = "用户标签ids 多个逗号分隔") + String userTagId; +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/GrantCouponDto.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/GrantCouponDto.java new file mode 100644 index 0000000..645a948 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/GrantCouponDto.java @@ -0,0 +1,20 @@ +package com.ruoyi.account.api.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@ApiModel("管理后台发放优惠券DTO") +public class GrantCouponDto { + @ApiModelProperty("用户ids 逗号分隔") + private String userIds; + @ApiModelProperty("优惠券id") + private Integer couponId; + @ApiModelProperty("发放方式 1积分 2现金") + private Integer waysToObtain; + @ApiModelProperty("结束时间 前端忽略") + private LocalDateTime endTime; +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/UserListQueryDto.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/UserListQueryDto.java index 2605486..b958d1d 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/UserListQueryDto.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/UserListQueryDto.java @@ -1,14 +1,21 @@ package com.ruoyi.account.api.dto; import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class UserListQueryDto extends BasePage { - private String userPhone; - private String cityCode; - private Integer status; - private Integer userTagId; - private Integer vipTypeId; - private Integer companyId; + @ApiModelProperty(value = "用户手机号") + String userPhone; + @ApiModelProperty(value = "所在地code") + String cityCode; + @ApiModelProperty(value = "状态 1正常2冻结 3注销") + Integer status; + @ApiModelProperty(value = "用户标签id") + Integer userTagId; + @ApiModelProperty(value = "会员类型id") + Integer vipTypeId; + @ApiModelProperty(value = "单位id") + Integer companyId; } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java index 370b476..cec1394 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java @@ -2,7 +2,10 @@ import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; +import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.page.PageInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -34,6 +37,11 @@ public R<Integer> getUseCountByCouponId(Integer couponId) { return null; } + + @Override + public R<PageInfo<ExchangeRecordVO>> getExchangeRecordByCouponId(ExchangeRecordGoodsQuery couponId) { + return R.fail("根据优惠券id查询领取记录:"+throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java new file mode 100644 index 0000000..7a5d7e1 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java @@ -0,0 +1,36 @@ +package com.ruoyi.account.api.factory; + +import com.ruoyi.account.api.feignClient.AppUserCarClient; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.account.api.model.TAppUserCar; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 门店服务降级处理 + * + * @author ruoyi + */ +@Component +public class AppUserCarFallbackFactory implements FallbackFactory<AppUserCarClient> +{ + private static final Logger log = LoggerFactory.getLogger(AppUserCarFallbackFactory.class); + + @Override + public AppUserCarClient create(Throwable throwable) { + log.error("用户车辆服务调用失败:{}", throwable.getMessage()); + return new AppUserCarClient() { + + @Override + public R<List<TAppUserCar>> getCarByIds(List<Integer> carIds) { + return R.fail("根据用户车辆id查询车辆信息失败:"+throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java index a2bd046..ca9289e 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java @@ -1,10 +1,14 @@ package com.ruoyi.account.api.factory; import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.common.core.domain.R; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; + +import java.util.List; /** * 门店服务降级处理 @@ -20,7 +24,21 @@ public AppUserClient create(Throwable throwable) { log.error("账户服务调用失败:{}", throwable.getMessage()); return new AppUserClient() { - + + @Override + public R<List<Long>> getUserIdsByPhone(String phone) { + return R.fail("根据手机号查询用户ids失败:"+throwable.getMessage()); + } + + @Override + public R<TAppUser> getUserById(Long id) { + return R.fail("根据id查询用户失败:"+throwable.getMessage()); + } + + @Override + public R<List<TAppUser>> getUserByIds(List<Long> appUserIds) { + return R.fail("根据用户id查询用户信息失败:"+throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java index 595543c..e3ea1b3 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java @@ -2,10 +2,14 @@ import com.ruoyi.account.api.factory.AppCouponFallbackFactory; import com.ruoyi.account.api.factory.AppUserFallbackFactory; +import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; +import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.page.PageInfo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -13,7 +17,7 @@ * 用户服务 * @author ruoyi */ -@FeignClient(contextId = "AppCouponClient", value = ServiceNameConstants.CONTRACT_ACCOUNT, fallbackFactory = AppCouponFallbackFactory.class) +@FeignClient(contextId = "AppCouponClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = AppCouponFallbackFactory.class) public interface AppCouponClient { /** @@ -29,4 +33,11 @@ */ @PostMapping("/t-app-coupon/getUseCountByCouponId") public R<Integer> getUseCountByCouponId(Integer couponId); + /** + * 后台远程调用 根据优惠券id 查询领取记录 + * @param couponId + * @return + */ + @PostMapping("/t-app-coupon/getExchangeRecordByCouponId") + R<PageInfo<ExchangeRecordVO>> getExchangeRecordByCouponId(@RequestBody ExchangeRecordGoodsQuery couponId); } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java new file mode 100644 index 0000000..82bb2c5 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java @@ -0,0 +1,31 @@ +package com.ruoyi.account.api.feignClient; + +import com.ruoyi.account.api.factory.AppUserCarFallbackFactory; +import com.ruoyi.account.api.factory.AppUserFallbackFactory; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.account.api.model.TAppUserCar; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * 用户车辆服务 + * @author ruoyi + */ +@FeignClient(contextId = "AppUserCarClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = AppUserCarFallbackFactory.class) +public interface AppUserCarClient { + + /** + * 根据用户车辆id查询车辆信息 + * @param carIds 车辆id集合 + * @return + */ + @PostMapping(value = "/t-app-user-car/getCarByIds") + public R<List<TAppUserCar>> getCarByIds(@RequestBody List<Integer> carIds); +} 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 0d96f57..931d00a 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 @@ -1,15 +1,42 @@ package com.ruoyi.account.api.feignClient; +import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.account.api.factory.AppUserFallbackFactory; +import com.ruoyi.common.core.domain.R; +import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; /** * 用户服务 * @author ruoyi */ -@FeignClient(contextId = "AppUserClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = AppUserFallbackFactory.class) +@FeignClient(contextId = "AppUserClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = AppUserFallbackFactory.class) public interface AppUserClient { + @ApiOperation(value = "管理后台-根据手机号查询用户ids", tags = {"管理后台-活动费用统计"}) + @PostMapping(value = "/t-app-user/user/getUserIdsByPhone") + public R<List<Long>> getUserIdsByPhone(@RequestParam("phone") String phone); - + /** + * 根据用户id查询用户信息 + * @param appUserIds 用户id集合 + * @return + */ + @PostMapping(value = "/t-app-user/user/getUserByIds") + public R<List<TAppUser>> getUserByIds(@RequestBody List<Long> appUserIds); + + + /** + * 根据id获取用户 + * @param id + * @return + */ + @GetMapping(value = "/user/getUserById") + R<TAppUser> getUserById(Long id); } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/ExchangeRecordVO.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/ExchangeRecordVO.java index 43c0f6d..b0cf1c1 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/ExchangeRecordVO.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/ExchangeRecordVO.java @@ -11,7 +11,9 @@ @ApiModel("管理后台 优惠券兑换记录列表返回VO") public class ExchangeRecordVO { @ApiModelProperty(value = "获得时间") - private String createTime; + private String createTime1; + @ApiModelProperty(value = "获得时间 前端忽略") + private LocalDateTime createTime; @ApiModelProperty(value = "获得用户") private String phone; @ApiModelProperty(value = "优惠金额") @@ -28,9 +30,8 @@ private String orderId; @ApiModelProperty(value = " 前端忽略 获取方式 1=积分兑换 2现金购买") private Integer waysToObtain; - @ApiModelProperty(value = " 是否删除0否1是") + @ApiModelProperty(value = "优惠券id") + private Integer couponId; + @ApiModelProperty(value = " 是否删除0否1是 前端忽略") private Integer delFlag; - @ApiModelProperty(value = "三方支付流水号 前端忽略") - private String serialNumber; - } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetPermissionConfigurationDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetPermissionConfigurationDTO.java new file mode 100644 index 0000000..dfe66c9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetPermissionConfigurationDTO.java @@ -0,0 +1,21 @@ +package com.ruoyi.chargingPile.api.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author zhibing.pu + * @Date 2024/8/9 10:30 + */ +@Data +@ApiModel +public class GetPermissionConfigurationDTO { + @ApiModelProperty(value = "备注") + private String permissionRemarks; + @ApiModelProperty(value = "权限菜单") + private Map<String, Object> menu; +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java index 7fb9ab5..f971f06 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java @@ -43,4 +43,12 @@ private Integer accountingStrategyId; @ApiModelProperty("计费策略类型(1=平台添加,2=自定义策略)") private Integer accountingStrategyType; + @ApiModelProperty(value = "计费策略权限") + private boolean authAccountingStrategy = true; + @ApiModelProperty(value = "合作商权限") + private boolean authPartner = true; + @ApiModelProperty(value = "编辑权限") + private boolean authUpdate = true; + @ApiModelProperty(value = "删除权限") + private boolean authDelete = true; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PageChargingPileListDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PageChargingPileListDTO.java index b58c94f..74826e8 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PageChargingPileListDTO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PageChargingPileListDTO.java @@ -37,5 +37,13 @@ private String equipmentType; @ApiModelProperty(value = "额定功率") private BigDecimal ratedPower; + @ApiModelProperty(value = "查看权限") + private boolean authQueryInfo = true; + @ApiModelProperty(value = "编辑权限") + private boolean authUpdate = true; + @ApiModelProperty(value = "删除权限") + private boolean authDelete = true; + @ApiModelProperty(value = "新增接口权限") + private boolean authAddChargingGun = true; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java index a62e139..a868183 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java @@ -1,10 +1,14 @@ package com.ruoyi.chargingPile.api.factory; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; +import com.ruoyi.chargingPile.api.model.TChargingPile; +import com.ruoyi.common.core.domain.R; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; + +import java.util.List; /** * 充电桩服务降级处理 @@ -20,7 +24,11 @@ public ChargingPileClient create(Throwable throwable) { log.error("充电桩调用失败:{}", throwable.getMessage()); return new ChargingPileClient() { - + + @Override + public R<List<TChargingPile>> getChargingPileBySiteId(Integer siteId) { + return R.fail("通过站点id获取充电桩列表失败:"+throwable.getMessage()); + } }; } } 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 new file mode 100644 index 0000000..20090c6 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java @@ -0,0 +1,36 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; +import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; +import com.ruoyi.chargingPile.api.model.TChargingPile; +import com.ruoyi.chargingPile.api.model.TParkingLot; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 停车场服务降级处理 + * + * @author ruoyi + */ +@Component +public class ParkingLotFallbackFactory implements FallbackFactory<ParkingLotClient> +{ + private static final Logger log = LoggerFactory.getLogger(ParkingLotFallbackFactory.class); + + @Override + public ParkingLotClient create(Throwable throwable) { + log.error("停车场调用失败:{}", throwable.getMessage()); + return new ParkingLotClient() { + + @Override + public R<TParkingLot> getLotBySiteId(Integer siteId) { + return R.fail("通过站点id查询停车场信息调用失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java new file mode 100644 index 0000000..106e23b --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java @@ -0,0 +1,34 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 充电桩服务降级处理 + * + * @author ruoyi + */ +@Component +public class SiteFallbackFactory implements FallbackFactory<SiteClient> +{ + private static final Logger log = LoggerFactory.getLogger(SiteFallbackFactory.class); + + @Override + public SiteClient create(Throwable throwable) { + log.error("站点调用失败:{}", throwable.getMessage()); + return new SiteClient() { + + @Override + public R<List<Site>> getSiteByIds(List<Integer> ids) { + return R.fail("根据id集合获取站点数据调用失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java index aad471f..024bd8a 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java @@ -1,18 +1,28 @@ package com.ruoyi.chargingPile.api.feignClient; import com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory; +import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; /** * 充电桩服务 * @author ruoyi */ -@FeignClient(contextId = "ChargingPileClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = ChargingPileFallbackFactory.class) +@FeignClient(contextId = "ChargingPileClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = ChargingPileFallbackFactory.class) public interface ChargingPileClient { + /** + * 管理后台-通过站点id获取充电桩列表 不分页 + */ + @ApiOperation(value = "管理后台-通过站点id获取充电桩列表 不分页") + @PostMapping(value = "/t-charging-pile/getChargingPileBySiteId") + public R<List<TChargingPile>> getChargingPileBySiteId(@RequestParam("siteId") Integer siteId); } 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 new file mode 100644 index 0000000..0312dd8 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java @@ -0,0 +1,29 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory; +import com.ruoyi.chargingPile.api.model.TChargingPile; +import com.ruoyi.chargingPile.api.model.TParkingLot; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * 停车场服务 + * @author ruoyi + */ +@FeignClient(contextId = "ParkingLotClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = ParkingLotFallbackFactory.class) +public interface ParkingLotClient { + + /** + * 通过站点id查询停车场信息 + */ + @GetMapping(value = "/t-parking-lot/getLotBySiteId") + public R<TParkingLot> getLotBySiteId(@RequestParam("siteId") Integer siteId); + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java new file mode 100644 index 0000000..ecedc5b --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java @@ -0,0 +1,27 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.SiteFallbackFactory; +import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/10 14:38 + */ +@FeignClient(contextId = "SiteClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = SiteFallbackFactory.class) +public interface SiteClient { + + /** + * 根据id集合获取数据 + * @param ids + * @return + */ + @PostMapping("/site/getSiteByIds") + R<List<Site>> getSiteByIds(@RequestBody List<Integer> ids); +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java index 481c96c..9a6d580 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java @@ -98,4 +98,9 @@ @TableField("password") @ApiModelProperty(value = "登录密码", required = true) private String password; + /** + * 权限备注 + */ + @TableField("permission_remarks") + private String permissionRemarks; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TApplyChargingPile.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TApplyChargingPile.java index 01f9bb1..86bd0fc 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TApplyChargingPile.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TApplyChargingPile.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; @@ -38,6 +39,7 @@ private Long appUserId; @ApiModelProperty(value = "用电地址") + @NotBlank(message = "用电地址不能为空") @TableField("address") private String address; diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java index 3fd2438..23a5d14 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java @@ -35,10 +35,18 @@ @ApiModelProperty(value = "站点id") @TableField("site_id") private Integer siteId; + + @ApiModelProperty(value = "站点名称") + @TableField(exist = false) + private String siteName; @ApiModelProperty(value = "充电桩id") @TableField("charging_pile_id") private Integer chargingPileId; + + @ApiModelProperty(value = "通知电话") + @TableField("phone") + private String phone; @ApiModelProperty(value = "通知内容") @TableField("content") diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java index ac58640..0fbeaf2 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java @@ -64,7 +64,7 @@ @TableField("is_cache") private Integer isCache; - @ApiModelProperty(value = "菜单类型(M目录 C菜单 F按钮)") + @ApiModelProperty(value = "菜单类型(M目录 C菜单 F按钮 D数据)") @TableField("menu_type") private String menuType; diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SetPermissionConfiguration.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SetPermissionConfiguration.java new file mode 100644 index 0000000..bc77f75 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SetPermissionConfiguration.java @@ -0,0 +1,24 @@ +package com.ruoyi.chargingPile.api.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/9 11:13 + */ +@Data +@ApiModel +public class SetPermissionConfiguration { + @ApiModelProperty(value = "备注") + private String permissionRemarks; + @ApiModelProperty(value = "权限菜单id数组", required = true) + private List<Integer> menuId; + @ApiModelProperty(value = "站点id", required = true) + private Integer siteId; + @ApiModelProperty(value = "合作商id", required = true) + private Integer partnerId; +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java new file mode 100644 index 0000000..cad843c --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java @@ -0,0 +1,27 @@ +package com.ruoyi.chargingPile.api.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel(value = "SiteDetailQuery对象",description = "站点详情查询条件") +public class SiteDetailQuery implements Serializable { + + @ApiModelProperty(value = "站点id") + @NotNull(message = "站点id不能为空") + private Integer siteId; + + @ApiModelProperty(value = "经度") + @NotBlank(message = "地址经度不能为空") + private String lon; + + @ApiModelProperty(value = "纬度") + @NotBlank(message = "地址纬度不能为空") + private String lat; + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java new file mode 100644 index 0000000..890d00c --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java @@ -0,0 +1,17 @@ +package com.ruoyi.chargingPile.api.vo; + +import com.ruoyi.chargingPile.api.model.Site; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "ChargingGunCountVO对象",description = "充电枪数量VO") +public class ChargingGunCountVO extends Site { + + @ApiModelProperty(value = "充电枪在线数量") + private Integer freeCount; + @ApiModelProperty(value = "充电枪总数数量") + private Integer totalCount; + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java new file mode 100644 index 0000000..8edc9bd --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java @@ -0,0 +1,17 @@ +package com.ruoyi.chargingPile.api.vo; + +import com.ruoyi.chargingPile.api.model.Site; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "SiteDetailVO对象",description = "站点详情VO") +public class SiteDetailVO extends Site { + + @ApiModelProperty(value = "绑定车牌提示文案") + private String bindCarTips; + @ApiModelProperty(value = "距离") + private double distance; + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java new file mode 100644 index 0000000..2c026bc --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java @@ -0,0 +1,26 @@ +package com.ruoyi.chargingPile.api.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "StrategyPriceVO对象",description = "价格说明金额返回,会员开通金额说明") +public class StrategyPriceVO implements Serializable { + + @ApiModelProperty(value = "优惠金额") + private BigDecimal discountAmount; + + @ApiModelProperty(value = "最高优惠金额") + private BigDecimal maxDiscountAmount; + + @ApiModelProperty(value = "会员起步价") + private BigDecimal vipStartPrice; + + @ApiModelProperty(value = "服务费折扣") + private BigDecimal serviceFeeDiscount; + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java index bfdcd03..db1d3e4 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java @@ -11,5 +11,23 @@ @ApiModelProperty(value = "策略名称") private String strategyName; + + @ApiModelProperty(value = "编辑权限") + private boolean authUpdate = true; + + @ApiModelProperty(value = "删除权限") + private boolean authDelete = true; + + @ApiModelProperty(value = "查看费率权限") + private boolean authViewRates = true; + + @ApiModelProperty(value = "编辑权限") + private boolean authDownloadQRCode = true; + + @ApiModelProperty(value = "编辑权限") + private boolean authQueryInfo = true; + + @ApiModelProperty(value = "编辑权限") + private boolean authEndCharge = true; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingPileVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingPileVO.java new file mode 100644 index 0000000..fc4a5cb --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingPileVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.chargingPile.api.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.chargingPile.api.model.TChargingGun; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +@ApiModel(value = "TChargingPileVO对象",description = "充电桩信息") +public class TChargingPileVO implements Serializable { + @ApiModelProperty(value = "充电桩id") + private Integer id; + + @ApiModelProperty(value = "设备编号") + private String code; + + @ApiModelProperty(value = "充电设备名称") + private String name; + + @ApiModelProperty(value = "桩号") + private Integer number; + + @ApiModelProperty(value = "充电枪信息列表") + private List<TChargingGun> chargingGunList; + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e4d9cf2..7d5f8b3 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,2 @@ -com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory +com.ruoyi.chargingPile.api.factory.SiteFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingPileClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingPileClient.java index 462bc13..c7c1277 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingPileClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingPileClient.java @@ -8,7 +8,7 @@ * 充电订单服务 * @author ruoyi */ -@FeignClient(contextId = "ChargingPileClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = ChargingPileFallbackFactory.class) +@FeignClient(contextId = "ChargingPileClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = ChargingPileFallbackFactory.class) public interface ChargingPileClient { diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java index f3f3b95..4177dd3 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java @@ -4,6 +4,8 @@ import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -30,8 +32,20 @@ @Override public R<List<Integer>> getSalesCountByGoodsId(String goodsIds) { - return null; + return R.fail("根据商品订单ids查询销量:" + cause.getMessage()); } + + @Override + public R<List<String>> getCodeByOrderId(String goodsIds) { + return R.fail("根据订单ids查询现金购买优惠券订单编号:" + cause.getMessage()); + } + + @Override + public R<TActivityVO> activityStatistics(TActivityStatisticsQuery dto) { + return R.fail("查询活动费用统计失败:" + cause.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 6a48e86..6fcf8eb 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 @@ -12,7 +12,7 @@ * 充电订单服务 * @author ruoyi */ -@FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = ChargingOrderFallbackFactory.class) +@FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = ChargingOrderFallbackFactory.class) public interface ChargingOrderClient { @PostMapping(value = "/t-charging-order/useOrderCount") R<Long> useOrderCount(@RequestParam Long userId); diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ExchangeOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ExchangeOrderClient.java index ac22284..d690334 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ExchangeOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ExchangeOrderClient.java @@ -14,7 +14,7 @@ * 充电订单服务 * @author ruoyi */ -@FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = ExchangeOrderFallbackFactory.class) +@FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = ExchangeOrderFallbackFactory.class) public interface ExchangeOrderClient { 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 c763d67..c00f97c 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 @@ -4,8 +4,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.order.api.factory.OrderFallbackFactory; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -13,9 +16,24 @@ * 后台订单服务 * @author ruoyi */ -@FeignClient(contextId = "OrderClient", value = ServiceNameConstants.CONTRACT_ORDER, fallbackFactory = OrderFallbackFactory.class) +@FeignClient(contextId = "OrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = OrderFallbackFactory.class) public interface OrderClient { @PostMapping("/t-exchange-order/getSalesCountByGoodsIds") R<List<Integer>> getSalesCountByGoodsId(String goodsIds); + + /** + * 管理后台 根据t_app_coupon订单购买或者兑换优惠券的订单编号 + * @param goodsIds 订单号-商品类型 + * @return + */ + @PostMapping("/t-exchange-order/getCodeByOrderId") + public R<List<String>> getCodeByOrderId(String goodsIds); + /** + * 管理后台 活动费用统计 + * @param + * @return + */ + @PostMapping(value = "/t-exchange-order/activityStatistics") + public R<TActivityVO> activityStatistics(@RequestBody TActivityStatisticsQuery dto); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java index a48b136..3f36bcb 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java @@ -52,6 +52,10 @@ @TableField("app_user_car_id") private Integer appUserCarId; + @ApiModelProperty(value = "站点 id") + @TableField("site_id") + private Integer siteId; + @ApiModelProperty(value = "停车场id") @TableField("parking_lot_id") private Integer parkingLotId; 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 new file mode 100644 index 0000000..f1958b4 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TGrantVip.java @@ -0,0 +1,49 @@ +package com.ruoyi.order.api.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.web.domain.BasePojo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * <p> + * + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("t_grant_vip") +@ApiModel(value="TGrantVip对象", description="") +public class TGrantVip extends BasePojo { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty(value = "订单编号") + @TableField("code") + private String code; + + @ApiModelProperty(value = "用户id") + @TableField("app_user_id") + private Long appUserId; + + @ApiModelProperty(value = "购买的会员id") + @TableField("vip_id") + private Integer vipId; + @ApiModelProperty(value = "购买的会员id") + @TableField("vip_id") + private BigDecimal orderAmount; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderEvaluate.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderEvaluate.java index 8222276..c44dd0e 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderEvaluate.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderEvaluate.java @@ -43,6 +43,10 @@ @TableField("app_user_id") private Long appUserId; + @ApiModelProperty(value = "充电车辆 id") + @TableField("app_user_car_id") + private Integer appUserCarId; + @ApiModelProperty(value = "评分") @TableField("mark") private Integer mark; diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TActivityStatisticsQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TActivityStatisticsQuery.java new file mode 100644 index 0000000..d1627a8 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TActivityStatisticsQuery.java @@ -0,0 +1,32 @@ +package com.ruoyi.order.api.query; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "管理后台-活动费用统计Query") +public class TActivityStatisticsQuery extends BasePage { + @ApiModelProperty(value = "用户电话") + private String phone; + @ApiModelProperty(value = "订单编号") + private String code; + @ApiModelProperty(value = "参与类型1优惠券 2会员抵扣 3会员活动 4赠送会员") + private Integer type; + @ApiModelProperty(value = "订单类型1充电订单 2商品订单 3会员订单 4赠送会员") + private Integer orderType; + @ApiModelProperty(value = "电站id") + private Integer siteId; + @ApiModelProperty(value = "消费时间开始(2020-01-02 00:00)") + private String startTime; + @ApiModelProperty(value = "消费时间结束(2020-01-02 00:00)") + private String endTime; + + @ApiModelProperty(value = "用户ids 前端忽略") + private List<Long> userIds; + @ApiModelProperty(value = "充电桩ids 前端忽略") + private List<Integer> chargingPileIds; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderEvaluateQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderEvaluateQuery.java new file mode 100644 index 0000000..baa8356 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderEvaluateQuery.java @@ -0,0 +1,26 @@ +package com.ruoyi.order.api.query; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "TOrderEvaluateQuery对象",description = "订单评价查询条件") +public class TOrderEvaluateQuery extends BasePage { + + @ApiModelProperty(value = "站点id") + private Integer siteId; + + @ApiModelProperty(value = "订单id集合 前端忽略") + private List<Long> orderIds; + + @ApiModelProperty(value = "标签类型 1=最新 2=有图 3=好评 4=中差评 5=其他") + private Integer tagType; + + @ApiModelProperty(value = "标签id 标签类型为5时传输此字段") + private Integer tagId; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SiteDetailEvaluateVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SiteDetailEvaluateVO.java new file mode 100644 index 0000000..75770da --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SiteDetailEvaluateVO.java @@ -0,0 +1,24 @@ +package com.ruoyi.order.api.vo; + +import com.ruoyi.order.api.model.TOrderEvaluate; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "SiteDetailEvaluateVO对象",description = "站点详情订单评价") +public class SiteDetailEvaluateVO extends TOrderEvaluate { + + @ApiModelProperty(value = "好评率") + private BigDecimal reviewRate; + + @ApiModelProperty(value = "评价数") + private Integer evaluateCount; + + @ApiModelProperty(value = "评价列表取三条") + private List<TOrderEvaluateVO> orderEvaluateVOS; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java new file mode 100644 index 0000000..f20373b --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java @@ -0,0 +1,48 @@ +package com.ruoyi.order.api.vo; + +import com.fasterxml.jackson.databind.ser.Serializers; +import com.ruoyi.common.core.web.domain.BasePojo; +import com.ruoyi.order.api.model.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "管理后台活动费用统计分页列表", description = "管理后台活动费用统计分页列表") +public class TActivityStatisticslVO extends BasePojo { + + @ApiModelProperty(value = "用户手机号") + private String phone; + + @ApiModelProperty(value = "参与类型 优惠券 会员抵扣 会员活动 赠送会员") + private String type; + + @ApiModelProperty(value = "订单类型 充电订单 商品订单 会员订单 赠送会员") + private Integer orderType; + + @ApiModelProperty(value = "订单编号") + private String code; + @ApiModelProperty(value = "应付/价值") + private BigDecimal orderAmount; + @ApiModelProperty(value = "优惠券抵扣") + private BigDecimal couponDiscountAmount; + @ApiModelProperty(value = "会员抵扣") + private BigDecimal vipDiscountAmount; + @ApiModelProperty(value = "实付") + private BigDecimal paymentAmount; + @ApiModelProperty(value = "消费时间") + private String time; + @ApiModelProperty(value = "消费时间") + private BigDecimal total; + @ApiModelProperty(value = "消费时间") + private BigDecimal coupon; + @ApiModelProperty(value = "消费时间") + private BigDecimal discount; + @ApiModelProperty(value = "消费时间") + private BigDecimal vipActivity; + @ApiModelProperty(value = "消费时间") + private BigDecimal grantVip; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityVO.java new file mode 100644 index 0000000..405d1c0 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityVO.java @@ -0,0 +1,27 @@ +package com.ruoyi.order.api.vo; + +import com.ruoyi.common.core.web.domain.BasePojo; +import com.ruoyi.common.core.web.page.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "TOrderAppealVO对象", description = "订单申诉VO对象") +public class TActivityVO { + @ApiModelProperty(value = "分页列表") + private PageInfo<TActivityStatisticslVO> list; + @ApiModelProperty(value = "优惠总额") + private BigDecimal total; + @ApiModelProperty(value = "优惠券总额") + private BigDecimal coupon; + @ApiModelProperty(value = "会员抵扣总额") + private BigDecimal discount; + @ApiModelProperty(value = "会员活动") + private BigDecimal vipActivity; + @ApiModelProperty(value = "赠送会员") + private BigDecimal grantVip; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderEvaluateVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderEvaluateVO.java new file mode 100644 index 0000000..769dd96 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderEvaluateVO.java @@ -0,0 +1,27 @@ +package com.ruoyi.order.api.vo; + +import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.model.TOrderEvaluateTag; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "TOrderEvaluateVO对象",description = "订单评价") +public class TOrderEvaluateVO extends TOrderEvaluate { + + @ApiModelProperty(value = "用户") + private String name; + + @ApiModelProperty(value = "头像") + private String avatar; + + @ApiModelProperty(value = "车辆品牌名称") + private String carName; + + @ApiModelProperty(value = "评价标签列表") + private List<TOrderEvaluateTag> orderEvaluateTags; + +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TEnterpriseUserApplication.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TEnterpriseUserApplication.java index bae1bb4..32002ab 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TEnterpriseUserApplication.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TEnterpriseUserApplication.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; import java.time.LocalDateTime; @@ -35,18 +37,22 @@ private Long appUserId; @ApiModelProperty(value = "公司名称") + @NotBlank(message = "公司名称不能为空") @TableField("company_name") private String companyName; @ApiModelProperty(value = "汽车数量") + @NotNull(message = "汽车数量不能为空") @TableField("vehicles_number") private Integer vehiclesNumber; @ApiModelProperty(value = "联系人姓名") + @NotBlank(message = "联系人姓名不能为空") @TableField("contact_name") private String contactName; @ApiModelProperty(value = "联系人电话") + @NotBlank(message = "联系人电话不能为空") @TableField("phone") private String phone; diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TVip.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TVip.java index f25f364..bad9133 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TVip.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TVip.java @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -40,7 +41,7 @@ @ApiModelProperty(value = "月卡价格") @TableField("monthly_card") - private Double monthlyCard; + private BigDecimal monthlyCard; @ApiModelProperty(value = "月卡显示(0=否,1=是)") @TableField("monthly_card_reveal") @@ -48,7 +49,7 @@ @ApiModelProperty(value = "月卡折扣") @TableField("monthly_card_discount") - private Double monthlyCardDiscount; + private BigDecimal monthlyCardDiscount; @ApiModelProperty(value = "月卡折扣开始时间") @TableField("monthly_card_discount_start") @@ -64,7 +65,7 @@ @ApiModelProperty(value = "季卡价格") @TableField("season_card") - private Double seasonCard; + private BigDecimal seasonCard; @ApiModelProperty(value = "季卡显示(0=否,1=是)") @TableField("season_card_reveal") @@ -72,7 +73,7 @@ @ApiModelProperty(value = "季卡折扣") @TableField("season_card_discount") - private Double seasonCardDiscount; + private BigDecimal seasonCardDiscount; @ApiModelProperty(value = "季卡折扣开始时间") @TableField("season_card_discount_start") @@ -88,7 +89,7 @@ @ApiModelProperty(value = "年卡价格") @TableField("annual_card") - private Double annualCard; + private BigDecimal annualCard; @ApiModelProperty(value = "年卡显示(0=否,1=是)") @TableField("annual_card_reveal") @@ -96,7 +97,7 @@ @ApiModelProperty(value = "年卡折扣") @TableField("annual_card_discount") - private Double annualCardDiscount; + private BigDecimal annualCardDiscount; @ApiModelProperty(value = "年卡折扣开始时间") @TableField("annual_card_discount_start") @@ -116,7 +117,7 @@ @ApiModelProperty(value = "最高抵扣金额") @TableField("maximum_deduction") - private Double maximumDeduction; + private BigDecimal maximumDeduction; @ApiModelProperty(value = "抵扣类型(1=服务费)") @TableField("deduction_type") diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java index cfb52c2..4d8eb24 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java @@ -44,7 +44,12 @@ public R unitDelete(Integer id) { return R.fail("删除单位失败:" + throwable.getMessage()); } - + + @Override + public R<TCompany> unitDetail(Integer id) { + return R.fail("查询单位失败:" + throwable.getMessage()); + } + @Override public R<Page<TUserTag>> queryTagPage(TagListQueryDto unitListQueryDto) { return R.fail("查询标签:" + throwable.getMessage()); diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/RoleSiteFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/RoleSiteFallbackFactory.java new file mode 100644 index 0000000..c2e0853 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/RoleSiteFallbackFactory.java @@ -0,0 +1,44 @@ +package com.ruoyi.other.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TRoleSite; +import com.ruoyi.other.api.feignClient.RoleSiteClient; +import com.ruoyi.other.api.feignClient.UserSiteClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 商品服务降级处理 + * + * @author ruoyi + */ +@Component +public class RoleSiteFallbackFactory implements FallbackFactory<RoleSiteClient> { + private static final Logger log = LoggerFactory.getLogger(RoleSiteFallbackFactory.class); + + @Override + public RoleSiteClient create(Throwable throwable) { + log.error("调用失败:{}", throwable.getMessage()); + return new RoleSiteClient() { + + @Override + public R<List<Integer>> getSiteIds(Long roleId) { + return R.fail("获取角色站点失败:" + throwable.getMessage()); + } + + @Override + public R addRoleSite(List<TRoleSite> roleSites) { + return R.fail("添加角色站点失败:" + throwable.getMessage()); + } + + @Override + public R delRoleSite(Long roleId) { + return R.fail("删除角色站点失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java new file mode 100644 index 0000000..7bc1399 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java @@ -0,0 +1,40 @@ +package com.ruoyi.other.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.feignClient.RoleSiteClient; +import com.ruoyi.other.api.feignClient.TEvaluationTagClient; +import com.ruoyi.other.api.vo.TEvaluationTagVO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 评价标签服务降级处理 + * + * @author ruoyi + */ +@Component +public class TEvaluationTagFallbackFactory implements FallbackFactory<TEvaluationTagClient> { + private static final Logger log = LoggerFactory.getLogger(TEvaluationTagFallbackFactory.class); + + @Override + public TEvaluationTagClient create(Throwable throwable) { + log.error("调用失败:{}", throwable.getMessage()); + return new TEvaluationTagClient() { + + @Override + public R<List<TEvaluationTagVO>> getTagList(Integer type) { + return R.fail("获取标签列表:" + throwable.getMessage()); + } + + @Override + public R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds) { + return R.fail("根据id集合获取数据失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java new file mode 100644 index 0000000..7e63bb3 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java @@ -0,0 +1,43 @@ +package com.ruoyi.other.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TUserSite; +import com.ruoyi.other.api.feignClient.UserSiteClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 商品服务降级处理 + * + * @author ruoyi + */ +@Component +public class UserSiteFallbackFactory implements FallbackFactory<UserSiteClient> { + private static final Logger log = LoggerFactory.getLogger(UserSiteFallbackFactory.class); + + @Override + public UserSiteClient create(Throwable throwable) { + log.error("调用失败:{}", throwable.getMessage()); + return new UserSiteClient() { + + @Override + public R<List<Integer>> getSiteIds(Long userId) { + return R.fail("获取用户站点失败:" + throwable.getMessage()); + } + + @Override + public R addUserSite(List<TUserSite> userSite) { + return R.fail("添加用户站点失败:" + throwable.getMessage()); + } + + @Override + public R delUserSite(Long userId) { + return R.fail("删除用户站点失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java new file mode 100644 index 0000000..0965d9a --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java @@ -0,0 +1,33 @@ +package com.ruoyi.other.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TVip; +import com.ruoyi.other.api.feignClient.VipClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 会员服务降级处理 + * + * @author ruoyi + */ +@Component +public class VipFallbackFactory implements FallbackFactory<VipClient> +{ + private static final Logger log = LoggerFactory.getLogger(VipFallbackFactory.class); + + @Override + public VipClient create(Throwable throwable) { + log.error("会员调用失败:{}", throwable.getMessage()); + return new VipClient() { + + @Override + public R<TVip> getVipInfoByType(Integer type) { + return R.fail("获取最高抵扣、最低起步价,最高折扣的会员失败:" + throwable.getMessage()); + + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java index 833e422..c300997 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java @@ -20,7 +20,7 @@ * 商品服务 * @author ruoyi */ -@FeignClient(contextId = "UnitClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = OtherFallbackFactory.class) +@FeignClient(contextId = "UnitClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = OtherFallbackFactory.class) public interface OtherClient { //单位分页 @PostMapping(value = "/t-company/unit/page") diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java new file mode 100644 index 0000000..e4dc369 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java @@ -0,0 +1,48 @@ +package com.ruoyi.other.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TRoleSite; +import com.ruoyi.other.api.factory.RoleSiteFallbackFactory; +import com.ruoyi.other.api.factory.UserSiteFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/9 18:14 + */ +@FeignClient(contextId = "RoleSiteClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = RoleSiteFallbackFactory.class) +public interface RoleSiteClient { + + + /** + * 根据角色id获取可访问的站点数据 + * @param roleId + * @return + */ + @GetMapping("/t-role-site/getSiteIds") + R<List<Integer>> getSiteIds(Long roleId); + + + /** + * 添加角色站点数据 + * @param roleSites + * @return + */ + @PostMapping("/t-role-site/addRoleSite") + R addRoleSite(List<TRoleSite> roleSites); + + /** + * 删除角色站点数据 + * @param roleId + * @return + */ + @DeleteMapping("/t-role-site/delRoleSite") + R delRoleSite(Long roleId); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java new file mode 100644 index 0000000..4d7e87a --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java @@ -0,0 +1,38 @@ +package com.ruoyi.other.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.factory.RoleSiteFallbackFactory; +import com.ruoyi.other.api.vo.TEvaluationTagVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/9 18:14 + */ +@FeignClient(contextId = "TEvaluationTagClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = RoleSiteFallbackFactory.class) +public interface TEvaluationTagClient { + + + /** + * 获取标签列表 + * @return + */ + @PostMapping("/t-evaluation-tag/getTagList") + R<List<TEvaluationTagVO>> getTagList(Integer type); + + + /** + * 根据id集合获取数据 + * @param tagIds + * @return + */ + @GetMapping("/t-evaluation-tag/getListByIds") + R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java new file mode 100644 index 0000000..4cd3910 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java @@ -0,0 +1,49 @@ +package com.ruoyi.other.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TUserSite; +import com.ruoyi.other.api.factory.UserSiteFallbackFactory; +import org.apache.ibatis.annotations.Delete; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/9 18:14 + */ +@FeignClient(contextId = "UserSiteClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = UserSiteFallbackFactory.class) +public interface UserSiteClient { + + + /** + * 根据用户id获取可访问的站点数据 + * @param userId + * @return + */ + @GetMapping("/t-user-site/getSiteIds") + R<List<Integer>> getSiteIds(Long userId); + + + /** + * 添加用户站点关系数据 + * @param userSite + * @return + */ + @PostMapping("/t-user-site/getSiteIds") + R addUserSite(List<TUserSite> userSite); + + + /** + * 删除用户站点数据 + * @param userId + * @return + */ + @DeleteMapping("/t-user-site/delUserSite") + R delUserSite(Long userId); +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java new file mode 100644 index 0000000..b1a8126 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java @@ -0,0 +1,27 @@ +package com.ruoyi.other.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TVip; +import com.ruoyi.other.api.factory.VipFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 会员服务 + * @author ruoyi + */ +@FeignClient(contextId = "VipClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = VipFallbackFactory.class) +public interface VipClient { + + /** + * 获取最高抵扣、最低起步价,最高折扣的会员 + * @param type 1=最高抵扣、2=最低起步价,3=最高折扣 + * @return + */ + @PostMapping(value = "/vip/getVipInfoByType") + R<TVip> getVipInfoByType(@RequestParam Integer type); + + +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/vo/TEvaluationTagVO.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/vo/TEvaluationTagVO.java new file mode 100644 index 0000000..49e0e4a --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/vo/TEvaluationTagVO.java @@ -0,0 +1,15 @@ +package com.ruoyi.other.api.vo; + +import com.ruoyi.other.api.domain.TEvaluationTag; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "TEvaluationTagVO对象", description = "评价标签") +public class TEvaluationTagVO extends TEvaluationTag{ + + @ApiModelProperty(value = "评价标签数量") + private Integer tagCount; + +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 342bca3..42bb01c 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,3 @@ -com.ruoyi.other.api.factory.GoodsFallbackFactory \ No newline at end of file +com.ruoyi.other.api.factory.OtherFallbackFactory +com.ruoyi.other.api.factory.UserSiteFallbackFactory +com.ruoyi.other.api.factory.RoleSiteFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/ChargingOrderClient.java index 628318d..d9f4240 100644 --- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/ChargingOrderClient.java @@ -8,7 +8,7 @@ * 充电订单服务 * @author ruoyi */ -@FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.CONTRACT_SERVICE, fallbackFactory = ChargingOrderFallbackFactory.class) +@FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.PAYMENT_SERVICE, fallbackFactory = ChargingOrderFallbackFactory.class) public interface ChargingOrderClient { diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml index a9f9845..723a3c0 100644 --- a/ruoyi-api/ruoyi-api-system/pom.xml +++ b/ruoyi-api/ruoyi-api-system/pom.xml @@ -28,7 +28,13 @@ </exclusion> </exclusions> </dependency> - + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-modules-system</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> + </dependencies> </project> \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java index 525eda3..dc247b3 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteLogService.java @@ -28,14 +28,5 @@ */ @PostMapping("/operlog") public R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; - - /** - * 保存访问记录 - * - * @param sysLogininfor 访问实体 - * @param source 请求来源 - * @return 结果 - */ - @PostMapping("/logininfor") - public R<Boolean> saveLogininfor(@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java index a3c350f..1e04af6 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysOperLog.java @@ -1,6 +1,7 @@ package com.ruoyi.system.api.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.annotation.Excel.ColumnType; @@ -8,248 +9,247 @@ /** * 操作日志记录表 oper_log - * + * * @author ruoyi */ -public class SysOperLog extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 日志主键 */ - @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) - private Long operId; - - /** 操作模块 */ - @Excel(name = "操作模块") - private String title; - - /** 业务类型(0其它 1新增 2修改 3删除) */ - @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") - private Integer businessType; - - /** 业务类型数组 */ - private Integer[] businessTypes; - - /** 请求方法 */ - @Excel(name = "请求方法") - private String method; - - /** 请求方式 */ - @Excel(name = "请求方式") - private String requestMethod; - - /** 操作类别(0其它 1后台用户 2手机端用户) */ - @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") - private Integer operatorType; - - /** 操作人员 */ - @Excel(name = "操作人员") - private String operName; - - /** 部门名称 */ - @Excel(name = "部门名称") - private String deptName; - - /** 请求url */ - @Excel(name = "请求地址") - private String operUrl; - - /** 操作地址 */ - @Excel(name = "操作地址") - private String operIp; - - /** 请求参数 */ - @Excel(name = "请求参数") - private String operParam; - - /** 返回参数 */ - @Excel(name = "返回参数") - private String jsonResult; - - /** 操作状态(0正常 1异常) */ - @Excel(name = "状态", readConverterExp = "0=正常,1=异常") - private Integer status; - - /** 错误消息 */ - @Excel(name = "错误消息") - private String errorMsg; - - /** 操作时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") - private Date operTime; - - /** 消耗时间 */ - @Excel(name = "消耗时间", suffix = "毫秒") - private Long costTime; - - public Long getOperId() - { - return operId; - } - - public void setOperId(Long operId) - { - this.operId = operId; - } - - public String getTitle() - { - return title; - } - - public void setTitle(String title) - { - this.title = title; - } - - public Integer getBusinessType() - { - return businessType; - } - - public void setBusinessType(Integer businessType) - { - this.businessType = businessType; - } - - public Integer[] getBusinessTypes() - { - return businessTypes; - } - - public void setBusinessTypes(Integer[] businessTypes) - { - this.businessTypes = businessTypes; - } - - public String getMethod() - { - return method; - } - - public void setMethod(String method) - { - this.method = method; - } - - public String getRequestMethod() - { - return requestMethod; - } - - public void setRequestMethod(String requestMethod) - { - this.requestMethod = requestMethod; - } - - public Integer getOperatorType() - { - return operatorType; - } - - public void setOperatorType(Integer operatorType) - { - this.operatorType = operatorType; - } - - public String getOperName() - { - return operName; - } - - public void setOperName(String operName) - { - this.operName = operName; - } - - public String getDeptName() - { - return deptName; - } - - public void setDeptName(String deptName) - { - this.deptName = deptName; - } - - public String getOperUrl() - { - return operUrl; - } - - public void setOperUrl(String operUrl) - { - this.operUrl = operUrl; - } - - public String getOperIp() - { - return operIp; - } - - public void setOperIp(String operIp) - { - this.operIp = operIp; - } - - public String getOperParam() - { - return operParam; - } - - public void setOperParam(String operParam) - { - this.operParam = operParam; - } - - public String getJsonResult() - { - return jsonResult; - } - - public void setJsonResult(String jsonResult) - { - this.jsonResult = jsonResult; - } - - public Integer getStatus() - { - return status; - } - - public void setStatus(Integer status) - { - this.status = status; - } - - public String getErrorMsg() - { - return errorMsg; - } - - public void setErrorMsg(String errorMsg) - { - this.errorMsg = errorMsg; - } - - public Date getOperTime() - { - return operTime; - } - - public void setOperTime(Date operTime) - { - this.operTime = operTime; - } - - public Long getCostTime() - { - return costTime; - } - - public void setCostTime(Long costTime) - { - this.costTime = costTime; - } +public class SysOperLog extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 日志主键 + */ + @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) + private Long operId; + + /** + * 操作模块 + */ + @Excel(name = "操作模块") + private String title; + + /** + * 业务类型(0其它 1新增 2修改 3删除) + */ + @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") + private Integer businessType; + + /** + * 业务类型数组 + */ + private Integer[] businessTypes; + + /** + * 请求方法 + */ + @Excel(name = "请求方法") + private String method; + + /** + * 请求方式 + */ + @Excel(name = "请求方式") + private String requestMethod; + + /** + * 操作类别(0其它 1后台用户 2手机端用户) + */ + @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") + private Integer operatorType; + + /** + * 操作人员 + */ + @Excel(name = "操作人员") + private String operName; + + /** + * 部门名称 + */ + @Excel(name = "部门名称") + private String deptName; + + /** + * 请求url + */ + @Excel(name = "请求地址") + private String operUrl; + + /** + * 操作地址 + */ + @Excel(name = "操作地址") + private String operIp; + + /** + * 请求参数 + */ + @Excel(name = "请求参数") + private String operParam; + + /** + * 返回参数 + */ + @Excel(name = "返回参数") + private String jsonResult; + + /** + * 操作状态(0正常 1异常) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=异常") + private Integer status; + + /** + * 错误消息 + */ + @Excel(name = "错误消息") + private String errorMsg; + + /** + * 操作时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + /** + * 消耗时间 + */ + @Excel(name = "消耗时间", suffix = "毫秒") + private Long costTime; + + public Long getOperId() { + return operId; + } + + public void setOperId(Long operId) { + this.operId = operId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getBusinessType() { + return businessType; + } + + public void setBusinessType(Integer businessType) { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) { + this.businessTypes = businessTypes; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getRequestMethod() { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() { + return operatorType; + } + + public void setOperatorType(Integer operatorType) { + this.operatorType = operatorType; + } + + public String getOperName() { + return operName; + } + + public void setOperName(String operName) { + this.operName = operName; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getOperUrl() { + return operUrl; + } + + public void setOperUrl(String operUrl) { + this.operUrl = operUrl; + } + + public String getOperIp() { + return operIp; + } + + public void setOperIp(String operIp) { + this.operIp = operIp; + } + + public String getOperParam() { + return operParam; + } + + public void setOperParam(String operParam) { + this.operParam = operParam; + } + + public String getJsonResult() { + return jsonResult; + } + + public void setJsonResult(String jsonResult) { + this.jsonResult = jsonResult; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + public Date getOperTime() { + return operTime; + } + + public void setOperTime(Date operTime) { + this.operTime = operTime; + } + + public Long getCostTime() { + return costTime; + } + + public void setCostTime(Long costTime) { + this.costTime = costTime; + } } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java index 3602929..ee2f671 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java @@ -1,11 +1,13 @@ package com.ruoyi.system.api.domain; +import java.util.List; import java.util.Set; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.core.annotation.Excel; @@ -77,20 +79,9 @@ /** 角色菜单权限 */ @TableField(exist = false) private Set<String> permissions; - - /** 车辆数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限 */ - private Integer carDataAuth; - - /** 车务数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限 */ - private Integer carTrainOperAuth; - - /** 合同数据权限:1=所有数据 2=仅自己负责的合同 3=无数据权限 */ - private Integer contractDataAuth; - - /** 公司id */ - private Integer companyId; - - + @ApiModelProperty(value = "站点名称") + @TableField(exist = false) + private List<String> siteNames; public SysRole() { @@ -100,38 +91,6 @@ public SysRole(Long roleId) { this.roleId = roleId; - } - - public Integer getCarDataAuth() { - return carDataAuth; - } - - public void setCarDataAuth(Integer carDataAuth) { - this.carDataAuth = carDataAuth; - } - - public Integer getCarTrainOperAuth() { - return carTrainOperAuth; - } - - public void setCarTrainOperAuth(Integer carTrainOperAuth) { - this.carTrainOperAuth = carTrainOperAuth; - } - - public Integer getContractDataAuth() { - return contractDataAuth; - } - - public void setContractDataAuth(Integer contractDataAuth) { - this.contractDataAuth = contractDataAuth; - } - - public Integer getCompanyId() { - return companyId; - } - - public void setCompanyId(Integer companyId) { - this.companyId = companyId; } public Long getRoleId() @@ -278,7 +237,15 @@ { this.permissions = permissions; } - + + public List<String> getSiteNames() { + return siteNames; + } + + public void setSiteNames(List<String> siteNames) { + this.siteNames = siteNames; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java index 8163aa5..91df803 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java @@ -62,11 +62,6 @@ /** 用户头像 */ private String avatar; - /** - * 登录账号 - */ - @TableField("account") - private String account; /** 密码 */ @NotBlank(message = "密码不能为空") @@ -118,7 +113,7 @@ /** * 角色类型 1=平台 2=公司 3=门店 4=修理厂 */ - @ApiModelProperty(value = "角色类型 1=平台 2=公司 3=门店 4=修理厂") + @ApiModelProperty(value = "角色类型 1=平台 2=合作商") private Integer roleType; @Excel(name = "密码修改时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) @@ -129,6 +124,20 @@ @ApiModelProperty(value = "备注") private String remark; + + @ApiModelProperty(value = "充电站") + @TableField(exist = false) + private List<String> siteNames; + + @ApiModelProperty(value = "充电站id", required = true) + @TableField(exist = false) + private List<Integer> siteIds; + + @ApiModelProperty(value = "角色") + @TableField(exist = false) + private List<String> roleNames; + + @Override public String getRemark() { @@ -271,14 +280,6 @@ this.avatar = avatar; } - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - public String getPassword() { return password; @@ -378,6 +379,32 @@ { this.roleId = roleId; } + + + public List<String> getSiteNames() { + return siteNames; + } + + public void setSiteNames(List<String> siteNames) { + this.siteNames = siteNames; + } + + public List<String> getRoleNames() { + return roleNames; + } + + public List<Integer> getSiteIds() { + return siteIds; + } + + public void setSiteIds(List<Integer> siteIds) { + this.siteIds = siteIds; + } + + public void setRoleNames(List<String> roleNames) { + this.roleNames = roleNames; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java index 6acb505..599d97a 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteLogFallbackFactory.java @@ -20,8 +20,7 @@ private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class); @Override - public RemoteLogService create(Throwable throwable) - { + public RemoteLogService create(Throwable throwable) { log.error("日志服务调用失败:{}", throwable.getMessage()); return new RemoteLogService() { @@ -30,12 +29,7 @@ { return null; } - - @Override - public R<Boolean> saveLogininfor(SysLogininfor sysLogininfor, String source) - { - return null; - } + }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java new file mode 100644 index 0000000..df6782c --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysLoginLogFallbackFactory.java @@ -0,0 +1,28 @@ +package com.ruoyi.system.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.SysRole; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysLoginLogClient; +import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.model.*; +import com.ruoyi.system.domain.SysLoginLog; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class SysLoginLogFallbackFactory implements FallbackFactory<SysLoginLogClient> { + @Override + public SysLoginLogClient create(Throwable cause) { + return new SysLoginLogClient(){ + + + @Override + public R saveLoginLog(SysLoginLog loginLog) { + return R.fail("添加登录日志失败!" + cause.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java index 49df453..d8d4994 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java @@ -86,11 +86,6 @@ } @Override - public R<SysUser> queryUserByAccount(String account) { - return null; - } - - @Override public R<SysUser> queryUserByUserName(String userName) { return R.fail("通过账号查询用户失败:" + cause.getMessage()); } @@ -102,7 +97,7 @@ @Override public R resetPassword(SysUser user) { - return null; + return R.fail("重置用户密码失败:" + cause.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java new file mode 100644 index 0000000..f4283ec --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.factory.SysLoginLogFallbackFactory; +import com.ruoyi.system.domain.SysLoginLog; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * @author zhibing.pu + * @Date 2024/8/12 16:30 + */ +@FeignClient(contextId = "SysLoginLogClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysLoginLogFallbackFactory.class) +public interface SysLoginLogClient { + + + /** + * 添加登陆日志 + * @param loginLog + * @return + */ + @PostMapping("/saveLoginLog") + R saveLoginLog(@RequestBody SysLoginLog loginLog); +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java index ad41b7f..4dff3cc 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java @@ -86,15 +86,6 @@ */ @PostMapping("/user/queryUserByPhone") R<SysUser> queryUserByPhone(@RequestBody String phone); - - - /** - * 根据账号获取用户数据 - * @param account - * @return - */ - @PostMapping("/user/queryUserByAccount") - R<SysUser> queryUserByAccount(@RequestBody String account); /** * 通过账号查询用户 diff --git a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 7104897..4dfeaf3 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,3 +3,4 @@ com.ruoyi.system.api.factory.RemoteFileFallbackFactory com.ruoyi.system.api.factory.SysUserFallbackFactory com.ruoyi.system.api.factory.SysRoleFallbackFactory +com.ruoyi.system.api.factory.SysLoginLogFallbackFactory diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 9868d190..85ebf14 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -1,12 +1,15 @@ package com.ruoyi.auth.controller; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.system.api.RemoteUserService; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysLoginLogClient; import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.domain.SysLoginLog; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.DeleteMapping; @@ -24,6 +27,9 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.time.LocalDateTime; import java.util.*; /** @@ -39,14 +45,18 @@ @Autowired private SysLoginService sysLoginService; - @Autowired + @Resource private SysUserClient userClient; + + + + + @PostMapping("login") - public R<?> login(@RequestBody LoginBody form) - { + public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) { // 用户登录 - LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); + LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request); HashMap<String, Object> map = new HashMap<>(); map.put("token",tokenService.createToken(userInfo)); List<SysRole> roles = userInfo.getSysUser().getRoles(); @@ -62,13 +72,15 @@ sysUser.setLoginDate(new Date()); System.out.println("修改用户登录时间"+sysUser); userClient.updateSysUser(sysUser); - // 获取登录token return R.ok(map); } + + + + @DeleteMapping("logout") - public R<?> logout(HttpServletRequest request) - { + public R<?> logout(HttpServletRequest request) { String token = SecurityUtils.getToken(request); if (StringUtils.isNotEmpty(token)) { @@ -76,7 +88,7 @@ // 删除用户缓存记录 AuthUtil.logoutByToken(token); // 记录用户退出日志 - sysLoginService.logout(username); + sysLoginService.logout(username, request); } return R.ok(); } @@ -95,10 +107,10 @@ } @PostMapping("register") - public R<?> register(@RequestBody RegisterBody registerBody) + public R<?> register(@RequestBody RegisterBody registerBody, HttpServletRequest request) { // 用户注册 - sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); + sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(), request); return R.ok(); } } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java index 431c264..acfab13 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.ruoyi.auth.service; +import com.ruoyi.system.domain.SysLoginLog; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.constant.CacheConstants; @@ -17,6 +18,9 @@ import com.ruoyi.system.api.RemoteUserService; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.LoginUser; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; /** * 登录校验方法 @@ -41,42 +45,44 @@ /** * 登录 */ - public LoginUser login(String username, String password) - { + public LoginUser login(String username, String password, HttpServletRequest request) { + // 查询用户信息 + R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); + + if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) + { + recordLogService.recordLogininfor(request, null, username, Constants.LOGIN_FAIL_STATUS, "登录用户不存在"); + throw new ServiceException("登录用户:" + username + " 不存在"); + } + LoginUser userInfo = userResult.getData(); + SysUser user = userResult.getData().getSysUser(); + // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(username, password)) { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写"); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户/密码必须填写"); throw new ServiceException("用户/密码必须填写"); } // 密码如果不在指定范围内 错误 if (password.length() < UserConstants.PASSWORD_MIN_LENGTH || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围"); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户密码不在指定范围"); throw new ServiceException("用户密码不在指定范围"); } // 用户名不在指定范围内 错误 if (username.length() < UserConstants.USERNAME_MIN_LENGTH || username.length() > UserConstants.USERNAME_MAX_LENGTH) { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围"); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户名不在指定范围"); throw new ServiceException("用户名不在指定范围"); } // IP黑名单校验 String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单"); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "很遗憾,访问IP已被列入系统黑名单"); throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); - } - // 查询用户信息 - R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); - - if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) - { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); - throw new ServiceException("登录用户:" + username + " 不存在"); } if (R.FAIL == userResult.getCode()) @@ -84,32 +90,31 @@ throw new ServiceException(userResult.getMsg()); } - LoginUser userInfo = userResult.getData(); - SysUser user = userResult.getData().getSysUser(); + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "对不起,您的账号已被删除"); throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); } if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员"); throw new ServiceException("对不起,您的账号:" + username + " 已停用"); } - passwordService.validate(user, password); - recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功"); + passwordService.validate(user, password, request); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "登录成功"); return userInfo; } - public void logout(String loginName) + public void logout(String loginName, HttpServletRequest request) { - recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功"); + recordLogService.recordLogininfor(request, null, loginName, Constants.LOGIN_SUCCESS_STATUS, "退出成功"); } /** * 注册 */ - public void register(String username, String password) + public void register(String username, String password, HttpServletRequest request) { // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(username, password)) @@ -138,6 +143,6 @@ { throw new ServiceException(registerResult.getMsg()); } - recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功"); + recordLogService.recordLogininfor(request, sysUser.getUserId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "注册成功"); } } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java index e00b1a4..1f6a419 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java @@ -10,6 +10,8 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.SysUser; +import javax.servlet.http.HttpServletRequest; + /** * 登录密码方法 * @@ -39,7 +41,7 @@ return CacheConstants.PWD_ERR_CNT_KEY + username; } - public void validate(SysUser user, String password) + public void validate(SysUser user, String password, HttpServletRequest request) { String username = user.getUserName(); @@ -53,14 +55,14 @@ if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) { String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime); - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL,errMsg); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS,errMsg); throw new ServiceException(errMsg); } if (!matches(user, password)) { retryCount = retryCount + 1; - recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount)); + recordLogService.recordLogininfor(request, user.getUserId().intValue(), username, Constants.LOGIN_FAIL_STATUS, String.format("密码输入错误%s次", retryCount)); redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); throw new ServiceException("密码错误"); } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java index 7ca0f00..c4230d8 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java @@ -1,48 +1,134 @@ package com.ruoyi.auth.service; -import org.springframework.beans.factory.annotation.Autowired; +import com.ruoyi.system.api.feignClient.SysLoginLogClient; +import com.ruoyi.system.domain.SysLoginLog; import org.springframework.stereotype.Component; -import com.ruoyi.common.core.constant.Constants; -import com.ruoyi.common.core.constant.SecurityConstants; -import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.core.utils.ip.IpUtils; -import com.ruoyi.system.api.RemoteLogService; -import com.ruoyi.system.api.domain.SysLogininfor; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; /** * 记录日志方法 - * + * * @author ruoyi */ @Component -public class SysRecordLogService -{ - @Autowired - private RemoteLogService remoteLogService; - - /** - * 记录登录信息 - * - * @param username 用户名 - * @param status 状态 - * @param message 消息内容 - * @return - */ - public void recordLogininfor(String username, String status, String message) - { - SysLogininfor logininfor = new SysLogininfor(); - logininfor.setUserName(username); - logininfor.setIpaddr(IpUtils.getIpAddr()); - logininfor.setMsg(message); - // 日志状态 - if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) - { - logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS); - } - else if (Constants.LOGIN_FAIL.equals(status)) - { - logininfor.setStatus(Constants.LOGIN_FAIL_STATUS); - } - remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); - } +public class SysRecordLogService { + @Resource + private SysLoginLogClient sysLoginLogClient; + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息内容 + * @return + */ + public void recordLogininfor(HttpServletRequest request, Integer userId, String username, String status, String message) { + Map<String, String> headerData = getHeaderData(request); + //添加登录日志 + SysLoginLog loginLog = new SysLoginLog(); + loginLog.setUserId(userId); + loginLog.setUsername(username); + loginLog.setIpAddress(headerData.get("ip")); + loginLog.setAddress("");// todo 待完善 https://www.juhe.cn/docs/api/id/1 + loginLog.setBrowserType(headerData.get("browser")); + loginLog.setOperatingSystem(headerData.get("os")); + loginLog.setLoginTime(LocalDateTime.now()); + loginLog.setLoginStatus(Integer.valueOf(status)); + loginLog.setMessage(message); + sysLoginLogClient.saveLoginLog(loginLog); + } + + + public Map<String, String> getHeaderData(HttpServletRequest request) { + //Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0 + String browserDetails = request.getHeader("User-Agent"); + String userAgent = browserDetails; + String user = userAgent.toLowerCase(); + Map<String, String> map = new HashMap<>(); + String os = ""; + String browser = ""; + if (userAgent.toLowerCase().indexOf("windows") >= 0) { + os = "Windows"; + } else if (userAgent.toLowerCase().indexOf("mac") >= 0) { + os = "Mac"; + } else if (userAgent.toLowerCase().indexOf("x11") >= 0) { + os = "Unix"; + } else if (userAgent.toLowerCase().indexOf("android") >= 0) { + os = "Android"; + } else if (userAgent.toLowerCase().indexOf("iphone") >= 0) { + os = "IPhone"; + } else { + os = "UnKnown, More-Info: " + userAgent; + } + if (user.contains("edge")) { + browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-"); + } else if (user.contains("msie")) { + String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0]; + browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1]; + } else if (user.contains("safari") && user.contains("version")) { + browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0] + + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; + } else if (user.contains("opr") || user.contains("opera")) { + if (user.contains("opera")) { + browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0] + + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; + } else if (user.contains("opr")) { + browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-")) + .replace("OPR", "Opera"); + } + + } else if (user.contains("chrome")) { + browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-"); + } else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) || + (user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) || + (user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1)) { + browser = "Netscape-?"; + + } else if (user.contains("firefox")) { + browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-"); + } else if (user.contains("rv")) { + String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-"); + browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1); + } else { + browser = "UnKnown, More-Info: " + userAgent; + } + + String ip = request.getHeader("x-forwarded-for"); + if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { + // 多次反向代理后会有多个ip值,第一个ip才是真实ip + if (ip.indexOf(",") != -1) { + ip = ip.split(",")[0]; + } + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + map.put("os", os); + map.put("browser", browser); + map.put("ip", ip); + return map; + } + + } diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index d5c10c8..09938de 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -140,6 +140,11 @@ <version>2.8.0</version> </dependency> + <dependency> + <groupId>org.gavaghan</groupId> + <artifactId>geodesy</artifactId> + <version>1.1.3</version> + </dependency> </dependencies> diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java index b4a5e88..9cb4b54 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java @@ -21,20 +21,10 @@ * 文件服务的serviceid */ public static final String FILE_SERVICE = "ruoyi-file"; - /** - * 后台服务的serviceid - */ - public static final String MANAGEMENT_SERVICE = "ruoyi-management"; - - /** - * 车辆服务的serviceid - */ - public static final String VEHICLE_SERVICE = "ruoyi-vehicle"; - - /** - * 车辆合同的serviceid - */ - public static final String CONTRACT_SERVICE = "ruoyi-contract"; - public static final String CONTRACT_ORDER = "ruoyi-order"; - public static final String CONTRACT_ACCOUNT = "ruoyi-account"; + public static final String ACCOUNT_SERVICE = "ruoyi-account"; + public static final String CHARGINGPILE_SERVICE = "ruoyi-chargingPile"; + public static final String OTHER_SERVICE = "ruoyi-other"; + public static final String ORDER_SERVICE = "ruoyi-order"; + public static final String INTEGRATION_SERVICE = "ruoyi-integration"; + public static final String PAYMENT_SERVICE = "ruoyi-payment"; } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunModeEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunModeEnum.java new file mode 100644 index 0000000..78f4886 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunModeEnum.java @@ -0,0 +1,46 @@ +package com.ruoyi.common.core.enums.status; + +import lombok.Getter; + +/** + * @Description + * @Author xiaochen + * @Date 2023/6/8 16:42 + */ +public enum ChargingGunModeEnum { + + + SUPER_SUFFICIENT(1, "超级快充"), + FAST_SUFFICIENT(2, "快充"), + SLOW_SUFFICIENT(3, "慢充"); + + @Getter + private String desc; + + + @Getter + private int code; + + + ChargingGunModeEnum(int code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 通过code获取枚举 + * + * @param code + * @return + */ + public static ChargingGunModeEnum fromCode(Integer code) { + ChargingGunModeEnum[] resultTypes = ChargingGunModeEnum.values(); + for (ChargingGunModeEnum resultType : resultTypes) { + if (code.equals(resultType.getCode())) { + return resultType; + } + } + return null; + } + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunStatusEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunStatusEnum.java new file mode 100644 index 0000000..219aea2 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunStatusEnum.java @@ -0,0 +1,50 @@ +package com.ruoyi.common.core.enums.status; + +import lombok.Getter; + +/** + * @Description + * @Author xiaochen + * @Date 2023/6/8 16:42 + */ +public enum ChargingGunStatusEnum { + + + OFFLINE(1, "离线"), + IDLE(2, "空闲"), + OCCUPATION_UNCHARGED(3, "占用(未充电)"), + OCCUPATION_CHARGING(4, "占用(充电中)"), + OCCUPATION_FULL(5, "占用(已充满)"), + OCCUPATION_LOCK(6, "占用(预约锁定)"), + FAULT(7, "故障"); + + @Getter + private String desc; + + + @Getter + private int code; + + + ChargingGunStatusEnum(int code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 通过code获取枚举 + * + * @param code + * @return + */ + public static ChargingGunStatusEnum fromCode(Integer code) { + ChargingGunStatusEnum[] resultTypes = ChargingGunStatusEnum.values(); + for (ChargingGunStatusEnum resultType : resultTypes) { + if (code.equals(resultType.getCode())) { + return resultType; + } + } + return null; + } + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java new file mode 100644 index 0000000..ff1cfd1 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java @@ -0,0 +1,73 @@ +package com.ruoyi.common.core.utils; + +import org.gavaghan.geodesy.Ellipsoid; +import org.gavaghan.geodesy.GeodeticCalculator; +import org.gavaghan.geodesy.GeodeticCurve; +import org.gavaghan.geodesy.GlobalCoordinates; + +import java.util.HashMap; +import java.util.Map; + +/** + * 计算两个金纬度坐标之间的直线距离 + */ +public class GeodesyUtil { + + + /** + * 获取直线距离 + * @param fromLonLat + * @param toLonLat + * @return + */ + public static Map<String, Double> getDistance(String fromLonLat, String toLonLat){ + Map<String, Double> map = null; + if(StringUtils.isNotEmpty(fromLonLat) && StringUtils.isNotEmpty(toLonLat)){ + map = new HashMap<>(); + String[] from = fromLonLat.split(","); + String[] to = toLonLat.split(","); + GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0])); + GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0])); + double Sphere = getDistanceMeter(source, target, Ellipsoid.Sphere); + double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84); + double GRS80 = getDistanceMeter(source, target, Ellipsoid.GRS80); + double GRS67 = getDistanceMeter(source, target, Ellipsoid.GRS67); + double ANS = getDistanceMeter(source, target, Ellipsoid.ANS); + double WGS72 = getDistanceMeter(source, target, Ellipsoid.WGS72); + double Clarke1858 = getDistanceMeter(source, target, Ellipsoid.Clarke1858); + double Clarke1880 = getDistanceMeter(source, target, Ellipsoid.Clarke1880); +// System.out.println("Sphere坐标系计算结果:"+Sphere + "米"); +// System.out.println("WGS84坐标系计算结果:"+WGS84 + "米"); +// System.out.println("GRS80坐标系计算结果:"+GRS80 + "米"); +// System.out.println("GRS67坐标系计算结果:"+GRS67 + "米"); +// System.out.println("ANS坐标系计算结果:"+ANS + "米"); +// System.out.println("WGS72坐标系计算结果:"+WGS72 + "米"); +// System.out.println("Clarke1858坐标系计算结果:"+Clarke1858 + "米"); +// System.out.println("Clarke1880坐标系计算结果:"+Clarke1880 + "米"); + map.put("Sphere", Sphere); + map.put("WGS84", WGS84); + map.put("GRS80", GRS80); + map.put("GRS67", GRS67); + map.put("ANS", ANS); + map.put("WGS72", WGS72); + map.put("Clarke1858", Clarke1858); + map.put("Clarke1880", Clarke1880); + } + return map; + } + + + private static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid){ + //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离 + GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo); + return geoCurve.getEllipsoidalDistance(); + } + + + + public static void main(String[] ages){ + GeodesyUtil geodesyUtil = new GeodesyUtil(); + Map<String, Double> distance = geodesyUtil.getDistance("115.481028,39.989643", "114.465302,40.004717"); + System.err.println(distance); + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java index 1b48650..d27cec0 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java @@ -16,132 +16,132 @@ /** * Entity基类 - * + * * @author ruoyi */ -public class BaseEntity implements Serializable -{ - private static final long serialVersionUID = 1L; - - /** 搜索值 */ - @JsonIgnore - @TableField(exist = false) - private String searchValue; - - /** 创建者 */ - @ApiModelProperty(value = "记录创建人,前端忽略") - @TableField(value = "create_by", fill = FieldFill.INSERT) - private String createBy; - - /** 创建时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField("create_time") - private Date createTime; - - /** 更新者 */ - @ApiModelProperty(value = "记录修改人,前端忽略") - //@JsonIgnore - @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** 更新时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField("update_time") - private Date updateTime; - - /** 是否删除 1未删除 0已删除 */ - @TableLogic - @Excel(name = "是否删除 0未删除 1已删除") - @TableField(exist = false) - private Boolean disabled; - - /** 备注 */ - private String remark; - - /** 请求参数 */ - @JsonInclude(JsonInclude.Include.NON_EMPTY) - @TableField(exist = false) - private Map<String, Object> params; - - public Boolean getDisabled() { - return disabled; - } - - public void setDisabled(Boolean disabled) { - this.disabled = disabled; - } - - public String getSearchValue() - { - return searchValue; - } - - public void setSearchValue(String searchValue) - { - this.searchValue = searchValue; - } - - public String getCreateBy() - { - return createBy; - } - - public void setCreateBy(String createBy) - { - this.createBy = createBy; - } - - public Date getCreateTime() - { - return createTime; - } - - public void setCreateTime(Date createTime) - { - this.createTime = createTime; - } - - public String getUpdateBy() - { - return updateBy; - } - - public void setUpdateBy(String updateBy) - { - this.updateBy = updateBy; - } - - public Date getUpdateTime() - { - return updateTime; - } - - public void setUpdateTime(Date updateTime) - { - this.updateTime = updateTime; - } - - public String getRemark() - { - return remark; - } - - public void setRemark(String remark) - { - this.remark = remark; - } - - public Map<String, Object> getParams() - { - if (params == null) - { - params = new HashMap<>(); - } - return params; - } - - public void setParams(Map<String, Object> params) - { - this.params = params; - } +public class BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 搜索值 + */ + @JsonIgnore + @TableField(exist = false) + private String searchValue; + + /** + * 创建者 + */ + @ApiModelProperty(value = "记录创建人,前端忽略") + @TableField(value = "create_by", fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("create_time") + private Date createTime; + + /** + * 更新者 + */ + @ApiModelProperty(value = "记录修改人,前端忽略") + //@JsonIgnore + @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("update_time") + private Date updateTime; + + /** + * 是否删除 1未删除 0已删除 + */ + @TableLogic + @Excel(name = "是否删除 0未删除 1已删除") + @TableField(exist = false) + private Boolean disabled; + + /** + * 备注 + */ + private String remark; + + /** + * 请求参数 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + @TableField(exist = false) + private Map<String, Object> params; + + public Boolean getDisabled() { + return disabled; + } + + public void setDisabled(Boolean disabled) { + this.disabled = disabled; + } + + public String getSearchValue() { + return searchValue; + } + + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Map<String, Object> getParams() { + if (params == null) { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map<String, Object> params) { + this.params = params; + } } diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java index 83f2ef6..e44b648 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java @@ -7,23 +7,23 @@ import com.ruoyi.system.api.RemoteLogService; import com.ruoyi.system.api.domain.SysOperLog; +import javax.annotation.Resource; + /** * 异步调用日志服务 * * @author ruoyi */ @Service -public class AsyncLogService -{ - @Autowired +public class AsyncLogService { + @Resource private RemoteLogService remoteLogService; /** * 保存系统日志记录 */ @Async - public void saveSysLog(SysOperLog sysOperLog) throws Exception - { + public void saveSysLog(SysOperLog sysOperLog) throws Exception { remoteLogService.saveLog(sysOperLog, SecurityConstants.INNER); } } 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 d59c735..e829417 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,7 @@ package com.ruoyi.gateway.filter; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -7,7 +9,10 @@ import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import com.ruoyi.common.core.constant.CacheConstants; @@ -20,7 +25,14 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.gateway.config.properties.IgnoreWhiteProperties; import io.jsonwebtoken.Claims; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; /** * 网关鉴权 @@ -37,9 +49,6 @@ @Autowired private RedisService redisService; - - @Value("${security.sign}") - private boolean parameter_signature; @Override @@ -70,15 +79,7 @@ if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) { return unauthorizedResponse(exchange, "令牌验证失败"); } - if(parameter_signature){ - String sign = request.getHeaders().getFirst(TokenConstants.SING); - String nonce_str = request.getHeaders().getFirst(TokenConstants.NONCE_STR); - if(StringUtils.isEmpty(sign) || StringUtils.isEmpty(nonce_str)){ - log.error("[鉴权签名异常处理]请求路径:{}", exchange.getRequest().getPath()); - return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "签名校验失败", HttpStatus.BAD_REQUEST); - } - } - + // 设置用户信息到请求 addHeader(mutate, SecurityConstants.USER_KEY, userkey); addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid); @@ -126,10 +127,11 @@ } return token; } - + + @Override public int getOrder() { - return -200; + return -300; } } \ No newline at end of file diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/RequestParamGlobalFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/RequestParamGlobalFilter.java new file mode 100644 index 0000000..c13f096 --- /dev/null +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/RequestParamGlobalFilter.java @@ -0,0 +1,98 @@ +package com.ruoyi.gateway.filter; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.constant.HttpStatus; +import com.ruoyi.common.core.constant.TokenConstants; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.html.EscapeUtil; +import com.ruoyi.gateway.config.properties.XssProperties; +import io.netty.buffer.ByteBufAllocator; +import org.apache.commons.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.*; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +/** + * 跨站脚本过滤器 + * + * @author ruoyi + */ +@Component +public class RequestParamGlobalFilter implements GlobalFilter, Ordered { + + + + @Override + public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequestDecorator httpRequestDecorator = requestDecorator(exchange); + return chain.filter(exchange.mutate().request(httpRequestDecorator).build()); + } + + + + + private ServerHttpRequestDecorator requestDecorator(ServerWebExchange exchange) { + ServerHttpRequestDecorator serverHttpRequestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) { + @Override + public Flux<DataBuffer> getBody() { + Flux<DataBuffer> body = super.getBody(); + return body.buffer().map(dataBuffers -> { + DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); + DataBuffer join = dataBufferFactory.join(dataBuffers); + byte[] content = new byte[join.readableByteCount()]; + join.read(content); + DataBufferUtils.release(join); + String bodyStr = new String(content, StandardCharsets.UTF_8); + // 转成字节 + byte[] bytes = bodyStr.getBytes(); + NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT); + DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length); + buffer.write(bytes); + return buffer; + }); + } + + @Override + public HttpHeaders getHeaders() { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.putAll(super.getHeaders()); + // 由于修改了请求体的body,导致content-length长度不确定,因此需要删除原先的content-length + httpHeaders.remove(HttpHeaders.CONTENT_LENGTH); + httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked"); + return httpHeaders; + } + + }; + return serverHttpRequestDecorator; + } + + + @Override + public int getOrder() + { + return HIGHEST_PRECEDENCE; + } +} diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/SignFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/SignFilter.java new file mode 100644 index 0000000..c8b573a --- /dev/null +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/SignFilter.java @@ -0,0 +1,192 @@ +package com.ruoyi.gateway.filter; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.HttpStatus; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.TokenConstants; +import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.gateway.config.properties.IgnoreWhiteProperties; +import io.jsonwebtoken.Claims; +import org.apache.commons.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +/** + * 网关鉴权 + * + * @author ruoyi + */ +@Component +public class SignFilter implements GlobalFilter, Ordered { + private static final Logger log = LoggerFactory.getLogger(SignFilter.class); + + // 排除过滤的 uri 地址,nacos自行添加 + @Autowired + private IgnoreWhiteProperties ignoreWhite; + + @Autowired + private RedisService redisService; + + @Value("${security.sign}") + private boolean parameter_signature; + + + @Override + public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + ServerHttpRequest.Builder mutate = request.mutate(); + + HttpMethod method = request.getMethod(); + if(method != HttpMethod.POST){ + return chain.filter(exchange.mutate().request(mutate.build()).build()); + } + String sing = request.getHeaders().getFirst(TokenConstants.SING); + String nonce_str = request.getHeaders().getFirst(TokenConstants.NONCE_STR); +// if (parameter_signature && StringUtils.isEmpty(sing)) { +// return unauthorizedResponse(exchange, "签名不能为空!"); +// } +// if (parameter_signature && StringUtils.isEmpty(nonce_str)) { +// return unauthorizedResponse(exchange, "签名不能为空!"); +// } + if(parameter_signature){ + return authSign(exchange, chain, sing, nonce_str); + } + return chain.filter(exchange.mutate().request(mutate.build()).build()); + } + + + + private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg) { + log.error("[签名异常处理]请求路径:{}", exchange.getRequest().getPath()); + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.BAD_REQUEST); + } + + + /** + * 校验签名 + * @return + */ + private Mono<Void> authSign(ServerWebExchange exchange, GatewayFilterChain chain, String sing, String nonce_str){ + return DataBufferUtils.join(exchange.getRequest().getBody()) + .flatMap(dataBuffer -> { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); + String bodyString = new String(bytes, StandardCharsets.UTF_8); + log.info("请求参数:{}", bodyString); + if(!authSign(JSON.parseObject(bodyString), sing, nonce_str)){ + return unauthorizedResponse(exchange, "签名验证失败!"); + } + DataBufferUtils.release(dataBuffer); + Flux<DataBuffer> cachedFlux = Flux.defer(() -> { + DataBuffer buffer = exchange.getResponse().bufferFactory() + .wrap(bytes); + return Mono.just(buffer); + }); + ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) { + @Override + public Flux<DataBuffer> getBody() { + return cachedFlux; + } + }; + return chain.filter(exchange.mutate().request(mutatedRequest) + .build()); + }); + } + + + + /** + * 签名校验 + * @return + */ + private boolean authSign(JSONObject jsonStr, String sign, String nonce_str) { + String signUrlEncode = localSignUrl(jsonStr, nonce_str); + signUrlEncode = signUrlEncode.replaceAll("& #40;", "\\(") + .replaceAll("& #41;", "\\)") + .replaceAll("\\+", " "); + if(sign.equals(signUrlEncode)){ + return true; + } + return false; + } + + + /** + * 组装签名路径 + * @param params + * @return + */ + public static String localSignUrl(JSONObject params, String key) { + List<String> keySet = new ArrayList<>(params.keySet()); + // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) + Collections.sort(keySet, new Comparator<String>() { + @Override + public int compare(String o1, String o2) { + return o1.compareTo(o2); + } + }); + // 构造签名键值对的格式 + StringBuilder sb = new StringBuilder(); + for (String k : keySet) { + String v = params.getString(k); + if(StringUtils.isNotEmpty(v)){ + sb.append(k + "=" + v + "&"); + } + } + String signUrl = sb.substring(0, sb.length() - 1); + return signUrlEncode(signUrl, key); + } + + + /** + * 签名字符串加密 + * @param signUrl + * @param encryptKey + * @return + */ + public static String signUrlEncode(String signUrl, String encryptKey) { + byte[] signByte = new byte[0]; + try { + signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + String localSign = Base64.encodeBase64String(signByte); + return localSign; + } + + + @Override + public int getOrder() + { + return -200; + } +} \ No newline at end of file diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java index fe449a9..6d3e498 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java @@ -50,52 +50,41 @@ // 跨站脚本的 xss 配置,nacos自行添加 @Autowired private XssProperties xss; - - @Value("${security.sign}") - private boolean parameter_signature; @Override - public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) - { + public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); // xss开关未开启 或 通过nacos关闭,不过滤 - if (!xss.getEnabled()) - { + if (!xss.getEnabled()) { return chain.filter(exchange); } // GET DELETE 不过滤 HttpMethod method = request.getMethod(); - if (method == null || method == HttpMethod.GET || method == HttpMethod.DELETE) - { + if (method == null || method == HttpMethod.GET || method == HttpMethod.DELETE) { return chain.filter(exchange); } // 非json类型,不过滤 - if (!isJsonRequest(exchange)) - { + if (!isJsonRequest(exchange)) { return chain.filter(exchange); } // excludeUrls 不过滤 String url = request.getURI().getPath(); - if (StringUtils.matches(url, xss.getExcludeUrls())) - { + if (StringUtils.matches(url, xss.getExcludeUrls())) { return chain.filter(exchange); } ServerHttpRequestDecorator httpRequestDecorator = requestDecorator(exchange); - if(parameter_signature && !authSign(httpRequestDecorator)){ - log.error("[鉴权签名异常处理]请求路径:{}", exchange.getRequest().getPath()); - return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "签名校验失败", HttpStatus.BAD_REQUEST); - } return chain.filter(exchange.mutate().request(httpRequestDecorator).build()); - } - private ServerHttpRequestDecorator requestDecorator(ServerWebExchange exchange) - { - ServerHttpRequestDecorator serverHttpRequestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) - { + + + + + + private ServerHttpRequestDecorator requestDecorator(ServerWebExchange exchange) { + ServerHttpRequestDecorator serverHttpRequestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) { @Override - public Flux<DataBuffer> getBody() - { + public Flux<DataBuffer> getBody() { Flux<DataBuffer> body = super.getBody(); return body.buffer().map(dataBuffers -> { DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); @@ -116,8 +105,7 @@ } @Override - public HttpHeaders getHeaders() - { + public HttpHeaders getHeaders() { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.putAll(super.getHeaders()); // 由于修改了请求体的body,导致content-length长度不确定,因此需要删除原先的content-length @@ -135,104 +123,10 @@ * * @param exchange HTTP请求 */ - public boolean isJsonRequest(ServerWebExchange exchange) - { + public boolean isJsonRequest(ServerWebExchange exchange) { String header = exchange.getRequest().getHeaders().getFirst(HttpHeaders.CONTENT_TYPE); return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); } - - - /** - * 签名校验 - * @param httpRequestDecorator - * @return - */ - private boolean authSign(ServerHttpRequestDecorator httpRequestDecorator) { - HttpHeaders headers = httpRequestDecorator.getHeaders(); - AtomicReference<JSONObject> jsonObject = new AtomicReference<>(new JSONObject()); - httpRequestDecorator.getBody().buffer().map(dataBuffers -> { - DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - DataBuffer join = dataBufferFactory.join(dataBuffers); - byte[] content = new byte[join.readableByteCount()]; - join.read(content); - DataBufferUtils.release(join); - String bodyStr = new String(content, StandardCharsets.UTF_8); - jsonObject.set(JSON.parseObject(bodyStr)); - - // 防xss攻击过滤 - bodyStr = EscapeUtil.clean(bodyStr); - // 转成字节 - byte[] bytes = bodyStr.getBytes(); - NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT); - DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length); - buffer.write(bytes); - return buffer; - }); - JSONObject params = jsonObject.get(); - String sign = headers.getFirst(TokenConstants.SING); - if(StringUtils.isEmpty(sign)){ - return false; - } - String nonce_str = headers.getFirst(TokenConstants.NONCE_STR); - if(StringUtils.isEmpty(nonce_str)){ - return false; - } - - String signUrlEncode = localSignUrl(params, nonce_str); - signUrlEncode = signUrlEncode.replaceAll("& #40;", "\\(") - .replaceAll("& #41;", "\\)") - .replaceAll("\\+", " "); - if(sign.equals(signUrlEncode)){ - return true; - } - return false; - } - - - /** - * 组装签名路径 - * @param params - * @return - */ - public static String localSignUrl(JSONObject params, String key) { - List<String> keySet = new ArrayList<>(params.keySet()); - // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) - Collections.sort(keySet, new Comparator<String>() { - @Override - public int compare(String o1, String o2) { - return o1.compareTo(o2); - } - }); - // 构造签名键值对的格式 - StringBuilder sb = new StringBuilder(); - for (String k : keySet) { - String v = params.getString(k); - if(StringUtils.isNotEmpty(v)){ - sb.append(k + "=" + v + "&"); - } - } - String signUrl = sb.substring(0, sb.length() - 1); - return signUrlEncode(signUrl, key); - } - - - /** - * 签名字符串加密 - * @param signUrl - * @param encryptKey - * @return - */ - public static String signUrlEncode(String signUrl, String encryptKey) { - byte[] signByte = new byte[0]; - try { - signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey); - } catch (Exception e) { - throw new RuntimeException(e); - } - String localSign = Base64.encodeBase64String(signByte); - return localSign; - } - @Override public int getOrder() diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 3c7a1b4..dd3928c 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -106,6 +106,24 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-other</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-chargingPile</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>io.seata</groupId> + <artifactId>seata-all</artifactId> + <version>1.6.1</version> + <scope>compile</scope> + </dependency> </dependencies> 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 new file mode 100644 index 0000000..208c975 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLoginLogController.java @@ -0,0 +1,63 @@ +package com.ruoyi.system.controller; + +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.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.domain.SysLoginLog; +import com.ruoyi.system.service.ISysLoginLogService; +import com.ruoyi.system.service.ISysUserService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDateTime; + +/** + * @author zhibing.pu + * @Date 2024/8/12 15:48 + */ +@RestController +@RequestMapping("/sysLoginLog") +public class SysLoginLogController { + + + @Resource + private ISysLoginLogService sysLoginLogService; + + @Resource + private ISysUserService sysUserService; + + + + @GetMapping("/pageList") + @ApiOperation(value = "获取登录日志列表", tags = {"管理后台-登录日志"}) + public AjaxResult<PageInfo<SysLoginLog>> pageList(String name, BasePage basePage){ + PageInfo<SysLoginLog> pageInfo = sysLoginLogService.pageList(name, basePage); + return AjaxResult.success(pageInfo); + } + + + @PostMapping("/addLoginLog") + @ApiOperation(value = "添加登录日志", tags = {"管理后台-登录日志"}) + public AjaxResult addLoginLog(@RequestBody SysLoginLog loginLog){ + return sysLoginLogService.addLoginLog(loginLog); + } + + + /** + * 添加登陆日志 + * @param loginLog + * @return + */ + @PostMapping("/saveLoginLog") + public R saveLoginLog(@RequestBody SysLoginLog loginLog){ + loginLog.setCreateTime(LocalDateTime.now()); + loginLog.setDelFlag(0); + sysLoginLogService.save(loginLog); + return R.ok(); + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java deleted file mode 100644 index aa116a4..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.ruoyi.system.controller; - -import java.util.List; -import javax.servlet.http.HttpServletResponse; - -import com.ruoyi.system.service.ISysLogininforService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import com.ruoyi.common.core.constant.CacheConstants; -import com.ruoyi.common.core.utils.poi.ExcelUtil; -import com.ruoyi.common.core.web.controller.BaseController; -import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.core.web.page.TableDataInfo; -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.InnerAuth; -import com.ruoyi.common.security.annotation.RequiresPermissions; -import com.ruoyi.system.api.domain.SysLogininfor; - -/** - * 系统访问记录 - * - * @author ruoyi - */ -@RestController -@RequestMapping("/logininfor") -public class SysLogininforController extends BaseController -{ - @Autowired - private ISysLogininforService logininforService; - - @Autowired - private RedisService redisService; - - @RequiresPermissions("system:logininfor:list") - @GetMapping("/list") - public TableDataInfo list(SysLogininfor logininfor) - { - startPage(); - List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); - return getDataTable(list); - } - - @Log(title = "登录日志", businessType = BusinessType.EXPORT) - @RequiresPermissions("system:logininfor:export") - @PostMapping("/export") - public void export(HttpServletResponse response, SysLogininfor logininfor) - { - List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); - ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class); - util.exportExcel(response, list, "登录日志"); - } - - @RequiresPermissions("system:logininfor:remove") - @Log(title = "登录日志", businessType = BusinessType.DELETE) - @DeleteMapping("/{infoIds}") - public AjaxResult remove(@PathVariable Long[] infoIds) - { - return toAjax(logininforService.deleteLogininforByIds(infoIds)); - } - - @RequiresPermissions("system:logininfor:remove") - @Log(title = "登录日志", businessType = BusinessType.DELETE) - @DeleteMapping("/clean") - public AjaxResult clean() - { - logininforService.cleanLogininfor(); - return success(); - } - - @RequiresPermissions("system:logininfor:unlock") - @Log(title = "账户解锁", businessType = BusinessType.OTHER) - @GetMapping("/unlock/{userName}") - public AjaxResult unlock(@PathVariable("userName") String userName) - { - redisService.deleteObject(CacheConstants.PWD_ERR_CNT_KEY + userName); - return success(); - } - - @InnerAuth - @PostMapping - public AjaxResult add(@RequestBody SysLogininfor logininfor) - { - return toAjax(logininforService.insertLogininfor(logininfor)); - } -} 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 4a6ec7c..eadb678 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 @@ -1,13 +1,11 @@ package com.ruoyi.system.controller; -import java.util.Iterator; import java.util.List; -import java.util.Objects; import javax.servlet.http.HttpServletResponse; -import com.alibaba.fastjson2.JSONObject; 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.system.query.SysOperLogQuery; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +19,6 @@ import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.annotation.InnerAuth; @@ -31,78 +28,65 @@ /** * 操作日志记录 - * + * * @author ruoyi */ @RestController @RequestMapping("/operlog") -public class SysOperlogController extends BaseController -{ - @Autowired - private ISysOperLogService operLogService; - -// @RequiresPermissions("system:operlog:list") -// @GetMapping("/list") -// public TableDataInfo list(SysOperLog operLog) -// { -// startPage(); -// List<SysOperLog> list = operLogService.selectOperLogList(operLog); -// return getDataTable(list); -// } - - @ApiOperation(value = "当前车辆操作日志查询") - @PostMapping("/list") - public AjaxResult list(@RequestBody SysOperLogQuery query) - { - LambdaQueryWrapper<SysOperLog> wrapper = new LambdaQueryWrapper<>(); - wrapper.like(SysOperLog::getTitle,"车辆管理"); - wrapper.ne(SysOperLog::getBusinessType,1); - List<SysOperLog> list = operLogService.list(wrapper); - Iterator<SysOperLog> iterator = list.iterator(); - while (iterator.hasNext()){ - SysOperLog sysOperLog = iterator.next(); - String operParam = sysOperLog.getOperParam(); - JSONObject jsonObject = JSONObject.parseObject(operParam); - String carId = jsonObject.getString("carId"); - if(StringUtils.isNotEmpty(carId) && Objects.nonNull(query.getCarId()) && !carId.equals(String.valueOf(query.getCarId()))){ - iterator.remove(); - } - } - return AjaxResult.success(list); - } - - - @Log(title = "操作日志", businessType = BusinessType.EXPORT) - @RequiresPermissions("system:operlog:export") - @PostMapping("/export") - public void export(HttpServletResponse response, SysOperLog operLog) - { - List<SysOperLog> list = operLogService.selectOperLogList(operLog); - ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class); - util.exportExcel(response, list, "操作日志"); - } - - @Log(title = "操作日志", businessType = BusinessType.DELETE) - @RequiresPermissions("system:operlog:remove") - @DeleteMapping("/{operIds}") - public AjaxResult remove(@PathVariable Long[] operIds) - { - return toAjax(operLogService.deleteOperLogByIds(operIds)); - } - - @RequiresPermissions("system:operlog:remove") - @Log(title = "操作日志", businessType = BusinessType.CLEAN) - @DeleteMapping("/clean") - public AjaxResult clean() - { - operLogService.cleanOperLog(); - return success(); - } - - @InnerAuth - @PostMapping - public AjaxResult add(@RequestBody SysOperLog operLog) - { - return toAjax(operLogService.insertOperlog(operLog)); - } +public class SysOperlogController extends BaseController { + @Autowired + private ISysOperLogService operLogService; + + + @GetMapping("/list") + @ApiOperation(value = "获取操作日志列表", tags = {"管理后台-操作日志"}) + public AjaxResult<PageInfo<SysOperLog>> list(SysOperLogQuery query) { + PageInfo<SysOperLog> pageInfo = new PageInfo(query.getPageCurr(), query.getPageSize()); + LambdaQueryWrapper<SysOperLog> wrapper = new LambdaQueryWrapper<>(); + if(StringUtils.isNotEmpty(query.getOperName())){ + wrapper.like(SysOperLog::getOperName, query.getOperName()); + } + if(StringUtils.isNotEmpty(query.getTitle())){ + wrapper.like(SysOperLog::getTitle, query.getTitle()); + } + if(null != query.getStatus()){ + wrapper.eq(SysOperLog::getStatus, query.getStatus()); + } + if(null != query.getStartTime() && null != query.getEndTime()){ + wrapper.between(SysOperLog::getOperTime, query.getStartTime(), query.getEndTime()); + } + PageInfo<SysOperLog> page = operLogService.page(pageInfo, wrapper); + return AjaxResult.success(page); + } + + + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:operlog:export") + @PostMapping("/export") + public void export(HttpServletResponse response, SysOperLog operLog) { + List<SysOperLog> list = operLogService.selectOperLogList(operLog); + ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class); + util.exportExcel(response, list, "操作日志"); + } + + @Log(title = "操作日志", businessType = BusinessType.DELETE) + @RequiresPermissions("system:operlog:remove") + @DeleteMapping("/{operIds}") + public AjaxResult remove(@PathVariable Long[] operIds) { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @RequiresPermissions("system:operlog:remove") + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() { + operLogService.cleanOperLog(); + return success(); + } + + @InnerAuth + @PostMapping + public AjaxResult add(@RequestBody SysOperLog operLog) { + return toAjax(operLogService.insertOperlog(operLog)); + } } 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 59337ac..b22299a 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 @@ -12,8 +12,14 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.common.core.domain.R; +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.other.api.domain.TRoleSite; +import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.system.api.model.GetSysRoleByIds; import com.ruoyi.system.domain.SysMenus; import com.ruoyi.system.domain.SysRoleMenu; @@ -27,6 +33,7 @@ import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserRoleService; import com.ruoyi.system.service.ISysUserService; +import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -55,72 +62,75 @@ @Api(tags = "角色模块") public class SysRoleController extends BaseController { - @Autowired + @Resource private ISysRoleService roleService; - @Autowired + @Resource private ISysUserService userService; - @Autowired + @Resource private ISysDeptService deptService; @Resource private SysRoleMenuMapper sysRoleMenuMapper; - @Autowired + @Resource private ISysUserRoleService sysUserRoleService; - @Resource private SysMenuMapper menuMapper; - - @ApiOperation("获取所有角色信息根据公司id") + + @Resource + private RoleSiteClient roleSiteClient; + + @Resource + private SiteClient siteClient; + + + + + @ApiOperation(value = "获取角色列表", tags = {"管理后台-系统用户管理"}) @GetMapping("/list") - public AjaxResult list(Integer companyId) - { - SysRole role = new SysRole(); - role.setCompanyId(companyId); - List<SysRole> list = roleService.selectRoleList(role); + public AjaxResult list() { + List<SysRole> list = roleService.list(new LambdaQueryWrapper<SysRole>().eq(SysRole::getDelFlag, 0).eq(SysRole::getStatus, 0)); return AjaxResult.success(list); } - - - - @ApiOperation("获取所有角色信息根据公司id--分页") + + + + @ResponseBody @GetMapping("/listPage") - public AjaxResult listPage(Integer companyId,int pageNumber,int pageSize) - { - PageInfo<SysRole> pageInfo = new PageInfo<>(pageNumber, pageSize); - - PageInfo<SysRole> page = roleService.page(pageInfo, new LambdaQueryWrapper<SysRole>().eq(SysRole::getCompanyId, companyId).ne(SysRole::getRoleId,20)); + @ApiOperation(value = "获取角色列表", tags = {"管理后台-角色管理"}) + public AjaxResult listPage(String name, BasePage basePage) { + PageInfo<SysRole> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); + LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<SysRole>().eq(SysRole::getStatus, 0).eq(SysRole::getDelFlag, 0); + if(StringUtils.isNotEmpty(name)){ + wrapper.like(SysRole::getRoleName, name); + } + + PageInfo<SysRole> page = roleService.page(pageInfo, wrapper.orderByDesc(SysRole::getCreateTime)); + for (SysRole record : page.getRecords()) { + List<Integer> data = roleSiteClient.getSiteIds(record.getRoleId()).getData(); + List<Site> sites = siteClient.getSiteByIds(data).getData(); + List<String> collect = sites.stream().map(Site::getName).collect(Collectors.toList()); + record.setSiteNames(collect); + } return AjaxResult.success(page); } - - - @ApiOperation("角色启用停用") - @GetMapping("/roleStart") - public AjaxResult roleStart(Long roleId) - { - SysRole role = roleService.selectRoleById(roleId); - if(role.getStatus().equals("1")){ - role.setStatus("0"); - }else { - role.setStatus("1"); - } - return AjaxResult.success(roleService.updateRole(role)); - } - - - - @ApiOperation("添加角色") + + + + + @ResponseBody @PostMapping("/roleAdd") + @ApiOperation(value = "添加角色", tags = {"管理后台-角色管理"}) + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult roleAdd(@Validated @RequestBody RoleAddDto dto) { SysRole role = new SysRole(); role.setRoleName(dto.getRoleName()); long count = roleService.count(Wrappers.lambdaQuery(SysRole.class) - .eq(SysRole::getRoleName,dto.getRoleName()) - .eq(SysRole::getCompanyId,dto.getCompanyId())); + .eq(SysRole::getRoleName,dto.getRoleName())); if(count>0){ return AjaxResult.error("角色已存在,请重新输入"); } @@ -130,36 +140,29 @@ } role.setMenuIds(dto.getMenuIds().toArray((new Long[dto.getMenuIds().size()]))); // 添加角色 - role.setCompanyId(dto.getCompanyId()); - role.setCarDataAuth(dto.getCarDataAuth()); - role.setCarTrainOperAuth(dto.getCarTrainOperAuth()); - role.setContractDataAuth(dto.getContractDataAuth()); + role.setRemark(dto.getRemark()); role.setCreateBy(SecurityUtils.getUsername()); role.setCreateTime(new Date()); roleService.insertRole(role); -// ArrayList<SysRoleMenu> sysRoleMenus = new ArrayList<>(); -// List<Long> menuIds = dto.getMenuIds(); -// for (Long menuId : menuIds) { -// SysRoleMenu sysRoleMenu = new SysRoleMenu(); -// sysRoleMenu.setMenuId(menuId); -// sysRoleMenu.setRoleId(role.getRoleId()); -// sysRoleMenus.add(sysRoleMenu); -// } -// sysRoleMenuMapper.batchRoleMenu(sysRoleMenus); + //添加站点权限 + 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); return AjaxResult.success(); } - @ApiOperation("角色详情") @GetMapping("/roleInfo") - public AjaxResult roleInfo( @RequestParam Long id) - { + @ApiOperation(value = "角色详情", tags = {"管理后台-角色管理"}) + public AjaxResult roleInfo( @RequestParam Long id) { SysRole role = roleService.selectRoleById(id); RoleInfoVo roleInfoVo = new RoleInfoVo(); roleInfoVo.setRoleId(role.getRoleId()); - roleInfoVo.setCarDataAuth(role.getCarDataAuth()); - roleInfoVo.setCarTrainOperAuth(role.getCarTrainOperAuth()); - roleInfoVo.setContractDataAuth(role.getContractDataAuth()); roleInfoVo.setRoleName(role.getRoleName()); // 获取当前角色的菜单id List<Long> menusId = sysRoleMenuMapper.selectList(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, id)).stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList()); @@ -184,66 +187,29 @@ List<SysMenus> collect = s2.stream().filter(e -> e.getParentId().equals(menus.getMenuId())).collect(Collectors.toList()); menus.setChildren(collect); } - roleInfoVo.setMenus(menusId); + roleInfoVo.setRemark(role.getRemark()); + List<Integer> siteIds = roleSiteClient.getSiteIds(role.getRoleId()).getData(); + List<Site> sites = siteClient.getSiteByIds(siteIds).getData(); + List<String> siteNames = sites.stream().map(Site::getName).collect(Collectors.toList()); + roleInfoVo.setSiteNames(siteNames); + roleInfoVo.setSiteIds(siteIds); return AjaxResult.success(roleInfoVo); } - @ApiOperation("用户获取权限菜单") - @GetMapping("/roleInfoFromUserId") - public AjaxResult roleInfoFromUserId( @RequestParam Long userId) - { - SysUserRole one = sysUserRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); - Long id =one.getRoleId(); - // 获取当前角色的菜单id - List<Long> menusId = sysRoleMenuMapper.selectList(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, id)).stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList()); - if(menusId.size()==0){ - return AjaxResult.success(new ArrayList<>()); - } - if(id!=1){ - menusId = menusId.stream().filter(e->e!=1074 && e!=1075 && e!=1193 && e!=1194).collect(Collectors.toList()); - } - //获取当前的权限菜单 - List<SysMenus> all = menuMapper.getAllInIds(menusId); - // 第三级 - List<SysMenus> s3 = all.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList()); - // 第二级 - List<SysMenus> s2 = all.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList()); - // 第一级 - List<SysMenus> s1 = all.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList()); - for (SysMenus menus : s2) { - List<SysMenus> collect = s3.stream().filter(e -> e.getParentId().equals(menus.getMenuId())).collect(Collectors.toList()); - menus.setChildren(collect); - } - - for (SysMenus menus : s1) { - List<SysMenus> collect = s2.stream().filter(e -> e.getParentId().equals(menus.getMenuId())).collect(Collectors.toList()); - menus.setChildren(collect); - } - - return AjaxResult.success(s1); - } - - - - - @ApiOperation("编辑角色") @PostMapping("/roleUpdate") - public AjaxResult roleUpdate(@Validated @RequestBody RoleUpdateDto dto) - { + @ApiOperation(value = "编辑角色", tags = {"管理后台-角色管理"}) + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 + public AjaxResult roleUpdate(@Validated @RequestBody RoleUpdateDto dto) { SysRole role = new SysRole(); role.setRoleName(dto.getRoleName()); - SysRole one = roleService.getOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleId, dto.getRoleId())); - List<SysRole> sysRoles = roleService.isExitUpdate(dto.getRoleName(),dto.getRoleId(),one.getCompanyId()); - if(sysRoles.size()>0){ + SysRole one = roleService.getOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleName, dto.getRoleName())); + if(null != one && !one.getRoleId().equals(dto.getRoleId())){ return AjaxResult.error("角色已存在,请重新输入"); } - // 编辑角色 - role.setCarDataAuth(dto.getCarDataAuth()); - role.setCarTrainOperAuth(dto.getCarTrainOperAuth()); - role.setContractDataAuth(dto.getContractDataAuth()); + role.setRemark(dto.getRemark()); role.setUpdateBy(SecurityUtils.getUsername()); role.setUpdateTime(new Date()); role.setRoleId(dto.getRoleId()); @@ -272,110 +238,21 @@ sysRoleMenus.add(sysRoleMenu); } sysRoleMenuMapper.batchRoleMenu(sysRoleMenus); + //删除旧站点数据 + roleSiteClient.delRoleSite(dto.getRoleId()); + //添加站点权限 + 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); return AjaxResult.success(); } - - - - - - - - - - - @Log(title = "角色管理", businessType = BusinessType.EXPORT) - @RequiresPermissions("system:role:export") - @PostMapping("/export") - public void export(HttpServletResponse response, SysRole role) - { - List<SysRole> list = roleService.selectRoleList(role); - ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class); - util.exportExcel(response, list, "角色数据"); - } - - /** - * 根据角色编号获取详细信息 - */ - @RequiresPermissions("system:role:query") - @GetMapping(value = "/{roleId}") - public AjaxResult getInfo(@PathVariable Long roleId) - { - roleService.checkRoleDataScope(roleId); - return success(roleService.selectRoleById(roleId)); - } - - /** - * 新增角色 - */ - @RequiresPermissions("system:role:add") - @Log(title = "角色管理", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@Validated @RequestBody SysRole role) - { - if (!roleService.checkRoleNameUnique(role)) - { - return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); - } - else if (!roleService.checkRoleKeyUnique(role)) - { - return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); - } - role.setCreateBy(SecurityUtils.getUsername()); - return toAjax(roleService.insertRole(role)); - - } - - /** - * 修改保存角色 - */ - @RequiresPermissions("system:role:edit") - @Log(title = "角色管理", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@Validated @RequestBody SysRole role) - { - roleService.checkRoleAllowed(role); - roleService.checkRoleDataScope(role.getRoleId()); - if (!roleService.checkRoleNameUnique(role)) - { - return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); - } - else if (!roleService.checkRoleKeyUnique(role)) - { - return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); - } - role.setUpdateBy(SecurityUtils.getUsername()); - return toAjax(roleService.updateRole(role)); - } - - /** - * 修改保存数据权限 - */ - @RequiresPermissions("system:role:edit") - @Log(title = "角色管理", businessType = BusinessType.UPDATE) - @PutMapping("/dataScope") - public AjaxResult dataScope(@RequestBody SysRole role) - { - roleService.checkRoleAllowed(role); - roleService.checkRoleDataScope(role.getRoleId()); - return toAjax(roleService.authDataScope(role)); - } - - /** - * 状态修改 - */ - @RequiresPermissions("system:role:edit") - @Log(title = "角色管理", businessType = BusinessType.UPDATE) - @PutMapping("/changeStatus") - public AjaxResult changeStatus(@RequestBody SysRole role) - { - roleService.checkRoleAllowed(role); - roleService.checkRoleDataScope(role.getRoleId()); - role.setUpdateBy(SecurityUtils.getUsername()); - return toAjax(roleService.updateRoleStatus(role)); - } /** * 删除角色 @@ -383,39 +260,14 @@ @RequiresPermissions("system:role:remove") @Log(title = "角色管理", businessType = BusinessType.DELETE) @DeleteMapping("/{roleIds}") - public AjaxResult remove(@PathVariable Long[] roleIds) - { + @ApiOperation(value = "删除角色", tags = {"管理后台-角色管理"}) + public AjaxResult remove(@PathVariable Long[] roleIds) { return toAjax(roleService.deleteRoleByIds(roleIds)); } + - /** - * 停用角色 - */ - @RequiresPermissions("system:role:stop") - @Log(title = "角色管理", businessType = BusinessType.STOP) - @PutMapping("/stop") - public AjaxResult stop(@RequestBody Long roleId) - { - SysRole sysRole = roleService.selectRoleById(roleId); - if(sysRole.getStatus().equals("0")){ - sysRole.setStatus("1"); - }else { - sysRole.setStatus("0"); - } - return toAjax(roleService.updateRole(sysRole)); - } - - /** - * 获取角色选择框列表 - */ - @RequiresPermissions("system:role:query") - @GetMapping("/optionselect") - public AjaxResult optionselect() - { - return success(roleService.selectRoleAll()); - } /** * 查询已分配用户角色列表 */ @@ -440,39 +292,7 @@ return getDataTable(list); } - /** - * 取消授权用户 - */ - @RequiresPermissions("system:role:edit") - @Log(title = "角色管理", businessType = BusinessType.GRANT) - @PutMapping("/authUser/cancel") - public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) - { - return toAjax(roleService.deleteAuthUser(userRole)); - } - - /** - * 批量取消授权用户 - */ - @RequiresPermissions("system:role:edit") - @Log(title = "角色管理", businessType = BusinessType.GRANT) - @PutMapping("/authUser/cancelAll") - public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) - { - return toAjax(roleService.deleteAuthUsers(roleId, userIds)); - } - - /** - * 批量选择用户授权 - */ - @RequiresPermissions("system:role:edit") - @Log(title = "角色管理", businessType = BusinessType.GRANT) - @PutMapping("/authUser/selectAll") - public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) - { - roleService.checkRoleDataScope(roleId); - return toAjax(roleService.insertAuthUsers(roleId, userIds)); - } + /** * 获取对应角色部门树列表 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 28d1593..20f1847 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 @@ -9,8 +9,13 @@ import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +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.other.api.domain.TUserSite; +import com.ruoyi.other.api.feignClient.RoleSiteClient; +import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.domain.dto.IndexDto; import com.ruoyi.system.domain.vo.UserRoleVO; import com.ruoyi.system.api.model.*; @@ -18,8 +23,12 @@ import com.ruoyi.system.domain.dto.AddCompanyUserDto; import com.ruoyi.system.domain.vo.CompanyUserVo; import com.ruoyi.system.domain.vo.TCompanyToUserVo; +import com.ruoyi.system.query.GetSysUserList; import com.ruoyi.system.service.*; +import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.BeanUtils; @@ -52,37 +61,51 @@ @RequestMapping("/user") @Api(tags = "用户信息") public class SysUserController extends BaseController { - @Autowired + @Resource private ISysUserService userService; - @Autowired + @Resource private ISysRoleService roleService; - @Autowired + @Resource private ISysDeptService deptService; - @Autowired + @Resource private ISysPostService postService; - @Autowired + @Resource private ISysPermissionService permissionService; - @Autowired + @Resource private ISysConfigService configService; - @Autowired + @Resource private ISysUserRoleService userRoleService; - @Autowired + @Resource private ISysUserRoleService sysUserRoleService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + + @Resource + private SiteClient siteClient; + + + + + /** * 获取用户列表 */ @GetMapping("/list") - @ApiOperation("管理员列表") - public AjaxResult list(String phonenumber, int pageNumber, int pageSize) { - PageInfo<SysUser> pageInfo = new PageInfo<>(pageNumber, pageSize); - PageInfo<SysUser> page = userService.getList(pageInfo, phonenumber); + @ApiOperation(value = "获取系统用户列表", tags = {"管理后台-系统用户管理", "管理后台-角色管理"}) + public AjaxResult list(GetSysUserList getSysUserList) { + PageInfo<SysUser> pageInfo = new PageInfo<>(getSysUserList.getPageCurr(), getSysUserList.getPageSize()); + PageInfo<SysUser> page = userService.getList(pageInfo, getSysUserList); return AjaxResult.success(page); } @@ -91,8 +114,9 @@ */ @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping("/add") - @ApiOperation("添加管理员") - public AjaxResult add(@Validated @RequestBody SysUser user) { + @ApiOperation(value = "添加系统用户", tags = {"管理后台-系统用户管理"}) + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 + public AjaxResult add(@RequestBody SysUser user) { user.setUserName(user.getPhonenumber()); if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ user.setNickName(user.getPhonenumber()); @@ -100,24 +124,59 @@ if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("手机号已开通账号"); } + if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { + return error("登录账号重复"); + } user.setCreateBy(SecurityUtils.getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setRoleType(1); - int i = userService.insertUser(user); + userService.insertUser(user); SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setRoleId(user.getRoleId()); sysUserRole.setUserId(user.getUserId()); - int i1 = userRoleService.insertSysUserRole(sysUserRole); - return AjaxResult.success(i1); + userRoleService.insertSysUserRole(sysUserRole); + List<Integer> siteIds = user.getSiteIds(); + List<TUserSite> userSites = new ArrayList<>(); + for (Integer siteId : siteIds) { + TUserSite userSite = new TUserSite(); + userSite.setUserId(user.getUserId().intValue()); + userSite.setSiteId(siteId); + userSites.add(userSite); + } + userSiteClient.addUserSite(userSites); + return AjaxResult.success(); } - - + + + @GetMapping("/verifyUserNameRepeat/{username}") + @ApiOperation(value = "校验账号是否重复", tags = {"管理后台-系统用户管理"}) + public AjaxResult verifyUserNameRepeat(@PathVariable String username){ + SysUser user = new SysUser(); + user.setUserName(username); + if (StringUtils.isNotEmpty(username) && !userService.checkUserNameUnique(user)) { + return error("账号不可重复"); + } + return success(); + } + + @GetMapping("/getRoleSiteName/{roleId}") + @ApiOperation(value = "获取角色对应的站点名称", tags = {"管理后台-系统用户管理"}) + public AjaxResult<List<String>> getRoleSiteName(@PathVariable Integer roleId){ + List<Integer> ids = roleSiteClient.getSiteIds(roleId.longValue()).getData(); + List<Site> data = siteClient.getSiteByIds(ids).getData(); + List<String> siteNames = data.stream().map(Site::getName).collect(Collectors.toList()); + return AjaxResult.success(siteNames); + } + + + + /** * 根据用户编号获取详细信息 */ - @ApiOperation("管理员详情") - @GetMapping(value = {"/", "/{userId}"}) - public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) { + @ApiOperation(value = "获取用户详情", tags = {"管理后台-系统用户管理"}) + @GetMapping("/getInfo/{userId}") + public AjaxResult getInfo(@PathVariable Long userId) { userService.checkUserDataScope(userId); AjaxResult ajax = AjaxResult.success(); List<SysRole> roles = roleService.selectRoleAll(); @@ -125,6 +184,11 @@ ajax.put("posts", postService.selectPostAll()); if (StringUtils.isNotNull(userId)) { SysUser sysUser = userService.selectUserById(userId); + List<Integer> siteIds = userSiteClient.getSiteIds(userId).getData(); + sysUser.setSiteIds(siteIds); + List<Site> data = siteClient.getSiteByIds(siteIds).getData(); + List<String> siteNames = data.stream().map(Site::getName).collect(Collectors.toList()); + sysUser.setSiteNames(siteNames); ajax.put(AjaxResult.DATA_TAG, sysUser); ajax.put("postIds", postService.selectPostListByUserId(userId)); ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); @@ -138,9 +202,9 @@ */ @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/update") - @ApiOperation("编辑管理员") + @ApiOperation(value = "编辑系统用户", tags = {"管理后台-系统用户管理"}) + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult edit(@Validated @RequestBody SysUser user) { - user.setUserName(user.getPhonenumber()); if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ user.setNickName(user.getPhonenumber()); @@ -162,6 +226,13 @@ if (StringUtils.isNotEmpty(user.getPhonenumber()) && (Objects.nonNull(sysUser) && !user.getUserId().equals(sysUser.getUserId()) )) { return error("手机号已开通账号"); } + sysUser = userService.getOne(Wrappers.lambdaQuery(SysUser.class) + .eq(SysUser::getUserName, user.getUserName()) + .eq(SysUser::getDelFlag,0) + .last("LIMIT 1")); + if (StringUtils.isNotEmpty(user.getUserName()) && (Objects.nonNull(sysUser) && !user.getUserId().equals(sysUser.getUserId()) )) { + return error("登录账号重复"); + } user.setUpdateBy(SecurityUtils.getUsername()); if (user.getPassword() != null && !"".equals(user.getPassword())) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); @@ -173,7 +244,20 @@ user.setPassword(null); user.setUpdateBy(SecurityUtils.getUsername()); user.setUpdateTime(new Date()); - return toAjax(userService.updateUser(user)); + userService.updateUser(user); + + //删除旧的站点数据后添加新的 + userSiteClient.delUserSite(user.getUserId()); + List<Integer> siteIds = user.getSiteIds(); + List<TUserSite> userSites = new ArrayList<>(); + for (Integer siteId : siteIds) { + TUserSite userSite = new TUserSite(); + userSite.setUserId(user.getUserId().intValue()); + userSite.setSiteId(siteId); + userSites.add(userSite); + } + userSiteClient.addUserSite(userSites); + return success(); } @@ -182,7 +266,7 @@ */ @Log(title = "用户管理", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") - @ApiOperation("删除管理员") + @ApiOperation(value = "删除系统用户", tags = {"管理后台-系统用户管理"}) public AjaxResult remove(@PathVariable Long[] userIds) { if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) { return error("当前用户不能删除"); @@ -190,98 +274,25 @@ return toAjax(userService.deleteUserByIds(userIds)); } - - @Log(title = "账号管理", businessType = BusinessType.INSERT) - @PostMapping("/addCompanyUser") - @ApiOperation("账号管理--添加账号") - @Transactional(propagation = Propagation.REQUIRES_NEW) - public AjaxResult addCompanyUser(@Validated @RequestBody AddCompanyUserDto dto) { - SysUser user = dto.getSysUser(); - if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { - return error("手机号已存在,请重新输入"); - } - user.setCreateBy(SecurityUtils.getUsername()); - user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); - user.setRoleType(3); - user.setUserName(user.getPhonenumber()); - if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ - user.setNickName(user.getPhonenumber()); - } - int i = userService.insertUser(user); - if (i > 0) { - // 添加role - SysUserRole sysUserRole = new SysUserRole(); - sysUserRole.setRoleId(dto.getRoleId()); - sysUserRole.setUserId(dto.getSysUser().getUserId()); - userRoleService.insertSysUserRole(sysUserRole); - } - return AjaxResult.success(); - } - - - @Log(title = "账号管理", businessType = BusinessType.INSERT) - @PostMapping("/companyUserInfo") - @ApiOperation("账号管理--账号详情") - @Transactional(propagation = Propagation.REQUIRES_NEW) - public AjaxResult companyUserInfo(@RequestParam Long userId) { - SysUser sysUser = userService.selectUserById(userId); - SysUserRole sysUserRole = userRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); - CompanyUserVo companyUserVo = new CompanyUserVo(); - companyUserVo.setRoleId(sysUserRole.getRoleId()); - companyUserVo.setSysUser(sysUser); - return AjaxResult.success(companyUserVo); - } - - @Log(title = "账号管理", businessType = BusinessType.INSERT) - @PostMapping("/updateCompanyUser") - @ApiOperation("账号管理--修改账号") - @Transactional(propagation = Propagation.REQUIRES_NEW) - public AjaxResult updateCompanyUser(@Validated @RequestBody AddCompanyUserDto dto) { - SysUser user = dto.getSysUser(); - - if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { - return error("手机号已存在,请重新输入"); - } - user.setUserName(user.getPhonenumber()); - if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ - user.setNickName(user.getPhonenumber()); - } - if (user.getPassword() != null && !"".equals(user.getPassword())) { - user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); - } - user.setRoleType(1); - user.setUpdateBy(SecurityUtils.getUsername()); - user.setUpdateTime(new Date()); - int i = userService.updateUser(user); -// if (i > 0) { - // 原来的role - SysUserRole one = userRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, dto.getSysUser().getUserId())); - one.setRoleId(dto.getRoleId()); - //更新新的role - userRoleService.updateSysUserRole(one); -// } - return AjaxResult.success(); - } + @PostMapping("/shopUserStart") - @ApiOperation("账号管理--停用/启用") - public AjaxResult shopUserStart(Long userId) { + @ApiOperation(value = "账号管理--禁用/启用", tags = {"管理后台-系统用户管理"}) + public AjaxResult shopUserStart(@RequestParam("userId") Long userId, @RequestParam("remark") String remark) { if (userId == null) { return AjaxResult.error("userId不能为空"); } SysUser sysUser = userService.selectUserById(userId); if (sysUser.getStatus().equals("0")) { sysUser.setStatus("1"); + sysUser.setRemark(remark); } else { sysUser.setStatus("0"); + sysUser.setRemark(""); } return toAjax(userService.updateUser(sysUser)); } - - - @Autowired - private ISysUserRoleService iSysUserRoleService; @PostMapping("/getUserList") @@ -356,7 +367,7 @@ } @PostMapping("/updateSysUser") - @Transactional(propagation = Propagation.REQUIRES_NEW) + @Transactional(rollbackFor = Exception.class) public R<Boolean> updateSysUser(@RequestBody SysUser sysUser) { try { sysUser.setUpdateBy(SecurityUtils.getUsername()); @@ -454,32 +465,6 @@ } - @Log(title = "用户管理", businessType = BusinessType.EXPORT) - @RequiresPermissions("system:user:export") - @PostMapping("/export") - public void export(HttpServletResponse response, SysUser user) { - List<SysUser> list = userService.selectUserList(user); - ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); - util.exportExcel(response, list, "用户数据"); - } - - @PostMapping("/importTemplate") - public void importTemplate(HttpServletResponse response) throws IOException { - ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); - util.importTemplateExcel(response, "用户数据"); - } - - @Log(title = "用户管理", businessType = BusinessType.IMPORT) - @RequiresPermissions("system:user:import") - @PostMapping("/importData") - public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { - ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); - List<SysUser> userList = util.importExcel(file.getInputStream()); - String operName = SecurityUtils.getUsername(); - String message = userService.importUser(userList, updateSupport, operName); - return success(message); - } - /** * 获取当前用户信息 */ @@ -505,7 +490,6 @@ /** * 注册用户信息 */ - @InnerAuth @PostMapping("/register") public R<Boolean> register(@RequestBody SysUser sysUser) { String username = sysUser.getUserName(); @@ -544,6 +528,7 @@ @RequiresPermissions("system:user:edit") @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/resetPwd") + @ApiOperation(value = "重置密码", tags = {"管理后台-系统用户管理"}) public AjaxResult resetPwd(@RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); @@ -675,19 +660,6 @@ .last("LIMIT 1")); return R.ok(user); } - - /** - * 根据账号获取用户数据 - * @param account - * @return - */ - @PostMapping("/queryUserByAccount") - public R<SysUser> queryUserByAccount(@RequestBody String account){ - SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class) - .eq(SysUser::getAccount, account) - .eq(SysUser::getDelFlag, "0")); - return R.ok(user); - } /** @@ -711,7 +683,7 @@ */ @ResponseBody @PostMapping("/addSysUser") - @Transactional(propagation = Propagation.REQUIRES_NEW) + @Transactional(rollbackFor = Exception.class) public R addSysUser(@RequestBody SysUser user){ user.setUserName(user.getPhonenumber()); if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){ @@ -720,7 +692,7 @@ if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { throw new RuntimeException("手机号已开通账号"); } - if (StringUtils.isNotEmpty(user.getAccount()) && !userService.checkAccountUnique(user)) { + if (StringUtils.isNotEmpty(user.getUserName()) && !userService.checkUserNameUnique(user)) { throw new RuntimeException("登录账号已存在"); } user.setCreateBy(SecurityUtils.getUsername()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java new file mode 100644 index 0000000..df7119c --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLoginLog.java @@ -0,0 +1,91 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @author zhibing.pu + * @Date 2024/8/12 15:38 + */ +@Data +@TableName("sys_login_log") +@ApiModel +public class SysLoginLog { + /** + * 主键 + */ + @ApiModelProperty(value = "数据id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 用户id + */ + @TableField("user_id") + private Integer userId; + /** + * 登录账号 + */ + @TableField("username") + @ApiModelProperty(value = "用户账号") + private String username; + /** + * 登录IP地址 + */ + @TableField("ip_address") + @ApiModelProperty(value = "登录IP地址") + private String ipAddress; + /** + * 登录地址 + */ + @TableField("address") + @ApiModelProperty(value = "登录地址") + private String address; + /** + * 浏览器类型 + */ + @TableField("browser_type") + @ApiModelProperty(value = "浏览器类型") + private String browserType; + /** + * 操作系统 + */ + @TableField("operating_system") + @ApiModelProperty(value = "操作系统") + private String operatingSystem; + /** + * 登录时间 + */ + @TableField("login_time") + @ApiModelProperty(value = "登录时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime loginTime; + /** + * 登录状态(1=成功,2=失败) + */ + @TableField("login_status") + private Integer loginStatus; + /** + * 提示消息 + */ + @TableField("message") + private String message; + /** + * 添加时间 + */ + @TableField("create_time") + private LocalDateTime createTime; + /** + * 删除状态(0=否,1=是) + */ + @TableField("del_flag") + private Integer delFlag; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java index 3ed8f21..ce244bc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java @@ -9,19 +9,14 @@ @Data public class RoleAddDto { - @ApiModelProperty("角色名称") + @ApiModelProperty(value = "角色名称", required = true) @NotBlank(message = "角色名称不能为空") private String roleName; - @ApiModelProperty("车辆数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限") - private Integer carDataAuth; - @ApiModelProperty("车务数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限") - private Integer carTrainOperAuth; - @ApiModelProperty("合同数据权限:1=所有数据 2=仅自己负责的合同 3=无数据权限") - private Integer contractDataAuth; - @ApiModelProperty("公司id") - @NotNull(message = "公司id不能为空") - private Integer companyId; - @ApiModelProperty("菜单id") + @ApiModelProperty(value = "站点id", required = true) + private List<Integer> siteIds; + @ApiModelProperty(value = "备注") + private String remark; + @ApiModelProperty(value = "菜单id", required = true) @NotNull(message = "菜单id不能为空") private List<Long> menuIds; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java index c0374c4..3515054 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java @@ -10,15 +10,13 @@ public class RoleUpdateDto { @ApiModelProperty("角色id") private Long roleId; - @ApiModelProperty("角色名称") + @ApiModelProperty(value = "角色名称",required = true) @NotBlank(message = "角色名称不能为空") private String roleName; - @ApiModelProperty("车辆数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限") - private Integer carDataAuth; - @ApiModelProperty("车务数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限") - private Integer carTrainOperAuth; - @ApiModelProperty("合同数据权限:1=所有数据 2=仅自己负责的合同 3=无数据权限") - private Integer contractDataAuth; - @ApiModelProperty("菜单id") + @ApiModelProperty(value = "站点id", required = true) + private List<Integer> siteIds; + @ApiModelProperty(value = "备注") + private String remark; + @ApiModelProperty(value = "菜单id", required = true) private List<Long> menuIds; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RoleInfoVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RoleInfoVo.java index cfd6915..a935fd0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RoleInfoVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RoleInfoVo.java @@ -13,13 +13,13 @@ private String roleName; - @ApiModelProperty("车辆数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限") - private Integer carDataAuth; - @ApiModelProperty("车务数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限") - private Integer carTrainOperAuth; - @ApiModelProperty("合同数据权限:1=所有数据 2=仅自己负责的合同 3=无数据权限") - private Integer contractDataAuth; - @ApiModelProperty("菜单id") private List<Long> menus; + + @ApiModelProperty(value = "备注") + private String remark; + @ApiModelProperty("站点id") + private List<Integer> siteIds; + @ApiModelProperty(value = "站点名称") + private List<String> siteNames; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java new file mode 100644 index 0000000..e3be84b --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLoginLogMapper.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.system.domain.SysLoginLog; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/12 15:44 + */ +public interface SysLoginLogMapper extends BaseMapper<SysLoginLog> { + + /** + * 获取列表数据 + * @param pageInfo + * @param name + * @return + */ + List<SysLoginLog> pageList(PageInfo<SysLoginLog> pageInfo, @Param("name") String name); +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java deleted file mode 100644 index 19671f3..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ruoyi.system.mapper; - -import java.util.List; -import com.ruoyi.system.api.domain.SysLogininfor; - -/** - * 系统访问日志情况信息 数据层 - * - * @author ruoyi - */ -public interface SysLogininforMapper -{ - /** - * 新增系统登录日志 - * - * @param logininfor 访问日志对象 - */ - public int insertLogininfor(SysLogininfor logininfor); - - /** - * 查询系统登录日志集合 - * - * @param logininfor 访问日志对象 - * @return 登录记录集合 - */ - public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor); - - /** - * 批量删除系统登录日志 - * - * @param infoIds 需要删除的登录日志ID - * @return 结果 - */ - public int deleteLogininforByIds(Long[] infoIds); - - /** - * 清空系统登录日志 - * - * @return 结果 - */ - public int cleanLogininfor(); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 17dedc0..74b10ed 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.system.query.GetSysUserList; import org.apache.ibatis.annotations.Param; import com.ruoyi.system.api.domain.SysUser; @@ -121,13 +122,6 @@ */ public SysUser checkPhoneUnique(String phonenumber); - /** - * 校验登录账号是否唯一 - * @param account 登录账号 - * @return - */ - SysUser checkAccountUnique(String account); - /** @@ -138,7 +132,7 @@ */ public SysUser checkEmailUnique(String email); - PageInfo<SysUser> getList(@Param("pageInfo") PageInfo<SysUser> pageInfo, @Param("phonenumber") String phonenumber); + List<SysUser> getList(@Param("pageInfo") PageInfo<SysUser> pageInfo, @Param("req") GetSysUserList getSysUserList); PageInfo<SysUser> getAllList(@Param("pageInfo") PageInfo<SysUser> pageInfo, @Param("ids") List<Integer> collect); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/GetSysUserList.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/GetSysUserList.java new file mode 100644 index 0000000..05c7100 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/GetSysUserList.java @@ -0,0 +1,25 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/10 14:10 + */ +@Data +@ApiModel +public class GetSysUserList extends BasePage { + @ApiModelProperty(value = "人员搜索") + private String search; + @ApiModelProperty(value = "充电站id") + private Integer siteId; + @ApiModelProperty(value = "角色id") + private List<Integer> roleIds; + @ApiModelProperty(value = "账户状态(0=正常,1=禁用)") + private Integer status; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java index 84d75e4..fcb7a5b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java @@ -1,16 +1,27 @@ package com.ruoyi.system.query; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.time.LocalDateTime; + @Data -@ApiModel(value = "当前车辆查询操作日志") +@ApiModel() public class SysOperLogQuery extends BasePage { - - - @ApiModelProperty(value = "车辆id") - private Integer carId; + @ApiModelProperty(value = "操作人员") + private String operName; + @ApiModelProperty(value = "操作标题") + private String title; + @ApiModelProperty(value = "状态(0=正常,1=异常)") + private Integer status; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "操作开始时间", notes = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "操作结束时间", notes = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java new file mode 100644 index 0000000..e99400e --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLoginLogService.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +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.system.domain.SysLoginLog; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * @author zhibing.pu + * @Date 2024/8/12 15:47 + */ +public interface ISysLoginLogService extends IService<SysLoginLog> { + + + /** + * 获取列表数据 + * @param name + * @param basePage + * @return + */ + PageInfo<SysLoginLog> pageList(String name, BasePage basePage); + + + /** + * 添加登录日志 + * @param loginLog + * @return + */ + AjaxResult addLoginLog(SysLoginLog loginLog); +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java deleted file mode 100644 index 509cc54..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ruoyi.system.service; - -import java.util.List; -import com.ruoyi.system.api.domain.SysLogininfor; - -/** - * 系统访问日志情况信息 服务层 - * - * @author ruoyi - */ -public interface ISysLogininforService -{ - /** - * 新增系统登录日志 - * - * @param logininfor 访问日志对象 - */ - public int insertLogininfor(SysLogininfor logininfor); - - /** - * 查询系统登录日志集合 - * - * @param logininfor 访问日志对象 - * @return 登录记录集合 - */ - public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor); - - /** - * 批量删除系统登录日志 - * - * @param infoIds 需要删除的登录日志ID - * @return 结果 - */ - public int deleteLogininforByIds(Long[] infoIds); - - /** - * 清空系统登录日志 - */ - public void cleanLogininfor(); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java index 46a31f7..66bbc1d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java @@ -7,45 +7,44 @@ /** * 操作日志 服务层 - * + * * @author ruoyi */ -public interface ISysOperLogService extends IService<SysOperLog> -{ - /** - * 新增操作日志 - * - * @param operLog 操作日志对象 - * @return 结果 - */ - public int insertOperlog(SysOperLog operLog); - - /** - * 查询系统操作日志集合 - * - * @param operLog 操作日志对象 - * @return 操作日志集合 - */ - public List<SysOperLog> selectOperLogList(SysOperLog operLog); - - /** - * 批量删除系统操作日志 - * - * @param operIds 需要删除的操作日志ID - * @return 结果 - */ - public int deleteOperLogByIds(Long[] operIds); - - /** - * 查询操作日志详细 - * - * @param operId 操作ID - * @return 操作日志对象 - */ - public SysOperLog selectOperLogById(Long operId); - - /** - * 清空操作日志 - */ - public void cleanOperLog(); +public interface ISysOperLogService extends IService<SysOperLog> { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + * @return 结果 + */ + public int insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + public List<SysOperLog> selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index d4f7f95..c215705 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.query.GetSysUserList; /** * 用户 业务层 @@ -85,8 +86,6 @@ * @return 结果 */ public boolean checkPhoneUnique(SysUser user); - - boolean checkAccountUnique(SysUser user); /** * 校验email是否唯一 @@ -210,7 +209,7 @@ */ public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName); - PageInfo<SysUser> getList(PageInfo<SysUser> pageInfo, String phonenumber); + PageInfo<SysUser> getList(PageInfo<SysUser> pageInfo, GetSysUserList getSysUserList); PageInfo<SysUser> getAllList(PageInfo<SysUser> pageInfo, List<Integer> collect); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java new file mode 100644 index 0000000..69d7b95 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLoginLogServiceImpl.java @@ -0,0 +1,66 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.system.api.domain.SysUser; +import com.ruoyi.system.domain.SysLoginLog; +import com.ruoyi.system.mapper.SysLoginLogMapper; +import com.ruoyi.system.service.ISysLoginLogService; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/12 15:47 + */ +@Service +public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLoginLog> implements ISysLoginLogService { + + @Resource + private ISysUserService sysUserService; + + + + + + /** + * 获取列表数据 + * @param name + * @param basePage + * @return + */ + @Override + public PageInfo<SysLoginLog> pageList(String name, BasePage basePage) { + PageInfo<SysLoginLog> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); + List<SysLoginLog> list = this.baseMapper.pageList(pageInfo, name); + return pageInfo.setRecords(list); + } + + + /** + * 添加登录日志 + * @param loginLog + * @return + */ + @Override + public AjaxResult addLoginLog(SysLoginLog loginLog) { + String username = loginLog.getUsername(); + SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username).eq(SysUser::getDelFlag, 0)); + if(null == sysUser){ + return AjaxResult.error("用户账号无效"); + } + loginLog.setUserId(sysUser.getUserId().intValue()); + loginLog.setCreateTime(LocalDateTime.now()); + loginLog.setDelFlag(0); + this.save(loginLog); + return AjaxResult.success(); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java deleted file mode 100644 index 525d9d7..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.ruoyi.system.service.impl; - -import java.util.List; - -import com.ruoyi.system.mapper.SysLogininforMapper; -import com.ruoyi.system.service.ISysLogininforService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.ruoyi.system.api.domain.SysLogininfor; - -/** - * 系统访问日志情况信息 服务层处理 - * - * @author ruoyi - */ -@Service -public class SysLogininforServiceImpl implements ISysLogininforService -{ - - @Autowired - private SysLogininforMapper logininforMapper; - - /** - * 新增系统登录日志 - * - * @param logininfor 访问日志对象 - */ - @Override - public int insertLogininfor(SysLogininfor logininfor) - { - return logininforMapper.insertLogininfor(logininfor); - } - - /** - * 查询系统登录日志集合 - * - * @param logininfor 访问日志对象 - * @return 登录记录集合 - */ - @Override - public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor) - { - return logininforMapper.selectLogininforList(logininfor); - } - - /** - * 批量删除系统登录日志 - * - * @param infoIds 需要删除的登录日志ID - * @return 结果 - */ - @Override - public int deleteLogininforByIds(Long[] infoIds) - { - return logininforMapper.deleteLogininforByIds(infoIds); - } - - /** - * 清空系统登录日志 - */ - @Override - public void cleanLogininfor() - { - logininforMapper.cleanLogininfor(); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index 7ca5d1b..5174654 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -15,114 +15,108 @@ /** * 操作日志 服务层处理 - * + * * @author ruoyi */ @Service -public class SysOperLogServiceImpl implements ISysOperLogService -{ - @Autowired - private SysOperLogMapper operLogMapper; - - /** - * 新增操作日志 - * - * @param operLog 操作日志对象 - * @return 结果 - */ - @Override - public int insertOperlog(SysOperLog operLog) - { - return operLogMapper.insertOperlog(operLog); - } - - /** - * 查询系统操作日志集合 - * - * @param operLog 操作日志对象 - * @return 操作日志集合 - */ - @Override - public List<SysOperLog> selectOperLogList(SysOperLog operLog) - { - return operLogMapper.selectOperLogList(operLog); - } - - /** - * 批量删除系统操作日志 - * - * @param operIds 需要删除的操作日志ID - * @return 结果 - */ - @Override - public int deleteOperLogByIds(Long[] operIds) - { - return operLogMapper.deleteOperLogByIds(operIds); - } - - /** - * 查询操作日志详细 - * - * @param operId 操作ID - * @return 操作日志对象 - */ - @Override - public SysOperLog selectOperLogById(Long operId) - { - return operLogMapper.selectOperLogById(operId); - } - - /** - * 清空操作日志 - */ - @Override - public void cleanOperLog() - { - operLogMapper.cleanOperLog(); - } - - @Override - public boolean saveBatch(Collection<SysOperLog> entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdateBatch(Collection<SysOperLog> entityList, int batchSize) { - return false; - } - - @Override - public boolean updateBatchById(Collection<SysOperLog> entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdate(SysOperLog entity) { - return false; - } - - @Override - public SysOperLog getOne(Wrapper<SysOperLog> queryWrapper, boolean throwEx) { - return null; - } - - @Override - public Map<String, Object> getMap(Wrapper<SysOperLog> queryWrapper) { - return null; - } - - @Override - public <V> V getObj(Wrapper<SysOperLog> queryWrapper, Function<? super Object, V> mapper) { - return null; - } - - @Override - public BaseMapper<SysOperLog> getBaseMapper() { - return null; - } - - @Override - public Class<SysOperLog> getEntityClass() { - return null; - } +public class SysOperLogServiceImpl implements ISysOperLogService { + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + * @return 结果 + */ + @Override + public int insertOperlog(SysOperLog operLog) { + return operLogMapper.insertOperlog(operLog); + } + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + @Override + public List<SysOperLog> selectOperLogList(SysOperLog operLog) { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + @Override + public int deleteOperLogByIds(Long[] operIds) { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + @Override + public SysOperLog selectOperLogById(Long operId) { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 清空操作日志 + */ + @Override + public void cleanOperLog() { + operLogMapper.cleanOperLog(); + } + + @Override + public boolean saveBatch(Collection<SysOperLog> entityList, int batchSize) { + return false; + } + + @Override + public boolean saveOrUpdateBatch(Collection<SysOperLog> entityList, int batchSize) { + return false; + } + + @Override + public boolean updateBatchById(Collection<SysOperLog> entityList, int batchSize) { + return false; + } + + @Override + public boolean saveOrUpdate(SysOperLog entity) { + return false; + } + + @Override + public SysOperLog getOne(Wrapper<SysOperLog> queryWrapper, boolean throwEx) { + return null; + } + + @Override + public Map<String, Object> getMap(Wrapper<SysOperLog> queryWrapper) { + return null; + } + + @Override + public <V> V getObj(Wrapper<SysOperLog> queryWrapper, Function<? super Object, V> mapper) { + return null; + } + + @Override + public BaseMapper<SysOperLog> getBaseMapper() { + return null; + } + + @Override + public Class<SysOperLog> getEntityClass() { + return null; + } } 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 fea5840..e5cc275 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 @@ -373,8 +373,7 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public int deleteRoleByIds(Long[] roleIds) - { + public int deleteRoleByIds(Long[] roleIds) { for (Long roleId : roleIds) { checkRoleAllowed(new SysRole(roleId)); 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 5bf158f..6b7e40e 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 @@ -1,16 +1,26 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; +import javax.annotation.Resource; import javax.validation.Validator; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.other.api.feignClient.RoleSiteClient; +import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.query.GetSysUserList; import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysUserRoleService; import com.ruoyi.system.service.ISysUserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,26 +53,41 @@ { private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); - @Autowired + @Resource private SysUserMapper userMapper; - @Autowired + @Resource private SysRoleMapper roleMapper; - @Autowired + @Resource private SysPostMapper postMapper; - @Autowired + @Resource private SysUserRoleMapper userRoleMapper; - @Autowired + @Resource private SysUserPostMapper userPostMapper; - @Autowired + @Resource private ISysConfigService configService; - @Autowired + @Resource protected Validator validator; + + @Resource + private ISysUserRoleService sysUserRoleService; + + @Resource + private RoleSiteClient roleSiteClient; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private SiteClient siteClient; + + + /** * 根据条件分页查询用户列表 @@ -197,16 +222,6 @@ return UserConstants.UNIQUE; } - - @Override - public boolean checkAccountUnique(SysUser user) { - SysUser info = userMapper.checkAccountUnique(user.getAccount()); - if (StringUtils.isNotNull(info) ) - { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } /** * 校验email是否唯一 @@ -557,8 +572,26 @@ } @Override - public PageInfo<SysUser> getList(PageInfo<SysUser> pageInfo, String phonenumber) { - return this.baseMapper.getList(pageInfo,phonenumber); + public PageInfo<SysUser> getList(PageInfo<SysUser> pageInfo, GetSysUserList getSysUserList) { + List<SysUser> list = this.baseMapper.getList(pageInfo, getSysUserList); + for (SysUser sysUser : list) { + List<SysUserRole> list1 = sysUserRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, sysUser.getUserId())); + List<Integer> data1 = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + for (SysUserRole sysUserRole : list1) { + List<Integer> data = roleSiteClient.getSiteIds(sysUserRole.getRoleId()).getData(); + data1.addAll(data); + } + Set<Integer> siteIds = new HashSet<>(data1); + List<Site> data = siteClient.getSiteByIds(siteIds.stream().collect(Collectors.toList())).getData(); + List<String> siteNames = data.stream().map(Site::getName).collect(Collectors.toList()); + sysUser.setSiteNames(siteNames); + + Set<Long> collect = list1.stream().map(SysUserRole::getRoleId).collect(Collectors.toSet()); + List<SysRole> sysRoles = roleMapper.selectBatchIds(collect); + List<String> roleNames = sysRoles.stream().map(SysRole::getRoleName).collect(Collectors.toList()); + sysUser.setRoleNames(roleNames); + } + return pageInfo.setRecords(list); } @Override diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml new file mode 100644 index 0000000..87f8136 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLoginLogMapper.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.SysLoginLogMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.SysLoginLog"> + <id column="id" property="id" /> + <result column="user_id" property="userId" /> + <result column="user_name" property="username" /> + <result column="ip_address" property="ipAddress"/> + <result column="address" property="address"/> + <result column="browser_type" property="browserType"/> + <result column="operating_system" property="operatingSystem"/> + <result column="login_time" property="loginTime"/> + <result column="login_status" property="loginStatus"/> + <result column="message" property="message"/> + <result column="create_time" property="createTime"/> + <result column="del_flag" property="delFlag"/> + </resultMap> + + + + <select id="pageList" resultMap="BaseResultMap"> + select + a.*, + b.user_name + from sys_login_log a + left join sys_user b on (a.user_id = b.user_id) + where a.del_flag = 0 + <if test="null != name and '' != name"> + and b.user_name like CONCAT('%', #{name}, '%') + </if> + order by a.create_time desc + </select> +</mapper> \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml deleted file mode 100644 index 8c5a10e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml +++ /dev/null @@ -1,54 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.ruoyi.system.mapper.SysLogininforMapper"> - - <resultMap type="com.ruoyi.system.api.domain.SysLogininfor" id="SysLogininforResult"> - <id property="infoId" column="info_id" /> - <result property="userName" column="user_name" /> - <result property="status" column="status" /> - <result property="ipaddr" column="ipaddr" /> - <result property="msg" column="msg" /> - <result property="accessTime" column="access_time" /> - </resultMap> - - <insert id="insertLogininfor" parameterType="com.ruoyi.system.api.domain.SysLogininfor"> - insert into sys_logininfor (user_name, status, ipaddr, msg, access_time) - values (#{userName}, #{status}, #{ipaddr}, #{msg}, sysdate()) - </insert> - - <select id="selectLogininforList" parameterType="com.ruoyi.system.api.domain.SysLogininfor" resultMap="SysLogininforResult"> - select info_id, user_name, ipaddr, status, msg, access_time from sys_logininfor - <where> - <if test="ipaddr != null and ipaddr != ''"> - AND ipaddr like concat('%', #{ipaddr}, '%') - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - <if test="userName != null and userName != ''"> - AND user_name like concat('%', #{userName}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - AND access_time >= #{params.beginTime} - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - AND access_time <= #{params.endTime} - </if> - </where> - order by info_id desc - </select> - - <delete id="deleteLogininforByIds" parameterType="Long"> - delete from sys_logininfor where info_id in - <foreach collection="array" item="infoId" open="(" separator="," close=")"> - #{infoId} - </foreach> - </delete> - - <update id="cleanLogininfor"> - truncate table sys_logininfor - </update> - -</mapper> \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 78f62da..2b11d94 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -13,7 +13,6 @@ <result property="phonenumber" column="phonenumber" /> <result property="sex" column="sex" /> <result property="avatar" column="avatar" /> - <result property="account" column="account" /> <result property="password" column="password" /> <result property="status" column="status" /> <result property="delFlag" column="del_flag" /> @@ -121,20 +120,29 @@ select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1 </select> - - <select id="checkAccountUnique" resultMap="SysUserResult"> - select user_id, account from sys_user where account = #{account} and del_flag = '0' limit 1 - </select> - <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult"> select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1 </select> <select id="getList" resultType="com.ruoyi.system.api.domain.SysUser"> select *,nick_name nickName,login_date loginDate,create_time createTime,user_id userId from sys_user where 1=1 - <if test="phonenumber !=null and phonenumber !=''"> - and phonenumber like concat("%", #{phonenumber},"%") + <if test="req.search !=null and req.search !=''"> + and (phonenumber like concat("%", #{phonenumber},"%") or nick_name like concat("%", #{phonenumber},"%")) </if> - and del_flag = '0' and roleType =1 + <if test="null != req.siteId"> + and user_id in (select user_id from t_user_site where site_id = #{req.siteId}) + and user_id in (select user_id from sys_user_role where role_id in (select role_id from t_role_site where site_id = #{req.siteId})) + </if> + <if test="null != req.roleIds and req.roleIds.size() > 0"> + and user_id in (select user_id from sys_user_role where role_id in + <foreach collection="req.roleIds" item="item" index="index" open="(" separator="," close=")"> + #{item} + </foreach> + ) + </if> + <if test="null != req.status"> + and status = #{req.status} + </if> + and del_flag = '0' and roleType =1 order by create_time desc </select> <select id="getAllList" resultType="com.ruoyi.system.api.domain.SysUser"> diff --git a/ruoyi-service/ruoyi-account/pom.xml b/ruoyi-service/ruoyi-account/pom.xml index 957885b..a247e97 100644 --- a/ruoyi-service/ruoyi-account/pom.xml +++ b/ruoyi-service/ruoyi-account/pom.xml @@ -15,6 +15,12 @@ </description> <dependencies> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-order</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> <!-- SpringCloud Alibaba Nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java index ffc595e..b7e95ae 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.ExchangeRecordVO; @@ -71,8 +72,27 @@ * @return */ @PostMapping("/getExchangeRecordByCouponId") - public R<PageInfo<ExchangeRecordVO>> getUseCountByCouponId(ExchangeRecordGoodsQuery couponId){ + public R<PageInfo<ExchangeRecordVO>> getExchangeRecordByCouponId(@RequestBody ExchangeRecordGoodsQuery couponId){ return R.ok(tAppCouponService.pagelist(couponId)); } + + /** + * 后台远程调用 给用户发放优惠券 + */ + @PostMapping("/grantCoupon") + public R getExchangeRecordByCouponId(@RequestBody GrantCouponDto dto){ + List<TAppCoupon> res = new ArrayList<>(); + for (String s : dto.getUserIds().split(",")) { + TAppCoupon tAppCoupon = new TAppCoupon(); + tAppCoupon.setAppUserId(Long.valueOf(s)); + tAppCoupon.setCouponId(dto.getCouponId()); + tAppCoupon.setEndTime(dto.getEndTime()); + tAppCoupon.setWaysToObtain(dto.getWaysToObtain()); + tAppCoupon.setStatus(1); + res.add(tAppCoupon); + } + tAppCouponService.saveBatch(res); + return R.ok(); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java index 063741b..7a4479f 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java @@ -1,8 +1,17 @@ package com.ruoyi.account.controller; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.account.api.model.TAppUserCar; +import com.ruoyi.account.service.TAppUserCarService; +import com.ruoyi.common.core.domain.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import java.util.List; /** * <p> @@ -16,5 +25,18 @@ @RequestMapping("/t-app-user-car") public class TAppUserCarController { + @Autowired + private TAppUserCarService appUserCarService; + + /** + * 根据用户车辆id查询车辆信息 + * @param carIds + * @return + */ + @PostMapping(value = "/t-app-user-car/getCarByIds") + public R<List<TAppUserCar>> getCarByIds(@RequestBody List<Integer> carIds){ + return R.ok(appUserCarService.list(Wrappers.lambdaQuery(TAppUserCar.class).in(TAppUserCar::getId,carIds))); + } + } 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 5605d42..7c51221 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 @@ -1,7 +1,9 @@ package com.ruoyi.account.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.dto.*; import com.ruoyi.account.api.model.*; @@ -64,6 +66,13 @@ @Resource private ExchangeOrderClient exchangeOrderClient; + + @ApiOperation(value = "管理后台-根据手机号查询用户ids", tags = {"管理后台-活动费用统计"}) + @PostMapping(value = "/user/getUserIdsByPhone") + public R<List<Long>> getUserIdsByPhone(@RequestParam("phone") String phone) { + + return R.ok(appUserService.list(new QueryWrapper<TAppUser>().like("phone",phone)).stream().map(TAppUser::getId).collect(Collectors.toList())); + } @Resource private GiveVipUtil giveVipUtil; @ApiOperation(value = "单位管理列表", tags = {"用户管理-单位管理"}) @@ -138,6 +147,48 @@ return R.ok(page); } + @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券发放-选择人员") + @PostMapping("/choiceUser") + public R<Page<TAppUser>> choiceUser(@RequestBody ChoiceUserListQueryDto userListQueryDto) { + List<Long> userIds = new ArrayList<>(); + //如果要筛选标签。用标签获取useids + if (userListQueryDto.getUserTagId() != null){ + String[] split = userListQueryDto.getUserTagId().split(","); + userIds = appUserTagService.lambdaQuery().in(TAppUserTag::getUserTagId, Arrays.asList(split)).list().stream().map(TAppUserTag::getAppUserId).collect(Collectors.toList()); + } + //列表查询 + Page<TAppUser> page = appUserService.lambdaQuery() + .like(userListQueryDto.getUserPhone() != null && !"".equals(userListQueryDto.getUserPhone()), TAppUser::getPhone, userListQueryDto.getUserPhone()) + .eq(userListQueryDto.getCityCode() != null && !"".equals(userListQueryDto.getCityCode()), TAppUser::getCityCode, userListQueryDto.getCityCode()) + .eq(userListQueryDto.getProvinceCode() != null && !"".equals(userListQueryDto.getProvinceCode()), TAppUser::getProvinceCode, userListQueryDto.getProvinceCode()) + .in(!userIds.isEmpty(),TAppUser::getId,userIds) + .eq(TAppUser::getStatus,1) + .page(Page.of(userListQueryDto.getPageCurr(), userListQueryDto.getPageSize())); + if (page.getRecords().isEmpty()){ + return R.ok(page); + } + List<Integer> vipIds = new ArrayList<>(); + vipIds = page.getRecords().stream().map(TAppUser::getVipId).collect(Collectors.toList()); + //获取会员map + R<Map<Integer, String>> vipMap = otherClient.getVipMap(vipIds); + //循环处理 + for (TAppUser appUser : page.getRecords()) { + //拿到最新的tagId + TAppUserTag one = appUserTagService.lambdaQuery().eq(TAppUserTag::getAppUserId, appUser.getId()).orderByDesc(TAppUserTag::getCreateTime).last("limit 1").one(); + //设置最新的tagName + R<TUserTag> byIdTag = otherClient.getByIdTag(one.getUserTagId()); + if (byIdTag.getData()!=null) { + appUser.setTagName(byIdTag.getData().getName()); + } + //匹配vipMap的值 + appUser.setVipName(vipMap.getData().get(appUser.getVipId())); + //累计充电次数 + R<Long> useOrderCount = chargingOrderClient.useOrderCount(appUser.getId()); + appUser.setOrderCount(useOrderCount.getData()); + + } + return R.ok(page); + } @ApiOperation(value = "用户添加编辑", tags = {"用户管理-用户列表"}) @@ -275,5 +326,27 @@ return R.ok(); } + + /** + * 根据用户id查询用户信息 + * @param appUserIds 用户id + * @return + */ + @PostMapping(value = "/user/getUserByIds") + public R<List<TAppUser>> getUserByIds(@RequestBody List<Long> appUserIds){ + return R.ok(appUserService.list(Wrappers.<TAppUser>lambdaQuery().in(TAppUser::getId,appUserIds))); + } + + + /** + * 根据用户id获取用户 + * @param id + * @return + */ + @GetMapping(value = "/user/getUserById/{id}") + public R<TAppUser> getUserById(@PathVariable Long id){ + TAppUser appUser = appUserService.getById(id); + return R.ok(appUser); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java index 6bc6d16..98dc39f 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java @@ -8,7 +8,10 @@ import com.ruoyi.account.service.TAppCouponService; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.other.api.domain.TCoupon; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -27,36 +30,36 @@ @Service public class TAppCouponServiceImpl extends ServiceImpl<TAppCouponMapper, TAppCoupon> implements TAppCouponService { + @Autowired + private OrderClient orderClient; @Override public PageInfo<ExchangeRecordVO> pagelist(ExchangeRecordGoodsQuery dto) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); PageInfo<ExchangeRecordVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<ExchangeRecordVO> list = this.baseMapper.pageList(pageInfo,dto); - // 现金优惠券 + // 订单ids StringBuilder stringBuilder = new StringBuilder(); - // 积分优惠券 - StringBuilder stringBuilder1 = new StringBuilder(); - for (ExchangeRecordVO exchangeRecordVO : list) { switch (exchangeRecordVO.getWaysToObtain()){ case 1: - if (exchangeRecordVO.getSerialNumber()!=null){ - stringBuilder.append(exchangeRecordVO.getSerialNumber()).append(","); + if (exchangeRecordVO.getOrderId()!=null){ + stringBuilder.append(exchangeRecordVO.getOrderId()).append(","); }else{ stringBuilder.append("0").append(","); } break; case 2: - if (exchangeRecordVO.getSerialNumber()!=null){ - stringBuilder1.append(exchangeRecordVO.getSerialNumber()).append(","); + if (exchangeRecordVO.getOrderId()!=null){ + stringBuilder.append("-").append(exchangeRecordVO.getOrderId()).append(","); }else{ - stringBuilder1.append("0").append(","); + stringBuilder.append("-").append("0").append(","); } break; } - Date date = DateUtils.toDate(exchangeRecordVO.getEndTime()); + Date date1 = DateUtils.toDate(exchangeRecordVO.getCreateTime()); exchangeRecordVO.setEndTime1(format.format(date)); + exchangeRecordVO.setCreateTime1(format.format(date1)); if (exchangeRecordVO.getStatus()==1){ if (exchangeRecordVO.getDelFlag() == 1){ // 删除了 就是已取消状态 @@ -80,18 +83,18 @@ exchangeRecordVO.setStatus(2); } } - // 根据购买方式 查询对应订单号 } // 去除最后一个字符 if (StringUtils.hasText(stringBuilder.toString())){ String string = stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString(); - // 远程调用 查询关联的现金优惠券订单编号 + // 远程调用 查询关联的订单编号 + List<String> data = orderClient.getCodeByOrderId(string).getData(); + for (int i = 0; i < list.size(); i++) { + list.get(i).setOrderId(data.get(i)); + } } - if (StringUtils.hasText(stringBuilder.toString())){ - String string = stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString(); - // 远程调用 查询关联的积分兑换优惠券订单编号 - } + pageInfo.setRecords(list); return pageInfo; } diff --git a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml index 8c876b7..7ca4a3c 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml @@ -5,6 +5,7 @@ name: ruoyi-account main: allow-bean-definition-overriding: true + allow-circular-references: true profiles: # 环境配置 active: dev diff --git a/ruoyi-service/ruoyi-chargingPile/pom.xml b/ruoyi-service/ruoyi-chargingPile/pom.xml index eeef897..cfa425f 100644 --- a/ruoyi-service/ruoyi-chargingPile/pom.xml +++ b/ruoyi-service/ruoyi-chargingPile/pom.xml @@ -114,6 +114,12 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-other</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> </dependencies> 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 5139fdd..3346720 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 @@ -2,13 +2,18 @@ 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.query.GetPartnerList; +import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration; import com.ruoyi.chargingPile.dto.ResetPassword; import com.ruoyi.chargingPile.service.IPartnerService; 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.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; @@ -27,6 +32,10 @@ @Resource private IPartnerService partnerService; + + @Resource + private SysUserClient sysUserClient; + @@ -34,7 +43,7 @@ @ResponseBody @GetMapping("/getPartnerList") @ApiOperation(value = "获取合作商列表", tags = {"管理后台-合作商管理"}) - public AjaxResult<PageInfo<PartnerListDTO>> getPartnerList(@RequestBody GetPartnerList partnerList){ + public AjaxResult<PageInfo<PartnerListDTO>> getPartnerList(GetPartnerList partnerList){ PageInfo<PartnerListDTO> list = partnerService.getPartnerList(partnerList); return AjaxResult.success(list); } @@ -77,7 +86,7 @@ @ApiImplicitParams({ @ApiImplicitParam(value = "合作商id", name = "id", dataTypeClass = Integer.class, required = true) }) - public AjaxResult delPartner(@PathVariable("id") Integer id){ + public AjaxResult delPartner(@PathVariable("id") Integer[] id){ return partnerService.delPartner(id); } @@ -91,10 +100,38 @@ @ResponseBody - @PostMapping("/getPartner") + @GetMapping("/getPartner") @ApiOperation(value = "获取所有合作商", tags = {"管理后台-站点管理"}) public AjaxResult<List<Partner>> getPartner(){ - List<Partner> list = partnerService.list(new LambdaQueryWrapper<Partner>().eq(Partner::getDelFlag, 0)); + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + LambdaQueryWrapper<Partner> wrapper = new LambdaQueryWrapper<Partner>().eq(Partner::getDelFlag, 0); + if(2 == roleType){ + wrapper.eq(Partner::getId, objectId); + } + List<Partner> list = partnerService.list(wrapper); return AjaxResult.success(list); } + + + + @ResponseBody + @GetMapping("/getPermissionConfiguration/{siteId}") + @ApiOperation(value = "获取合作商权限设置", tags = {"管理后台-站点管理"}) + public AjaxResult<GetPermissionConfigurationDTO> getPermissionConfiguration(@PathVariable("siteId") Integer siteId, Integer partnerId){ + GetPermissionConfigurationDTO permissionConfiguration = partnerService.getPermissionConfiguration(siteId, partnerId); + return AjaxResult.success(permissionConfiguration); + } + + + @ResponseBody + @PostMapping("/setPermissionConfiguration/{siteId}") + @ApiOperation(value = "设置合作商权限", tags = {"管理后台-站点管理"}) + public AjaxResult setPermissionConfiguration(@RequestBody SetPermissionConfiguration req){ + partnerService.setPermissionConfiguration(req); + return AjaxResult.success(); + } + + } 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 a6334e3..6209a9a 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 @@ -1,22 +1,44 @@ package com.ruoyi.chargingPile.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; +import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; 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.model.TParkingLot; 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.ChargingGunCountVO; +import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; +import com.ruoyi.chargingPile.api.vo.TChargingPileVO; +import com.ruoyi.chargingPile.domain.SiteMenu; +import com.ruoyi.chargingPile.service.IPartnerService; import com.ruoyi.chargingPile.service.ISiteService; +import com.ruoyi.chargingPile.service.TChargingGunService; +import com.ruoyi.chargingPile.service.TChargingPileService; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.GeodesyUtil; 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.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +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; +import java.util.*; /** * @author zhibing.pu @@ -28,20 +50,74 @@ @Resource private ISiteService siteService; + + @Resource + private IPartnerService partnerService; + @Resource + private SysUserClient sysUserClient; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + @Resource + private ParkingLotClient parkingLotClient; + @Resource + private TChargingPileService chargingPileService; + @Resource + private TChargingGunService chargingGunService; + + + + @ResponseBody @GetMapping("/getSiteList") @ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"}) - public AjaxResult<PageInfo<GetSiteListDTO>> getSiteList(@RequestBody GetSiteList siteList){ + public AjaxResult<PageInfo<GetSiteListDTO>> getSiteList(GetSiteList siteList){ PageInfo<GetSiteListDTO> list = siteService.getSiteList(siteList); return AjaxResult.success(list); } - + @ResponseBody + @GetMapping("/getSiteList1") + @ApiOperation(value = "获取站点列表 不分页", tags = {"管理后台-活动费用统计"}) + public AjaxResult<List<Site>> getSiteList1(){ + return AjaxResult.success(siteService.list(new QueryWrapper<>())); + } @ApiOperation(value = "获取站点分页列表", tags = {"小程序-站点管理"}) @PostMapping("/pageList") public AjaxResult<PageInfo<SiteVO>> pageList(@Validated @RequestBody SiteQuery query){ return AjaxResult.success(siteService.pageList(query)); + } + + @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理-站点详情"}) + @PostMapping("/getDetailById") + public AjaxResult<SiteDetailVO> getDetailById(@Validated @RequestBody SiteDetailQuery query){ + SiteDetailVO siteDetailVO = siteService.getDetailById(query.getSiteId()); + // 计算距离 + Map<String, Double> distance = GeodesyUtil.getDistance(query.getLat() + "," + query.getLon(), siteDetailVO.getLat() + "," + siteDetailVO.getLon()); + siteDetailVO.setDistance(distance.get("WGS84")); + // 查询绑定车牌提示文案 + TParkingLot parkingLot = parkingLotClient.getLotBySiteId(query.getSiteId()).getData(); + if(Objects.nonNull(parkingLot)){ + siteDetailVO.setRemark(parkingLot.getRemark()); + } + return AjaxResult.success(siteDetailVO); + } + + @ApiOperation(value = "获取站点下充电桩及充电枪列表", tags = {"小程序-站点管理-站点详情"}) + @GetMapping("/getChargingGunList") + public AjaxResult<List<TChargingPileVO>> getChargingGunList(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId, + @RequestParam(value = "siteId",required = false)@ApiParam(value = "类型 1=超充,2=快充,3=慢充")Integer type){ + return AjaxResult.success(chargingPileService.getChargingGunList(siteId,type)); + } + + @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)); } @@ -65,7 +141,7 @@ @ApiImplicitParams({ @ApiImplicitParam(value = "站点id", name = "id", dataTypeClass = Integer.class, required = true) }) - public AjaxResult delSite(@PathVariable Integer id){ + public AjaxResult delSite(@PathVariable Integer[] id){ return siteService.delSite(id); } @@ -85,10 +161,40 @@ @ResponseBody @GetMapping("/getAllSiteList") - @ApiOperation(value = "获取所有站点数据", tags = {"管理后台-充电桩信息"}) + @ApiOperation(value = "获取所有站点数据", tags = {"管理后台-充电桩信息", "管理后台-系统用户管理", "管理后台-角色管理", "管理后台-系统通知", "管理后台-充电评价"}) public AjaxResult<List<Site>> getAllSiteList(){ - List<Site> list = siteService.list(new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0) - .orderByDesc(Site::getCreateTime)); + //校验当前账户站点权限 + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + LambdaQueryWrapper<Site> wrapper = new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0); + if(2 == roleType){ + Set<Integer> list = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + wrapper.in(Site::getId, list); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + data.addAll(data1); + Set<Integer> list = new HashSet<>(data); + wrapper.in(Site::getId, list); + } + } + List<Site> list = siteService.list(wrapper.orderByDesc(Site::getCreateTime)); return AjaxResult.success(list); } + + + /** + * 获取站点数据集合 + * @param ids + * @return + */ + @ResponseBody + @PostMapping("/getSiteByIds") + public R<List<Site>> getSiteByIds(@RequestBody List<Integer> ids){ + List<Site> sites = siteService.listByIds(ids); + return R.ok(sites); + } } 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 ec30f5a..ea8fe66 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 @@ -16,6 +16,9 @@ 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.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -74,6 +77,7 @@ /** * 添加计费策略管理 */ + @Log(title = "添加计费策略", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "添加计费策略") @PostMapping(value = "/add") public AjaxResult<Integer> add(@RequestBody TAccountingStrategyDTO dto) { @@ -88,6 +92,7 @@ /** * 修改计费策略 */ + @Log(title = "修改计费策略", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "修改计费策略") @PostMapping(value = "/update") public AjaxResult<Boolean> update(@RequestBody TAccountingStrategyDTO dto) { @@ -113,6 +118,7 @@ /** * 删除计费策略 */ + @Log(title = "删除计费策略", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-计费策略"},value = "删除计费策略") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -125,6 +131,7 @@ /** * 批量删除计费策略 */ + @Log(title = "批量删除计费策略", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-计费策略"},value = "批量删除计费策略") @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestBody List<Integer> ids) { @@ -161,7 +168,7 @@ } } - + } return AjaxResult.ok(accountingStrategyService.pageList(query)); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java index c58f62a..b917562 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; +import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; import com.ruoyi.chargingPile.service.TAccountingStrategyService; @@ -16,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalTime; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -44,7 +47,7 @@ /** * 通过电站id查询计费策略明细列表 */ - @ApiOperation(tags = {"小程序-计费策略"},value = "通过站点id查询计费策略明细列表") + @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "通过站点id查询计费策略明细列表") @GetMapping(value = "/queryAccountingStrategyDetailBySiteId") public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailBySiteId(@RequestParam Integer siteId) { TAccountingStrategy accountingStrategy = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class) @@ -53,12 +56,25 @@ if(Objects.isNull(accountingStrategy)){ throw new ServiceException("未查询到计费策略"); } - // TODO 修改 - List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId()); - list.forEach(detail -> { - detail.setTotalPrice(detail.getElectrovalence().add(detail.getElectrovalence())); - }); - return AjaxResult.ok(list); + return AjaxResult.ok(accountingStrategyDetailService.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId())); + } + + /** + * 通过站点id查询当前时间段计费策略展示 + */ + @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "通过站点id查询当前时间段计费策略展示") + @GetMapping(value = "/queryStrategyBySiteIdAndTime") + public AjaxResult<List<TAccountingStrategyDetailVO>> queryStrategyBySiteIdAndTime(@RequestParam Integer siteId) { + return AjaxResult.ok(accountingStrategyDetailService.queryStrategyBySiteIdAndTime(siteId)); + } + + /** + * 价格说明金额返回,会员开通金额说明 + */ + @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "价格说明金额返回,会员开通金额说明") + @GetMapping(value = "/queryPrice") + public AjaxResult<StrategyPriceVO> queryPrice(@RequestParam Integer siteId) { + return AjaxResult.ok(accountingStrategyDetailService.queryPrice(siteId)); } } 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 d2de620..8fe2dbc 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 @@ -11,6 +11,9 @@ import com.ruoyi.chargingPile.service.TCarportService; import com.ruoyi.chargingPile.service.TVehicleRampService; 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.log.enums.OperatorType; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -39,7 +42,8 @@ /** * 建桩申请 */ - @ApiOperation(tags = {"小程序-建桩申请","后台-申请表单-申请建桩-添加"},value = "建桩申请") + @Log(title = "建桩申请", businessType = BusinessType.INSERT,operatorType = OperatorType.MOBILE) + @ApiOperation(tags = {"小程序-建桩申请"},value = "建桩申请") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@RequestBody TApplyChargingPile dto) { // TODO 用户id 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 ba38bc5..0149ad4 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 @@ -8,6 +8,9 @@ import com.ruoyi.chargingPile.service.TCarportService; import com.ruoyi.chargingPile.service.TVehicleRampService; 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.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -50,6 +53,7 @@ /** * 添加车库管理 */ + @Log(title = "添加车库", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车库"},value = "添加车库") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@RequestBody TCarport dto) { @@ -59,6 +63,7 @@ /** * 修改车库 */ + @Log(title = "修改车库", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车库"},value = "修改车库") @PostMapping(value = "/update") public AjaxResult<Boolean> update(@RequestBody TCarport dto) { @@ -77,6 +82,7 @@ /** * 删除车库 */ + @Log(title = "删除车库", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车库"},value = "删除车库") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -89,6 +95,7 @@ /** * 批量删除车库 */ + @Log(title = "批量删除车库", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车库"},value = "批量删除车库") @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestBody List<Integer> ids) { 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 60ecce0..f65d459 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 @@ -8,6 +8,9 @@ import com.ruoyi.chargingPile.service.TChargingGunService; 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.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -48,6 +51,7 @@ /** * 添加充电枪管理 */ + @Log(title = "添加充电枪", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"管理后台-充电桩信息"},value = "添加充电枪") @PostMapping(value = "/add") public AjaxResult add(@RequestBody TChargingGunDTO dto) { @@ -57,6 +61,7 @@ /** * 修改充电枪 */ + @Log(title = "修改充电枪", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"管理后台-充电桩信息"},value = "修改充电枪") @PostMapping(value = "/update") public AjaxResult update(@RequestBody TChargingGunDTO dto) { @@ -75,6 +80,7 @@ /** * 删除充电枪 */ + @Log(title = "删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"管理后台-充电桩信息"},value = "删除充电枪") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -87,6 +93,7 @@ /** * 批量删除充电枪 */ + @Log(title = "批量删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-充电枪"},value = "批量删除充电枪") @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestBody List<Integer> ids) { @@ -96,6 +103,7 @@ /** * 结束充电 */ + @Log(title = "结束充电", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-充电枪"},value = "结束充电") @PostMapping(value = "/stopCharging") public AjaxResult<String> stopCharging() { 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 34f88b6..0b68161 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 @@ -7,6 +7,7 @@ import com.ruoyi.chargingPile.api.vo.TChargingGunVO; import com.ruoyi.chargingPile.service.TChargingGunService; import com.ruoyi.chargingPile.service.TChargingPileService; +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.chargingPile.api.dto.PageChargingPileListDTO; @@ -16,6 +17,9 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.chargingPile.api.query.PageChargingPileList; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -54,8 +58,20 @@ */ @ApiOperation(tags = {"小程序-充电桩"},value = "查询充电桩列表") @PostMapping(value = "/list") - public AjaxResult<List<TChargingPile>> list(@RequestParam(name = "siteId",value = "站点id",required = false)Integer siteId) { + @ApiImplicitParams({ + @ApiImplicitParam(name = "siteId", value = "站点id") + }) + public AjaxResult<List<TChargingPile>> list(@RequestParam("siteId") Integer siteId) { return AjaxResult.ok(chargingPileService.list(Wrappers.lambdaQuery(TChargingPile.class) + .eq(TChargingPile::getSiteId,siteId))); + } + /** + * 管理后台-通过站点id获取充电桩列表 不分页 + */ + @ApiOperation(value = "管理后台-通过站点id获取充电桩列表 不分页") + @PostMapping(value = "/getChargingPileBySiteId") + public R<List<TChargingPile>> getChargingPileBySiteId(@RequestParam("siteId") Integer siteId) { + return R.ok(chargingPileService.list(Wrappers.lambdaQuery(TChargingPile.class) .eq(TChargingPile::getSiteId,siteId))); } @@ -70,6 +86,7 @@ } @ResponseBody + @Log(title = "添加充电桩数据", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @PostMapping("/addChargingPile") @ApiOperation(value = "添加充电桩数据", tags = {"管理后台-充电桩信息"}) public AjaxResult addChargingPile(@RequestBody TChargingPile chargingPile){ @@ -87,6 +104,7 @@ @ResponseBody + @Log(title = "编辑充电桩数据", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @PostMapping("/editChargingPile") @ApiOperation(value = "编辑充电桩数据", tags = {"管理后台-充电桩信息"}) public AjaxResult editChargingPile(@RequestBody TChargingPile chargingPile){ @@ -97,16 +115,18 @@ @ResponseBody @DeleteMapping("/delChargingPile/{id}") + @Log(title = "删除充电桩", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(value = "删除充电桩", tags = {"管理后台-充电桩信息"}) @ApiImplicitParams({ @ApiImplicitParam(value = "充电桩id", name = "id", dataTypeClass = Integer.class, required = true) }) - public AjaxResult delChargingPile(@PathVariable Integer id){ + public AjaxResult delChargingPile(@PathVariable Integer[] id){ return chargingPileService.delChargingPile(id); } @ResponseBody + @Log(title = "批量设置计费策略", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @PostMapping("/batchSetAccountingStrategy") @ApiOperation(value = "批量设置计费策略", tags = {"管理后台-充电桩信息"}) public AjaxResult batchSetAccountingStrategy(@RequestBody BatchSetAccountingStrategy setAccountingStrategy){ 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 1827a95..9f7c8cd 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 @@ -1,8 +1,15 @@ package com.ruoyi.chargingPile.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.chargingPile.api.model.TChargingPileNotification; +import com.ruoyi.chargingPile.service.TChargingPileNotificationService; +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 io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; /** * <p> @@ -15,6 +22,32 @@ @RestController @RequestMapping("/t-charging-pile-notification") public class TChargingPileNotificationController { + + @Resource + private TChargingPileNotificationService chargingPileNotificationService; + + + + + @ResponseBody + @GetMapping("/chargingPileNotificationPageList") + @ApiOperation(value = "获取系统通知列表数据", tags = {"管理后台-系统通知"}) + public AjaxResult<PageInfo<TChargingPileNotification>> chargingPileNotificationPageList(Integer siteId, BasePage basePage){ + PageInfo<TChargingPileNotification> pageInfo = chargingPileNotificationService.chargingPileNotificationPageList(siteId, basePage); + return AjaxResult.success(pageInfo); + } + + + @ResponseBody + @DeleteMapping("/delChargingPileNotification/{id}") + @ApiOperation(value = "删除系统通知", tags = {"管理后台-系统通知"}) + public AjaxResult delChargingPileNotification(@PathVariable Long id){ + TChargingPileNotification chargingPileNotification = chargingPileNotificationService.getById(id); + chargingPileNotification.setDelFlag(1); + chargingPileNotificationService.updateById(chargingPileNotification); + return AjaxResult.success(); + } + } 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 a37a427..47190e3 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 @@ -6,6 +6,9 @@ import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.chargingPile.service.TFaultMessageService; 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.log.enums.OperatorType; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -36,6 +39,7 @@ /** * 添加故障报修管理 */ + @Log(title = "添加故障报修管理", businessType = BusinessType.INSERT,operatorType = OperatorType.MOBILE) @ApiOperation(tags = {"小程序-故障报修"},value = "添加故障报修管理") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@Validated @RequestBody TFaultMessage dto) { diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TMonitoringEquipmentController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TMonitoringEquipmentController.java index 38a468c..87a5bef 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TMonitoringEquipmentController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TMonitoringEquipmentController.java @@ -8,6 +8,9 @@ import com.ruoyi.chargingPile.service.TMonitoringEquipmentService; 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.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +50,7 @@ /** * 添加监控管理 */ + @Log(title = "添加监控", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-监控"},value = "添加监控") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@RequestBody TMonitoringEquipmentDTO dto) { @@ -56,6 +60,7 @@ /** * 修改监控 */ + @Log(title = "修改监控", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-监控"},value = "修改监控") @PostMapping(value = "/update") public AjaxResult<Boolean> update(@RequestBody TMonitoringEquipmentDTO dto) { @@ -74,6 +79,7 @@ /** * 删除监控 */ + @Log(title = "删除监控", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-监控"},value = "删除监控") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -83,6 +89,7 @@ /** * 批量删除监控 */ + @Log(title = "批量删除监控", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-监控"},value = "批量删除监控") @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestBody List<Integer> ids) { 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 f840ac9..be3a1ba 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 @@ -11,8 +11,12 @@ import com.ruoyi.chargingPile.service.TCarportService; import com.ruoyi.chargingPile.service.TParkingLotService; import com.ruoyi.chargingPile.service.TVehicleRampService; +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.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -66,6 +70,7 @@ /** * 添加停车场管理 */ + @Log(title = "添加停车场", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "添加停车场") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@RequestBody TParkingLotDTO dto) { @@ -75,6 +80,7 @@ /** * 修改停车场 */ + @Log(title = "修改停车场", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "修改停车场") @PostMapping(value = "/update") public AjaxResult<Boolean> update(@RequestBody TParkingLotDTO dto) { @@ -93,6 +99,7 @@ /** * 删除停车场 */ + @Log(title = "删除停车场", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "删除停车场") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -108,6 +115,7 @@ /** * 批量删除停车场 */ + @Log(title = "批量删除停车场", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "批量删除停车场") @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestBody List<Integer> ids) { @@ -119,6 +127,14 @@ .in(TCarport::getParkingLotId, ids)); return AjaxResult.ok(parkingLotService.removeByIds(ids)); } - + + /** + * 通过站点id查询停车场信息 + */ + @GetMapping(value = "/getLotBySiteId") + public R<TParkingLot> getLotBySiteId(@RequestParam("siteId") Integer siteId){ + return R.ok(parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class) + .eq(TParkingLot::getSiteId, siteId))); + } } 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 11da8dd..e02c00c 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 @@ -4,6 +4,9 @@ import com.ruoyi.chargingPile.api.model.TVehicleRamp; import com.ruoyi.chargingPile.service.TVehicleRampService; 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.log.enums.OperatorType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -34,6 +37,7 @@ /** * 添加车道管理 */ + @Log(title = "添加车道", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车道"},value = "添加车道") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@RequestBody TVehicleRamp dto) { @@ -43,6 +47,7 @@ /** * 修改车道 */ + @Log(title = "修改车道", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车道"},value = "修改车道") @PostMapping(value = "/update") public AjaxResult<Boolean> update(@RequestBody TVehicleRamp dto) { @@ -61,6 +66,7 @@ /** * 删除车道 */ + @Log(title = "删除车道", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车道"},value = "删除车道") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -70,6 +76,7 @@ /** * 批量删除车道 */ + @Log(title = "批量删除车道", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车道"},value = "批量删除车道") @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestBody List<Integer> ids) { @@ -79,6 +86,7 @@ /** * 开关闸车道 */ + @Log(title = "开关闸车道", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-车道"},value = "开关闸车道") @PostMapping(value = "/openOrDown") public AjaxResult<String> openOrDown(@RequestBody TVehicleRamp dto) { 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 new file mode 100644 index 0000000..dfe5f0f --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java @@ -0,0 +1,72 @@ +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/mapper/SiteMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java index 7fae91b..0305c89 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java @@ -5,11 +5,13 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteQuery; +import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.common.core.web.page.PageInfo; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; /** * @author zhibing.pu @@ -24,7 +26,7 @@ * @param siteList * @return */ - List<GetSiteListDTO> getSiteList(PageInfo<GetSiteListDTO> pageInfo, @Param("item") GetSiteList siteList); + List<GetSiteListDTO> getSiteList(PageInfo<GetSiteListDTO> pageInfo, @Param("item") GetSiteList siteList, @Param("ids") Set<Integer> ids); /** * 获取站点分页列表 @@ -32,4 +34,11 @@ */ List<SiteVO> pageList(@Param("query")SiteQuery query,@Param("pageInfo")PageInfo<SiteVO> pageInfo); + /** + * 获取站点详情 + * @param siteId + * @return + */ + SiteDetailVO getDetailById(@Param("siteId")Integer siteId); + } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java index 79ddcd0..7ce3dd6 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; /** * <p> @@ -27,6 +28,6 @@ * @param pageInfo * @return */ - List<TChargingGunVO> pageList(@Param("query") TChargingGunQuery query, @Param("pageInfo")PageInfo<TChargingGunVO> pageInfo); + List<TChargingGunVO> pageList(@Param("query") TChargingGunQuery query, @Param("pageInfo")PageInfo<TChargingGunVO> pageInfo, @Param("siteIds") Set<Integer> siteIds); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileMapper.java index f254d0a..ca0be89 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileMapper.java @@ -4,11 +4,13 @@ import com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.query.PageChargingPileList; +import com.ruoyi.chargingPile.api.vo.TChargingPileVO; import com.ruoyi.common.core.web.page.PageInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; /** * <p> @@ -27,7 +29,7 @@ * @param page * @return */ - List<PageChargingPileListDTO> pageChargingPileList(PageInfo<PageChargingPileListDTO> pageInfo, @Param("item") PageChargingPileList page); + List<PageChargingPileListDTO> pageChargingPileList(PageInfo<PageChargingPileListDTO> pageInfo, @Param("item") PageChargingPileList page, @Param("siteIds") Set<Integer> siteIds); /** @@ -36,4 +38,11 @@ * @return */ TChargingPile getChargingPile(Integer id); + + /** + * 获取站点下充电桩及充电枪列表 + * @param siteId + * @return + */ + List<TChargingPileVO> getChargingGunList(@Param("siteId")Integer siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java index 5cbc4f4..d093e4c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java @@ -2,6 +2,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.chargingPile.api.model.TChargingPileNotification; +import com.ruoyi.common.core.web.page.PageInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Set; /** * <p> @@ -12,5 +17,14 @@ * @since 2024-08-08 */ public interface TChargingPileNotificationMapper extends BaseMapper<TChargingPileNotification> { + + + /** + * 获取系统通知列表数据 + * @param pageInfo + * @param siteIds + * @return + */ + List<TChargingPileNotification> chargingPileNotificationPageList(PageInfo<TChargingPileNotification> pageInfo, @Param("siteIds") Set<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 27f1720..bab0bb9 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 @@ -1,15 +1,21 @@ package com.ruoyi.chargingPile.service; import com.baomidou.mybatisplus.extension.service.IService; +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.query.GetPartnerList; +import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration; +import com.ruoyi.chargingPile.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; /** * @author zhibing.pu @@ -52,11 +58,42 @@ * 删除合作商 * @param id */ - AjaxResult delPartner(Integer id); + AjaxResult delPartner(Integer[] id); /** * 重置密码 * @param resetPassword */ AjaxResult resetPassword(ResetPassword resetPassword); + + + /** + * 获取合作商权限 + * @param siteId + * @return + */ + GetPermissionConfigurationDTO getPermissionConfiguration(Integer siteId, Integer partnerId); + + /** + * 合作商权限配置 + * @param req + */ + void setPermissionConfiguration(SetPermissionConfiguration req); + + + /** + * 获取合作商授权的站点数据 + * @param siteMenu 授权菜单路径枚举类 + * @return + */ + Set<Integer> authSite(Integer partnerId, SiteMenu siteMenu); + + + /** + * 判断当前账户是否有权限 + * @param siteId 站点id + * @param siteMenu 菜单路径枚举类 + * @return + */ + boolean authMenu(Integer partnerId, Integer siteId, SiteMenu siteMenu); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java index 722b578..4a8dd0e 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java @@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteQuery; +import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; @@ -48,7 +49,7 @@ * @param id * @return */ - AjaxResult delSite(Integer id); + AjaxResult delSite(Integer[] id); /** @@ -57,7 +58,19 @@ * @param accountingStrategyId 计费策略id */ void setAccountingStrategy(Integer id, Integer accountingStrategyId); - + + /** + * 获取站点分页列表 + * @param query + * @return + */ PageInfo<SiteVO> pageList(SiteQuery query); + + /** + * 获取站点详情 + * @param siteId + * @return + */ + SiteDetailVO getDetailById(Integer siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java index 292134b..178d0cf 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import java.util.List; @@ -22,4 +23,19 @@ * @return */ List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId); + + + /** + * 通过站点id查询当前时间段计费策略展示 + * @param siteId + * @return + */ + List<TAccountingStrategyDetailVO> queryStrategyBySiteIdAndTime(Integer siteId); + + /** + * 价格说明金额返回,会员开通金额说明 + * @param siteId + * @return + */ + StrategyPriceVO queryPrice(Integer siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java index 323273d..fab3626 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java @@ -4,10 +4,13 @@ import com.ruoyi.chargingPile.api.dto.TChargingGunDTO; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.query.TChargingGunQuery; +import com.ruoyi.chargingPile.api.vo.ChargingGunCountVO; import com.ruoyi.chargingPile.api.vo.TChargingGunVO; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import org.springframework.web.bind.annotation.RequestBody; + +import java.util.Map; /** * <p> @@ -40,4 +43,11 @@ * @return */ AjaxResult update(TChargingGunDTO dto); + + /** + * 获取站点下充电枪数量统计 + * @param siteId + * @return + */ + Map<String, ChargingGunCountVO> getChargingGunCount(Integer siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java index 077787b..28287dd 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java @@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.chargingPile.api.model.TChargingPileNotification; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; /** * <p> @@ -12,5 +14,13 @@ * @since 2024-08-08 */ public interface TChargingPileNotificationService extends IService<TChargingPileNotification> { - + + + /** + * 获取系统通知列表数据 + * @param siteId + * @param basePage + * @return + */ + PageInfo<TChargingPileNotification> chargingPileNotificationPageList(Integer siteId, BasePage basePage); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java index b3360ed..beb89c2 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java @@ -5,10 +5,13 @@ import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.query.BatchSetAccountingStrategy; import com.ruoyi.chargingPile.api.query.PageChargingPileList; +import com.ruoyi.chargingPile.api.vo.TChargingPileVO; 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 java.util.List; /** * <p> @@ -58,7 +61,7 @@ * @param id * @return */ - AjaxResult delChargingPile(Integer id); + AjaxResult delChargingPile(Integer[] id); /** @@ -66,4 +69,13 @@ * @param setAccountingStrategy */ void batchSetAccountingStrategy(BatchSetAccountingStrategy setAccountingStrategy); + + /** + * 获取站点下充电桩及充电枪列表 + * @param siteId + * @param type + * @return + */ + List<TChargingPileVO> getChargingGunList(Integer siteId,Integer type); + } 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 4b0e2ca..8c79e0e 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 @@ -2,18 +2,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.Site; +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.dto.ResetPassword; import com.ruoyi.chargingPile.mapper.PartnerMapper; -import com.ruoyi.chargingPile.service.IPartnerService; -import com.ruoyi.chargingPile.service.ISiteService; +import com.ruoyi.chargingPile.service.*; 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.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; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysRoleClient; @@ -22,10 +26,10 @@ import io.seata.spring.annotation.GlobalTransactional; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -43,6 +47,21 @@ @Resource private ISiteService siteService; + + @Resource + private TPartnerSiteService partnerSiteService; + + @Resource + private TSiteMenuService siteMenuService; + + @Resource + private TChargingPileService chargingPileService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; @@ -85,7 +104,7 @@ * @return */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult addPartner(Partner partner) { //校验参数和重复数据 AjaxResult ajaxResult = addPartnerParameterCheck(partner); @@ -110,9 +129,8 @@ this.save(partner); //添加登录账户 SysUser user = new SysUser(); - user.setAccount(partner.getAccount()); user.setPhonenumber(partner.getPhoneOne()); - user.setUserName(partner.getName()); + user.setUserName(partner.getAccount()); user.setNickName(partner.getName()); user.setAvatar(partner.getLogoUrl()); user.setPassword(partner.getPassword()); @@ -189,7 +207,7 @@ * @return */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult editPartner(Partner partner) { //校验参数和重复数据 AjaxResult ajaxResult = addPartnerParameterCheck(partner); @@ -211,7 +229,7 @@ return AjaxResult.error("登录账号不能重复"); } Partner oldPartner = this.getById(partner.getId()); - SysUser user = sysUserClient.queryUserByAccount(oldPartner.getAccount()).getData(); + SysUser user = sysUserClient.queryUserByUserName(oldPartner.getAccount()).getData(); //修改数据 this.updateById(partner); @@ -220,9 +238,8 @@ user = new SysUser(); user.setStatus("0"); user.setDelFlag("0"); - user.setAccount(partner.getAccount()); user.setPhonenumber(partner.getPhoneOne()); - user.setUserName(partner.getName()); + user.setUserName(partner.getAccount()); user.setNickName(partner.getName()); user.setAvatar(partner.getLogoUrl()); user.setPassword(partner.getPassword()); @@ -234,9 +251,8 @@ throw new RuntimeException(r.getMsg()); } }else{ - user.setAccount(partner.getAccount()); user.setPhonenumber(partner.getPhoneOne()); - user.setUserName(partner.getName()); + user.setUserName(partner.getAccount()); user.setNickName(partner.getName()); user.setAvatar(partner.getLogoUrl()); user.setPassword(partner.getPassword()); @@ -252,29 +268,33 @@ /** * 删除合作商 - * @param id 合作商id + * @param ids 合作商id */ @Override - @GlobalTransactional//分布式事务 - public AjaxResult delPartner(Integer id) { + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 + public AjaxResult delPartner(Integer[] ids) { //查询有无关联数据 //站点 - long count = siteService.count(new LambdaQueryWrapper<Site>().eq(Site::getPartnerId, id).eq(Site::getDelFlag, 0)); + long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, Arrays.asList(ids)).eq(Site::getDelFlag, 0)); if(count > 0){ - return AjaxResult.error("当前合作商有关联得站点,删除失败!"); + return AjaxResult.error("当前合作商有关联站点,删除失败!"); } - // todo 代码完善 //充电桩 - - Partner partner = this.getById(id); - if(null == partner){ - return AjaxResult.error("删除失败"); + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); + if(count1 > 0){ + return AjaxResult.error("当前合作商有关联充电桩,删除失败!"); } - partner.setDelFlag(true); - this.updateById(partner); - SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData(); - user.setDelFlag("2"); - sysUserClient.updateUser(user); + for (Integer id : ids) { + Partner partner = this.getById(id); + if(null == partner){ + return AjaxResult.error("删除失败"); + } + partner.setDelFlag(true); + this.updateById(partner); + SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); + user.setDelFlag("2"); + sysUserClient.updateUser(user); + } return AjaxResult.success(); } @@ -284,7 +304,7 @@ * @param resetPassword */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult resetPassword(ResetPassword resetPassword) { if(null == resetPassword.getId()){ return AjaxResult.error("合作商id不能为空"); @@ -296,9 +316,124 @@ partner.setPassword(resetPassword.getPassword()); this.updateById(partner); //修改登录账号的密码 - SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData(); + SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); user.setPassword(partner.getPassword()); sysUserClient.resetPassword(user); return AjaxResult.success(); } + + + /** + * 获取合作商权限 + * @return + */ + @Override + public GetPermissionConfigurationDTO getPermissionConfiguration(Integer siteId, Integer partnerId) { + Partner partner = this.getById(partnerId); + GetPermissionConfigurationDTO dto = new GetPermissionConfigurationDTO(); + dto.setPermissionRemarks(partner.getPermissionRemarks()); + Map<String, Object> menu = new HashMap<>(); + List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>() + .eq(TPartnerSite::getPartnerId, partnerId) + .eq(TPartnerSite::getSiteId, siteId)); + List<Integer> collect = list.stream().map(TPartnerSite::getSiteMenuId).collect(Collectors.toList()); + List<TSiteMenu> tSiteMenus = siteMenuService.list(new LambdaQueryWrapper<TSiteMenu>() + .eq(TSiteMenu::getParentId, 0) + .eq(TSiteMenu::getVisible, 0) + .eq(TSiteMenu::getStatus, 0).orderByAsc(TSiteMenu::getOrderNum)); + for (TSiteMenu tSiteMenu : tSiteMenus) { + menu.put("id", tSiteMenu.getMenuId()); + menu.put("name", tSiteMenu.getMenuName()); + menu.put("path", tSiteMenu.getPath()); + menu.put("type", tSiteMenu.getMenuType()); + + List<TSiteMenu> tSiteMenus1 = siteMenuService.list(new LambdaQueryWrapper<TSiteMenu>() + .eq(TSiteMenu::getParentId, tSiteMenu.getMenuId()) + .eq(TSiteMenu::getVisible, 0) + .eq(TSiteMenu::getStatus, 0).orderByAsc(TSiteMenu::getOrderNum)); + Map<String, Object> child = new HashMap<>(); + for (TSiteMenu siteMenu : tSiteMenus1) { + child.put("id", siteMenu.getMenuId()); + child.put("name", siteMenu.getMenuName()); + child.put("path", siteMenu.getPath()); + child.put("type", siteMenu.getMenuType()); + child.put("selected", collect.contains(siteMenu.getMenuId())); + } + menu.put("selected", child.keySet().size() > 0 ? true : false); + menu.put("child", child); + } + dto.setMenu(menu); + return dto; + } + + + /** + * 合作商权限配置 + * @param req + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void setPermissionConfiguration(SetPermissionConfiguration req) { + //删除原始配置 + partnerSiteService.remove(new LambdaQueryWrapper<TPartnerSite>().eq(TPartnerSite::getPartnerId, req.getPartnerId()).eq(TPartnerSite::getSiteId, req.getSiteId())); + //添加新的配置 + List<TPartnerSite> sites = new ArrayList<>(); + List<Integer> list = req.getMenuId(); + for (Integer integer : list) { + TPartnerSite partnerSite = new TPartnerSite(); + partnerSite.setPartnerId(req.getPartnerId()); + partnerSite.setSiteId(req.getSiteId()); + partnerSite.setSiteMenuId(integer); + sites.add(partnerSite); + } + partnerSiteService.saveBatch(sites); + //修改权限配置 + Partner partner = this.getById(req.getPartnerId()); + partner.setPermissionRemarks(req.getPermissionRemarks()); + this.updateById(partner); + } + + + /** + * 获取合作商授权的站点数据 + * @param siteMenu 授权菜单路径枚举类 + * @return + */ + @Override + public Set<Integer> authSite(Integer partnerId, SiteMenu siteMenu) { + TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, siteMenu.getValue()).eq(TSiteMenu::getStatus, 0)); + List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>() + .eq(TPartnerSite::getPartnerId, partnerId) + .eq(TPartnerSite::getSiteMenuId, one.getMenuId())); + List<Integer> collect = list.stream().map(TPartnerSite::getSiteId).collect(Collectors.toList()); + //获取合作商用户关联的站点数据 + Partner partner = this.getById(partnerId); + SysUser sysUser = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + collect.addAll(data); + collect.addAll(data1); + Set<Integer> siteIds = new HashSet<>(collect); + if(siteIds.size() == 0){ + siteIds.add(-1); + } + return siteIds; + } + + + /** + * 判断当前账户是否有权限 + * @param siteId 站点id + * @param siteMenu 菜单路径枚举类 + * @return + */ + @Override + public boolean authMenu(Integer partnerId, Integer siteId, SiteMenu siteMenu) { + TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, siteMenu.getValue()).eq(TSiteMenu::getStatus, 0)); + TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>() + .eq(TPartnerSite::getPartnerId, partnerId) + .eq(TPartnerSite::getSiteMenuId, one.getMenuId()) + .eq(TPartnerSite::getSiteId, siteId)); + return null == partnerSite ? false : true; + } } 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 98220eb..fe3d696 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 @@ -5,22 +5,35 @@ import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; 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.GetSiteList; 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.mapper.SiteMapper; +import com.ruoyi.chargingPile.service.IPartnerService; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TChargingGunService; +import com.ruoyi.chargingPile.service.TChargingPileService; 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.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author zhibing.pu @@ -32,6 +45,21 @@ @Resource private TChargingGunService chargingGunService; + @Resource + private TChargingPileService chargingPileService; + + @Resource + private SysUserClient sysUserClient; + + @Resource + private IPartnerService partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + /** @@ -41,10 +69,38 @@ */ @Override public PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList) { + Set<Integer> ids = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + data.addAll(data1); + ids = new HashSet<>(data); + } + } PageInfo<GetSiteListDTO> pageInfo = new PageInfo<>(siteList.getPageCurr(), siteList.getPageSize()); - List<GetSiteListDTO> list = this.baseMapper.getSiteList(pageInfo, siteList); + List<GetSiteListDTO> list = this.baseMapper.getSiteList(pageInfo, siteList, ids); + for (GetSiteListDTO getSiteListDTO : list) { + Integer siteId = getSiteListDTO.getId(); + getSiteListDTO.setAuthAccountingStrategy(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_ACCOUNTING_STRATEGY)); + //平台账号才有此权限 + getSiteListDTO.setAuthPartner(roleType == 1 ? true : false); + getSiteListDTO.setAuthUpdate(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_UPDATE)); + getSiteListDTO.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_DELETE)); + } return pageInfo.setRecords(list); } + + + /** * 添加站点信息 @@ -141,17 +197,22 @@ /** * 删除站点 - * @param id 站点id + * @param ids 站点id * @return */ @Override - public AjaxResult delSite(Integer id) { + public AjaxResult delSite(Integer[] ids) { //查询是否有关联数据 //充电桩 - // todo 待完善 - Site site = this.getById(id); - site.setDelFlag(true); - this.updateById(site); + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getSiteId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); + if(count1 > 0){ + return AjaxResult.error("该站点有关联充电桩,删除失败!"); + } + for (Integer id : ids) { + Site site = this.getById(id); + site.setDelFlag(true); + this.updateById(site); + } return AjaxResult.success(); } @@ -162,15 +223,20 @@ pageInfo.setRecords(list); return pageInfo; } - - + + @Override + public SiteDetailVO getDetailById(Integer siteId) { + return this.baseMapper.getDetailById(siteId); + } + + /** * 设置站点计费策略 * @param id 站点id * @param accountingStrategyId 计费策略id */ @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) + @Transactional(rollbackFor = Exception.class) public void setAccountingStrategy(Integer id, Integer accountingStrategyId) { Site site = this.getById(id); site.setAccountingStrategyId(accountingStrategyId); 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 741455f..8011eb8 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 @@ -1,13 +1,25 @@ package com.ruoyi.chargingPile.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.chargingPile.api.model.TAccountingStrategy; import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.mapper.TAccountingStrategyDetailMapper; +import com.ruoyi.chargingPile.mapper.TAccountingStrategyMapper; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.other.api.domain.TVip; +import com.ruoyi.other.api.feignClient.VipClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.time.LocalTime; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * <p> @@ -20,8 +32,65 @@ @Service public class TAccountingStrategyDetailServiceImpl extends ServiceImpl<TAccountingStrategyDetailMapper, TAccountingStrategyDetail> implements TAccountingStrategyDetailService { + @Autowired + private TAccountingStrategyMapper accountingStrategyMapper; + @Autowired + private VipClient vipClient; + @Override public List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId) { return this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId); } + + @Override + public List<TAccountingStrategyDetailVO> queryStrategyBySiteIdAndTime(Integer siteId) { + TAccountingStrategy accountingStrategy = accountingStrategyMapper.selectOne(Wrappers.lambdaQuery(TAccountingStrategy.class) + .eq(TAccountingStrategy::getSiteId, siteId) + .last("limit 1")); + if(Objects.isNull(accountingStrategy)){ + throw new ServiceException("未查询到计费策略"); + } + List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId()); + // 获取当前时间段的计费策略明细 + TAccountingStrategyDetailVO accountingStrategyDetailVO = list.stream().filter(detail -> detail.getStartTime().compareTo(LocalTime.now().toString()) <= 0 && detail.getEndTime().compareTo(LocalTime.now().toString()) >= 0) + .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细")); + accountingStrategyDetailVO.setDiscount(accountingStrategy.getDiscount()); + // 获取后一次的计费策略明细 + TAccountingStrategyDetailVO accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0) + .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细")); + accountingStrategyDetailNext.setDiscount(accountingStrategy.getDiscount()); + list = new ArrayList<>(); + list.add(accountingStrategyDetailVO); + list.add(accountingStrategyDetailNext); + return list; + } + + @Override + public StrategyPriceVO queryPrice(Integer siteId) { + TAccountingStrategy accountingStrategy = accountingStrategyMapper.selectOne(Wrappers.lambdaQuery(TAccountingStrategy.class) + .eq(TAccountingStrategy::getSiteId, siteId) + .last("limit 1")); + if(Objects.isNull(accountingStrategy)){ + throw new ServiceException("未查询到计费策略"); + } + + StrategyPriceVO strategyPriceVO = new StrategyPriceVO(); + + List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId()); + // 获取当前时间段的计费策略明细 + TAccountingStrategyDetailVO accountingStrategyDetailVO = list.stream().filter(detail -> detail.getStartTime().compareTo(LocalTime.now().toString()) <= 0 && detail.getEndTime().compareTo(LocalTime.now().toString()) >= 0) + .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细")); + strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()) + .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP)); + // 查询最高抵扣的会员 + TVip maximumDeduction = vipClient.getVipInfoByType(1).getData(); + strategyPriceVO.setMaxDiscountAmount(maximumDeduction.getMaximumDeduction()); + // 查询最低起步价会员 + TVip monthlyCard = vipClient.getVipInfoByType(2).getData(); + strategyPriceVO.setVipStartPrice(monthlyCard.getMonthlyCard()); + // 查询最高折扣的会员 + TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData(); + strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount()); + 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 73709a5..e88f663 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 @@ -1,20 +1,38 @@ package com.ruoyi.chargingPile.service.impl; 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.chargingPile.api.dto.TChargingGunDTO; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.query.TChargingGunQuery; +import com.ruoyi.chargingPile.api.vo.ChargingGunCountVO; import com.ruoyi.chargingPile.api.vo.TChargingGunVO; import com.ruoyi.chargingPile.api.vo.TMonitoringEquipmentVO; +import com.ruoyi.chargingPile.domain.SiteMenu; import com.ruoyi.chargingPile.mapper.TChargingGunMapper; +import com.ruoyi.chargingPile.service.IPartnerService; import com.ruoyi.chargingPile.service.TChargingGunService; +import com.ruoyi.common.core.enums.status.ChargingGunModeEnum; +import com.ruoyi.common.core.enums.status.ChargingGunStatusEnum; 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.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.HashSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.Set; /** * <p> @@ -26,11 +44,52 @@ */ @Service public class TChargingGunServiceImpl extends ServiceImpl<TChargingGunMapper, TChargingGun> implements TChargingGunService { + + @Resource + private SysUserClient sysUserClient; + + @Resource + private IPartnerService partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + + + @Override public PageInfo<TChargingGunVO> pageList(TChargingGunQuery query) { + Set<Integer> siteIds = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_GUN); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + data.addAll(data1); + siteIds = new HashSet<>(data); + } + } PageInfo<TChargingGunVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); - List<TChargingGunVO> list = this.baseMapper.pageList(query,pageInfo); + List<TChargingGunVO> list = this.baseMapper.pageList(query,pageInfo, siteIds); + for (TChargingGunVO tChargingGunVO : list) { + Integer siteId = tChargingGunVO.getSiteId(); + tChargingGunVO.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_GUN_DELETE)); + tChargingGunVO.setAuthDownloadQRCode(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_GUN_DOWNLOAD_QR_CODE)); + tChargingGunVO.setAuthEndCharge(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_GUN_END_CHARGE)); + tChargingGunVO.setAuthQueryInfo(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_GUN_QUERY_INFO)); + tChargingGunVO.setAuthUpdate(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_GUN_UPDATE)); + tChargingGunVO.setAuthViewRates(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_GUN_VIEW_RATES)); + } pageInfo.setRecords(list); return pageInfo; } @@ -46,7 +105,8 @@ if(ajaxResult.isError()){ return ajaxResult; } - long count = this.count(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()).eq(TChargingGun::getDelFlag, 0)); + long count = this.count(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()) + .eq(TChargingGun::getDelFlag, 0)); if(count > 0){ return AjaxResult.error("接口编码已存在"); } @@ -62,18 +122,56 @@ */ @Override public AjaxResult update(TChargingGunDTO dto) { + TChargingGun chargingGun = this.getById(dto.getId()); + if(Arrays.asList(3,4,5,6).contains(chargingGun.getStatus())){ + return AjaxResult.error("接口占用中,无法编辑!"); + } AjaxResult ajaxResult = addVerify(dto); if(ajaxResult.isError()){ return ajaxResult; } - TChargingGun one = this.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()).eq(TChargingGun::getDelFlag, 0)); + TChargingGun one = this.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()) + .eq(TChargingGun::getDelFlag, 0)); if(null != one && !dto.getId().equals(one.getId())){ return AjaxResult.error("接口编码已存在"); } this.updateById(dto); return AjaxResult.success(); } - + + @Override + public Map<String, ChargingGunCountVO> getChargingGunCount(Integer siteId) { + Map<String, ChargingGunCountVO> map = new HashMap<>(4); + // 查询全部充电枪 + List<TChargingGun> list = this.list(Wrappers.lambdaQuery(TChargingGun.class).eq(TChargingGun::getSiteId, siteId)); + int freeCount = 0; + // 超级充 + ChargingGunCountVO superSufficient = getGunCount(ChargingGunModeEnum.SUPER_SUFFICIENT.getCode(), list); + freeCount += superSufficient.getFreeCount(); + map.put("superSufficient", superSufficient); + // 快充 + ChargingGunCountVO fastSufficient = getGunCount(ChargingGunModeEnum.FAST_SUFFICIENT.getCode(), list); + freeCount += fastSufficient.getFreeCount(); + map.put("fastSufficient", fastSufficient); + // 慢充 + ChargingGunCountVO slowSufficient = getGunCount(ChargingGunModeEnum.SLOW_SUFFICIENT.getCode(), list); + freeCount += slowSufficient.getFreeCount(); + map.put("slowSufficient", slowSufficient); + ChargingGunCountVO chargingGunCountVO = new ChargingGunCountVO(); + chargingGunCountVO.setTotalCount(list.size()); + chargingGunCountVO.setFreeCount(freeCount); + map.put("totalSufficient", chargingGunCountVO); + return map; + } + + private ChargingGunCountVO getGunCount(Integer chargeMode, List<TChargingGun> list){ + ChargingGunCountVO chargingGunCountVO = new ChargingGunCountVO(); + chargingGunCountVO.setTotalCount(list.stream().filter(tChargingGun -> tChargingGun.getChargeMode().equals(chargeMode)).collect(Collectors.toList()).size()); + chargingGunCountVO.setFreeCount(list.stream().filter(tChargingGun -> tChargingGun.getChargeMode().equals(chargeMode) + && tChargingGun.getStatus()== ChargingGunStatusEnum.IDLE.getCode()).collect(Collectors.toList()).size()); + return chargingGunCountVO; + } + /** * 校验必填项 * @param dto 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 f29d988..b38a11d 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 @@ -1,10 +1,26 @@ package com.ruoyi.chargingPile.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.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.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 javax.annotation.Resource; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * <p> @@ -16,5 +32,56 @@ */ @Service public class TChargingPileNotificationServiceImpl extends ServiceImpl<TChargingPileNotificationMapper, TChargingPileNotification> implements TChargingPileNotificationService { - + + @Resource + private SysUserClient sysUserClient; + + @Resource + private IPartnerService partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + + + + + + + /** + * 获取系统通知列表数据 + * @param siteId + * @param basePage + * @return + */ + @Override + public PageInfo<TChargingPileNotification> chargingPileNotificationPageList(Integer siteId, BasePage basePage) { + //校验当前账户站点权限 + Set<Integer> siteIds = null; + if(null == siteId){ + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + LambdaQueryWrapper<Site> wrapper = new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0); + if(2 == roleType){ + siteIds = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + data.addAll(data1); + siteIds = new HashSet<>(data); + } + } + }else{ + siteIds = new HashSet<>(siteId); + } + PageInfo<TChargingPileNotification> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); + List<TChargingPileNotification> list = this.baseMapper.chargingPileNotificationPageList(pageInfo, siteIds); + pageInfo.setRecords(list); + return pageInfo; + } } 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 0442587..6d771f5 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 @@ -1,22 +1,35 @@ package com.ruoyi.chargingPile.service.impl; 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.chargingPile.api.dto.PageChargingPileListDTO; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; 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.mapper.TChargingPileMapper; +import com.ruoyi.chargingPile.service.IPartnerService; import com.ruoyi.chargingPile.service.TChargingGunService; import com.ruoyi.chargingPile.service.TChargingPileService; 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.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -33,6 +46,18 @@ @Resource private TChargingGunService chargingGunService; + @Resource + private SysUserClient sysUserClient; + + @Resource + private IPartnerService partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + @@ -43,8 +68,32 @@ */ @Override public PageInfo<PageChargingPileListDTO> pageChargingPileList(PageChargingPileList page) { + Set<Integer> siteIds = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + siteIds = partnerService.authSite(objectId, SiteMenu.CHARGING_PILE); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + data.addAll(data1); + siteIds = new HashSet<>(data); + } + } PageInfo<PageChargingPileListDTO> pageInfo = new PageInfo<>(page.getPageCurr(), page.getPageSize()); - List<PageChargingPileListDTO> list = this.baseMapper.pageChargingPileList(pageInfo, page); + List<PageChargingPileListDTO> list = this.baseMapper.pageChargingPileList(pageInfo, page, siteIds); + for (PageChargingPileListDTO pageChargingPileListDTO : list) { + Integer siteId = pageChargingPileListDTO.getSiteId(); + pageChargingPileListDTO.setAuthAddChargingGun(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_PILE_ADD_CHARGING_GUN)); + pageChargingPileListDTO.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_PILE_DELETE)); + pageChargingPileListDTO.setAuthQueryInfo(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_PILE_QUERY_INFO)); + pageChargingPileListDTO.setAuthUpdate(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.CHARGING_PILE_UPDATE)); + } return pageInfo.setRecords(list); } @@ -135,20 +184,22 @@ /** * 删除充电桩 - * @param id + * @param ids * @return */ @Override - public AjaxResult delChargingPile(Integer id) { + public AjaxResult delChargingPile(Integer[] ids) { //检查是否有关联数据 //接口 - long count = chargingGunService.count(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0)); + long count = chargingGunService.count(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, Arrays.asList(ids)).eq(TChargingGun::getDelFlag, 0)); if(count > 0){ return AjaxResult.error("该充电桩有关联的接口数据,删除失败!"); } - TChargingPile chargingPile = this.getById(id); - chargingPile.setDelFlag(true); - this.updateById(chargingPile); + for (Integer id : ids) { + TChargingPile chargingPile = this.getById(id); + chargingPile.setDelFlag(true); + this.updateById(chargingPile); + } return AjaxResult.success(); } @@ -165,4 +216,17 @@ } chargingGunService.updateBatchById(list); } + + @Override + public List<TChargingPileVO> getChargingGunList(Integer siteId,Integer type) { + List<TChargingPileVO> chargingPileVOS = this.baseMapper.getChargingGunList(siteId); + List<TChargingGun> chargingGuns = chargingGunService.list(Wrappers.lambdaQuery(TChargingGun.class) + .eq(TChargingGun::getSiteId, siteId) + .eq(TChargingGun::getChargeMode, type)); + // 查询充电枪信息 + chargingPileVOS.forEach(item -> { + item.setChargingGunList(chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(item.getId())).collect(Collectors.toList())); + }); + return chargingPileVOS; + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml index f923f2a..1dc2633 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml @@ -5,6 +5,7 @@ name: ruoyi-chargingPile main: allow-bean-definition-overriding: true + allow-circular-references: true profiles: # 环境配置 active: dev diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml index ae39a6f..87bd1c9 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml @@ -16,6 +16,7 @@ <result column="remark" property="remark" /> <result column="account" property="account" /> <result column="password" property="password" /> + <result column="permission_remarks" property="permissionRemarks"/> <result column="create_time" property="createTime" /> <result column="del_flag" property="delFlag" /> </resultMap> @@ -37,6 +38,6 @@ <if test="null != item.roleId and '' != item.name"> and role_id = #{item.roleId} </if> - order by create_time desc limit #{item.pageCurr}, #{item.pageSize} + order by create_time desc </select> </mapper> \ No newline at end of file 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 ba0802e..79ce0b7 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 @@ -94,7 +94,13 @@ <if test="null != item.districtsCode and '' != item.districtsCode"> and a.districts_code = #{item.districtsCode} </if> - order by a.sort desc, a.create_time desc limit #{item.pageCurr}, #{item.pageSize} + <if test="null != ids"> + and a.id in + <foreach collection="ids" item="itemm" index="index" open="(" separator="," close=")"> + #{itemm} + </foreach> + </if> + order by a.sort desc, a.create_time desc </select> <select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.SiteVO"> @@ -168,4 +174,8 @@ </choose> </if> </select> + <select id="getDetailById" resultType="com.ruoyi.chargingPile.api.vo.SiteDetailVO"> + SELECT <include refid="Base_Column_List"></include> + FROM t_site WHERE id = #{siteId} AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} + </select> </mapper> \ No newline at end of file diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml index fac952c..f7c9430 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml @@ -57,6 +57,12 @@ <if test="query.chargeMode != null"> AND tas.chargeMode = #{query.chargeMode} </if> + <if test="null != siteIds"> + and tcg.site_id in + <foreach collection="siteIds" index="index" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </if> AND tas.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </where> ORDER BY tas.create_time DESC diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml index d09f3e1..0029319 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml @@ -56,7 +56,13 @@ <if test="null != item.type"> and a.type = #{item.type} </if> - order by a.create_time desc limit #{item.pageCurr}, #{item.pageSize} + <if test="null != siteIds"> + and a.site_id in + <foreach collection="siteIds" item="itemm" index="index" open="(" separator="," close=")"> + #{itemm} + </foreach> + </if> + order by a.create_time desc </select> @@ -69,4 +75,8 @@ left join t_site b on (a.site_id = b.id) left join t_partner c on (a.partner_id = c.id) </select> + <select id="getChargingGunList" resultType="com.ruoyi.chargingPile.api.vo.TChargingPileVO"> + select id,code, `name`, `number` from t_charging_pile + where del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} and site_id = #{siteId} + </select> </mapper> diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml index 031175c..e35a362 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml @@ -7,6 +7,7 @@ <id column="id" property="id" /> <result column="site_id" property="siteId" /> <result column="charging_pile_id" property="chargingPileId" /> + <result column="phone" property="phone"/> <result column="content" property="content" /> <result column="create_time" property="createTime" /> <result column="del_flag" property="delFlag" /> @@ -17,4 +18,24 @@ id, site_id, charging_pile_id, content, create_time, del_flag </sql> + + + <select id="chargingPileNotificationPageList" resultType="com.ruoyi.chargingPile.api.model.TChargingPileNotification"> + select + a.id, + b.`name` as siteName, + a.phone, + a.content, + a.create_time as createTime + from t_charging_pile_notification a + left join t_site b on (a.site_id = b.id) + where a.del_flag = 0 + <if test="null != siteIds"> + and a.site_id in + <foreach collection="siteIds" item="item" index="index" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + order by a.create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml index db469bd..b0bc8fc 100644 --- a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml @@ -5,6 +5,7 @@ name: ruoyi-integration main: allow-bean-definition-overriding: true + allow-circular-references: true profiles: # 环境配置 active: dev diff --git a/ruoyi-service/ruoyi-order/pom.xml b/ruoyi-service/ruoyi-order/pom.xml index ea57ec9..3488348 100644 --- a/ruoyi-service/ruoyi-order/pom.xml +++ b/ruoyi-service/ruoyi-order/pom.xml @@ -15,7 +15,19 @@ </description> <dependencies> - + <!-- ruoyi-modules-other-api --> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-other</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-account</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> <!-- ruoyi-modules-chargingPile-api --> <dependency> <groupId>com.ruoyi</groupId> @@ -23,6 +35,13 @@ <version>3.6.2</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-chargingPile</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> + <!-- SpringCloud Alibaba Nacos --> <dependency> 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 873af59..17afde1 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 @@ -2,23 +2,32 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; +import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityStatisticslVO; +import com.ruoyi.order.api.vo.TActivityVO; +import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.TExchangeOrderService; import com.ruoyi.order.service.TShoppingOrderService; +import com.ruoyi.order.service.TVipOrderService; +import com.ruoyi.order.service.impl.TChargingOrderServiceImpl; import io.swagger.annotations.Api; import io.swagger.models.auth.In; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -36,6 +45,33 @@ private TShoppingOrderService tShoppingOrderService; @Autowired private TExchangeOrderService exchangeOrderService; + @Autowired + private TChargingOrderService chargingOrderService; + @Autowired + private TVipOrderService vipOrderService; + @Autowired + private AppUserClient appUserClient; + @Autowired + private ChargingPileClient chargingPileClient; + /** + * 管理后台 活动费用统计 + * @param + * @return + */ + @PostMapping(value = "/activityStatistics") + public R<TActivityVO> activityStatistics(@RequestBody TActivityStatisticsQuery dto) { + if (StringUtils.hasLength(dto.getPhone())){ + // 远程调用查询出符合条件的用户ids + List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); + dto.setUserIds(data); + } + if (dto.getSiteId()!=null){ + // 远程调用查询出符合条件的充电桩ids + List<TChargingPile> data = chargingPileClient.getChargingPileBySiteId(dto.getSiteId()).getData(); + dto.setChargingPileIds(data.stream().map(TChargingPile::getId).collect(Collectors.toList())); + } + return R.ok(tShoppingOrderService.activityStatistics(dto)); + } //订单详情 @PostMapping(value = "/detail") @@ -78,49 +114,45 @@ return R.ok(res); } /** - * 管理后台 根据t_app_coupon流水号查询现金优惠券的订单编号 + * 管理后台 根据t_app_coupon订单ids查询优惠券的订单编号 * @param goodsIds 订单号-商品类型 * @return */ - @PostMapping("/getCodeBySerialNumber") - public R<List<String>> getCodeBySerialNumber(String goodsIds){ + @PostMapping("/getCodeByOrderId") + public R<List<String>> getCodeByOrderId(String goodsIds){ String[] split = goodsIds.split("-"); List<String> strings = new ArrayList<>(); for (String s : split) { - TShoppingOrder one = tShoppingOrderService.getOne(new QueryWrapper<TShoppingOrder>() - .eq("order_type", 2) - .eq("serial_number", s)); - if (one != null){ - strings.add(one.getCode()); + if (s.contains("-")){ + // 带有负号的是积分兑换的订单 + TExchangeOrder one = exchangeOrderService.getOne(new QueryWrapper<TExchangeOrder>() + .eq("order_type", 2) + .eq("id", s.replace("-",""))); + if (one != null){ + strings.add(one.getCode()); + }else{ + strings.add(""); + } }else{ - strings.add(""); + TShoppingOrder one = tShoppingOrderService.getOne(new QueryWrapper<TShoppingOrder>() + .eq("order_type", 2) + .eq("id", s)); + if (one != null){ + strings.add(one.getCode()); + }else{ + strings.add(""); + } } + } return R.ok(strings); } /** - * 管理后台 根据t_app_coupon流水号查询积分兑换优惠券的订单编号 + * 管理后台 根据t_app_coupon订单ids查询积分兑换优惠券的订单编号 * @param goodsIds 订单号-商品类型 * @return */ - @PostMapping("/getCodeBySerialNumberIntegral") - public R<List<String>> getCodeBySerialNumberIntegral(String goodsIds){ - String[] split = goodsIds.split("-"); - List<String> strings = new ArrayList<>(); - for (String s : split) { - TExchangeOrder one = exchangeOrderService.getOne(new QueryWrapper<TExchangeOrder - >() - .eq("order_type", 2) - .eq("serial_number", s)); - if (one != null){ - strings.add(one.getCode()); - }else{ - strings.add(""); - } - } - return R.ok(strings); - } } 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 9b8a2d1..844f56e 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 @@ -1,9 +1,24 @@ package com.ruoyi.order.controller; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.query.TOrderEvaluateQuery; +import com.ruoyi.order.api.vo.SiteDetailEvaluateVO; +import com.ruoyi.order.api.vo.TOrderEvaluateVO; +import com.ruoyi.order.dto.GetOrderEvaluatePageList; +import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO; +import com.ruoyi.order.service.TOrderEvaluateService; +import com.ruoyi.other.api.vo.TEvaluationTagVO; import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; /** * <p> @@ -18,5 +33,84 @@ @RequestMapping("/t-order-evaluate") public class TOrderEvaluateController { + @Autowired + private TOrderEvaluateService orderEvaluateService; + + + @ApiOperation(tags = {"小程序-订单评价"},value = "充电订单评价标签及数量查询") + @PostMapping(value = "/getTagCount") + public AjaxResult<List<TEvaluationTagVO>> getTagCount() { + return AjaxResult.ok(orderEvaluateService.getTagCount()); + } + + @ApiOperation(tags = {"小程序-订单评价"},value = "充电订单评价分页列表查询") + @PostMapping(value = "/pageList") + public AjaxResult<PageInfo<TOrderEvaluateVO>> pageList(@RequestBody TOrderEvaluateQuery query) { + return AjaxResult.ok(orderEvaluateService.getTagList(query)); + } + + + + + + + + @GetMapping(value = "/getPageList") + @ApiOperation(value = "获取充电评价列表", tags = {"管理后台-充电评价"}) + public AjaxResult<PageInfo<GetOrderEvaluatePageListDTO>> getPageList(@RequestBody GetOrderEvaluatePageList pageList){ + PageInfo<GetOrderEvaluatePageListDTO> list = orderEvaluateService.getPageList(pageList); + return AjaxResult.success(list); + } + + + + @DeleteMapping(value = "/delOrderEvaluate") + @ApiOperation(value = "删除充电评价", tags = {"管理后台-充电评价"}) + public AjaxResult delOrderEvaluate(@PathVariable Long id){ + TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id); + orderEvaluate.setDelFlag(true); + orderEvaluateService.updateById(orderEvaluate); + return AjaxResult.success(); + } + + + + + @PostMapping(value = "/replyEvaluation") + @ApiOperation(value = "充电评价回复", tags = {"管理后台-充电评价"}) + public AjaxResult replyEvaluation(@PathVariable("id") Long id, @RequestParam("reply") String reply){ + TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id); + reply = reply.replaceAll("& #40;", "(") + .replaceAll("& #41;", ")") + .replaceAll("& #40;", "(") + .replaceAll("& #41;", ")") + .replaceAll("& #39;", "'") + .replaceAll("& lt;", "<") + .replaceAll("& gt;", ">"); + orderEvaluate.setEvaluationResponse(reply); + orderEvaluate.setResponseTime(LocalDateTime.now()); + orderEvaluateService.updateById(orderEvaluate); + return AjaxResult.success(); + } + + + + + @DeleteMapping(value = "/delOrderEvaluateReply") + @ApiOperation(value = "删除充电评价回复", tags = {"管理后台-充电评价"}) + public AjaxResult delOrderEvaluateReply(@PathVariable Long id){ + TOrderEvaluate orderEvaluate = orderEvaluateService.getById(id); + orderEvaluate.setEvaluationResponse(""); + orderEvaluateService.updateById(orderEvaluate); + return AjaxResult.success(); + } + + + @ApiOperation(tags = {"小程序-订单评价"},value = "电站详情中评价列表查询") + @GetMapping(value = "/getSiteDetailEveList") + public AjaxResult<SiteDetailEvaluateVO> getSiteDetailEveList(@RequestParam(value = "siteId")@ApiParam(value = "站点id")Integer siteId) { + return AjaxResult.ok(orderEvaluateService.getSiteDetailEveList(siteId)); + } + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java new file mode 100644 index 0000000..c195f20 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageList.java @@ -0,0 +1,23 @@ +package com.ruoyi.order.dto; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/8/12 19:07 + */ +@Data +@ApiModel +public class GetOrderEvaluatePageList extends BasePage { + @ApiModelProperty(value = "订单编号") + private String code; + @ApiModelProperty(value = "评价内容") + private String content; + @ApiModelProperty(value = "评价类型(1=好评,2=中评,3=差评)") + private Integer evaluateType; + @ApiModelProperty(value = "归属电站id") + private Integer siteId; +} 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 new file mode 100644 index 0000000..37ac8db --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetOrderEvaluatePageListDTO.java @@ -0,0 +1,40 @@ +package com.ruoyi.order.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/12 19:09 + */ +@Data +@ApiModel +public class GetOrderEvaluatePageListDTO { + @ApiModelProperty("订单id") + private String id; + @ApiModelProperty("订单编号") + private String code; + private Long appUserId; + @ApiModelProperty("用户头像") + private String avatar; + @ApiModelProperty("用户电话") + private String phone; + @ApiModelProperty("评分") + private Integer mark; + @ApiModelProperty("归属电站名称") + private String siteName; + private Integer siteId; + @ApiModelProperty("评价内容") + private String content; + @ApiModelProperty("评价图片") + private String imgUrl; + @ApiModelProperty("评价时间") + private String createTime; + @ApiModelProperty("评价标签") + private List<String> tags; + @ApiModelProperty("回复内容") + private String recover; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TGrantVipMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TGrantVipMapper.java new file mode 100644 index 0000000..0a0dc22 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TGrantVipMapper.java @@ -0,0 +1,19 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.order.api.model.TGrantVip; +import com.ruoyi.order.api.model.TVipOrder; +import org.apache.ibatis.annotations.Mapper; + +/** + * <p> + * Mapper 接口 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Mapper +public interface TGrantVipMapper extends BaseMapper<TGrantVip> { + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java index 8cb9c1b..e428668 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateMapper.java @@ -1,8 +1,18 @@ package com.ruoyi.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.query.TOrderEvaluateQuery; +import com.ruoyi.order.api.vo.TOrderEvaluateVO; +import com.ruoyi.order.dto.GetOrderEvaluatePageList; +import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO; +import com.ruoyi.other.api.vo.TEvaluationTagVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** * <p> @@ -15,4 +25,28 @@ @Mapper public interface TOrderEvaluateMapper extends BaseMapper<TOrderEvaluate> { + /** + * 订单评价分页列表查询 + * @param query + * @param pageInfo + * @return + */ + List<TOrderEvaluateVO> pageList(@Param("query") TOrderEvaluateQuery query,@Param("pageInfo")PageInfo<TOrderEvaluateVO> pageInfo); + + + /** + * 获取充电评价列表数据 + * @param pageList + * @param pageInfo + * @return + */ + List<GetOrderEvaluatePageListDTO> getPageList(@Param("query") GetOrderEvaluatePageList pageList, @Param("evaluationTagIds") List<Integer> evaluationTagIds, + PageInfo<GetOrderEvaluatePageListDTO> pageInfo); + + /** + * 查询站点下的所有订单评价 + * @param siteId + * @return + */ + List<TOrderEvaluateVO> getOrderEvaluateBySiteId(@Param("siteId")Integer siteId); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateTagMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateTagMapper.java index 2d365fc..80d3c73 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateTagMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderEvaluateTagMapper.java @@ -2,7 +2,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.order.api.model.TOrderEvaluateTag; +import com.ruoyi.other.api.vo.TEvaluationTagVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -15,4 +19,10 @@ @Mapper public interface TOrderEvaluateTagMapper extends BaseMapper<TOrderEvaluateTag> { + /** + * 获取标签评价数量 + * @param tagIds + * @return + */ + List<TEvaluationTagVO> getCountByTagIds(@Param("tagIds") List<Integer> tagIds); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java index db3f417..da4a11c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java @@ -1,8 +1,14 @@ package com.ruoyi.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityStatisticslVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -15,4 +21,5 @@ @Mapper public interface TShoppingOrderMapper extends BaseMapper<TShoppingOrder> { + List<TActivityStatisticslVO> activityStatistics(@Param("pageInfo") PageInfo<TActivityStatisticslVO> pageInfo, @Param("req")TActivityStatisticsQuery dto); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TGrantVipService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TGrantVipService.java new file mode 100644 index 0000000..6b0be52 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TGrantVipService.java @@ -0,0 +1,17 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.order.api.model.TGrantVip; +import com.ruoyi.order.api.model.TVipOrder; + +/** + * <p> + * 服务类 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +public interface TGrantVipService extends IService<TGrantVip> { + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java index 0acd943..534d681 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java @@ -1,7 +1,17 @@ package com.ruoyi.order.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.query.TOrderEvaluateQuery; +import com.ruoyi.order.api.vo.SiteDetailEvaluateVO; +import com.ruoyi.order.api.vo.TOrderEvaluateVO; +import com.ruoyi.order.dto.GetOrderEvaluatePageList; +import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO; +import com.ruoyi.other.api.vo.TEvaluationTagVO; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; /** * <p> @@ -13,4 +23,31 @@ */ public interface TOrderEvaluateService extends IService<TOrderEvaluate> { + /** + * 获取评价标签 + * @return + */ + List<TEvaluationTagVO> getTagCount(); + + /** + * 充电订单评价分页列表查询 + * @param query + * @return + */ + PageInfo<TOrderEvaluateVO> getTagList(TOrderEvaluateQuery query); + + /** + * 电站详情中评价列表查询 + * @param siteId + * @return + */ + SiteDetailEvaluateVO getSiteDetailEveList(Integer siteId); + + + /** + * 获取充电评价列表 + * @param pageList + * @return + */ + PageInfo<GetOrderEvaluatePageListDTO> getPageList(GetOrderEvaluatePageList pageList); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java index 2487ffd..da59889 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java @@ -1,7 +1,11 @@ package com.ruoyi.order.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityStatisticslVO; +import com.ruoyi.order.api.vo.TActivityVO; /** * <p> @@ -13,4 +17,5 @@ */ public interface TShoppingOrderService extends IService<TShoppingOrder> { + TActivityVO activityStatistics(TActivityStatisticsQuery dto); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TGrantVipServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TGrantVipServiceImpl.java new file mode 100644 index 0000000..a86c6ee --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TGrantVipServiceImpl.java @@ -0,0 +1,23 @@ +package com.ruoyi.order.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.order.api.model.TGrantVip; +import com.ruoyi.order.api.model.TVipOrder; +import com.ruoyi.order.mapper.TGrantVipMapper; +import com.ruoyi.order.mapper.TVipOrderMapper; +import com.ruoyi.order.service.TGrantVipService; +import com.ruoyi.order.service.TVipOrderService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 服务实现类 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Service +public class TGrantVipServiceImpl extends ServiceImpl<TGrantVipMapper, TGrantVip> implements TGrantVipService { + +} 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 c636186..44f75a0 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,10 +1,46 @@ package com.ruoyi.order.service.impl; +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.feignClient.AppUserCarClient; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.account.api.model.TAppUserCar; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppUser; +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.web.page.PageInfo; +import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.model.TOrderEvaluateTag; +import com.ruoyi.order.api.query.TOrderEvaluateQuery; +import com.ruoyi.order.api.vo.SiteDetailEvaluateVO; +import com.ruoyi.order.api.vo.TOrderEvaluateVO; +import com.ruoyi.order.dto.GetOrderEvaluatePageList; +import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO; +import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.mapper.TOrderEvaluateMapper; +import com.ruoyi.order.mapper.TOrderEvaluateTagMapper; import com.ruoyi.order.service.TOrderEvaluateService; +import com.ruoyi.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.feignClient.TEvaluationTagClient; +import com.ruoyi.other.api.vo.TEvaluationTagVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; /** * <p> @@ -17,4 +53,153 @@ @Service public class TOrderEvaluateServiceImpl extends ServiceImpl<TOrderEvaluateMapper, TOrderEvaluate> implements TOrderEvaluateService { + @Resource + private TEvaluationTagClient evaluationTagClient; + @Resource + private AppUserClient appUserClient; + @Autowired + private AppUserCarClient appUserCarClient; + @Autowired + private TOrderEvaluateTagMapper orderEvaluateTagMapper; + @Resource + private TChargingOrderMapper chargingOrderMapper; + + @Resource + private SiteClient siteClient; + + + + + + + + + + + + + @Autowired + private TOrderEvaluateMapper orderEvaluateMapper; + @Override + public List<TEvaluationTagVO> getTagCount() { + // 查询标签列表 + R<List<TEvaluationTagVO>> r = evaluationTagClient.getTagList(null); + List<TEvaluationTagVO> tagList = r.getData(); + List<Integer> tagIds = tagList.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList()); + // 统计标签使用数量 + List<TEvaluationTagVO> counts = orderEvaluateTagMapper.getCountByTagIds(tagIds); + tagList.forEach(tag -> { + counts.forEach(count -> { + if (tag.getId().equals(count.getId())) { + tag.setTagCount(count.getTagCount()); + } + }); + }); + tagList = tagList.stream().sorted(Comparator.comparing(TEvaluationTagVO::getTagCount).reversed()).collect(Collectors.toList()); + // 统计有图,好评,中差评数量 + long imgUrlCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class) + .isNotNull(TOrderEvaluate::getImgUrl)); + packageTagCount(imgUrlCount,"有图",tagList); + long goodCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class) + .ge(TOrderEvaluate::getMark,4)); + packageTagCount(goodCount,"好评",tagList); + long badCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class) + .le(TOrderEvaluate::getMark,3)); + packageTagCount(badCount,"中差评",tagList); + return tagList; + } + + @Override + public PageInfo<TOrderEvaluateVO> getTagList(TOrderEvaluateQuery query) { + PageInfo<TOrderEvaluateVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); + // 查询站点下的所有订单 + List<TChargingOrder> tChargingOrders = chargingOrderMapper.selectList(Wrappers.lambdaQuery(TChargingOrder.class) + .eq(TChargingOrder::getSiteId, query.getSiteId())); + if(CollectionUtils.isEmpty(tChargingOrders)){ + return new PageInfo<>(); + } + List<Long> orderIds = tChargingOrders.stream().map(TChargingOrder::getId).collect(Collectors.toList()); + query.setOrderIds(orderIds); + List<TOrderEvaluateVO> list = this.baseMapper.pageList(query,pageInfo); + // 查询用户信息 + List<TAppUser> appUsers = appUserClient.getUserByIds(list.stream().map(TOrderEvaluateVO::getAppUserId).collect(Collectors.toList())).getData(); + // 查询用户绑定车辆品牌 + List<TAppUserCar> appUserCars = appUserCarClient.getCarByIds(list.stream().map(TOrderEvaluateVO::getAppUserCarId).collect(Collectors.toList())).getData(); + list.forEach(orderEvaluateVO -> { + TAppUser appUser = appUsers.stream().filter(user -> user.getId().equals(orderEvaluateVO.getAppUserId())).findFirst().orElse(null); + if(Objects.nonNull(appUser)){ + orderEvaluateVO.setName(appUser.getName()); + orderEvaluateVO.setAvatar(appUser.getAvatar()); + } + TAppUserCar appUserCar = appUserCars.stream().filter(car -> car.getId().equals(Long.parseLong(String.valueOf(orderEvaluateVO.getAppUserCarId())))).findFirst().orElse(null); + if(Objects.nonNull(appUserCar)){ + orderEvaluateVO.setCarName(appUserCar.getVehicleBrand()); + } + }); + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public SiteDetailEvaluateVO getSiteDetailEveList(Integer siteId) { + SiteDetailEvaluateVO siteDetailEvaluateVO = new SiteDetailEvaluateVO(); + // 查询站点下的所有订单评价 + List<TOrderEvaluateVO> tChargingOrders = orderEvaluateMapper.getOrderEvaluateBySiteId(siteId); + if(!CollectionUtils.isEmpty(tChargingOrders)){ + siteDetailEvaluateVO.setOrderEvaluateVOS(tChargingOrders); + // 统计好评率 + long goodCount = tChargingOrders.stream().filter(orderEvaluateVO -> orderEvaluateVO.getMark()>=4).count(); + BigDecimal reviewRate = new BigDecimal(goodCount).divide(new BigDecimal(tChargingOrders.size())).setScale(2, BigDecimal.ROUND_HALF_UP); + siteDetailEvaluateVO.setReviewRate(reviewRate); + siteDetailEvaluateVO.setEvaluateCount(tChargingOrders.size()); + siteDetailEvaluateVO.setOrderEvaluateVOS(tChargingOrders.stream().limit(3).collect(Collectors.toList())); + } + return siteDetailEvaluateVO; + } + + /** + * 统计有图,好评,中差评数量 + * @param count + * @param name + * @param tagList + */ + private void packageTagCount(Long count,String name,List<TEvaluationTagVO> tagList){ + if(count>0){ + TEvaluationTagVO evaluationTagVO = new TEvaluationTagVO(); + evaluationTagVO.setName(name); + evaluationTagVO.setTagCount(Integer.parseInt(String.valueOf(count))); + tagList.add(evaluationTagVO); + } + } + + + /** + * 获取充电评价列表 + * @param pageList + * @return + */ + @Override + public PageInfo<GetOrderEvaluatePageListDTO> getPageList(GetOrderEvaluatePageList pageList) { + PageInfo<GetOrderEvaluatePageListDTO> pageInfo = new PageInfo<>(pageList.getPageCurr(), pageList.getPageSize()); + List<Integer> evaluationTagIds = null; + if(null != pageList.getEvaluateType()){ + List<TEvaluationTagVO> data = evaluationTagClient.getTagList(pageList.getEvaluateType()).getData(); + evaluationTagIds = data.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList()); + } + List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, pageInfo); + for (GetOrderEvaluatePageListDTO dto : list) { + TAppUser appUser = appUserClient.getUserById(dto.getAppUserId()).getData(); + dto.setAvatar(appUser.getAvatar()); + String phone = appUser.getPhone(); + dto.setPhone(phone.substring(0, 3) + "****" + phone.substring(6)); + Site site = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData().get(0); + dto.setSiteName(site.getName()); + List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, dto.getId())); + List<Integer> tagIds = tOrderEvaluateTags.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList()); + List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagIds).getData(); + List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList()); + dto.setTags(collect); + } + return pageInfo.setRecords(list); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java index b30e82f..ab1b1d6 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java @@ -1,10 +1,18 @@ package com.ruoyi.order.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityStatisticslVO; +import com.ruoyi.order.api.vo.TActivityVO; import com.ruoyi.order.mapper.TShoppingOrderMapper; import com.ruoyi.order.service.TShoppingOrderService; import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.List; /** * <p> @@ -17,4 +25,100 @@ @Service public class TShoppingOrderServiceImpl extends ServiceImpl<TShoppingOrderMapper, TShoppingOrder> implements TShoppingOrderService { + @Override + public TActivityVO activityStatistics(TActivityStatisticsQuery dto) { + TActivityVO res = new TActivityVO(); + + + + PageInfo<TActivityStatisticslVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); + List<TActivityStatisticslVO> list = this.baseMapper.activityStatistics(pageInfo,dto); + list.sort((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime())); + // 优惠券金额 + BigDecimal coupon = new BigDecimal("0"); + // 会员抵扣金额 + BigDecimal discount = new BigDecimal("0"); + // 会员活动金额 + BigDecimal vipActivity = new BigDecimal("0"); + // 赠送会员 + BigDecimal grantVip = new BigDecimal("0"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + for (TActivityStatisticslVO tActivityStatisticslVO : list) { + // 判断享有了哪些类型 + switch (tActivityStatisticslVO.getOrderType()){ + case 1: + StringBuilder stringBuilder = new StringBuilder(); + + // 充电订单 优惠券金额大于0 + if (tActivityStatisticslVO.getCouponDiscountAmount()!=null + && + (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ + coupon = coupon.add(tActivityStatisticslVO.getCouponDiscountAmount()); + stringBuilder.append("优惠券抵扣").append("+"); + } + if (tActivityStatisticslVO.getVipDiscountAmount()!=null + && + (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ + discount = discount.add(tActivityStatisticslVO.getVipDiscountAmount()); + stringBuilder.append("会员抵扣").append("+"); + } + stringBuilder.deleteCharAt(stringBuilder.length()-1); + tActivityStatisticslVO.setType(stringBuilder.toString()); + tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime())); + break; + case 2: + StringBuilder stringBuilder1 = new StringBuilder(); + + // 购物订单 优惠券金额大于0 + if (tActivityStatisticslVO.getCouponDiscountAmount()!=null + && + (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ + coupon = coupon.add(tActivityStatisticslVO.getCouponDiscountAmount()); + stringBuilder1.append("优惠券抵扣").append("+"); + } + if (tActivityStatisticslVO.getVipDiscountAmount()!=null + && + (tActivityStatisticslVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ + discount = discount.add(tActivityStatisticslVO.getVipDiscountAmount()); + stringBuilder1.append("会员抵扣").append("+"); + } + stringBuilder1.deleteCharAt(stringBuilder1.length()-1); + tActivityStatisticslVO.setType(stringBuilder1.toString()); + tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime())); + break; + case 3: + // 会员订单 优惠金额大于0 + if (tActivityStatisticslVO.getVipDiscountAmount()!=null + && + (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){ + vipActivity = vipActivity.add(tActivityStatisticslVO.getVipDiscountAmount()); + } + tActivityStatisticslVO.setType("会员活动"); + tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime())); + break; + case 4: + // 赠送会员订单 如果支付金额为0 那么就是后台赠送的会员 + if (tActivityStatisticslVO.getPaymentAmount().compareTo(BigDecimal.ZERO)==0){ + grantVip = grantVip.add(tActivityStatisticslVO.getOrderAmount()); + tActivityStatisticslVO.setType("赠送会员"); + tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime())); + }else{ + // 赠送 + grantVip = grantVip.add(tActivityStatisticslVO.getVipDiscountAmount()); + tActivityStatisticslVO.setType("赠送会员"); + tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime())); + } + break; + } + } + pageInfo.setRecords(list); + res.setList(pageInfo); + res.setTotal(coupon.add(discount).add(vipActivity).add(grantVip)); + res.setCoupon(coupon); + res.setDiscount(discount); + res.setVipActivity(vipActivity); + res.setGrantVip(grantVip); + return res; + } } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml index c895ca7..7c243b4 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml @@ -5,6 +5,7 @@ name: ruoyi-order main: allow-bean-definition-overriding: true + allow-circular-references: true profiles: # 环境配置 active: dev 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 5d95538..210207a 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 @@ -10,6 +10,7 @@ <result column="order_classification" property="orderClassification" /> <result column="app_user_id" property="appUserId" /> <result column="app_user_car_id" property="appUserCarId" /> + <result column="site_id" property="siteId" /> <result column="parking_lot_id" property="parkingLotId" /> <result column="charging_pile_id" property="chargingPileId" /> <result column="charging_gun_id" property="chargingGunId" /> @@ -37,7 +38,7 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, code, order_type, order_classification, app_user_id, app_user_car_id, parking_lot_id, charging_pile_id, charging_gun_id, start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, recharge_serial_number, order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, refund_code, refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag + id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id, charging_pile_id, charging_gun_id, start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, recharge_serial_number, order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, refund_code, refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag </sql> </mapper> 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 8b88832..f086241 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 @@ -8,6 +8,7 @@ <result column="order_type" property="orderType" /> <result column="order_id" property="orderId" /> <result column="app_user_id" property="appUserId" /> + <result column="app_user_car_id" property="appUserCarId" /> <result column="mark" property="mark" /> <result column="content" property="content" /> <result column="img_url" property="imgUrl" /> @@ -19,7 +20,108 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, order_type, order_id, app_user_id, mark, content, img_url, evaluation_response, create_time, response_time, del_flag + id, order_type, order_id, app_user_id,app_user_car_id, mark, content, img_url, evaluation_response, create_time, response_time, del_flag </sql> + <select id="pageList" resultType="com.ruoyi.order.api.vo.TOrderEvaluateVO"> + select id, order_type, order_id, app_user_id,app_user_car_id, mark, content, img_url, evaluation_response, + create_time, response_time, del_flag + from t_order_evaluate where id in + (select toe.id + from t_order_evaluate toe + left join t_order_evaluate_tag toet on toe.id = toet.order_evaluate_id + <where> + <if test="query.orderIds != null and query.orderIds.size()>0"> + and toe.order_id in + <foreach collection="query.orderIds" item="orderId" open="(" separator="," close=")"> + #{orderId} + </foreach> + </if> + <if test="query.tagType != null"> + <choose> + <when test="query.tagType == 2"> + AND toe.img_url IS NOT NULL + </when> + <when test="query.tagType == 3"> + AND toe.mark >= 4 + </when> + <when test="query.tagType == 4"> + AND toe.mark <= 3 + </when> + <when test="query.tagType == 5"> + AND toet.evaluation_tag_id = #{query.tagId} + </when> + </choose> + </if> + AND toe.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} + </where> + GROUP BY toe.id) + <if test="query.tagType != null"> + <choose> + <when test="query.tagType == 1"> + ORDER BY create_time DESC + </when> + <otherwise> + ORDER BY + CASE + WHEN img_url IS NOT NULL THEN 0 + ELSE 1 + END ASC, + create_time DESC; + </otherwise> + </choose> + </if> + <if test="query.tagType == null"> + ORDER BY + CASE + WHEN img_url IS NOT NULL THEN 0 + ELSE 1 + END ASC, + create_time DESC; + </if> + </select> + <select id="getOrderEvaluateBySiteId" resultType="com.ruoyi.order.api.vo.TOrderEvaluateVO"> + select id, order_type, order_id, app_user_id,app_user_car_id, mark, content, img_url, evaluation_response, + create_time, response_time, del_flag + from t_order_evaluate toe + where toe.order_id in + (select toc.order_id + from t_charging_order toc + where toc.site_id = #{siteId} + and toc.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}) + </select> + + + <select id="getPageList" resultType="com.ruoyi.order.dto.GetOrderEvaluatePageListDTO"> + select + CAST(a.id AS CHAR) as id, + b.`code`, + a.mark, + b.site_id as siteId, + b.app_user_id as appUserId, + a.content, + a.img_url as imgUrl, + DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%i:%s') as createTime, + a.evaluation_response as `recover` + from t_order_evaluate a + left join t_charging_order b on (a.order_id = b.id) + where a.order_type = 1 and a.del_flag = 0 + <if test="null != query.code and '' != query.code"> + and b.`code` like CONCAT('%', #{query.code}, '%') + </if> + <if test="null != query.content and '' != query.content"> + and a.content like CONCAT('%', #{query.content}, '%') + </if> + <if test="null != query.evaluateType"> + 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} + </foreach> + ) + </if> + <if test="null != query.siteId"> + and b.site_id = #{query.siteId} + </if> + order by a.create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateTagMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateTagMapper.xml index d48e938..d1ee724 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateTagMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderEvaluateTagMapper.xml @@ -13,5 +13,17 @@ <sql id="Base_Column_List"> id, order_evaluate_id, evaluation_tag_id </sql> + <select id="getCountByTagIds" resultType="com.ruoyi.other.api.vo.TEvaluationTagVO"> + SELECT evaluation_tag_id,count(id) AS tagCount FROM t_order_evaluate_tag + <where> + <if test="tagIds != null and tagIds.size() > 0"> + AND evaluation_tag_id IN + <foreach collection="tagIds" item="tagId" open="(" separator="," close=")"> + #{tagId} + </foreach> + </if> + </where> + GROUP BY evaluation_tag_id + </select> </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml index 9a6103f..f5636c2 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml @@ -43,5 +43,166 @@ <sql id="Base_Column_List"> id, code, app_user_id, order_type, goods_id, coupon_id, purchase_quantity, app_user_address_id, order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, payment_status, payment_type, serial_number, remark, status, express_company, express_number, consigner_id, consigner_time, receiving_time, cancellation_time, cancellation_id, refund_code, refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag </sql> + <select id="activityStatistics" resultType="com.ruoyi.order.api.vo.TActivityStatisticslVO"> + <if test="req.orderType == null or req.orderType == 1"> + <if test="req.type == null or req.type == 1 or req.type == 2"> + select t1.code ,t1.order_amount as orderAmount, + t1.coupon_discount_amount as couponDiscountAmount, + t1.vip_discount_amount as vipDiscountAmount, + t1.payment_amount as paymentAmount, + t1.create_time as createTime, + 1 as orderType + from t_charging_order t1 + where 1 = 1 + <if test="null != req.code and req.code!=''"> + and t1.code LIKE CONCAT('%',#{req.code},'%') + </if> + <if test="req.type != null and req.type != '' and req.type == 1"> + and t1.coupon_discount_amount != null and t1.coupon_discount_amount != 0 + </if> + <if test="req.type != null and req.type != '' and req.type == 2"> + and t1.vip_discount_amount != null and t1.vip_discount_amount != 0 + </if> + <if test="null != req.userIds and req.userIds.size()>0" > + and t1.app_user_id in + <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="null != req.chargingPileIds and req.chargingPileIds.size()>0" > + and t1.charging_pile_id in + <foreach collection="req.chargingPileIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="req.endTime != null and req.endTime != '' and req.startTime != null and req.startTime != ''"> + AND (t1.create_time between CONCAT(#{req.startTime},':00') and CONCAT(#{req.endTime},':59')) + </if> + and t1.recharge_payment_status =2 + and t1.refund_status !=2 + </if> + </if> + <if test="req.orderType == null or req.orderType == 2"> + <if test="req.type == null or req.type == 1 or req.type == 2"> + union all + select t2.code ,t2.order_amount as orderAmount, + t2.coupon_discount_amount as couponDiscountAmount, + t2.vip_discount_amount as vipDiscountAmount, + t2.payment_amount as paymentAmount, + t2.create_time as createTime, + 2 as orderType + from t_shopping_order t2 + where 1 = 1 + <if test="null != req.code and req.code!=''"> + and t2.code LIKE CONCAT('%',#{req.code},'%') + </if> + <if test="req.type != null and req.type != '' and req.type == 1"> + and t2.coupon_discount_amount != null and t1.coupon_discount_amount != 0 + </if> + <if test="req.type != null and req.type != '' and req.type == 2"> + and t2.vip_discount_amount != null and t1.vip_discount_amount != 0 + </if> + <if test="req.type == null "> + and t2.vip_discount_amount != null and t1.vip_discount_amount != 0 and t2.coupon_discount_amount != null and t1.coupon_discount_amount != 0 + </if> + <if test="null != req.userIds and req.userIds.size()>0" > + and t2.app_user_id in + <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="req.endTime != null and req.endTime != '' and req.startTime != null and req.startTime != ''"> + AND (t2.create_time between CONCAT(#{req.startTime},':00') and CONCAT(#{req.endTime},':59')) + </if> + and t2.refund_status !=2 + and t2.payment_status =2 + </if> + </if> + <if test="req.orderType == null or req.orderType == 3"> + <if test="req.type == null or req.type == 3"> + union all + select t3.code ,t3.order_amount as orderAmount, + 0 as couponDiscountAmount, + t3.discount_amount as vipDiscountAmount, + t3.payment_amount as paymentAmount, + t3.create_time as createTime, + 3 as orderType + from t_vip_order t3 + where 1 = 1 + and t3.type ==1 + <if test="null != req.code and req.code!=''"> + and t3.code LIKE CONCAT('%',#{req.code},'%') + </if> + <if test="req.type == null "> + and t3.discount_amount != null and t3.discount_amount != 0 + </if> + <if test="null != req.userIds and req.userIds.size()>0" > + and t3.app_user_id in + <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="req.endTime != null and req.endTime != '' and req.startTime != null and req.startTime != ''"> + AND (t3.create_time between CONCAT(#{req.startTime},':00') and CONCAT(#{req.endTime},':59')) + </if> + and t3.payment_status =2 + </if> + </if> + <if test="req.orderType == null or req.orderType == 4"> + <if test="req.type == null or req.type == 4"> + union all + select t4.code ,t4.order_amount as orderAmount, + 0 as couponDiscountAmount, + t4.discount_amount as vipDiscountAmount, + t4.payment_amount as paymentAmount, + t4.create_time as createTime, + 4 as orderType + from t_vip_order t4 + where 1 = 1 + and t4.type =2 + <if test="null != req.code and req.code!=''"> + and t4.code LIKE CONCAT('%',#{req.code},'%') + </if> + <if test="req.type == null "> + and t4.discount_amount != null and t4.discount_amount != 0 + </if> + <if test="null != req.userIds and req.userIds.size()>0" > + and t4.app_user_id in + <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="req.endTime != null and req.endTime != '' and req.startTime != null and req.startTime != ''"> + AND (t4.create_time between CONCAT(#{req.startTime},':00') and CONCAT(#{req.endTime},':59')) + </if> + and t4.payment_status =2 + </if> + </if> + <if test="req.orderType == null or req.orderType == 4"> + <if test="req.type == null or req.type == 4"> + union all + select t5.code ,t5.order_amount as orderAmount, + 0 as couponDiscountAmount, + 0 as vipDiscountAmount, + 0 as paymentAmount, + t5.create_time as createTime, + 4 as orderType + from t_grant_vip t5 + where 1 = 1 + <if test="null != req.code and req.code!=''"> + and t5.code LIKE CONCAT('%',#{req.code},'%') + </if> + <if test="null != req.userIds and req.userIds.size()>0" > + and t5.app_user_id in + <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="req.endTime != null and req.endTime != '' and req.startTime != null and req.startTime != ''"> + AND (t5.create_time between CONCAT(#{req.startTime},':00') and CONCAT(#{req.endTime},':59')) + </if> + </if> + </if> + </select> </mapper> 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 new file mode 100644 index 0000000..ee8b0b7 --- /dev/null +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TActivityStatisticsController.java @@ -0,0 +1,41 @@ +package com.ruoyi.other.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.account.api.model.TAppUser; +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.order.api.feignClient.OrderClient; +import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.TActivityStatisticslVO; +import com.ruoyi.order.api.vo.TActivityVO; +import com.ruoyi.other.api.domain.TActivity; +import com.ruoyi.other.api.domain.TCoupon; +import com.ruoyi.other.api.dto.AdvertisingDTO; +import com.ruoyi.other.query.CouponQuery; +import com.ruoyi.other.service.TActivityService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * <p> + * 管理后台活动费用统计 + * </p> + * + * @author 无关风月 + * @since 2024-08-06 + */ +@RestController +@RequestMapping("/activity") +public class TActivityStatisticsController { + @Autowired + private OrderClient orderClient; + @ApiOperation(tags = {"管理后台-活动费用统计"},value = "管理后台活动费用统计") + @PostMapping(value = "/pageList") + public AjaxResult<TActivityVO> pageList(@RequestBody TActivityStatisticsQuery query) { + return AjaxResult.ok(orderClient.activityStatistics(query).getData()); + } +} + 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 4cfac38..8bfd455 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 @@ -5,6 +5,8 @@ import com.ruoyi.common.core.enums.status.AdvertisingStatusEnum; 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.other.api.domain.TAdvertising; import com.ruoyi.other.api.domain.TVip; import com.ruoyi.other.api.dto.AdvertisingDTO; 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 7462917..61ac718 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 @@ -1,6 +1,7 @@ package com.ruoyi.other.controller; +import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.ExchangeRecordVO; @@ -13,9 +14,17 @@ import com.ruoyi.other.service.TActivityService; import com.ruoyi.other.service.TCouponService; import com.ruoyi.other.service.TGoodsService; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; /** * <p> @@ -64,8 +73,37 @@ @PostMapping("/exchangeRecord") @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券查看详情-兑换记录") public AjaxResult<PageInfo<ExchangeRecordVO>> exchangeRecord(@RequestBody ExchangeRecordGoodsQuery dto) { - - return AjaxResult.ok(null); + PageInfo<ExchangeRecordVO> data = appCouponClient.getExchangeRecordByCouponId(dto).getData(); + List<ExchangeRecordVO> records = data.getRecords(); + for (ExchangeRecordVO record : records) { + TCoupon byId = tCouponService.getById(record.getCouponId()); + if (byId!=null){ + record.setDiscountAmount("¥"+byId.getDiscountAmount()); + if (Objects.equals(byId.getMeetTheConditions(), BigDecimal.ZERO)){ + record.setMeetTheConditions("无门槛"); + }else{ + record.setMeetTheConditions("满"+byId.getMeetTheConditions()+"元可用"); + } + } + } + return AjaxResult.ok(data); + } + @ApiOperation(tags = {"管理后台-优惠券管理"},value = "发放优惠券") + @GetMapping(value = "/pageList") + public AjaxResult pageList(@RequestBody GrantCouponDto dto) { + TCoupon byId = tCouponService.getById(dto.getCouponId()); + Integer waysToObtain = byId.getWaysToObtain(); + dto.setWaysToObtain(waysToObtain); + switch (byId.getValidityPeriodMode()){ + case 1: + dto.setEndTime(byId.getEndTime()); + break; + case 2: + dto.setEndTime(LocalDateTime.now().plusDays(byId.getDays())); + break; + } + // 远程送优惠券 + return AjaxResult.success(); } @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券列表分页查询") @PostMapping(value = "/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 bd0959d..f11efbe 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 @@ -2,16 +2,16 @@ import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.other.api.domain.TEnterpriseUserApplication; import com.ruoyi.other.service.TEnterpriseUserApplicationService; -import com.sun.xml.internal.bind.v2.TODO; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RestController; /** @@ -36,9 +36,10 @@ /** * 添加计费策略管理 */ - @ApiOperation(tags = {"小程序-计费策略","后台-申请表单-集团用户"},value = "添加集团用户申请") + @Log(title = "添加集团用户申请", businessType = BusinessType.INSERT) + @ApiOperation(tags = {"小程序-计费策略"},value = "添加集团用户申请") @PostMapping(value = "/add") - public AjaxResult<Boolean> add(@RequestBody TEnterpriseUserApplication dto) { + public AjaxResult<Boolean> add(@Validated @RequestBody TEnterpriseUserApplication dto) { // TODO 用户id return AjaxResult.ok(enterpriseUserApplicationService.save(dto)); } 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 1193555..6b55808 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 @@ -1,9 +1,21 @@ package com.ruoyi.other.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import com.ruoyi.common.core.domain.R; +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.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.domain.TInvoiceType; +import com.ruoyi.other.api.vo.TEvaluationTagVO; +import com.ruoyi.other.query.InvoiceTypePageList; +import com.ruoyi.other.service.TEvaluationTagService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import java.util.Arrays; +import java.util.List; /** * <p> @@ -17,5 +29,77 @@ @RequestMapping("/t-evaluation-tag") public class TEvaluationTagController { + private final TEvaluationTagService evaluationTagService; + + @Autowired + public TEvaluationTagController(TEvaluationTagService evaluationTagService) { + this.evaluationTagService = evaluationTagService; + } + + @PostMapping("/getTagList") + public R<List<TEvaluationTagVO>> getTagList() { + return R.ok(evaluationTagService.getTagList()); + } + + + + @ResponseBody + @GetMapping("/pageList") + @ApiOperation(value = "获取评价标签列表", tags = {"管理后台-评价标签设置"}) + public AjaxResult<PageInfo<TEvaluationTag>> pageList(String name, BasePage basePage){ + PageInfo<TEvaluationTag> pageInfo = evaluationTagService.pageList(name, basePage); + return AjaxResult.success(pageInfo); + } + + + @ResponseBody + @PostMapping("/addEvaluationTag") + @ApiOperation(value = "添加评价标签", tags = {"管理后台-评价标签设置"}) + public AjaxResult addEvaluationTag(@RequestBody TEvaluationTag evaluationTag){ + evaluationTagService.save(evaluationTag); + return AjaxResult.success(); + } + + @ResponseBody + @GetMapping("/getEvaluationTagInfo/{id}") + @ApiOperation(value = "获取评价标签详情", tags = {"管理后台-评价标签设置"}) + public AjaxResult<TEvaluationTag> getEvaluationTagInfo(@PathVariable Integer id){ + TEvaluationTag evaluationTag = evaluationTagService.getById(id); + return AjaxResult.success(evaluationTag); + } + + + @ResponseBody + @PostMapping("/editEvaluationTag") + @ApiOperation(value = "编辑评价标签", tags = {"管理后台-评价标签设置"}) + public AjaxResult editEvaluationTag(@RequestBody TEvaluationTag evaluationTag){ + evaluationTagService.updateById(evaluationTag); + return AjaxResult.success(); + } + + + @ResponseBody + @DeleteMapping("/delEvaluationTag/{id}") + @ApiOperation(value = "删除评价标签", tags = {"管理后台-评价标签设置"}) + public AjaxResult<TInvoiceType> delEvaluationTag(@PathVariable Integer[] id){ + List<TEvaluationTag> tEvaluationTags = evaluationTagService.listByIds(Arrays.asList(id)); + for (TEvaluationTag evaluationTag : tEvaluationTags) { + evaluationTag.setDelFlag(true); + evaluationTagService.updateById(evaluationTag); + } + return AjaxResult.success(); + } + + + /** + * 根据id集合获取数据 + * @param tagIds + * @return + */ + @GetMapping("/getListByIds") + public R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds){ + List<TEvaluationTag> tEvaluationTags = evaluationTagService.listByIds(tagIds); + return R.ok(tEvaluationTags); + } } 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 bb00ff7..6c55b54 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 @@ -1,9 +1,17 @@ package com.ruoyi.other.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.other.api.domain.TInvoiceType; +import com.ruoyi.other.query.InvoiceTypePageList; +import com.ruoyi.other.service.TInvoiceTypeService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; /** * <p> @@ -16,6 +24,56 @@ @RestController @RequestMapping("/t-invoice-type") public class TInvoiceTypeController { - + + @Resource + private TInvoiceTypeService invoiceTypeService; + + + @ResponseBody + @GetMapping("/pageList") + @ApiOperation(value = "获取发票类型列表", tags = {"管理后台-发票类型管理"}) + public AjaxResult<PageInfo<TInvoiceType>> pageList(InvoiceTypePageList pageList){ + PageInfo<TInvoiceType> pageInfo = invoiceTypeService.pageList(pageList); + return AjaxResult.success(pageInfo); + } + + + @ResponseBody + @PostMapping("/addInvoiceType") + @ApiOperation(value = "添加发票类型", tags = {"管理后台-发票类型管理"}) + public AjaxResult addInvoiceType(@RequestBody TInvoiceType invoiceType){ + invoiceTypeService.save(invoiceType); + return AjaxResult.success(); + } + + @ResponseBody + @GetMapping("/getInvoiceTypeInfo/{id}") + @ApiOperation(value = "获取发票类型详情", tags = {"管理后台-发票类型管理"}) + public AjaxResult<TInvoiceType> getInvoiceTypeInfo(@PathVariable Integer id){ + TInvoiceType invoiceType = invoiceTypeService.getById(id); + return AjaxResult.success(invoiceType); + } + + + @ResponseBody + @PostMapping("/editInvoiceType") + @ApiOperation(value = "编辑发票类型", tags = {"管理后台-发票类型管理"}) + public AjaxResult editInvoiceType(@RequestBody TInvoiceType invoiceType){ + invoiceTypeService.updateById(invoiceType); + return AjaxResult.success(); + } + + + @ResponseBody + @DeleteMapping("/delInvoiceType/{id}") + @ApiOperation(value = "删除发票类型", tags = {"管理后台-发票类型管理"}) + public AjaxResult<TInvoiceType> delInvoiceType(@PathVariable Integer[] id){ + List<TInvoiceType> tInvoiceTypes = invoiceTypeService.listByIds(Arrays.asList(id)); + for (TInvoiceType invoiceType : tInvoiceTypes) { + invoiceType.setDelFlag(true); + invoiceTypeService.updateById(invoiceType); + } + return AjaxResult.success(); + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java index 0fa48ec..043a2cd 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java @@ -1,9 +1,15 @@ package com.ruoyi.other.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TRoleSite; +import com.ruoyi.other.service.TRoleSiteService; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -17,5 +23,44 @@ @RequestMapping("/t-role-site") public class TRoleSiteController { + @Resource + private TRoleSiteService roleSiteService; + + /** + * 查询角色站点数据 + * @param roleId + * @return + */ + @ResponseBody + @GetMapping("/getSiteIds") + public R<List<Integer>> getSiteIds(Long roleId){ + List<TRoleSite> list = roleSiteService.list(new LambdaQueryWrapper<TRoleSite>().eq(TRoleSite::getRoleId, roleId)); + List<Integer> collect = list.stream().map(TRoleSite::getSiteId).collect(Collectors.toList()); + return R.ok(collect); + } + + /** + * 添加角色站点数据 + * @param roleSites + * @return + */ + @ResponseBody + @PostMapping("/getSiteIds") + public R addRoleSite(@RequestBody List<TRoleSite> roleSites){ + roleSiteService.saveBatch(roleSites); + return R.ok(); + } + + /** + * 删除角色站点数据 + * @param roleId + * @return + */ + @ResponseBody + @DeleteMapping("/delRoleSite/{roleId}") + public R delRoleSite(@PathVariable("roleId") Long roleId){ + roleSiteService.remove(new LambdaQueryWrapper<TRoleSite>().eq(TRoleSite::getRoleId, roleId)); + return R.ok(); + } } 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 0ced739..f63f4a5 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 @@ -6,6 +6,7 @@ import com.ruoyi.other.api.domain.TSystemConfiguration; import com.ruoyi.other.service.TSystemConfigurationService; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -33,7 +34,7 @@ */ @ApiOperation(tags = {"小程序-系统设置","后台-内容设置"},value = "联系客服,查询设置") @GetMapping(value = "/getDetailById") - public AjaxResult<TSystemConfiguration> getDetailById(@RequestParam(name = "type",value = "1=客服信息,2=系统设置") Integer type) { + public AjaxResult<TSystemConfiguration> getDetailById(@RequestParam(name = "type")@ApiParam(value = "1=客服信息,2=系统设置") Integer type) { return AjaxResult.ok(systemConfigurationService.getOne(Wrappers.lambdaQuery(TSystemConfiguration.class) .eq(TSystemConfiguration::getType, type))); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java index 4800cb2..686f3b9 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java @@ -1,9 +1,15 @@ package com.ruoyi.other.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.other.api.domain.TUserSite; +import com.ruoyi.other.service.TUserSiteService; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -17,5 +23,46 @@ @RequestMapping("/t-user-site") public class TUserSiteController { + @Resource + private TUserSiteService userSiteService; + + + /** + * 根据用户id获取可访问的站点数据 + * @param userId 用户id + * @return + */ + @ResponseBody + @GetMapping("/getSiteIds") + public R<List<Integer>> getSiteIds(Long userId){ + List<TUserSite> list = userSiteService.list(new LambdaQueryWrapper<TUserSite>().eq(TUserSite::getUserId, userId)); + List<Integer> collect = list.stream().map(TUserSite::getSiteId).collect(Collectors.toList()); + return R.ok(collect); + } + + + /** + * 添加用户站点数据 + * @param userSite + * @return + */ + @ResponseBody + @PostMapping("/addUserSite") + public R addUserSite(@RequestBody List<TUserSite> userSite){ + userSiteService.saveBatch(userSite); + return R.ok(); + } + + /** + * 删除用户对应的站点数据 + * @param userId + * @return + */ + @ResponseBody + @DeleteMapping("/delUserSite/{userId}") + public R delUserSite(@PathVariable Long userId){ + userSiteService.remove(new LambdaQueryWrapper<TUserSite>().eq(TUserSite::getUserId, userId)); + return R.ok(); + } } 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 b2f94b8..6942f7e 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 @@ -1,6 +1,7 @@ package com.ruoyi.other.controller; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; @@ -78,5 +79,31 @@ return R.ok(idNameMap); } + /** + * 获取最高抵扣、最低起步价,最高折扣的会员 + * @param type 1=最高抵扣、2=最低起步价,3=最高折扣 + * @return + */ + @PostMapping(value = "/getVipInfoByType") + public R<TVip> getVipInfoByType(@RequestParam Integer type){ + switch (type){ + case 1: + return R.ok(vipService.getOne(Wrappers.lambdaQuery(TVip.class) + .eq(TVip::getReveal,1) + .orderByDesc(TVip::getMaximumDeduction) + .last("LIMIT 1"))); + case 2: + return R.ok(vipService.getOne(Wrappers.lambdaQuery(TVip.class) + .eq(TVip::getReveal,1) + .orderByAsc(TVip::getMonthlyCard) + .last("LIMIT 1"))); + default: + return R.ok(vipService.getOne(Wrappers.lambdaQuery(TVip.class) + .eq(TVip::getReveal,1) + .orderByDesc(TVip::getMonthlyCardDiscount) + .last("LIMIT 1"))); + } + } + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java index 986b666..4376dbf 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java @@ -1,7 +1,12 @@ package com.ruoyi.other.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.vo.TEvaluationTagVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -13,4 +18,18 @@ */ public interface TEvaluationTagMapper extends BaseMapper<TEvaluationTag> { + /** + * 获取评价标签列表 + * @return + */ + List<TEvaluationTagVO> getTagList(); + + + /** + * 获取列表数据 + * @param pageInfo + * @param name + * @return + */ + List<TEvaluationTag> pageList(PageInfo<TEvaluationTag> pageInfo, @Param("name") String name); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java index 5b284f1..fac2361 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TInvoiceTypeMapper.java @@ -1,7 +1,12 @@ package com.ruoyi.other.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TInvoiceType; +import com.ruoyi.other.query.InvoiceTypePageList; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -12,5 +17,7 @@ * @since 2024-08-06 */ public interface TInvoiceTypeMapper extends BaseMapper<TInvoiceType> { - + + + List<TInvoiceType> pageList(PageInfo<TInvoiceType> pageInfo, @Param("req") InvoiceTypePageList pageList); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java new file mode 100644 index 0000000..ab62966 --- /dev/null +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/InvoiceTypePageList.java @@ -0,0 +1,21 @@ +package com.ruoyi.other.query; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/8/12 18:07 + */ +@Data +@ApiModel +public class InvoiceTypePageList extends BasePage { + @ApiModelProperty(value = "类型名称") + private String name; + @ApiModelProperty(value = "公司名称") + private String company; + @ApiModelProperty(value = "开票方式(1=人工,2=自动)") + private Integer method; +} diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java index 074149f..7b0cb82 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java @@ -1,7 +1,12 @@ package com.ruoyi.other.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.vo.TEvaluationTagVO; + +import java.util.List; /** * <p> @@ -13,4 +18,18 @@ */ public interface TEvaluationTagService extends IService<TEvaluationTag> { + /** + * 查询标签列表 + * @return + */ + List<TEvaluationTagVO> getTagList(); + + + /** + * 获取列表页数据 + * @param name + * @param basePage + * @return + */ + PageInfo<TEvaluationTag> pageList(String name, BasePage basePage); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java index 2f3502e..057ef7b 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TInvoiceTypeService.java @@ -1,7 +1,9 @@ package com.ruoyi.other.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TInvoiceType; +import com.ruoyi.other.query.InvoiceTypePageList; /** * <p> @@ -12,5 +14,11 @@ * @since 2024-08-06 */ public interface TInvoiceTypeService extends IService<TInvoiceType> { - + + /** + * 获取发票类型列表数据 + * @param pageList + * @return + */ + PageInfo<TInvoiceType> pageList(InvoiceTypePageList pageList); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java index 459f90b..f6448d9 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java @@ -1,10 +1,15 @@ package com.ruoyi.other.service.impl; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TEvaluationTag; +import com.ruoyi.other.api.vo.TEvaluationTagVO; import com.ruoyi.other.mapper.TEvaluationTagMapper; import com.ruoyi.other.service.TEvaluationTagService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; + +import java.util.List; /** * <p> @@ -17,4 +22,22 @@ @Service public class TEvaluationTagServiceImpl extends ServiceImpl<TEvaluationTagMapper, TEvaluationTag> implements TEvaluationTagService { + @Override + public List<TEvaluationTagVO> getTagList() { + return this.baseMapper.getTagList(); + } + + + /** + * 获取列表数据 + * @param name + * @param basePage + * @return + */ + @Override + public PageInfo<TEvaluationTag> pageList(String name, BasePage basePage) { + PageInfo<TEvaluationTag> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); + List<TEvaluationTag> list = this.baseMapper.pageList(pageInfo, name); + return pageInfo.setRecords(list); + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java index f96a0aa..d519cff 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TInvoiceTypeServiceImpl.java @@ -1,10 +1,14 @@ package com.ruoyi.other.service.impl; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TInvoiceType; import com.ruoyi.other.mapper.TInvoiceTypeMapper; +import com.ruoyi.other.query.InvoiceTypePageList; import com.ruoyi.other.service.TInvoiceTypeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; + +import java.util.List; /** * <p> @@ -16,5 +20,18 @@ */ @Service public class TInvoiceTypeServiceImpl extends ServiceImpl<TInvoiceTypeMapper, TInvoiceType> implements TInvoiceTypeService { - + + + /** + * 获取发票类型列表数据 + * @param pageList + * @return + */ + @Override + public PageInfo<TInvoiceType> pageList(InvoiceTypePageList pageList) { + PageInfo<TInvoiceType> pageInfo = new PageInfo<>(pageList.getPageCurr(), pageList.getPageSize()); + List<TInvoiceType> list = this.baseMapper.pageList(pageInfo, pageList); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml index 8366a70..e22d860 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml @@ -5,6 +5,7 @@ name: ruoyi-other main: allow-bean-definition-overriding: true + allow-circular-references: true profiles: # 环境配置 active: dev diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml index c39aee9..ec534eb 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TEvaluationTagMapper.xml @@ -5,15 +5,28 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ruoyi.other.api.domain.TEvaluationTag"> <id column="id" property="id" /> - <result column="name" property="name" /> - <result column="type" property="type" /> + <result column="`name`" property="name" /> + <result column="`type`" property="type" /> <result column="create_time" property="createTime" /> <result column="del_flag" property="delFlag" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, name, type, create_time, del_flag + id, `name`, `type`, create_time, del_flag </sql> + <select id="getTagList" resultType="com.ruoyi.other.api.vo.TEvaluationTagVO"> + select <include refid="Base_Column_List"></include> + from t_evaluation_tag where del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} ORDER BY `type` + </select> + + + <select id="pageList" resultMap="BaseResultMap"> + select * from t_evaluation_tag where del_flag = 0 + <if test="null != name and '' != name"> + and name like CONCAT('%', #{name}, '%') + </if> + order by create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml index 2688cdd..c7e7c76 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/TInvoiceTypeMapper.xml @@ -20,4 +20,18 @@ id, name, invoicing_company, invoicing_method, electricity_tariff, service_tariff, added_service_tariff, del_flag, create_time </sql> + + <select id="pageList" resultMap="BaseResultMap"> + select * from t_invoice_type where del_flag = 0 + <if test="null != req.name and '' != req.name"> + and name like CONCAT('%', #{req.name}, '%') + </if> + <if test="null != req.company and '' != req.company"> + and invoicing_company like CONCAT('%', #{req.company}, '%') + </if> + <if test="null != req.method"> + and invoicing_method = #{req.method} + </if> + order by create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml index d57151d..71850da 100644 --- a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml @@ -5,6 +5,7 @@ name: ruoyi-payment main: allow-bean-definition-overriding: true + allow-circular-references: true profiles: # 环境配置 active: dev -- Gitblit v1.7.1