diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java new file mode 100644 index 0000000..20ac029 --- /dev/null +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java @@ -0,0 +1,26 @@ +package com.evotech.hd.authorization.service; + +import com.evotech.hd.common.core.Dto.BaseResponse; +import com.evotech.hd.common.core.entity.cloud.BatteryStation; +import com.evotech.hd.common.core.entity.cloud.Company; +import com.evotech.hd.common.core.entity.cloud.VehicleInfo; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(value = "cloud-server", path = "/cloud") +public interface CloudService { + + + @GetMapping(value = "/batterystation/login/list", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE}) + public BaseResponse> loadBatteryStation(@RequestParam("proxyCode") String proxyCode); + + @GetMapping(value = "/company/login/one", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE}) + public BaseResponse loadCompany(@RequestParam("code") String code); + + @GetMapping(value = "/vehicle/login/list", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE}) + public BaseResponse> loadVehicleInfo(@RequestParam("companyCode") String companyCode); +} 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 fc26067..dc44deb 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 @@ -1,28 +1,27 @@ package com.evotech.hd.authorization.service.impl; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.apache.http.auth.AuthenticationException; -import org.springframework.beans.BeanUtils; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.evotech.hd.authorization.config.oauth2.MyAccessToken; import com.evotech.hd.authorization.entity.LoginRequest; import com.evotech.hd.authorization.entity.UserVo; -import com.evotech.hd.authorization.service.ResourceService; import com.evotech.hd.authorization.service.CaptchaService; +import com.evotech.hd.authorization.service.CloudService; import com.evotech.hd.authorization.service.LoginService; +import com.evotech.hd.authorization.service.ResourceService; import com.evotech.hd.authorization.utils.LoginRequesHeadertUtil; import com.evotech.hd.authorization.utils.Oauth2AccessTokenUtil; import com.evotech.hd.authorization.utils.TokenUtil; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.LoginCacheInfo; import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.BatteryStation; +import com.evotech.hd.common.core.entity.cloud.Company; +import com.evotech.hd.common.core.entity.cloud.VehicleInfo; 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; @@ -30,12 +29,19 @@ import com.evotech.hd.common.core.entity.resource.auth.AuthUser; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.redis.utils.RedisUtil; import com.evotech.hd.common.web.util.IpUtil; -import cn.hutool.http.useragent.UserAgent; -import cn.hutool.http.useragent.UserAgentUtil; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.apache.http.auth.AuthenticationException; +import org.springframework.beans.BeanUtils; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class LoginServiceImpl implements LoginService { @@ -48,6 +54,8 @@ public class LoginServiceImpl implements LoginService { @Resource private ResourceService resourceService; @Resource + private CloudService cloudService; + @Resource private RedisUtil redisUtil; @Resource private Environment env; @@ -109,7 +117,7 @@ public class LoginServiceImpl implements LoginService { loginLog.setLoginTime(d); loginLog.setCtime(d); loginLog.setRequestIp(IpUtil.getRemoteIP(request)); - String uaStr = request.getHeader("User-Agent"); + String uaStr = request.getHeader("User-Agent"); UserAgent ua = UserAgentUtil.parse(uaStr); loginLog.setUa(uaStr); loginLog.setBrowser(ua.getBrowser().toString()); @@ -164,7 +172,43 @@ public class LoginServiceImpl implements LoginService { uv.setPermCodeList(permCodeList); redisUtil.lSet(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":perms", permUriList.toArray(new String[permUriList.size()]), tokenExp); } - + 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(",")); + } + 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)){ + 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(",")); + } + } + } + } + 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/authorization-server/src/main/resources/application.yml b/authorization-server/src/main/resources/application.yml index fb7563e..1104965 100644 --- a/authorization-server/src/main/resources/application.yml +++ b/authorization-server/src/main/resources/application.yml @@ -14,12 +14,15 @@ spring: name: oauth2-server config: import: + - nacos:yt-common.properties?refreshEnabled=true - nacos:${spring.application.name}.yaml?refreshEnabled=true cloud: nacos: serverAddr: 192.168.5.213:8848 username: nacos password: nacos + config: + namespace: ${nacos.namespace:public} discovery: namespace: ${nacos.namespace:public} register-enabled: true diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/BaseResponse.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/BaseResponse.java new file mode 100644 index 0000000..e1ccb0b --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/BaseResponse.java @@ -0,0 +1,41 @@ +package com.evotech.hd.common.core.Dto; + +import com.evotech.hd.common.core.enums.CodeMsg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +/** + * 请求返回对象 + * @ClassName:BaseResponse + * @date: 2025年04月15日 16:37 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class BaseResponse implements Serializable { + + @Schema(description = "请求处理状态", example = "1") + private Integer status; + @Schema(description = "状态码", example = "1000") + private String code; + @Schema(description = "返回消息") + private String msg; + @Schema(description = "返回数据") + private T data; + + public BaseResponse() { + } + + public BaseResponse success(T o) { + this.status = 1; + this.code = CodeMsg.SUCCESS.getCode(); + this.msg = CodeMsg.SUCCESS.getMsg(); + this.data = o; + return this; + } + + +} 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 2380fc6..59f20ed 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 @@ -1,13 +1,33 @@ package com.evotech.hd.common.core.constant; public interface HDConstant { - + + public static final class PermissionConstant{ + public static final String PERMISSION_STATION_CODE = "STATION_CODE"; + public static final String PERMISSION_STATION_ID = "STATION_ID"; + public static final String PERMISSION_COMPANY_CODE = "COMPANY_CODE"; + public static final String PERMISSION_COMPANY_ID = "COMPANY_ID"; + public static final String PERMISSION_CAR_CODE = "CAR_CODE"; + public static final String PERMISSION_CAR_ID = "CAR_ID"; + } + + String DEFAULT_MENU_TYPE= "default_menu"; + /** * 系统管理员角色 */ String SYSTEM_MANAGER_ROLE_CODE = "SYSADMIN"; - - /** + /** + * 运营商角色 + */ + String OPERATOR_ROLE_CODE = "PROXY"; + /** + * 公司角色 + */ + String COMPANY_ROLE_CODE = "COMPANY"; + + + /** * 认证请求头key */ String AUTHORIZATION_KEY = "Authorization"; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java index 3c816a8..80ba3a0 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java @@ -1,12 +1,19 @@ 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.OrderSwapBattery; +import com.evotech.hd.common.core.permission.DataScope; +import com.evotech.hd.common.core.permission.DataScopes; /** * @author zrb * @since 2024-11-22 */ +@DataScopes({ + @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), + @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), +}) public interface OrderSwapBatteryDao extends BaseMapper { } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/request/PageListSwapOrderPreRequest.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/request/PageListSwapOrderPreRequest.java index 42b5a17..afc88a7 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/request/PageListSwapOrderPreRequest.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/request/PageListSwapOrderPreRequest.java @@ -4,6 +4,7 @@ import com.evotech.hd.common.core.entity.BasePageRequest; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; @Data @@ -19,9 +20,11 @@ public class PageListSwapOrderPreRequest extends BasePageRequest { private String plateNum; @Schema(description = "预约换电日期开始", example = "yyyyMMdd") + @DateTimeFormat(pattern = "yyyyMMdd") private String swapDayBegin; @Schema(description = "预约换电日期结束") + @DateTimeFormat(pattern = "yyyyMMdd") private String swapDayEnd; @Schema(description = "换电站编码") diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUser.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUser.java index c7858df..348f669 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUser.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/resource/auth/AuthUser.java @@ -5,17 +5,15 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serializable; -import java.util.Date; - -import org.springframework.format.annotation.DateTimeFormat; - import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @author zrb @@ -42,6 +40,9 @@ public class AuthUser implements Serializable { @Schema(description = "账号类型:1-开发者,2-运营方,3-客户", requiredMode = RequiredMode.REQUIRED) private Integer type; + @Schema(description = "业务code, 即公司类型,为公司统一社会信息代码, 运营商类型为运营商统一社会信用代码", hidden = true) + private String businessCode; + @Schema(description = "关联方代码") private String typeRelateCode; @@ -111,4 +112,5 @@ public class AuthUser implements Serializable { @Schema(description = "角色编码", hidden = true) @TableField(exist = false) private String rcodes; + } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/DataScope.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/DataScope.java new file mode 100644 index 0000000..337ddda --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/DataScope.java @@ -0,0 +1,40 @@ +package com.evotech.hd.common.core.permission; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD,ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface DataScope { + + /*** + * 是否生效 + */ + boolean enabled() default true; + + /*** + * 表别名 + */ + String tableAlias() default ""; + + /*** + * 权限对象 + * 具体参考 + * HDConstant.OPERATOR_ROLE_CODE + * HDConstant.COMPANY_ROLE_CODE + */ + String permissionObject(); + + /*** + * 运营商权限限制的字段 + */ + String permissionScopeName(); + + /*** + * 运营商权限限制的字段 + * HDConstant.PermissionConstant中 的字段信息 + */ + String permissionScopeRedisKey(); +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/DataScopes.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/DataScopes.java new file mode 100644 index 0000000..419a758 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/DataScopes.java @@ -0,0 +1,20 @@ +package com.evotech.hd.common.core.permission; + +import org.springframework.stereotype.Component; + +import java.lang.annotation.*; + +/** + * 主要用来处理一个方法中, 有多个数据表的文图 + * @DataScopes({ + * @DataScope(tableAlias = 123,companyScopeName = "",operatorScopeName=""), + * @DataScope(tableAlias = 456,companyScopeName = "",operatorScopeName=""),}) + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface DataScopes { + + DataScope[] value(); +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/PermissionScopeEnum.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/PermissionScopeEnum.java new file mode 100644 index 0000000..6875ca2 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/permission/PermissionScopeEnum.java @@ -0,0 +1,24 @@ +package com.evotech.hd.common.core.permission; + +/** + * @desc: 枚举 + * @ClassName:PermissionScopeEnum + * @date: 2025年04月15日 8:30 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public enum PermissionScopeEnum { + + DEFAULT_NULL_TYPE(""), + INTEGER_TYPE("Integer"), + STRING_TYPE("String"), + + COMPANY_LIMIT_CAR_TYPE("car"), + COMPANY_LIMIT_COMPANY_TYPE("company"), + ; + + String type; + + PermissionScopeEnum(String type) {} +} diff --git a/cloud-manage-server/pom.xml b/cloud-manage-server/pom.xml index d8cae23..a0979e2 100644 --- a/cloud-manage-server/pom.xml +++ b/cloud-manage-server/pom.xml @@ -82,8 +82,16 @@ cn.hutool hutool-crypto + + cn.hutool + hutool-jwt + + + org.springframework.security + spring-security-oauth2-jose + - + ${project.artifactId} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/config/NewMybatisPlusConfig.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/config/NewMybatisPlusConfig.java new file mode 100644 index 0000000..57e3f3d --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/config/NewMybatisPlusConfig.java @@ -0,0 +1,31 @@ +package com.evotech.hd.cloud.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; +import com.evotech.hd.cloud.handler.DataScopeHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * @desc: + * @ClassName:MybatisPlusConfig + * @date: 2025年04月14日 16:14 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@EnableTransactionManagement(proxyTargetClass = true) +@Configuration +public class NewMybatisPlusConfig { + + @Bean("newMybatisPlusInterceptor") + public MybatisPlusInterceptor mybatisPlusInterceptor() { + + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 数据权限插件 + interceptor.addInnerInterceptor(new DataPermissionInterceptor(new DataScopeHandler())); + return interceptor; + } + +} 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 f9760dd..4a830c3 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 @@ -1,24 +1,14 @@ package com.evotech.hd.cloud.controller; -import java.util.List; -import java.util.Map; - -import com.evotech.hd.cloud.mqtt.message.handle.RequestMessageService; -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.cloud.entity.request.PageListBatteryStationRequest; +import com.evotech.hd.cloud.mqtt.message.handle.RequestMessageService; import com.evotech.hd.cloud.service.BatteryStationService; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStation; import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,6 +16,11 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; @Tag(name = "换电站") @@ -103,4 +98,10 @@ public class BatteryStationController { batteryStationService.downloadQRCode2(path, width, response); } + @Operation(summary = "查询") + @GetMapping("/login/list") + public BaseResponse> loginList(@RequestParam String proxyCode) { + return batteryStationService.loginList(proxyCode); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java index ac9b9cd..17b34a3 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java @@ -1,26 +1,22 @@ package com.evotech.hd.cloud.controller.customer; -import java.util.List; -import java.util.Map; - -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.RestController; - import com.evotech.hd.cloud.service.CompanyService; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.BasePageRequest; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.Company; 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.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; @Tag(name = "公司管理") @RestController @@ -66,4 +62,10 @@ public class CompanyController { return companyService.companyByCode(ccode); } + @GetMapping("/login/one") + public BaseResponse loginOne(@RequestParam String code) { + return companyService.loginOne(code); + } + + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java index 33c930b..a6366c1 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java @@ -1,27 +1,22 @@ package com.evotech.hd.cloud.controller.customer; -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.cloud.entity.request.PageListVehicleRequest; import com.evotech.hd.cloud.service.VehicleService; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; 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 org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @@ -107,8 +102,14 @@ public class VehicleController { public Result> listRelationUser(@NotBlank @RequestParam String PlantNo) { return vehicleService.listRelationUser(PlantNo); } - - + + + @Operation(summary = "查询") + @GetMapping("/login/list") + @ApiOperationSupport(order = 4) + public BaseResponse> loginList(@RequestParam String companyCode) { + return vehicleService.loginList(companyCode); + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java index 4342b50..dcb634f 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java @@ -1,27 +1,16 @@ package com.evotech.hd.cloud.controller.order; -import java.util.List; - -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -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.RequestBody; -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.cloud.entity.vo.NativePayVO; import com.evotech.hd.cloud.service.OrderSwapBatteryService; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -29,6 +18,11 @@ 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.text.ParseException; +import java.util.List; @Tag(name = "换电订单") @ApiSupport(order = 22) @@ -57,7 +51,7 @@ public class OrderSwapBatteryController { @Operation(summary = "查询预约") @GetMapping("/pre/list") @ApiOperationSupport(order = 3) - public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) { + public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException { return orderSwapBatteryService.listPre(plsopr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDao.java index 8b0ae40..cb05fcb 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationDao.java @@ -1,18 +1,24 @@ package com.evotech.hd.cloud.dao; -import java.util.List; - -import org.apache.ibatis.annotations.Param; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest; +import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.cloud.BatteryStation; +import com.evotech.hd.common.core.permission.DataScope; +import com.evotech.hd.common.core.permission.DataScopes; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author zrb * @since 2024-10-15 */ +//换电站 + @DataScopes({ + @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "pk_id", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_ID) + }) public interface BatteryStationDao extends BaseMapper { List listStation(Page page, @Param("plbsr") PageListBatteryStationRequest plbsr); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/CompanyDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/CompanyDao.java index eb76caa..8599461 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/CompanyDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/CompanyDao.java @@ -7,6 +7,7 @@ import com.evotech.hd.common.core.entity.cloud.Company; * @author zrb * @since 2024-11-20 */ +//换电站 public interface CompanyDao extends BaseMapper { } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryPreDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryPreDao.java index 29f050e..96e47c2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryPreDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryPreDao.java @@ -1,12 +1,19 @@ package com.evotech.hd.cloud.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.common.core.permission.DataScope; +import com.evotech.hd.common.core.permission.DataScopes; /** * @author zrb * @since 2024-12-04 */ +@DataScopes({ + @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), + @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE) +}) public interface OrderSwapBatteryPreDao extends BaseMapper { } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/VehicleInfoDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/VehicleInfoDao.java index 1646929..eb7df16 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/VehicleInfoDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/VehicleInfoDao.java @@ -7,6 +7,7 @@ import com.evotech.hd.common.core.entity.cloud.VehicleInfo; * @author zrb * @since 2024-11-22 */ +//换电站 public interface VehicleInfoDao extends BaseMapper { } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/handler/DataScopeHandler.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/handler/DataScopeHandler.java new file mode 100644 index 0000000..7ed1699 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/handler/DataScopeHandler.java @@ -0,0 +1,107 @@ +package com.evotech.hd.cloud.handler; + +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.alibaba.nacos.common.utils.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler; +import com.evotech.hd.cloud.utils.RedisCloudUtils; +import com.evotech.hd.common.core.permission.DataScope; +import com.evotech.hd.common.core.permission.DataScopes; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.Parenthesis; +import net.sf.jsqlparser.expression.StringValue; +import net.sf.jsqlparser.expression.operators.relational.ExpressionList; +import net.sf.jsqlparser.expression.operators.relational.InExpression; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; +import org.apache.commons.lang3.ObjectUtils; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * @desc: + * @ClassName:DataScopeHandler + * @date: 2025年04月14日 14:54 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public class DataScopeHandler implements MultiDataPermissionHandler { + + /** + * 获取数据权限 SQL 片段。 + *

旧的 {@link MultiDataPermissionHandler#getSqlSegment(Expression, String)} 方法第一个参数包含所有的 where 条件信息,如果 return 了 null 会覆盖原有的 where 数据,

+ *

新版的 {@link MultiDataPermissionHandler#getSqlSegment(Table, Expression, String)} 方法不能覆盖原有的 where 数据,如果 return 了 null 则表示不追加任何 where 条件

+ * + * @param table 所执行的数据库表信息,可以通过此参数获取表名和表别名 + * @param where 原有的 where 条件信息 + * @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法 + * @return JSqlParser 条件表达式,返回的条件表达式会拼接在原有的表达式后面(不会覆盖原有的表达式) + */ + + @Override + public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) { + try { + if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisCloudUtils.getRoleType())){ + String roleCode = RedisCloudUtils.getRoleCode(); + Class mapperClazz = Class.forName(mappedStatementId.substring(0, mappedStatementId.lastIndexOf("."))); + DataScopes dataScopesList = mapperClazz.getAnnotation(DataScopes.class); + if (ObjectUtils.isNotEmpty(dataScopesList)) { + for (DataScope dataScope :dataScopesList.value()){ + if(dataScope.enabled()){ + if(dataScope.permissionObject().equals(roleCode)){ + return buildDataScopeByAnnotation(dataScope); + } + } + } + } + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + + + /** + * DataScope注解方式,拼装数据权限 + * + * @param dataScope + * @return + */ + private Expression buildDataScopeByAnnotation(DataScope dataScope) { + Expression expression = buildDataScopeExpression(dataScope, RedisCloudUtils.getPermissionValue(dataScope.permissionScopeRedisKey())); + return expression == null ? null : new Parenthesis(expression); + } + + + private Expression buildDataScopeExpression(DataScope dataScope, String value) { + if(!"null".equals(value)){ + ExpressionList expressionList = new ExpressionList(Arrays.asList(value.split(",")).stream().map(StringValue::new).collect(Collectors.toList())); + // 设置左边的字段表达式,右边设置值。 + InExpression operatorInExpression = new InExpression(); + operatorInExpression.setLeftExpression(buildColumn(dataScope.tableAlias(), dataScope.permissionScopeName())); + operatorInExpression.setRightExpression(new Parenthesis(expressionList)); + return operatorInExpression; + + } + return null; + } + + /** + * 构建Column + * + * @param tableAlias 表别名 + * @param columnName 字段名称 + * @return 带表别名字段 + */ + private static Column buildColumn(String tableAlias, String columnName) { + if (StringUtils.isNotEmpty(tableAlias)) { + columnName = tableAlias + "." + columnName; + } + return new Column(columnName); + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java index b9a4134..b63eaa3 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java @@ -1,10 +1,10 @@ package com.evotech.hd.cloud.mqtt.config; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Date; -import java.util.concurrent.ConcurrentHashMap; - +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import jakarta.annotation.PreDestroy; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; @@ -12,16 +12,14 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import jakarta.annotation.PreDestroy; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Date; +import java.util.concurrent.ConcurrentHashMap; -@Component +//@Component @Order(value = 20) @Slf4j public class MqttConnectInit implements ApplicationRunner { 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 4857fb0..b1a2f1d 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 @@ -1,15 +1,15 @@ package com.evotech.hd.cloud.service; -import java.util.List; -import java.util.Map; - import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStation; import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; - import jakarta.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + public interface BatteryStationService { public Result add(BatteryStation bs); @@ -29,4 +29,7 @@ public interface BatteryStationService { public void createQRCode2(String path, String width, HttpServletResponse response); public void downloadQRCode2(String path, String width, HttpServletResponse response); + + public BaseResponse> loginList(String proxyId); + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java index 23e87d9..245d0bb 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java @@ -1,12 +1,13 @@ package com.evotech.hd.cloud.service; -import java.util.List; -import java.util.Map; - +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.BasePageRequest; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.Company; +import java.util.List; +import java.util.Map; + public interface CompanyService { public Result add(Company company); @@ -19,4 +20,5 @@ public interface CompanyService { public Result> companyByCode(String ccode); + public BaseResponse loginOne(String code); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java index 98fe4ee..4f016d4 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java @@ -1,23 +1,24 @@ package com.evotech.hd.cloud.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.cloud.entity.vo.NativePayVO; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import java.text.ParseException; +import java.util.List; + public interface OrderSwapBatteryService { public Result addPre(OrderSwapBatteryPre osbp); public Result cancelPre(Integer id, Integer status); - public Result> listPre(PageListSwapOrderPreRequest plsopr); + public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException; public Result add(OrderSwapBattery osb); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java index da0820c..fae2bcc 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java @@ -1,12 +1,13 @@ package com.evotech.hd.cloud.service; -import java.util.List; - import com.evotech.hd.cloud.entity.request.PageListVehicleRequest; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; +import java.util.List; + public interface VehicleService { public Result add(VehicleInfo vi); @@ -28,4 +29,8 @@ public interface VehicleService { public Result> listWechatUserRelation(String openid, String plateNum); public Result> listRelationUser(String PlantNo); + public BaseResponse> loginList(String companyCode); + + + } 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 251d6ed..82df5d4 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 @@ -1,21 +1,11 @@ package com.evotech.hd.cloud.service.impl; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.security.KeyPair; -import java.util.Base64; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.BeanUtils; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.crypto.KeyUtil; +import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; +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.cloud.dao.BatteryStationDao; @@ -25,20 +15,26 @@ import com.evotech.hd.cloud.entity.BatteryStationSecretKey; import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest; import com.evotech.hd.cloud.service.BatteryStationService; import com.evotech.hd.cloud.service.rpc.WechatService; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStation; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; import com.evotech.hd.common.core.enums.CodeMsg; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.crypto.KeyUtil; -import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; import jakarta.annotation.Resource; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.BeanUtils; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.KeyPair; +import java.util.*; @Service public class BatteryStationServiceImpl implements BatteryStationService { @@ -272,4 +268,8 @@ public class BatteryStationServiceImpl implements BatteryStationService { } } + public BaseResponse> loginList(String proxyCode) { + return new BaseResponse>().success(batteryStationDao.selectList(new LambdaQueryWrapper().eq(BatteryStation::getProxyId, proxyCode).select(BatteryStation::getPkId, BatteryStation::getCode))); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java index c74f2d5..4d782e4 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java @@ -1,21 +1,22 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; - +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.cloud.dao.CompanyDao; import com.evotech.hd.cloud.service.CompanyService; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.BasePageRequest; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.Company; import com.evotech.hd.common.core.enums.CodeMsg; import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Service @@ -78,4 +79,9 @@ public class CompanyServiceImpl implements CompanyService { return new Result>().success(m); } + @Override + public BaseResponse loginOne(String code) { + return new BaseResponse().success(companyDao.selectOne(new LambdaQueryWrapper().eq(Company::getCcode, code))); + } + } 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 e1c30c0..23775c3 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 @@ -1,50 +1,32 @@ package com.evotech.hd.cloud.service.impl; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.dao.BatteryStationDao; -import com.evotech.hd.cloud.dao.BatteryStationDcDao; -import com.evotech.hd.cloud.dao.BatteryStationRobotDao; -import com.evotech.hd.cloud.dao.CompanyDao; -import com.evotech.hd.cloud.dao.VehicleInfoDao; +import com.evotech.hd.cloud.dao.*; import com.evotech.hd.cloud.entity.HomeStationOrderData; import com.evotech.hd.cloud.entity.request.HomeDataRequest; -import com.evotech.hd.cloud.entity.vo.HomeData1; -import com.evotech.hd.cloud.entity.vo.HomeData2; -import com.evotech.hd.cloud.entity.vo.HomeData3; -import com.evotech.hd.cloud.entity.vo.HomeData4; -import com.evotech.hd.cloud.entity.vo.HomeData5; -import com.evotech.hd.cloud.entity.vo.HomeData6; -import com.evotech.hd.cloud.entity.vo.HomeData7; +import com.evotech.hd.cloud.entity.vo.*; import com.evotech.hd.cloud.service.HomeService; import com.evotech.hd.common.core.dao.cloud.HomeDataOrderSwapCollateDao; import com.evotech.hd.common.core.dao.cloud.HomeDataTradeCollateDao; import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.BatteryStation; -import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; -import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot; -import com.evotech.hd.common.core.entity.cloud.Company; -import com.evotech.hd.common.core.entity.cloud.HomeDataOrderSwapCollate; -import com.evotech.hd.common.core.entity.cloud.HomeDataTradeCollate; -import com.evotech.hd.common.core.entity.cloud.VehicleInfo; +import com.evotech.hd.common.core.entity.cloud.*; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.common.core.entity.wechat.WechatUser; import com.evotech.hd.common.core.enums.PayTypeEnums; import com.evotech.hd.common.core.enums.TradeTypeEnums; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java index 5547b3d..4e782ca 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java @@ -1,36 +1,22 @@ package com.evotech.hd.cloud.service.impl; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONUtil; +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.cloud.dao.*; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq; +import com.evotech.hd.cloud.entity.vo.NativePayVO; import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq; import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; -import com.evotech.hd.common.core.entity.cloud.*; -import com.evotech.hd.common.redis.utils.RedisUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.entity.vo.NativePayVO; import com.evotech.hd.cloud.service.OrderSwapBatteryService; import com.evotech.hd.cloud.service.TradeService; import com.evotech.hd.cloud.service.WalletAccountService; @@ -40,6 +26,8 @@ import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.*; +import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; import com.evotech.hd.common.core.entity.wechat.WechatUser; @@ -48,8 +36,22 @@ import com.evotech.hd.common.core.enums.OrderStatusEnums; import com.evotech.hd.common.core.enums.PayTypeEnums; import com.evotech.hd.common.core.enums.TradeTypeEnums; import com.evotech.hd.common.core.utils.CommonUtil; - +import com.evotech.hd.common.redis.utils.RedisUtil; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; @Slf4j @Service public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { @@ -152,16 +154,18 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { } @Override - public Result> listPre(PageListSwapOrderPreRequest plsopr) { + public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException { Page page = new Page(plsopr.getPageNo(), plsopr.getPageSize()); - page = orderSwapBatteryPreDao.selectPage(page, new QueryWrapper() - .eq(StringUtils.hasText(plsopr.getUcode()), "ucode", plsopr.getUcode()) - .eq(plsopr.getStatus() != null, "status", plsopr.getStatus()) - .eq(StringUtils.hasText(plsopr.getPlateNum()), "plate_num", plsopr.getPlateNum()) - .eq(StringUtils.hasText(plsopr.getStationCode()), "station_code", plsopr.getStationCode()) - .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), "swap_day", plsopr.getSwapDayBegin()) - .le(StringUtils.hasText(plsopr.getSwapDayEnd()), "swap_day", plsopr.getSwapDayEnd()) - .orderByDesc("pk_id")); + page = orderSwapBatteryPreDao.selectPage(page, new LambdaQueryWrapper() + .eq(StringUtils.hasText(plsopr.getUcode()), OrderSwapBatteryPre::getUcode, plsopr.getUcode()) + .eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus()) + .eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum()) + .eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode()) + .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) + .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) +// .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin()) +// .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd()) + .orderByDesc(OrderSwapBatteryPre::getPkId)); if (page.getRecords().isEmpty()) { return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } @@ -220,19 +224,19 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { statusList = Arrays.asList(plsor.getStatus().split(",")).stream().map(Integer::valueOf).toList(); } - page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() - .eq(StringUtils.hasText(plsor.getOrderNo()), "order_no", plsor.getOrderNo()) - .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) - .in(!plateNumList.isEmpty(), "plate_num", plateNumList) - .in(!statusList.isEmpty(), "status", statusList) - .ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin()) - .le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd()) - .eq(StringUtils.hasText(plsor.getStationCode()), "station_code", plsor.getStationCode()) - .like(StringUtils.hasText(plsor.getStationName()), "station_name", plsor.getStationName()) - .eq(StringUtils.hasText(plsor.getUserId()), "order_pre_uid", plsor.getUserId()) - .eq(StringUtils.hasText(plsor.getTradeNo()), "trade_no", plsor.getTradeNo()) - .ne("del_flag", 1) - .orderByDesc("pk_id")); + page = orderSwapBatteryDao.selectPage(page, new LambdaQueryWrapper() + .eq(StringUtils.hasText(plsor.getOrderNo()), OrderSwapBattery::getOrderNo, plsor.getOrderNo()) + .eq(StringUtils.hasText(plsor.getPlateNum()), OrderSwapBattery::getPlateNum, plsor.getPlateNum()) + .in(!plateNumList.isEmpty(), OrderSwapBattery::getPlateNum, plateNumList) + .in(!statusList.isEmpty(), OrderSwapBattery::getStatus, statusList) + .ge(plsor.getOrderTimeBegin() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeBegin()) + .le(plsor.getOrderTimeEnd() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeEnd()) + .eq(StringUtils.hasText(plsor.getStationCode()), OrderSwapBattery::getStationCode, plsor.getStationCode()) + .like(StringUtils.hasText(plsor.getStationName()), OrderSwapBattery::getStationName, plsor.getStationName()) + .eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreId, plsor.getUserId()) + .eq(StringUtils.hasText(plsor.getTradeNo()), OrderSwapBattery::getTradeNo, plsor.getTradeNo()) + .ne(OrderSwapBattery::getDelFlag, 1) + .orderByDesc(OrderSwapBattery::getPkId)); if (page.getRecords().isEmpty()) { return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java index e79cebe..9d4ef0d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java @@ -1,23 +1,23 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - +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.cloud.dao.VehicleInfoDao; import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; import com.evotech.hd.cloud.entity.request.PageListVehicleRequest; import com.evotech.hd.cloud.service.VehicleService; +import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; import com.evotech.hd.common.core.enums.CodeMsg; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service @@ -67,6 +67,7 @@ public class VehicleServiceImpl implements VehicleService { .eq(StringUtils.hasText(plvr.getTypeCode()), "type_code", plvr.getTypeCode()) .like(StringUtils.hasText(plvr.getPlateNum()), "plate_num", plvr.getPlateNum()) .eq(plvr.getOwnerType() != null, "owner_type", plvr.getOwnerType()) + .like(StringUtils.hasText(plvr.getOwnerName()), "owner_name", plvr.getOwnerName()) .eq(StringUtils.hasText(plvr.getVinNo()), "vin_no", plvr.getVinNo()) .eq(StringUtils.hasText(plvr.getEngineNo()), "engine_no", plvr.getEngineNo()) .eq(StringUtils.hasText(plvr.getFrameworkNo()), "framework_no", plvr.getFrameworkNo()) @@ -150,6 +151,10 @@ public class VehicleServiceImpl implements VehicleService { return new Result>().success(list); } - + @Override + public BaseResponse> loginList(String companyCode) { + return new BaseResponse>().success(vehicleInfoDao.selectList(new LambdaQueryWrapper().eq(VehicleInfo::getCcode, companyCode).select(VehicleInfo::getPkId, VehicleInfo::getPlateNum))); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/RedisCloudUtils.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/RedisCloudUtils.java new file mode 100644 index 0000000..c996c82 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/RedisCloudUtils.java @@ -0,0 +1,178 @@ +package com.evotech.hd.cloud.utils; + +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.entity.resource.auth.AuthUser; +import com.evotech.hd.common.redis.utils.RedisUtil; +import com.evotech.hd.common.web.util.RequestContextUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +/** + * @desc: + * @ClassName:RedisCloudUtils + * @date: 2025年04月14日 15:24 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Slf4j +public class RedisCloudUtils { + + public static AuthUser getUser(){ + AuthUser user = (AuthUser)getRedisObjectValue("user"); + return (ObjectUtils.isEmpty(user) ? null : user); + } + + public static String getRoleCode(){ + String roles = getRedisStringValue("rcodes"); + return StringUtils.isEmpty(roles) ? "" : roles; + } + + public static String getPermissionValue(String key){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + key+":"+getUserPkId()); + } + + public static String getStationCode(){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+getUserPkId()); + } + public static String getStationId(){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+getUserPkId()); + } + + public static String getCompanyCode(){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE+":"+getUserPkId()); + } + public static String getCompanyId(){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID+":"+getUserPkId()); + } + + public static String getCarCode(){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE+":"+getUserPkId()); + } + public static String getCarId(){ + return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID+":"+getUserPkId()); + } + + private static Integer getUserPkId(){ + AuthUser user = getUser(); + if(org.apache.commons.lang3.ObjectUtils.isEmpty(user) || user.getPkId() == null){ + return null; + } + return user.getPkId(); + } + + +// public static Integer getCompanyScopeId(){ +// return getUser().getPkId(); +// } + + + /** + * 获取当前登录的角色信息, 0 站端, 1 管理员, 2 运营商, 3 公司, + * @author: andy.shi + * @contact: 17330188597 + * @date: 2025/4/14/周一 14:21 + * @return: * @return: java.lang.String + */ + public static String getRoleType(){ + String roles = getRoleCode(); + if(isAdmin(roles)){ + return "1"; + } + if(isOperator(roles)){ + return "2"; + } + if(isCompany(roles)){ + return "3"; + } + return "0"; + } + + //如果不等于-1 则证明为管理员 + public static Boolean isAdmin(String roles){ + return isAuthority(roles, HDConstant.SYSTEM_MANAGER_ROLE_CODE); + } + + public static Boolean isOperator(String roles){ + return isAuthority(roles,HDConstant.OPERATOR_ROLE_CODE); + } + + public static Boolean isCompany(String roles){ + return isAuthority(roles,HDConstant.COMPANY_ROLE_CODE); + } + + private static Boolean isAuthority(String checkParamRoles, String paramRoleCode){ + if(org.apache.commons.lang3.StringUtils.isNotEmpty(checkParamRoles)){ + return checkParamRoles.lastIndexOf(paramRoleCode) != -1; + } + return getRoleCode().lastIndexOf(paramRoleCode) != -1; + } + + + /*** + * 根据token拼接key, 获取String结果 + * @param key + * @return + */ + private static String getRedisStringValue(String key) { + return String.valueOf(getRedisObjectValue(key)); + } + + /*** + * 根据token拼接key, 获取Object结果 + * @param key + * @return + */ + private static Object getRedisObjectValue(String key) { + String token = RequestContextUtil.getToken(); + if(StringUtils.isEmpty(token)){ + log.error("SpringUtil.getRedisValue========== token is null"); + return null; + } + String jti = null; + try { + jti = TokenUtil.getJti(token); + if(StringUtils.isEmpty(jti)){ + log.error("SpringUtil.getRedisValue========== jtj is null"); + return null; + } + } catch (Exception e) { + log.error("SpringUtil.gegetRedisValuetUser========== jtj is null"); + return null; + } + return getValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":"+key); + } + + + /*** + * 根据key获取redis缓存 + * @param key + * @return + */ + private static String getStringValue(String key){ + Object obj = getValue(key); + return ObjectUtils.isEmpty(obj) ? null : String.valueOf(obj); + } + + /*** + * 根据key获取redis缓存 + * @param key + * @return + */ + private static Object getValue(String key){ + RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class); + if(ObjectUtils.isEmpty(redisUtil)){ + log.error("SpringUtil.getRedisValue========== redisUtil is null"); + } + Object obj = redisUtil.get(key); + if(ObjectUtils.isEmpty(obj)){ + log.error("SpringUtil.getRedisValue=={}========== obj is null",key); + return null; + } + log.info("SpringUtil.getRedisValue=={}===={}",key,String.valueOf(obj)); + return obj; + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java index 1deb3f3..00814a2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java @@ -1,10 +1,15 @@ package com.evotech.hd.cloud.utils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; /** * @desc: @@ -48,4 +53,34 @@ public class SpringUtil implements ApplicationContextAware { return b; } + public static HttpServletRequest getRequest() { + RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + if(null == requestAttributes) { + log.warn("The 'RequestAttributes' object is null, so can`t get 'HttpServletRequest' object!"); + + return null; + } + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)requestAttributes; + HttpServletRequest request = servletRequestAttributes.getRequest(); + + return request; + } + + public static HttpServletResponse getResponse() { + RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + if(requestAttributes == null) { + log.warn("The 'RequestAttributes' object is null, so can`t get 'HttpServletResponse' object!"); + + return null; + } + + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes; + HttpServletResponse resp = servletRequestAttributes.getResponse(); + return resp; + } + + + + + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/TokenUtil.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/TokenUtil.java new file mode 100644 index 0000000..cb1d10c --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/TokenUtil.java @@ -0,0 +1,56 @@ +package com.evotech.hd.cloud.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import org.springframework.security.oauth2.jwt.JwtClaimNames; + +import java.util.Date; + +/** + * token解析工具类 + */ +public class TokenUtil { + + + public static JWT parseToJwt(String token) { + JWT parseToken = JWTUtil.parseToken(token); + return parseToken; + } + + + /** + * 从token中获取userId + */ + public static String getUserId(String token) { + String uid = parseToJwt(token).getPayloads().getStr("uid"); + return uid; + } + + /** + * 从token中获取rcodes + */ + public static String getRcodes(String token) { + String uid = parseToJwt(token).getPayloads().getStr("rcodes"); + return uid; + } + + + /** + * 从token中获取jti + */ + public static String getJti(String token) { + String jti = parseToJwt(token).getPayloads().getStr(JwtClaimNames.JTI).replaceAll("-", ""); + return jti; + } + + + /** + * 从token中获取过期时间 + */ + public static Date getExp(String token) { + String exp = parseToJwt(token).getPayloads().getStr(JwtClaimNames.EXP).toString(); + return DateUtil.date(Long.valueOf(exp) * 1000); + } + +} diff --git a/cloud-manage-server/src/main/resources/application.yml b/cloud-manage-server/src/main/resources/application.yml index 79362b0..dacc441 100644 --- a/cloud-manage-server/src/main/resources/application.yml +++ b/cloud-manage-server/src/main/resources/application.yml @@ -12,7 +12,7 @@ logging: spring: # 服务名称必须带上,不然nacos服务列表中没有,也不会有注册成功的信息 application: - name: cloud-server + name: cloud-server #${cloud-manage-server:cloud-server} jackson: timeZone: GMT+08:00 date-format: yyyy-MM-dd HH:mm:ss @@ -20,7 +20,10 @@ spring: write-dates-as-timestamps: false config: import: - - nacos:${spring.application.name}.yaml?refreshEnabled=true + - nacos:yt-common.properties?refreshEnabled=true + - nacos:cloud-server.yaml?refreshEnabled=true + + cloud: nacos: serverAddr: 192.168.5.213:8848 @@ -35,7 +38,8 @@ spring: metadata: management: context-path: ${server.servlet.context-path}/actuator - + config: + namespace: ${nacos.namespace:public} # boot: # admin: # client: @@ -45,6 +49,7 @@ spring: # username: jdyl # password: jdyl123 # 添加这个,客户端就显示ip,而不是主机名,我用nacos是显示的主机名 + # instance: # prefer-ip: true # 为springbootadmin开启所有检查 diff --git a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java index 439e51a..f599e3c 100644 --- a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java +++ b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java @@ -1,68 +1,8 @@ package com.evotech.hd.cloud; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.BatteryStationSecretKey; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.message.MessageTopic; -import com.evotech.hd.cloud.mqtt.message.handle.RequestMessageService; -import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.redis.utils.RedisUtil; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.evotech.hd.cloud.controller.test.service.MqttConfigService; -import com.evotech.hd.cloud.controller.test.service.MqttTestUtil; -import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.MyMqttMessage; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep; -import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; -import com.evotech.hd.cloud.service.BatteryStationDcService; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; -import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; -import com.evotech.hd.common.core.dao.resource.CarTypeDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.BatteryStation; -import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; -import com.evotech.hd.common.core.entity.cloud.Company; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder; -import com.evotech.hd.common.core.entity.cloud.TradeDetail; -import com.evotech.hd.common.core.entity.cloud.VehicleInfo; -import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; -import com.evotech.hd.common.core.entity.cloud.WalletAccount; -import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail; -import com.evotech.hd.common.core.entity.resource.BatteryType; -import com.evotech.hd.common.core.entity.resource.CarType; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.common.core.enums.OrderStatusEnums; -import com.evotech.hd.common.core.enums.TradeTypeEnums; -import com.evotech.hd.common.core.utils.CommonUtil; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.crypto.Mode; import cn.hutool.crypto.Padding; @@ -70,7 +10,55 @@ import cn.hutool.crypto.symmetric.AES; import cn.hutool.crypto.symmetric.SymmetricCrypto; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.evotech.hd.cloud.controller.test.service.MqttConfigService; +import com.evotech.hd.cloud.controller.test.service.MqttTestUtil; +import com.evotech.hd.cloud.dao.*; +import com.evotech.hd.cloud.entity.BatteryStationSecretKey; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.MyMqttMessage; +import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; +import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep; +import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; +import com.evotech.hd.cloud.service.BatteryStationDcService; +import com.evotech.hd.cloud.service.OrderSwapBatteryService; +import com.evotech.hd.cloud.service.WalletAccountService; +import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; +import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; +import com.evotech.hd.common.core.dao.resource.CarTypeDao; +import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.*; +import com.evotech.hd.common.core.entity.resource.BatteryType; +import com.evotech.hd.common.core.entity.resource.CarType; +import com.evotech.hd.common.core.entity.wechat.WechatUser; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.enums.OrderStatusEnums; +import com.evotech.hd.common.core.enums.TradeTypeEnums; +import com.evotech.hd.common.core.utils.CommonUtil; +import com.evotech.hd.common.redis.utils.RedisUtil; import jakarta.annotation.Resource; +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; @SpringBootTest(classes = CloudManageServerApplication.class) public class AddTestData { @@ -140,12 +128,13 @@ public class AddTestData { // @Test - void testStrategyAndMqttM2S() { + void testStrategyAndMqttM2S() throws MqttException { testClient = mqttService.connect(); // 1. 查 站 List stationList = batteryStationDao.selectList(new LambdaUpdateWrapper().eq(BatteryStation::getPkId, 4)); BatteryStation station = stationList.get(0); sendStrategyInfo(station.getCode()); + testClient.disconnect(); } diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/AuthorizationManager.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/AuthorizationManager.java index 6cc71ac..828b119 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/AuthorizationManager.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/AuthorizationManager.java @@ -1,11 +1,14 @@ package com.evotech.hd.gateway.oauth2; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.utils.XCXUtil; +import com.evotech.hd.common.redis.utils.RedisUtil; +import com.evotech.hd.gateway.oauth2.service.WechatService; +import com.evotech.hd.gateway.utils.TokenUtil; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.http.server.reactive.ServerHttpRequest; @@ -18,19 +21,15 @@ import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.security.web.server.authorization.AuthorizationContext; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; - -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.common.core.utils.XCXUtil; -import com.evotech.hd.common.redis.utils.RedisUtil; -import com.evotech.hd.gateway.oauth2.service.WechatService; -import com.evotech.hd.gateway.utils.TokenUtil; - -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import jakarta.annotation.Resource; import reactor.core.publisher.Mono; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + /** * 资源服务的权限管理器 * 鉴权时统一抛出OAuth2AuthorizationException @@ -44,9 +43,14 @@ public class AuthorizationManager implements ReactiveAuthorizationManager objectList = redisUtil.lGet(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":perms", 0, -1); List permList = objectList.stream().map(i -> i.toString()).toList(); String path = request.getURI().getPath().substring(8); - if (!permList.contains("gateway:" + path)) { +// if (!permList.contains("gateway:" + path)) { +// throw new OAuth2AuthorizationException(new OAuth2Error(CodeMsg.ACCESS_DENY.getCode(), CodeMsg.ACCESS_DENY.getMsg(), uri)); +// } + //已授权接口,和无需授权接口 + if (!permList.contains(path) && !Arrays.asList(notPermissionUrl.split(";")).contains(path)) { throw new OAuth2AuthorizationException(new OAuth2Error(CodeMsg.ACCESS_DENY.getCode(), CodeMsg.ACCESS_DENY.getMsg(), uri)); } return true; diff --git a/gateway-server/src/main/resources/application.yml b/gateway-server/src/main/resources/application.yml index 1f6168e..550c5e9 100644 --- a/gateway-server/src/main/resources/application.yml +++ b/gateway-server/src/main/resources/application.yml @@ -24,12 +24,15 @@ spring: max-in-memory-size: 10485760 config: import: + - nacos:yt-common.properties?refreshEnabled=true - nacos:${spring.application.name}.yaml?refreshEnabled=true cloud: nacos: serverAddr: 192.168.5.213:8848 username: nacos password: nacos + config: + namespace: ${nacos.namespace:public} discovery: namespace: ${nacos.namespace:public} register-enabled: true diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java index 10d51ab..18cf23f 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java @@ -1,24 +1,22 @@ 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.RestController; - import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.resource.entity.request.PageListProxyOperaterRequest; import com.evotech.hd.resource.service.ProxyOperaterService; 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 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.RestController; + +import java.util.List; @Tag(name = "运营商") @ApiSupport(order = 107) @@ -59,4 +57,5 @@ public class ProxyOperaterController { } + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java index 3528761..5398bf0 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java @@ -1,7 +1,5 @@ package com.evotech.hd.resource.service; -import java.util.List; - import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.request.ListDictRequest; import com.evotech.hd.common.core.entity.resource.dict.Dict; @@ -9,6 +7,8 @@ import com.evotech.hd.common.core.entity.resource.dict.DictType; import com.evotech.hd.resource.entity.DictInfo; import com.evotech.hd.resource.entity.request.ListDictTypeRequest; +import java.util.List; + public interface DictService { public Result addType(DictType dt); @@ -29,4 +29,6 @@ public interface DictService { public Result> listDictInfo(String typeCode); + public List listDictByType(String typeCode); + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java index badc42a..0eafc51 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java @@ -1,10 +1,7 @@ package com.evotech.hd.resource.service.impl; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - +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.dao.resource.dict.DictDao; import com.evotech.hd.common.core.dao.resource.dict.DictTypeDao; @@ -16,15 +13,19 @@ import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.entity.DictInfo; import com.evotech.hd.resource.entity.request.ListDictTypeRequest; import com.evotech.hd.resource.service.DictService; - import jakarta.annotation.Resource; - +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; @Service +@Slf4j public class DictServiceImpl implements DictService { @Resource @@ -128,4 +129,14 @@ public class DictServiceImpl implements DictService { return new Result>().success(list); } + @Override + public List listDictByType(String typeCode) { + DictType dictType = dictTypeDao.selectOne(new LambdaQueryWrapper().eq(DictType::getTypeCode, typeCode)); + if(ObjectUtils.isEmpty(dictType)){ + log.info("typeCode:{}===未查询到当前类型", typeCode); + return Arrays.asList(new Dict()); + } + return dictDao.selectList(new LambdaQueryWrapper().eq(Dict::getTypeId, dictType.getPkId()).orderByAsc(Dict::getSort)); + } + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java index 1ea68c9..7f760d8 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java @@ -1,15 +1,10 @@ package com.evotech.hd.resource.service.impl; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import org.apache.ibatis.executor.BatchResult; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - +import cn.hutool.core.util.StrUtil; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.resource.auth.AuthRoleDao; import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao; import com.evotech.hd.common.core.dao.resource.auth.AuthUserRoleDao; @@ -17,13 +12,22 @@ import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthRole; import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole; +import com.evotech.hd.common.core.entity.resource.dict.Dict; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.entity.request.DelAddRoleSourceRequest; +import com.evotech.hd.resource.service.DictService; import com.evotech.hd.resource.service.RoleService; - -import cn.hutool.core.util.StrUtil; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j @Service public class RoleServiceImpl implements RoleService { @@ -33,18 +37,49 @@ public class RoleServiceImpl implements RoleService { private AuthRoleResourceDao authRoleResourceDao; @Resource private AuthUserRoleDao authUserRoleDao; - + @Resource + private DictService dictService; @Override public Result add(AuthRole r) { r.setCtime(new Date()); int n = authRoleDao.insert(r); if (n == 1) { - return new Result().success(n); + try { + addDefaultMenu(r); + } catch (Exception e) { + log.error("创建角色成功了, 但是初始化默认权限失败了",e); + } + return new Result().success(n); } return new Result().error("添加角色出错!"); } - + + public void addDefaultMenu(AuthRole r){ + List dictList = dictService.listDictByType(HDConstant.DEFAULT_MENU_TYPE); + if(CollectionUtils.isNotEmpty(dictList)){ + Map roleResourceMap = new LinkedHashMap<>(); + dictList.stream().forEach(dict ->{ + String[] codeArr = dict.getDictCode().split("_"); + String val = roleResourceMap.containsKey(codeArr[0])? roleResourceMap.get(codeArr[0]) : ""; + if(StringUtils.isEmpty(val)){ + val = dict.getDictValue(); + }else{ + val += "," + dict.getDictValue(); + } + roleResourceMap.put(codeArr[0], val); + }); + DelAddRoleSourceRequest darsr = new DelAddRoleSourceRequest(); + darsr.setRcode(r.getRcode()); + darsr.setTypes(roleResourceMap.keySet().stream().collect(Collectors.joining(";"))); + darsr.setSourceIds(roleResourceMap.values().stream().collect(Collectors.joining(";"))); + delAddRoleSource(darsr); + } + + } + + + @Override @Transactional public Result delete(Integer rid) { @@ -154,10 +189,9 @@ public class RoleServiceImpl implements RoleService { if (typeArr.length != sourceArr.length) { return new Result().error("参数格式错误"); } - // 2. 删除原来的 - authRoleResourceDao.delete(new QueryWrapper().eq("rcode", rcode)); // 3. 增加新的 Date d = new Date(); + List oldResourceIds = new ArrayList<>(); List list = new ArrayList(); for (int i = 0; i < typeArr.length; i++) { String[] sourceIdArr = sourceArr[i].split(","); @@ -167,9 +201,13 @@ public class RoleServiceImpl implements RoleService { arr.setResourceType(typeArr[i]); arr.setResourceId(Integer.valueOf(sourceIdArr[j])); arr.setCtime(d); - list.add(arr); + list.add(arr); + oldResourceIds.add(arr.getResourceId()); } } + // 2. 删除原来的 + authRoleResourceDao.delete(new LambdaQueryWrapper().eq(AuthRoleResource::getRcode, rcode).in(AuthRoleResource::getResourceType, typeArr).in(CollectionUtils.isNotEmpty(oldResourceIds),AuthRoleResource::getResourceId, oldResourceIds)); + return addRoleSource(list); } diff --git a/resource-server/src/main/resources/application.yml b/resource-server/src/main/resources/application.yml index aa4b2a2..1ef8935 100644 --- a/resource-server/src/main/resources/application.yml +++ b/resource-server/src/main/resources/application.yml @@ -12,10 +12,11 @@ logging: spring: # 服务名称必须带上,不然nacos服务列表中没有,也不会有注册成功的信息 application: - name: resource-server + name: ${resource-server:resource-server} config: import: - - nacos:${spring.application.name}.yaml?refreshEnabled=true + - nacos:yt-common.properties?refreshEnabled=true + - nacos:resource-server.yaml?refreshEnabled=true cloud: nacos: serverAddr: 192.168.5.213:8848 @@ -30,6 +31,8 @@ spring: metadata: management: context-path: ${server.servlet.context-path}/actuator + config: + namespace: ${nacos.namespace:public} # 为springbootadmin开启所有检查 management: endpoints: diff --git a/resource-server/src/main/resources/mapper/AuthUserMapper.xml b/resource-server/src/main/resources/mapper/AuthUserMapper.xml index 634e361..8db01fc 100644 --- a/resource-server/src/main/resources/mapper/AuthUserMapper.xml +++ b/resource-server/src/main/resources/mapper/AuthUserMapper.xml @@ -26,6 +26,7 @@ + diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java index eb2757f..a1327dc 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java @@ -1,10 +1,12 @@ package com.evotech.hd.wechat.service.rpc; -import java.util.List; -import java.util.Map; - - +import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.*; import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import com.evotech.hd.common.core.entity.cloud.request.PageListWalletRequest; +import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; import com.evotech.hd.common.core.entity.wechat.WechatPayAttach; import jakarta.validation.constraints.NotBlank; import org.springframework.cloud.openfeign.FeignClient; @@ -14,20 +16,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; -import com.evotech.hd.common.core.entity.cloud.TradeDetail; -import com.evotech.hd.common.core.entity.cloud.VehicleInfo; -import com.evotech.hd.common.core.entity.cloud.WalletAccount; -import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; -import com.evotech.hd.common.core.entity.cloud.request.PageListWalletRequest; -import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; +import java.util.List; +import java.util.Map; -@FeignClient(value = "cloud-server") +@FeignClient(value = "${CLOUD-SERVER-API-NAME}") public interface CloudService { @PostMapping(value = "/cloud/order/swap/pre/add", diff --git a/wechat-server/src/main/resources/application.yml b/wechat-server/src/main/resources/application.yml index 7f3ca00..21b8843 100644 --- a/wechat-server/src/main/resources/application.yml +++ b/wechat-server/src/main/resources/application.yml @@ -12,10 +12,11 @@ logging: spring: # 服务名称必须带上,不然nacos服务列表中没有,也不会有注册成功的信息 application: - name: wechat-server + name: ${cloud-manage-server:wechat-server} config: import: - - nacos:${spring.application.name}.yaml?refreshEnabled=true + - nacos:yt-common.properties?refreshEnabled=true + - nacos:wechat-server.yaml?refreshEnabled=true cloud: nacos: serverAddr: 192.168.5.213:8848 @@ -30,6 +31,8 @@ spring: metadata: management: context-path: ${server.servlet.context-path}/actuator + config: + namespace: ${nacos.namespace:public} # 为springbootadmin开启所有检查 management: