From bed6becab65745585281ba2e499fa39de561c29f Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期五, 09 八月 2024 16:47:28 +0800
Subject: [PATCH] 提交管理后台部分接口
---
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java | 36 ++
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-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java | 18 +
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/dto/GetPermissionConfigurationDTO.java | 21 +
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 | 6
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/RequestParamGlobalFilter.java | 98 +++++
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 6
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 35 +
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml | 6
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 28 +
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 | 2
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java | 160 +++++++-
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-chargingPile/src/main/java/com/ruoyi/chargingPile/domain/SiteMenu.java | 72 ++++
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java | 5
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java | 9
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/TChargingPileMapper.java | 2
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java | 2
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java | 136 ------
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java | 2
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/SignFilter.java | 181 ++++++++++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 29 +
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java | 19
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java | 5
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java | 7
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 45 ++
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 10
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml | 1
35 files changed, 841 insertions(+), 239 deletions(-)
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/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/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-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-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..799de22
--- /dev/null
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/SignFilter.java
@@ -0,0 +1,181 @@
+package com.ruoyi.gateway.filter;
+
+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.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.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 && !authSign(exchange)){
+ return unauthorizedResponse(exchange, "签名不通过!");
+ }
+ 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);
+ }
+
+
+ /**
+ * 校验签名
+ * @param exchange
+ * @return
+ */
+ private boolean authSign(ServerWebExchange exchange){
+ return false;
+ }
+
+
+
+ /**
+ * 签名校验
+ * @param httpRequestDecorator
+ * @return
+ */
+ private boolean authSign(ServerHttpRequestDecorator httpRequestDecorator) {
+ HttpHeaders headers = httpRequestDecorator.getHeaders();
+ Flux<DataBuffer> body = httpRequestDecorator.getBody();
+ AtomicReference<JSONObject> jsonObject = new AtomicReference<>(new JSONObject());
+ httpRequestDecorator.getBody().map(dataBuffers -> dataBuffers.toString());
+ 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()
+ {
+ 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-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 a6334e3..d740784 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
@@ -6,9 +6,14 @@
import com.ruoyi.chargingPile.api.query.GetSiteList;
import com.ruoyi.chargingPile.api.query.SiteQuery;
import com.ruoyi.chargingPile.api.vo.SiteVO;
+import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.service.IPartnerService;
import com.ruoyi.chargingPile.service.ISiteService;
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;
@@ -28,6 +33,17 @@
@Resource
private ISiteService siteService;
+
+ @Resource
+ private IPartnerService partnerService;
+
+ @Resource
+ private SysUserClient sysUserClient;
+
+
+
+
+
@ResponseBody
@@ -87,8 +103,16 @@
@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){
+ List<Integer> list = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
+ 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/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
index 34f88b6..e549840 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
@@ -54,7 +54,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)));
}
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..2487a6e 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
@@ -24,7 +24,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") List<Integer> ids);
/**
* 获取站点分页列表
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..2076f7a 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
@@ -27,6 +27,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") List<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..c4b4151 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
@@ -27,7 +27,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") List<Integer> siteIds);
/**
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java
index 27f1720..ad23cf3 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,20 @@
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;
/**
* @author zhibing.pu
@@ -59,4 +64,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
+ */
+ List<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/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
index 4b0e2ca..e89e9e0 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,20 @@
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.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysRoleClient;
@@ -22,10 +24,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 +45,15 @@
@Resource
private ISiteService siteService;
+
+ @Resource
+ private TPartnerSiteService partnerSiteService;
+
+ @Resource
+ private TSiteMenuService siteMenuService;
+
+ @Resource
+ private TChargingPileService chargingPileService;
@@ -85,7 +96,7 @@
* @return
*/
@Override
- @GlobalTransactional//分布式事务
+ @GlobalTransactional(rollbackFor = Exception.class)//分布式事务
public AjaxResult addPartner(Partner partner) {
//校验参数和重复数据
AjaxResult ajaxResult = addPartnerParameterCheck(partner);
@@ -110,9 +121,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 +199,7 @@
* @return
*/
@Override
- @GlobalTransactional//分布式事务
+ @GlobalTransactional(rollbackFor = Exception.class)//分布式事务
public AjaxResult editPartner(Partner partner) {
//校验参数和重复数据
AjaxResult ajaxResult = addPartnerParameterCheck(partner);
@@ -211,7 +221,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 +230,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 +243,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 +263,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 +283,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 +295,7 @@
* @param resetPassword
*/
@Override
- @GlobalTransactional//分布式事务
+ @GlobalTransactional(rollbackFor = Exception.class)//分布式事务
public AjaxResult resetPassword(ResetPassword resetPassword) {
if(null == resetPassword.getId()){
return AjaxResult.error("合作商id不能为空");
@@ -296,9 +307,116 @@
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 List<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());
+ if(collect.size() == 0){
+ collect.add(-1);
+ }
+ return collect;
+ }
+
+
+ /**
+ * 判断当前账户是否有权限
+ * @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..a9777ad 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,16 +5,23 @@
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.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.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;
@@ -32,6 +39,15 @@
@Resource
private TChargingGunService chargingGunService;
+ @Resource
+ private TChargingPileService chargingPileService;
+
+ @Resource
+ private SysUserClient sysUserClient;
+
+ @Resource
+ private IPartnerService partnerService;
+
/**
@@ -41,10 +57,30 @@
*/
@Override
public PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList) {
+ List<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);
+ }
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 +184,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);
@@ -170,7 +209,7 @@
* @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..b97602d 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
@@ -7,13 +7,19 @@
import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
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.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.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
import java.util.List;
/**
@@ -26,11 +32,38 @@
*/
@Service
public class TChargingGunServiceImpl extends ServiceImpl<TChargingGunMapper, TChargingGun> implements TChargingGunService {
+
+ @Resource
+ private SysUserClient sysUserClient;
+
+ @Resource
+ private IPartnerService partnerService;
+
+
+
@Override
public PageInfo<TChargingGunVO> pageList(TChargingGunQuery query) {
+ List<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);
+ }
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;
}
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..055590a 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
@@ -7,12 +7,17 @@
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.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.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -33,6 +38,12 @@
@Resource
private TChargingGunService chargingGunService;
+ @Resource
+ private SysUserClient sysUserClient;
+
+ @Resource
+ private IPartnerService partnerService;
+
@@ -43,8 +54,24 @@
*/
@Override
public PageInfo<PageChargingPileListDTO> pageChargingPileList(PageChargingPileList page) {
+ List<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);
+ }
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);
}
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..b7b4557 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>
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..6171d5f 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>
--
Gitblit v1.7.1