权限调整

This commit is contained in:
andy 2025-04-17 16:34:35 +08:00
parent a523fd90b7
commit eb7d7c6bff
22 changed files with 352 additions and 90 deletions

View File

@ -1,5 +1,12 @@
package com.evotech.hd.authorization.service;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.entity.LoginCacheInfo;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.resource.LogLogin;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
import jakarta.validation.constraints.NotNull;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
@ -7,12 +14,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import com.evotech.hd.common.core.entity.LoginCacheInfo;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.resource.LogLogin;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@FeignClient(value = "resource-server")
public interface ResourceService {
@ -33,4 +35,8 @@ public interface ResourceService {
@GetMapping(value = "/resource/logininfo/get",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public Result<LoginCacheInfo> loginInfo(@RequestParam("uid") String uid);
@GetMapping(value = "/resource/user/station",consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public BaseResponse<List<AuthUserStation>> loadBatteryStation(@RequestParam("uid") String uid);
}

View File

@ -26,6 +26,7 @@ import com.evotech.hd.common.core.entity.resource.LogLogin;
import com.evotech.hd.common.core.entity.resource.auth.AuthPermission;
import com.evotech.hd.common.core.entity.resource.auth.AuthRole;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.common.redis.utils.RedisUtil;
import com.evotech.hd.common.web.util.IpUtil;
@ -175,44 +176,63 @@ public class LoginServiceImpl implements LoginService {
//开始缓存权限信息
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_AUTH_USER_UID+":"+user.getPkId(), user.getUid());
if(rcodeList.contains(HDConstant.OPERATOR_ROLE_CODE)){
BaseResponse<List<BatteryStation>> result = cloudService.loadBatteryStation(user.getBusinessCode());
if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){
List<BatteryStation> list = result.getData();
String pkIds = "-1";
String codes = "-1";
if(CollectionUtils.isNotEmpty(list)){
pkIds = list.stream().map(BatteryStation::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
codes = list.stream().map(BatteryStation::getCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
//如果是运营方的类型账号
String pkIds = "-1", codes="-1";
if(Integer.valueOf(2).equals(user.getType())){
if(rcodeList.contains(HDConstant.OPERATOR_ROLE_CODE)){
BaseResponse<List<BatteryStation>> result = cloudService.loadBatteryStation(user.getBusinessCode());
if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){
List<BatteryStation> list = result.getData();
if(CollectionUtils.isNotEmpty(list)){
pkIds = list.stream().map(BatteryStation::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
codes = list.stream().map(BatteryStation::getCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
}
}
}else{
//不是运营商管理角色
// 检查当前角色的站点信息
BaseResponse<List<AuthUserStation>> result = resourceService.loadBatteryStation(user.getUid());
if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){
List<AuthUserStation> list = result.getData();
if(CollectionUtils.isNotEmpty(list)){
pkIds = list.stream().map(AuthUserStation::getStationId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
codes = list.stream().map(AuthUserStation::getStationCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
}
}
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_PROXY_CODE+":"+user.getPkId(), user.getBusinessCode());
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+user.getPkId(), pkIds);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+user.getPkId(), codes);
}
}
if(rcodeList.contains(HDConstant.COMPANY_ROLE_CODE)){
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_PROXY_CODE+":"+user.getPkId(), user.getBusinessCode());
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+user.getPkId(), pkIds);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+user.getPkId(), codes);
//客户角色
String companyId="-1", companyCode="-1", carIds="-1", carPlateNums="-1";
if(Integer.valueOf(3).equals(user.getType())){
BaseResponse<Company> companyResult = cloudService.loadCompany(user.getBusinessCode());
String companyId="-1", companyCode="-1", carIds="-1", carPlateNums="-1";
if(CodeMsg.SUCCESS.getCode().equals(companyResult.getCode())){
Company company = companyResult.getData();
if(!ObjectUtils.isEmpty(company)){
companyId = String.valueOf(company.getPkId());
companyCode = company.getCcode();
BaseResponse<List<VehicleInfo>> vehicleInfoResult = cloudService.loadVehicleInfo(company.getCcode());
if(CodeMsg.SUCCESS.getCode().equals(vehicleInfoResult.getCode())){
List<VehicleInfo> list = vehicleInfoResult.getData();
if(CollectionUtils.isNotEmpty(list)){
carIds = list.stream().map(VehicleInfo::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
carPlateNums = list.stream().map(VehicleInfo::getPlateNum).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
if(rcodeList.contains(HDConstant.COMPANY_ROLE_CODE)){
if(CodeMsg.SUCCESS.getCode().equals(companyResult.getCode())){
Company company = companyResult.getData();
if(!ObjectUtils.isEmpty(company)){
companyId = String.valueOf(company.getPkId());
companyCode = company.getCcode();
BaseResponse<List<VehicleInfo>> vehicleInfoResult = cloudService.loadVehicleInfo(company.getCcode());
if(CodeMsg.SUCCESS.getCode().equals(vehicleInfoResult.getCode())){
List<VehicleInfo> list = vehicleInfoResult.getData();
if(CollectionUtils.isNotEmpty(list)){
carIds = list.stream().map(VehicleInfo::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
carPlateNums = list.stream().map(VehicleInfo::getPlateNum).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
}
}
}
}
}
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID+":"+user.getPkId(), companyId);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE+":"+user.getPkId(), companyCode);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID+":"+user.getPkId(), carIds);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE+":"+user.getPkId(), carPlateNums);
}
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID+":"+user.getPkId(), companyId);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE+":"+user.getPkId(), companyCode);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID+":"+user.getPkId(), carIds);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE+":"+user.getPkId(), carPlateNums);
return uv;
}

View File

@ -28,6 +28,11 @@ public interface HDConstant {
*/
String COMPANY_ROLE_CODE = "COMPANY";
/**
* 没有权限
*/
String PERMISSION_NOT_CODE = "notPermission";
/**
* 认证请求头key

View File

@ -1,12 +1,15 @@
package com.evotech.hd.common.core.dao.cloud;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.cloud.HomeDataOrderSwapCollate;
import com.evotech.hd.common.core.permission.DataScope;
/**
* @author zrb
* @since 2025-03-07
*/
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE)
public interface HomeDataOrderSwapCollateDao extends BaseMapper<HomeDataOrderSwapCollate> {
}

View File

@ -0,0 +1,15 @@
package com.evotech.hd.common.core.dao.resource.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
/**
* @desc: 用户和充电站的关联
* @ClassName:AuthUserStationDao
* @date: 2025年04月17日 13:49
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface AuthUserStationDao extends BaseMapper<AuthUserStation> {
}

View File

@ -0,0 +1,59 @@
package com.evotech.hd.common.core.entity.resource.auth;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* 账户和站的关系, 一般是运营端使用
* @ClassName:AuthUserStation
* @date: 2025年04月17日 16:14
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Getter
@Setter
@TableName("yt_auth_user_station")
@Schema(name = "账号角色关系")
public class AuthUserStation implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "pk_id", type = IdType.AUTO)
private Integer pkId;
@Schema(description = "用户ID")
@NotBlank
private String uid;
@Schema(description = "充电站编码")
@NotBlank
private String stationCode;
@Schema(description = "充电站Id")
@NotBlank
private Integer stationId;
@Schema(description = "创建人")
private String creater;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date ctime;
@Schema(description = "修改时间", hidden = true)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date uptime;
}

View File

@ -1,9 +1,12 @@
package com.evotech.hd.common.permission.handler;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.permission.DataScope;
import com.evotech.hd.common.core.permission.DataScopes;
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
@ -43,14 +46,18 @@ public class DataScopeHandler implements MultiDataPermissionHandler {
@Override
public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
try {
if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisPermissionUtils.getRoleType())){
String roleCode = RedisPermissionUtils.getRoleCode();
if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisPermissionUtils.getRoleType()) && BeanUtil.isNotEmpty(RedisPermissionUtils.getUser())){
String roleCode = getUserRoleType();
Class<?> mapperClazz = Class.forName(mappedStatementId.substring(0, mappedStatementId.lastIndexOf(".")));
//优先检查是不是单角色权限
DataScope dataScope = mapperClazz.getAnnotation(DataScope.class);
if (ObjectUtils.isNotEmpty(dataScope) && dataScope.enabled()) {
if(dataScope.permissionObject().equals(roleCode)){
return buildDataScopeByAnnotation(dataScope);
}else
//如果说等于没有权限
if(HDConstant.PERMISSION_NOT_CODE.equals(roleCode)){
return buildNotDataScopeByAnnotation(dataScope);
}
}
//如果不是, 检查多角色权限
@ -60,7 +67,11 @@ public class DataScopeHandler implements MultiDataPermissionHandler {
if(dataScopes.enabled()){
if(dataScopes.permissionObject().equals(roleCode)){
return buildDataScopeByAnnotation(dataScopes);
}
}else
//如果说等于没有权限
if(HDConstant.PERMISSION_NOT_CODE.equals(roleCode)){
return buildNotDataScopeByAnnotation(dataScope);
}
}
}
}
@ -72,6 +83,23 @@ public class DataScopeHandler implements MultiDataPermissionHandler {
}
private String getUserRoleType(){
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isNotEmpty(user) && user .getType() != null){
switch (user.getType()){
case 1:
return "";
case 2:
return HDConstant.OPERATOR_ROLE_CODE;
case 3:
return HDConstant.COMPANY_ROLE_CODE;
default:
return HDConstant.PERMISSION_NOT_CODE;
}
}
return HDConstant.PERMISSION_NOT_CODE;
}
/**
* DataScope注解方式拼装数据权限
@ -84,9 +112,20 @@ public class DataScopeHandler implements MultiDataPermissionHandler {
return expression == null ? null : new Parenthesis(expression);
}
/**
* DataScope注解方式拼装数据权限
*
* @param dataScope
* @return
*/
private Expression buildNotDataScopeByAnnotation(DataScope dataScope) {
Expression expression = buildDataScopeExpression(dataScope, "-1");
return expression == null ? null : new Parenthesis(expression);
}
private Expression buildDataScopeExpression(DataScope dataScope, String value) {
if(!"null".equals(value)){
if(StringUtils.isNotEmpty(value) && !"null".equals(value)){
ExpressionList expressionList = new ExpressionList(Arrays.asList(value.split(",")).stream().map(StringValue::new).collect(Collectors.toList()));
// 设置左边的字段表达式右边设置值
InExpression operatorInExpression = new InExpression();

View File

@ -104,4 +104,10 @@ public class BatteryStationController {
return batteryStationService.loginList(proxyCode);
}
@Operation(summary = "查询")
@GetMapping("/resource/list")
public BaseResponse<List<BatteryStation>> resourceList(@RequestParam String pkIds) {
return batteryStationService.resourceList(pkIds);
}
}

View File

@ -1,14 +1,18 @@
package com.evotech.hd.cloud.dao;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
import com.evotech.hd.common.core.permission.DataScope;
import java.util.List;
/**
* @author zrb
* @since 2024-10-17
*/
@DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "source_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE)
public interface BatteryStationDcDao extends BaseMapper<BatteryStationDc> {
List<BatteryStationDc> getDcByStationCode(String stationCode);

View File

@ -1,14 +1,17 @@
package com.evotech.hd.cloud.dao;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot;
import com.evotech.hd.common.core.permission.DataScope;
import java.util.List;
/**
* @author zrb
* @since 2024-10-17
*/
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE)
public interface BatteryStationRobotDao extends BaseMapper<BatteryStationRobot> {
List<BatteryStationRobot> getRobotByStationCode(String stationCode);

View File

@ -32,4 +32,6 @@ public interface BatteryStationService {
public BaseResponse<List<BatteryStation>> loginList(String proxyId);
public BaseResponse<List<BatteryStation>> resourceList(String pkIds);
}

View File

@ -272,4 +272,10 @@ public class BatteryStationServiceImpl implements BatteryStationService {
return new BaseResponse<List<BatteryStation>>().success(batteryStationDao.selectList(new LambdaQueryWrapper<BatteryStation>().eq(BatteryStation::getProxyId, proxyCode).select(BatteryStation::getPkId, BatteryStation::getCode)));
}
@Override
public BaseResponse<List<BatteryStation>> resourceList(String pkIds) {
String[] pkIdArray = pkIds.split(",");
return new BaseResponse<List<BatteryStation>>().success(batteryStationDao.selectList(new LambdaQueryWrapper<BatteryStation>().eq((pkIdArray != null && pkIdArray.length > 0), BatteryStation::getPkId, Arrays.asList(pkIdArray)).eq(BatteryStation::getStatus, 1).eq(BatteryStation::getDelFlag, 0).select(BatteryStation::getPkId, BatteryStation::getCode)));
}
}

View File

@ -154,6 +154,9 @@ public class HomeServiceImpl implements HomeService {
data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN));
data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN));
// 交易
/***
* @TODO: 待定
*/
List<HomeDataTradeCollate> collateList = homeDataTradeCollateDao.selectList(new QueryWrapper<HomeDataTradeCollate>()
.ge("day", data.getDayBegin())
.le("day", data.getDayEnd()));

View File

@ -1,31 +1,23 @@
package com.evotech.hd.cloud;
import java.util.Base64;
import javax.crypto.SecretKey;
import cn.hutool.crypto.KeyUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class AesDecryTest {
public static void main(String[] args) {
String key = "94kl35k25d3t2rk2";
String iv = "k394kf44lf1pyq8k";
SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
// 需要加密的数据
String data = "2yKExCzIRWg6bLwf2zsTn83XhzTAvuQtW5svhO111zihn3oX/Jrf4UFrKCA5UbZy4SWRF5vtcyYXLr8oFof2xRDBXsvFRDFHYKmmkpN6Udk7ChB0sCNTzisaM/iqAtbybD8uC9HpHYCQsSVipUc//aUhgSNvhK7CewK1UjGKnyBvOvCUJiPGVtuKzX5Pf5KIrR1ozJ+moDq01+td8Du5lA3lXaHdLZ8WbmoqYd2T6r3PDVsh/yxC327mNsQrivK0yL3QUt4ZCuLV6G/nQTsxvNgAYprSNVejGCywDD2cWuA4f90bsxJEKFLJ+XUd9/IAJR50QGhwm0qzxWwZzszWU9+EJoDyp+gUUn9bY4u9V/I=";
byte[] decrypt = aes.decrypt(Base64.getDecoder().decode(data));
System.out.println(new String(decrypt));
SecretKey key1 = KeyUtil.generateKey(SymmetricAlgorithm.AES.getValue());
System.out.println(Base64.getEncoder().encodeToString(key1.getEncoded()));
System.out.println(new BCryptPasswordEncoder().encode("123456"));
// String key = "94kl35k25d3t2rk2";
// String iv = "k394kf44lf1pyq8k";
// SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
// // 需要加密的数据
// String data = "2yKExCzIRWg6bLwf2zsTn83XhzTAvuQtW5svhO111zihn3oX/Jrf4UFrKCA5UbZy4SWRF5vtcyYXLr8oFof2xRDBXsvFRDFHYKmmkpN6Udk7ChB0sCNTzisaM/iqAtbybD8uC9HpHYCQsSVipUc//aUhgSNvhK7CewK1UjGKnyBvOvCUJiPGVtuKzX5Pf5KIrR1ozJ+moDq01+td8Du5lA3lXaHdLZ8WbmoqYd2T6r3PDVsh/yxC327mNsQrivK0yL3QUt4ZCuLV6G/nQTsxvNgAYprSNVejGCywDD2cWuA4f90bsxJEKFLJ+XUd9/IAJR50QGhwm0qzxWwZzszWU9+EJoDyp+gUUn9bY4u9V/I=";
//
// byte[] decrypt = aes.decrypt(Base64.getDecoder().decode(data));
// System.out.println(new String(decrypt));
//
// SecretKey key1 = KeyUtil.generateKey(SymmetricAlgorithm.AES.getValue());
// System.out.println(Base64.getEncoder().encodeToString(key1.getEncoded()));
}

View File

@ -70,7 +70,11 @@
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
</dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>

View File

@ -5,12 +5,14 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@ComponentScan("com.evotech.hd.**")
@MapperScan({"com.evotech.hd.resource.dao.**", "com.evotech.hd.common.core.dao.**"})
@EnableFeignClients
public class ResourceServerApplication {
public static void main(String[] args) {

View File

@ -1,28 +1,24 @@
package com.evotech.hd.resource.controller;
import java.util.List;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
import com.evotech.hd.resource.entity.request.ListUserRequest;
import com.evotech.hd.resource.service.AuthUserService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "用户管理")
@RestController
@ -83,4 +79,19 @@ public class AuthUserController {
return authUserService.deleteUserRole(uid, rid);
}
@Operation(summary = "用户分配站")
@PostMapping("/adduserstation")
@ApiOperationSupport(order = 5)
public Result<Integer> addUserRole(@RequestParam @NotBlank String uid, @RequestParam String stationIds) {
return authUserService.addUserStation(stationIds, uid);
}
@Operation(summary = "登录查询站信息")
@GetMapping("/station")
@ApiOperationSupport(order = 4)
public BaseResponse<List<AuthUserStation>> loadUserStation(@RequestParam @NotBlank String uid) {
return authUserService.loadUserStation(uid);
}
}

View File

@ -1,12 +1,14 @@
package com.evotech.hd.resource.service;
import java.util.List;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
import com.evotech.hd.resource.entity.request.ListUserRequest;
import java.util.List;
public interface AuthUserService {
public Result<AuthUser> userByName(String uname);
@ -23,4 +25,7 @@ public interface AuthUserService {
public Result<Integer> deleteUserRole(String uid, String rid);
public Result<Integer> addUserStation(String stationIds, String uid);
public BaseResponse<List<AuthUserStation>> loadUserStation(String uid);
}

View File

@ -1,28 +1,34 @@
package com.evotech.hd.resource.service.impl;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserRoleDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserStationDao;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.common.core.utils.SnowflakeUtil;
import com.evotech.hd.resource.entity.request.ListUserRequest;
import com.evotech.hd.resource.service.AuthUserService;
import cn.hutool.core.date.DateUtil;
import com.evotech.hd.resource.service.rpc.CloudService;
import jakarta.annotation.Resource;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class AuthUserServiceImpl implements AuthUserService {
@ -31,6 +37,10 @@ public class AuthUserServiceImpl implements AuthUserService {
private AuthUserDao userDao;
@Resource
private AuthUserRoleDao authUserRoleDao;
@Resource
private AuthUserStationDao authUserStationDao;
@Resource
private CloudService cloudService;
@Override
@ -129,4 +139,31 @@ public class AuthUserServiceImpl implements AuthUserService {
return new Result<Integer>().success(n);
}
@Override
public Result<Integer> addUserStation(String stationIds, String uid) {
BaseResponse<List<BatteryStation>> result = cloudService.resourceList(stationIds);
if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){
List<BatteryStation> stationlist = result.getData();
if(!CollectionUtils.isEmpty(stationlist)){
List<AuthUserStation> list = new ArrayList<AuthUserStation>();
for (BatteryStation station : stationlist) {
AuthUserStation u = new AuthUserStation();
u.setUid(uid);
u.setStationId(station.getPkId());
u.setStationCode(station.getCode());
list.add(u);
}
authUserStationDao.insert(list);
return new Result<Integer>().success(list.size());
}
}
return new Result<Integer>().error("添加用户站信息失败!");
}
@Override
public BaseResponse<List<AuthUserStation>> loadUserStation(String uid) {
return new BaseResponse<List<AuthUserStation>>().success(authUserStationDao.selectList(new LambdaQueryWrapper<AuthUserStation>().eq(AuthUserStation::getUid, uid).select(AuthUserStation::getStationId, AuthUserStation::getStationId)));
}
}

View File

@ -0,0 +1,19 @@
package com.evotech.hd.resource.service.rpc;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@FeignClient(name = "${CLOUD-SERVER-API-NAME}", path = "${CLOUD-SERVER-API-PATH}")
public interface CloudService {
@GetMapping(value = "/batterystation/resource/list",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public BaseResponse<List<BatteryStation>> resourceList(String pkIds);
}

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.evotech.hd.common.core.dao.resource.auth.AuthUserStationDao">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.evotech.hd.common.core.entity.resource.auth.AuthUserStation">
<id column="pk_id" property="pkId" />
<result column="uid" property="uid" />
<result column="station_code" property="stationCode" />
<result column="station_id" property="stationId" />
<result column="creater" property="creater" />
<result column="ctime" property="ctime" />
<result column="uptime" property="uptime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
pk_id, uid, station_code, station_id, creater, ctime, uptime
</sql>
</mapper>

View File

@ -12,7 +12,7 @@ logging:
spring:
# 服务名称必须带上不然nacos服务列表中没有也不会有注册成功的信息
application:
name: ${cloud-manage-server:wechat-server}
name: ${wechat-server:wechat-server}
config:
import:
- nacos:yt-common.properties?refreshEnabled=true