权限处理
This commit is contained in:
parent
94d499ab28
commit
aed3cdf4a9
@ -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<List<BatteryStation>> loadBatteryStation(@RequestParam("proxyCode") String proxyCode);
|
||||
|
||||
@GetMapping(value = "/company/login/one", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
|
||||
public BaseResponse<Company> loadCompany(@RequestParam("code") String code);
|
||||
|
||||
@GetMapping(value = "/vehicle/login/list", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
|
||||
public BaseResponse<List<VehicleInfo>> loadVehicleInfo(@RequestParam("companyCode") String companyCode);
|
||||
}
|
||||
@ -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<List<BatteryStation>> result = cloudService.loadBatteryStation(user.getBusinessCode());
|
||||
if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){
|
||||
List<BatteryStation> list = result.getData();
|
||||
String pkIds = "-1";
|
||||
String codes = "-1";
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
pkIds = list.stream().map(BatteryStation::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
|
||||
codes = list.stream().map(BatteryStation::getCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
|
||||
}
|
||||
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<Company> companyResult = cloudService.loadCompany(user.getBusinessCode());
|
||||
String companyId="-1", companyCode="-1", carIds="-1", carPlateNums="-1";
|
||||
if(CodeMsg.SUCCESS.getCode().equals(companyResult.getCode())){
|
||||
Company company = companyResult.getData();
|
||||
if(!ObjectUtils.isEmpty(company)){
|
||||
companyId = String.valueOf(company.getPkId());
|
||||
companyCode = company.getCcode();
|
||||
BaseResponse<List<VehicleInfo>> vehicleInfoResult = cloudService.loadVehicleInfo(company.getCcode());
|
||||
if(CodeMsg.SUCCESS.getCode().equals(vehicleInfoResult.getCode())){
|
||||
List<VehicleInfo> list = vehicleInfoResult.getData();
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
carIds = list.stream().map(VehicleInfo::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
|
||||
carPlateNums = list.stream().map(VehicleInfo::getPlateNum).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<T> 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<T> success(T o) {
|
||||
this.status = 1;
|
||||
this.code = CodeMsg.SUCCESS.getCode();
|
||||
this.msg = CodeMsg.SUCCESS.getMsg();
|
||||
this.data = o;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -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";
|
||||
|
||||
@ -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<OrderSwapBattery> {
|
||||
|
||||
}
|
||||
|
||||
@ -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 = "换电站编码")
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
@ -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) {}
|
||||
}
|
||||
@ -82,8 +82,16 @@
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-crypto</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-jwt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-oauth2-jose</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<List<BatteryStation>> loginList(@RequestParam String proxyCode) {
|
||||
return batteryStationService.loginList(proxyCode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Company> loginOne(@RequestParam String code) {
|
||||
return companyService.loginOne(code);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<List<VehicleWechatUserRelation>> listRelationUser(@NotBlank @RequestParam String PlantNo) {
|
||||
return vehicleService.listRelationUser(PlantNo);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Operation(summary = "查询")
|
||||
@GetMapping("/login/list")
|
||||
@ApiOperationSupport(order = 4)
|
||||
public BaseResponse<List<VehicleInfo>> loginList(@RequestParam String companyCode) {
|
||||
return vehicleService.loginList(companyCode);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<List<OrderSwapBatteryPre>> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) {
|
||||
public Result<List<OrderSwapBatteryPre>> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException {
|
||||
return orderSwapBatteryService.listPre(plsopr);
|
||||
}
|
||||
|
||||
|
||||
@ -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<BatteryStation> {
|
||||
|
||||
List<BatteryStation> listStation(Page<BatteryStation> page, @Param("plbsr") PageListBatteryStationRequest plbsr);
|
||||
|
||||
@ -7,6 +7,7 @@ import com.evotech.hd.common.core.entity.cloud.Company;
|
||||
* @author zrb
|
||||
* @since 2024-11-20
|
||||
*/
|
||||
//换电站
|
||||
public interface CompanyDao extends BaseMapper<Company> {
|
||||
|
||||
}
|
||||
|
||||
@ -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<OrderSwapBatteryPre> {
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
|
||||
* @author zrb
|
||||
* @since 2024-11-22
|
||||
*/
|
||||
//换电站
|
||||
public interface VehicleInfoDao extends BaseMapper<VehicleInfo> {
|
||||
|
||||
}
|
||||
|
||||
@ -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 片段。
|
||||
* <p>旧的 {@link MultiDataPermissionHandler#getSqlSegment(Expression, String)} 方法第一个参数包含所有的 where 条件信息,如果 return 了 null 会覆盖原有的 where 数据,</p>
|
||||
* <p>新版的 {@link MultiDataPermissionHandler#getSqlSegment(Table, Expression, String)} 方法不能覆盖原有的 where 数据,如果 return 了 null 则表示不追加任何 where 条件</p>
|
||||
*
|
||||
* @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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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 {
|
||||
|
||||
@ -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<Integer> 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<List<BatteryStation>> loginList(String proxyId);
|
||||
|
||||
}
|
||||
|
||||
@ -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<Integer> add(Company company);
|
||||
@ -19,4 +20,5 @@ public interface CompanyService {
|
||||
|
||||
public Result<Map<String, String>> companyByCode(String ccode);
|
||||
|
||||
public BaseResponse<Company> loginOne(String code);
|
||||
}
|
||||
|
||||
@ -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<Integer> addPre(OrderSwapBatteryPre osbp);
|
||||
|
||||
public Result<Integer> cancelPre(Integer id, Integer status);
|
||||
|
||||
public Result<List<OrderSwapBatteryPre>> listPre(PageListSwapOrderPreRequest plsopr);
|
||||
public Result<List<OrderSwapBatteryPre>> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException;
|
||||
|
||||
public Result<Integer> add(OrderSwapBattery osb);
|
||||
|
||||
|
||||
@ -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<Integer> add(VehicleInfo vi);
|
||||
@ -28,4 +29,8 @@ public interface VehicleService {
|
||||
public Result<List<VehicleInfo>> listWechatUserRelation(String openid, String plateNum);
|
||||
|
||||
public Result<List<VehicleWechatUserRelation>> listRelationUser(String PlantNo);
|
||||
public BaseResponse<List<VehicleInfo>> loginList(String companyCode);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<List<BatteryStation>> loginList(String proxyCode) {
|
||||
return new BaseResponse<List<BatteryStation>>().success(batteryStationDao.selectList(new LambdaQueryWrapper<BatteryStation>().eq(BatteryStation::getProxyId, proxyCode).select(BatteryStation::getPkId, BatteryStation::getCode)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Map<String, String>>().success(m);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse<Company> loginOne(String code) {
|
||||
return new BaseResponse<Company>().success(companyDao.selectOne(new LambdaQueryWrapper<Company>().eq(Company::getCcode, code)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<List<OrderSwapBatteryPre>> listPre(PageListSwapOrderPreRequest plsopr) {
|
||||
public Result<List<OrderSwapBatteryPre>> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException {
|
||||
Page<OrderSwapBatteryPre> page = new Page<OrderSwapBatteryPre>(plsopr.getPageNo(), plsopr.getPageSize());
|
||||
page = orderSwapBatteryPreDao.selectPage(page, new QueryWrapper<OrderSwapBatteryPre>()
|
||||
.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<OrderSwapBatteryPre>()
|
||||
.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<List<OrderSwapBatteryPre>>().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<OrderSwapBattery>()
|
||||
.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<OrderSwapBattery>()
|
||||
.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<List<OrderSwapBattery>>().error(CodeMsg.DATABASE_RESULT_NULL);
|
||||
}
|
||||
|
||||
@ -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<List<VehicleWechatUserRelation>>().success(list);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BaseResponse<List<VehicleInfo>> loginList(String companyCode) {
|
||||
return new BaseResponse<List<VehicleInfo>>().success(vehicleInfoDao.selectList(new LambdaQueryWrapper<VehicleInfo>().eq(VehicleInfo::getCcode, companyCode).select(VehicleInfo::getPkId, VehicleInfo::getPlateNum)));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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开启所有检查
|
||||
|
||||
@ -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<BatteryStation> stationList = batteryStationDao.selectList(new LambdaUpdateWrapper<BatteryStation>().eq(BatteryStation::getPkId, 4));
|
||||
BatteryStation station = stationList.get(0);
|
||||
sendStrategyInfo(station.getCode());
|
||||
testClient.disconnect();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<Author
|
||||
private RSAKeyPair rsaKeyPair;
|
||||
@Resource
|
||||
private WechatService wechatService;
|
||||
|
||||
|
||||
|
||||
@Value("${yt.gateway.is_pass:false}")
|
||||
private boolean isPass;
|
||||
|
||||
@Value("${not_permission_url}")
|
||||
private String notPermissionUrl;
|
||||
|
||||
|
||||
@Override
|
||||
@ -170,7 +174,11 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author
|
||||
List<Object> objectList = redisUtil.lGet(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":perms", 0, -1);
|
||||
List<String> 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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<Integer> addType(DictType dt);
|
||||
@ -29,4 +29,6 @@ public interface DictService {
|
||||
|
||||
public Result<List<DictInfo>> listDictInfo(String typeCode);
|
||||
|
||||
public List<Dict> listDictByType(String typeCode);
|
||||
|
||||
}
|
||||
|
||||
@ -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<List<DictInfo>>().success(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Dict> listDictByType(String typeCode) {
|
||||
DictType dictType = dictTypeDao.selectOne(new LambdaQueryWrapper<DictType>().eq(DictType::getTypeCode, typeCode));
|
||||
if(ObjectUtils.isEmpty(dictType)){
|
||||
log.info("typeCode:{}===未查询到当前类型", typeCode);
|
||||
return Arrays.asList(new Dict());
|
||||
}
|
||||
return dictDao.selectList(new LambdaQueryWrapper<Dict>().eq(Dict::getTypeId, dictType.getPkId()).orderByAsc(Dict::getSort));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Integer> add(AuthRole r) {
|
||||
r.setCtime(new Date());
|
||||
int n = authRoleDao.insert(r);
|
||||
if (n == 1) {
|
||||
return new Result<Integer>().success(n);
|
||||
try {
|
||||
addDefaultMenu(r);
|
||||
} catch (Exception e) {
|
||||
log.error("创建角色成功了, 但是初始化默认权限失败了",e);
|
||||
}
|
||||
return new Result<Integer>().success(n);
|
||||
}
|
||||
return new Result<Integer>().error("添加角色出错!");
|
||||
}
|
||||
|
||||
|
||||
public void addDefaultMenu(AuthRole r){
|
||||
List<Dict> dictList = dictService.listDictByType(HDConstant.DEFAULT_MENU_TYPE);
|
||||
if(CollectionUtils.isNotEmpty(dictList)){
|
||||
Map<String, String> 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<Integer> delete(Integer rid) {
|
||||
@ -154,10 +189,9 @@ public class RoleServiceImpl implements RoleService {
|
||||
if (typeArr.length != sourceArr.length) {
|
||||
return new Result<Integer>().error("参数格式错误");
|
||||
}
|
||||
// 2. 删除原来的
|
||||
authRoleResourceDao.delete(new QueryWrapper<AuthRoleResource>().eq("rcode", rcode));
|
||||
// 3. 增加新的
|
||||
Date d = new Date();
|
||||
List<Integer> oldResourceIds = new ArrayList<>();
|
||||
List<AuthRoleResource> list = new ArrayList<AuthRoleResource>();
|
||||
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<AuthRoleResource>().eq(AuthRoleResource::getRcode, rcode).in(AuthRoleResource::getResourceType, typeArr).in(CollectionUtils.isNotEmpty(oldResourceIds),AuthRoleResource::getResourceId, oldResourceIds));
|
||||
|
||||
return addRoleSource(list);
|
||||
}
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
<result column="ctime" property="ctime" />
|
||||
<result column="updater" property="updater" />
|
||||
<result column="uptime" property="uptime" />
|
||||
<result column="businessCode" property="business_code" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user