diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java index 5b3ca20..c50a0a8 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java @@ -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 loginInfo(@RequestParam("uid") String uid); + + @GetMapping(value = "/resource/user/station",consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE}) + public BaseResponse> loadBatteryStation(@RequestParam("uid") String uid); + } diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java index 1b85f11..7794cde 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java @@ -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> result = cloudService.loadBatteryStation(user.getBusinessCode()); - if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ - List 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> result = cloudService.loadBatteryStation(user.getBusinessCode()); + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + List 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> result = resourceService.loadBatteryStation(user.getUid()); + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + List 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 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> vehicleInfoResult = cloudService.loadVehicleInfo(company.getCcode()); - if(CodeMsg.SUCCESS.getCode().equals(vehicleInfoResult.getCode())){ - List 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> vehicleInfoResult = cloudService.loadVehicleInfo(company.getCcode()); + if(CodeMsg.SUCCESS.getCode().equals(vehicleInfoResult.getCode())){ + List 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; } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java index 5e40de0..4ba91f3 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java @@ -28,6 +28,11 @@ public interface HDConstant { */ String COMPANY_ROLE_CODE = "COMPANY"; + /** + * 没有权限 + */ + String PERMISSION_NOT_CODE = "notPermission"; + /** * 认证请求头key diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/HomeDataOrderSwapCollateDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/HomeDataOrderSwapCollateDao.java index aad3750..86f97d8 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/HomeDataOrderSwapCollateDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/HomeDataOrderSwapCollateDao.java @@ -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 { } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/resource/auth/AuthUserStationDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/resource/auth/AuthUserStationDao.java new file mode 100644 index 0000000..eedc6a9 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/resource/auth/AuthUserStationDao.java @@ -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 { +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUserStation.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUserStation.java new file mode 100644 index 0000000..eb0e8b9 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUserStation.java @@ -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; +} diff --git a/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/DataScopeHandler.java b/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/DataScopeHandler.java index 0ed999d..8e174e3 100644 --- a/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/DataScopeHandler.java +++ b/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/DataScopeHandler.java @@ -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(); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java index 4a830c3..9d1268c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java @@ -104,4 +104,10 @@ public class BatteryStationController { return batteryStationService.loginList(proxyCode); } + @Operation(summary = "查询") + @GetMapping("/resource/list") + public BaseResponse> resourceList(@RequestParam String pkIds) { + return batteryStationService.resourceList(pkIds); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDcDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDcDao.java index 14d0c14..5985de0 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDcDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDcDao.java @@ -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 { List getDcByStationCode(String stationCode); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationRobotDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationRobotDao.java index ce549ff..c284d8d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationRobotDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationRobotDao.java @@ -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 { List getRobotByStationCode(String stationCode); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java index b1a2f1d..b0b955a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java @@ -32,4 +32,6 @@ public interface BatteryStationService { public BaseResponse> loginList(String proxyId); + public BaseResponse> resourceList(String pkIds); + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java index 82df5d4..2e8524a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java @@ -272,4 +272,10 @@ public class BatteryStationServiceImpl implements BatteryStationService { return new BaseResponse>().success(batteryStationDao.selectList(new LambdaQueryWrapper().eq(BatteryStation::getProxyId, proxyCode).select(BatteryStation::getPkId, BatteryStation::getCode))); } + @Override + public BaseResponse> resourceList(String pkIds) { + String[] pkIdArray = pkIds.split(","); + return new BaseResponse>().success(batteryStationDao.selectList(new LambdaQueryWrapper().eq((pkIdArray != null && pkIdArray.length > 0), BatteryStation::getPkId, Arrays.asList(pkIdArray)).eq(BatteryStation::getStatus, 1).eq(BatteryStation::getDelFlag, 0).select(BatteryStation::getPkId, BatteryStation::getCode))); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java index 23775c3..34fb677 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java @@ -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 collateList = homeDataTradeCollateDao.selectList(new QueryWrapper() .ge("day", data.getDayBegin()) .le("day", data.getDayEnd())); diff --git a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java index e5225cc..df2f44d 100644 --- a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java +++ b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java @@ -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())); } diff --git a/resource-server/pom.xml b/resource-server/pom.xml index 4d55f4a..47b95aa 100644 --- a/resource-server/pom.xml +++ b/resource-server/pom.xml @@ -70,7 +70,11 @@ io.minio minio - + + org.springframework.cloud + spring-cloud-starter-openfeign + + ${project.artifactId} diff --git a/resource-server/src/main/java/com/evotech/hd/resource/ResourceServerApplication.java b/resource-server/src/main/java/com/evotech/hd/resource/ResourceServerApplication.java index 68fb669..2e05d0d 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/ResourceServerApplication.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/ResourceServerApplication.java @@ -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) { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java index a4ea5ea..2c83467 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java @@ -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 addUserRole(@RequestParam @NotBlank String uid, @RequestParam String stationIds) { + return authUserService.addUserStation(stationIds, uid); + } + + @Operation(summary = "登录查询站信息") + @GetMapping("/station") + @ApiOperationSupport(order = 4) + public BaseResponse> loadUserStation(@RequestParam @NotBlank String uid) { + return authUserService.loadUserStation(uid); + } + + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java index 66614f8..dadb5a2 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java @@ -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 userByName(String uname); @@ -23,4 +25,7 @@ public interface AuthUserService { public Result deleteUserRole(String uid, String rid); + public Result addUserStation(String stationIds, String uid); + + public BaseResponse> loadUserStation(String uid); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java index 027697f..67a4534 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java @@ -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().success(n); } + @Override + public Result addUserStation(String stationIds, String uid) { + BaseResponse> result = cloudService.resourceList(stationIds); + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + List stationlist = result.getData(); + if(!CollectionUtils.isEmpty(stationlist)){ + List list = new ArrayList(); + 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().success(list.size()); + } + } + return new Result().error("添加用户站信息失败!"); + } + + @Override + public BaseResponse> loadUserStation(String uid) { + return new BaseResponse>().success(authUserStationDao.selectList(new LambdaQueryWrapper().eq(AuthUserStation::getUid, uid).select(AuthUserStation::getStationId, AuthUserStation::getStationId))); + } + + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java new file mode 100644 index 0000000..c5a6f3b --- /dev/null +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java @@ -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> resourceList(String pkIds); + +} diff --git a/resource-server/src/main/resources/mapper/AuthUserStationMapper.xml b/resource-server/src/main/resources/mapper/AuthUserStationMapper.xml new file mode 100644 index 0000000..c59a81b --- /dev/null +++ b/resource-server/src/main/resources/mapper/AuthUserStationMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + pk_id, uid, station_code, station_id, creater, ctime, uptime + + + diff --git a/wechat-server/src/main/resources/application.yml b/wechat-server/src/main/resources/application.yml index 76a7003..2341794 100644 --- a/wechat-server/src/main/resources/application.yml +++ b/wechat-server/src/main/resources/application.yml @@ -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