From 7f288c7515fa04cf83fadc3506317d08fb099630 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期六, 10 八月 2024 11:44:53 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java | 37 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TEnterpriseUserApplication.java | 6 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/RoleSiteFallbackFactory.java | 33 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java | 18 ruoyi-service/ruoyi-chargingPile/pom.xml | 6 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java | 7 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/RoleSiteClient.java | 28 ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml | 1 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TVehicleRampController.java | 8 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 100 +++ ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml | 10 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java | 32 + 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 | 176 ++++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java | 2 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java | 30 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java | 11 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java | 17 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java | 73 ++ 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-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java | 3 ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml | 1 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-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java | 15 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TMonitoringEquipmentController.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 63 + 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/TChargingPileController.java | 12 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java | 6 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml | 1 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java | 23 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingPileVO.java | 31 .gitignore | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PageChargingPileListDTO.java | 8 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java | 13 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 8 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml | 1 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/controller/PartnerController.java | 41 + ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml | 10 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-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 6 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/ChargingGunStatusEnum.java | 50 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 87 ++ 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 | 7 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml | 6 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java | 72 ++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java | 9 ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 4 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-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-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java | 27 ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml | 1 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java | 4 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml | 1 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java | 19 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 73 ++ ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java | 3 ruoyi-common/ruoyi-common-core/pom.xml | 5 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 10 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java | 28 75 files changed, 1,651 insertions(+), 258 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-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/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/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/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-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/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..2fd74a2 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/RoleSiteFallbackFactory.java @@ -0,0 +1,33 @@ +package com.ruoyi.other.api.factory; + +import com.ruoyi.common.core.domain.R; +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()); + } + }; + } +} 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..8b5c1d9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/UserSiteFallbackFactory.java @@ -0,0 +1,32 @@ +package com.ruoyi.other.api.factory; + +import com.ruoyi.common.core.domain.R; +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()); + } + }; + } +} 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..55cd966 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java @@ -0,0 +1,28 @@ +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.factory.RoleSiteFallbackFactory; +import com.ruoyi.other.api.factory.UserSiteFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +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.CONTRACT_SERVICE, fallbackFactory = RoleSiteFallbackFactory.class) +public interface RoleSiteClient { + + + /** + * 根据角色id获取可访问的站点数据 + * @param roleId + * @return + */ + @GetMapping("/t-user-site/getSiteIds") + R<List<Integer>> getSiteIds(@RequestParam("roleId") Long roleId); +} 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..57d0450 --- /dev/null +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.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.factory.UserSiteFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +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.CONTRACT_SERVICE, fallbackFactory = UserSiteFallbackFactory.class) +public interface UserSiteClient { + + + /** + * 根据用户id获取可访问的站点数据 + * @param userId + * @return + */ + @GetMapping("/t-user-site/getSiteIds") + R<List<Integer>> getSiteIds(@RequestParam("userId") Long userId); +} 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-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..dbebc60 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 = "密码不能为空") @@ -269,14 +264,6 @@ public void setAvatar(String avatar) { this.avatar = avatar; - } - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; } public String getPassword() 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/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-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/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-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/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..dac579f 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 @@ -356,7 +356,7 @@ } @PostMapping("/updateSysUser") - @Transactional(propagation = Propagation.REQUIRES_NEW) + @Transactional(rollbackFor = Exception.class) public R<Boolean> updateSysUser(@RequestBody SysUser sysUser) { try { sysUser.setUpdateBy(SecurityUtils.getUsername()); @@ -675,19 +675,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 +698,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 +707,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/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 17dedc0..9d9cc62 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 @@ -121,13 +121,6 @@ */ public SysUser checkPhoneUnique(String phonenumber); - /** - * 校验登录账号是否唯一 - * @param account 登录账号 - * @return - */ - SysUser checkAccountUnique(String account); - /** 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..3f08d28 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 @@ -85,8 +85,6 @@ * @return 结果 */ public boolean checkPhoneUnique(SysUser user); - - boolean checkAccountUnique(SysUser user); /** * 校验email是否唯一 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..50b929f 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 @@ -198,16 +198,6 @@ } - @Override - public boolean checkAccountUnique(SysUser user) { - SysUser info = userMapper.checkAccountUnique(user.getAccount()); - if (StringUtils.isNotNull(info) ) - { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } - /** * 校验email是否唯一 * 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..e7df625 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" /> @@ -119,11 +118,6 @@ <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult"> 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"> 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..159f1f6 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; + @@ -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, @RequestParam("partnerId") 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 f43f5d8..2e6c5f6 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 @@ -4,20 +4,41 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.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.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.HashSet; import java.util.List; +import java.util.Set; +import java.util.Map; /** * @author zhibing.pu @@ -29,7 +50,28 @@ @Resource private ISiteService siteService; + + @Resource + private IPartnerService partnerService; + @Resource + private SysUserClient sysUserClient; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + + + + + + + @Autowired + private TChargingPileService chargingPileService; + @Autowired + private TChargingGunService chargingGunService; @ResponseBody @GetMapping("/getSiteList") @@ -48,6 +90,30 @@ @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")); + // TODO 查询绑定车牌提示文案 + 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)); + } + + @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)); } @@ -93,8 +159,25 @@ @GetMapping("/getAllSiteList") @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); } } 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 fa49803..d028f09 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 @@ } } - + } 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 e4b4fff..2c8f9da 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 @@ -17,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; @@ -55,7 +58,10 @@ */ @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))); } @@ -80,6 +86,7 @@ } @ResponseBody + @Log(title = "添加充电桩数据", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @PostMapping("/addChargingPile") @ApiOperation(value = "添加充电桩数据", tags = {"管理后台-充电桩信息"}) public AjaxResult addChargingPile(@RequestBody TChargingPile chargingPile){ @@ -97,6 +104,7 @@ @ResponseBody + @Log(title = "编辑充电桩数据", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @PostMapping("/editChargingPile") @ApiOperation(value = "编辑充电桩数据", tags = {"管理后台-充电桩信息"}) public AjaxResult editChargingPile(@RequestBody TChargingPile chargingPile){ @@ -107,6 +115,7 @@ @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) @@ -117,6 +126,7 @@ @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/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..3945b5c 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 @@ -13,6 +13,9 @@ import com.ruoyi.chargingPile.service.TVehicleRampService; 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 +69,7 @@ /** * 添加停车场管理 */ + @Log(title = "添加停车场", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "添加停车场") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@RequestBody TParkingLotDTO dto) { @@ -75,6 +79,7 @@ /** * 修改停车场 */ + @Log(title = "修改停车场", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "修改停车场") @PostMapping(value = "/update") public AjaxResult<Boolean> update(@RequestBody TParkingLotDTO dto) { @@ -93,6 +98,7 @@ /** * 删除停车场 */ + @Log(title = "删除停车场", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-停车场"},value = "删除停车场") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam Integer id) { @@ -108,6 +114,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/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/service/IPartnerService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java index 27f1720..4821f5d 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 @@ -59,4 +65,35 @@ * @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..857b0c5 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; @@ -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/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/TChargingPileService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java index b3360ed..7ca7a8d 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> @@ -66,4 +69,12 @@ * @param setAccountingStrategy */ void batchSetAccountingStrategy(BatchSetAccountingStrategy setAccountingStrategy); + + /** + * 获取站点下充电桩及充电枪列表 + * @param siteId + * @return + */ + List<TChargingPileVO> getChargingGunList(Integer siteId); + } 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..b3fceeb 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()); @@ -255,16 +271,19 @@ * @param id 合作商id */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult delPartner(Integer id) { //查询有无关联数据 //站点 long count = siteService.count(new LambdaQueryWrapper<Site>().eq(Site::getPartnerId, id).eq(Site::getDelFlag, 0)); if(count > 0){ - return AjaxResult.error("当前合作商有关联得站点,删除失败!"); + return AjaxResult.error("当前合作商有关联站点,删除失败!"); } - // todo 代码完善 //充电桩 + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getPartnerId, id).eq(TChargingPile::getDelFlag, 0)); + if(count1 > 0){ + return AjaxResult.error("当前合作商有关联充电桩,删除失败!"); + } Partner partner = this.getById(id); if(null == partner){ @@ -272,7 +291,7 @@ } partner.setDelFlag(true); this.updateById(partner); - SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData(); + SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); user.setDelFlag("2"); sysUserClient.updateUser(user); return AjaxResult.success(); @@ -284,7 +303,7 @@ * @param resetPassword */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult resetPassword(ResetPassword resetPassword) { if(null == resetPassword.getId()){ return AjaxResult.error("合作商id不能为空"); @@ -296,9 +315,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..5e6ae0e 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,34 @@ 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.HashSet; import java.util.List; +import java.util.Set; /** * @author zhibing.pu @@ -32,6 +44,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 +68,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); } + + + /** * 添加站点信息 @@ -148,7 +203,10 @@ public AjaxResult delSite(Integer id) { //查询是否有关联数据 //充电桩 - // todo 待完善 + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getSiteId, id).eq(TChargingPile::getDelFlag, 0)); + if(count1 > 0){ + return AjaxResult.error("该站点有关联充电桩,删除失败!"); + } Site site = this.getById(id); site.setDelFlag(true); this.updateById(site); @@ -162,15 +220,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/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java index 73709a5..9d88276 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; } @@ -62,6 +121,10 @@ */ @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; @@ -73,7 +136,40 @@ 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/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index 0442587..ea3e370 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,34 @@ 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.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -33,6 +45,18 @@ @Resource private TChargingGunService chargingGunService; + @Resource + private SysUserClient sysUserClient; + + @Resource + private IPartnerService partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + @@ -43,8 +67,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); } @@ -165,4 +213,17 @@ } chargingGunService.updateBatchById(list); } + + @Override + public List<TChargingPileVO> getChargingGunList(Integer siteId) { + List<TChargingPileVO> chargingPileVOS = this.baseMapper.getChargingGunList(siteId); + List<TChargingGun> chargingGuns = chargingGunService.list(Wrappers.lambdaQuery(TChargingGun.class) + .eq(TChargingGun::getSiteId, siteId)); + // 查询充电枪信息 + chargingPileVOS.forEach(item -> { + List<TChargingGun> gunList = chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(item.getId())).collect(Collectors.toList()); + item.setChargingGunList(gunList); + }); + 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..4efbd05 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> 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..855a4cd 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,6 +94,12 @@ <if test="null != item.districtsCode and '' != item.districtsCode"> and a.districts_code = #{item.districtsCode} </if> + <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 limit #{item.pageCurr}, #{item.pageSize} </select> @@ -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..2cab472 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,6 +56,12 @@ <if test="null != item.type"> and a.type = #{item.type} </if> + <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 limit #{item.pageCurr}, #{item.pageSize} </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-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/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-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/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/TRoleSiteController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java index 0fa48ec..9be842e 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,18 @@ @RequestMapping("/t-role-site") public class TRoleSiteController { + @Resource + private TRoleSiteService roleSiteService; + + + @ResponseBody + @GetMapping("/getSiteIds") + public R<List<Integer>> getSiteIds(@RequestParam("roleId") 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); + } + + } 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 cc3de1a..a78e805 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.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -37,7 +38,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..2c9b26b 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,23 @@ @RequestMapping("/t-user-site") public class TUserSiteController { + @Resource + private TUserSiteService userSiteService; + + + /** + * 根据用户id获取可访问的站点数据 + * @param userId 用户id + * @return + */ + @ResponseBody + @GetMapping("/getSiteIds") + public R<List<Integer>> getSiteIds(@RequestParam("userId") 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); + } + + } 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-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