小程序接口相关调整

This commit is contained in:
andy 2025-07-03 10:28:09 +08:00
parent ac525609f6
commit be3c8e9e4c
260 changed files with 5690 additions and 4381 deletions

View File

@ -1,7 +1,10 @@
package com.evotech.hd.authorization.config.oauth2;
import java.io.IOException;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
@ -11,12 +14,7 @@ import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.OAuth2Error;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler {

View File

@ -1,9 +1,9 @@
package com.evotech.hd.authorization.config.oauth2;
import java.io.IOException;
import java.time.temporal.ChronoUnit;
import java.util.Map;
import com.evotech.hd.common.core.Dto.Result;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.convert.converter.Converter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
@ -17,11 +17,9 @@ import org.springframework.security.oauth2.server.authorization.authentication.O
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.util.CollectionUtils;
import com.evotech.hd.common.core.entity.Result;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.temporal.ChronoUnit;
import java.util.Map;
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@ -56,7 +54,7 @@ public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHand
ServletServerHttpResponse httpResponse = new ServletServerHttpResponse(response);
this.accessTokenHttpResponseConverter.write(new Result<String>().success(tokenResponseParameters), null, httpResponse);
this.accessTokenHttpResponseConverter.write(new Result<Map<String, Object>>().success(tokenResponseParameters), null, httpResponse);
}

View File

@ -1,17 +1,16 @@
package com.evotech.hd.authorization.config.security;
import java.io.IOException;
import com.evotech.hd.common.core.Dto.Result;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import com.evotech.hd.common.core.entity.Result;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 登陆了没有权限时触发异常 返回信息

View File

@ -1,6 +1,10 @@
package com.evotech.hd.authorization.config.security;
import java.io.IOException;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
@ -8,12 +12,7 @@ import org.springframework.security.core.AuthenticationException;
import org.springframework.security.oauth2.server.resource.InvalidBearerTokenException;
import org.springframework.security.web.AuthenticationEntryPoint;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 未认证没有登录返回异常 信息

View File

@ -1,17 +1,16 @@
package com.evotech.hd.authorization.config.security.userdetail;
import cn.hutool.core.bean.BeanUtil;
import com.evotech.hd.authorization.service.ResourceService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import com.evotech.hd.authorization.service.ResourceService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.enums.CodeMsg;
import cn.hutool.core.bean.BeanUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserDetailService implements UserDetailsService {

View File

@ -1,17 +1,15 @@
package com.evotech.hd.authorization.controller;
import com.evotech.hd.authorization.service.CaptchaService;
import com.evotech.hd.common.core.Dto.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
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.authorization.service.CaptchaService;
import com.evotech.hd.common.core.entity.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
@Tag(name = "验证码")
@RestController
@RequestMapping("/captcha")

View File

@ -1,18 +1,9 @@
package com.evotech.hd.authorization.controller;
import org.apache.http.auth.AuthenticationException;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evotech.hd.authorization.entity.LoginRequest;
import com.evotech.hd.authorization.entity.UserVo;
import com.evotech.hd.authorization.service.LoginService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.Dto.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@ -20,6 +11,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import org.apache.http.auth.AuthenticationException;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.*;
@Tag(name = "登陆")
@RestController

View File

@ -1,6 +1,7 @@
package com.evotech.hd.authorization.service;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.Dto.Result;
public interface CaptchaService {

View File

@ -15,7 +15,7 @@ import java.util.List;
public interface CloudService {
@GetMapping(value = "/batterystation/login/list", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
@GetMapping(value = "/battery/station/login/list", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public Result<List<BatteryStation>> loadBatteryStation(@RequestParam("proxyCode") String proxyCode);
@GetMapping(value = "/company/login/one", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})

View File

@ -1,11 +1,10 @@
package com.evotech.hd.authorization.service;
import org.apache.http.auth.AuthenticationException;
import com.evotech.hd.authorization.entity.LoginRequest;
import com.evotech.hd.authorization.entity.UserVo;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.Dto.Result;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.http.auth.AuthenticationException;
public interface LoginService {

View File

@ -21,19 +21,19 @@ public interface ResourceService {
@GetMapping(value = "/user/userbyname",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public com.evotech.hd.common.core.entity.Result<AuthUser> loadUserByName(@RequestParam("uname") String userName);
public Result<AuthUser> loadUserByName(@RequestParam("uname") String userName);
@PostMapping(value = "/user/userpermbyid",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public com.evotech.hd.common.core.entity.Result<String> userPermById(@NotNull @RequestParam("uid") String userId, @RequestParam("type")Integer type);
public Result<String> userPermById(@NotNull @RequestParam("uid") String userId, @RequestParam("type")Integer type);
@PostMapping(value = "/loginlog/add",
consumes = {MediaType.APPLICATION_JSON_VALUE})
public com.evotech.hd.common.core.entity.Result<Integer> addLoginLog(@RequestBody LogLogin log);
public Result<Integer> addLoginLog(@RequestBody LogLogin log);
@GetMapping(value = "/logininfo/get",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public com.evotech.hd.common.core.entity.Result<LoginCacheInfo> loginInfo(@RequestParam("uid") String uid);
public Result<LoginCacheInfo> loginInfo(@RequestParam("uid") String uid);
@GetMapping(value = "/user/station",consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public Result<List<AuthUserStation>> loadBatteryStation(@RequestParam("uid") String uid);

View File

@ -1,18 +1,16 @@
package com.evotech.hd.authorization.service.impl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.evotech.hd.authorization.service.CaptchaService;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.redis.utils.RedisUtil;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.core.util.IdUtil;
import com.evotech.hd.authorization.service.CaptchaService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.redis.utils.RedisUtil;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class CaptchaServiceImpl implements CaptchaService {
@ -32,7 +30,7 @@ public class CaptchaServiceImpl implements CaptchaService {
String imageBase64Data = captcha.getImageBase64Data();
String captchaId = IdUtil.fastSimpleUUID();
redisUtil.set(HDConstant.CAPTCHA_REDIS_PREFIX + captchaId, code, captchaExpire);
return new Result<String>().success("OK", captchaId + ":" + imageBase64Data);
return new Result<String>().success(captchaId + ":" + imageBase64Data);
}
@Override

View File

@ -15,10 +15,10 @@ 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.Result;
import com.evotech.hd.common.core.Dto.ResultUtil;
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;
@ -70,7 +70,7 @@ public class LoginServiceImpl implements LoginService {
// 1. 校验验证码
Result<Boolean> res = captchaService.checkCaptcha(lr.getCode());
if (res.getStatus() != 1) {
return new Result<UserVo>().error(res.getCode(), res.getMsg());
return new Result<UserVo>().error(CodeMsg.getCodeMsgByCode(res.getCode()), res.getMsg());
}
// 2. 从请求头获取client信息
Map<String, String> oAuth2Client = LoginRequesHeadertUtil.getOAuth2Client(request);

View File

@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 请求返回对象
@ -26,9 +27,28 @@ public class Result<T> implements Serializable {
@Schema(description = "返回数据")
private T data;
public static <T> Result<T> getInstance(){
return new Result<T>();
}
public Result() {
}
public <T> Result<T> build(Class<T> cls) {
return (Result<T>) this;
}
public <T> Result<List<T>> buildList(Class<T> cls) {
return (Result<List<T>>) this;
}
public Result<T> success() {
this.status = 1;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = CodeMsg.SUCCESS.getMsg();
return this;
}
public Result<T> success(T o) {
this.status = 1;
this.code = CodeMsg.SUCCESS.getCode();
@ -65,4 +85,20 @@ public class Result<T> implements Serializable {
this.msg = errorMsg;
return this;
}
public Result<T> exception(T data) {
this.status = -1;
this.code = CodeMsg.ERROR.getCode();
this.msg = CodeMsg.ERROR.getMsg();
this.data = data;
return this;
}
public Result<T> businessException(String code, String msg, T o) {
this.status = -1;
this.code = code;
this.msg = msg;
this.data = o;
return this;
}
}

View File

@ -35,6 +35,9 @@ public class OrderListVo {
@Schema(name = "换电站")
private String stationName;
@Schema(name = "订单金额")
private Integer amount;
@Schema(name = "预约人")
private String perName;
@ -44,7 +47,7 @@ public class OrderListVo {
private Date orderTime;
@Schema(name = "订单状态", description = "订单状态1-已创建2-换电中3-换电完成4-充电中5-充电完成6-待结算7-已完成9-已取消, -1-退款")
private Integer orderStatus;
private Integer status;
@Schema(name = "交易编码", description = "第三方收款返回的唯一标识")
private String notifyOrderNo;

View File

@ -22,6 +22,31 @@ public interface HDConstant {
}
final class DcConstant{
/** 出租中 */
public static final Integer STATUS_CZ = 1;
/** 充电中 */
public static final Integer STATUS_CD = 2;
/** 空闲 */
public static final Integer STATUS_KX = 3;
/** 故障 */
public static final Integer STATUS_GZ = 4;
/** 其他 */
public static final Integer STATUS_QT = 5;
/** 来源_电站 */
public static final Integer SOURCE_FROM_STATION = 1;
/** 来源_车 */
public static final Integer SOURCE_FROM_CAR = 2;
/** 电站 */
public static final Integer POINT_TYPE_STATION = 1;
/** 车 */
public static final Integer POINT_TYPE_CAR = 2;
}
/***
* 订单相关参数
*/

View File

@ -1,7 +1,7 @@
package com.evotech.hd.cloud.dao;
package com.evotech.hd.common.core.dao.cloud;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.cloud.entity.order.Order;
import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.common.core.Dto.home.*;
import com.evotech.hd.common.core.Dto.request.HomeRequestDto;
import com.evotech.hd.common.core.constant.HDConstant;

View File

@ -1,7 +1,7 @@
package com.evotech.hd.cloud.dao;
package com.evotech.hd.common.core.dao.cloud;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.cloud.entity.order.OrderDetail;
import com.evotech.hd.common.core.entity.order.OrderDetail;
/**
* 接口

View File

@ -0,0 +1,16 @@
package com.evotech.hd.common.core.dao.cloud;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.entity.system.SysParam;
/**
* 接口
*
* @ClassName:SysParamDao
* @date: 2025年07月02日 14:32
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface SysParamDao extends BaseMapper<SysParam> {
}

View File

@ -1,164 +1,171 @@
package com.evotech.hd.common.core.entity;
import java.io.Serializable;
import com.evotech.hd.common.core.enums.CodeMsg;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author zrb
* @date 2024年9月2日17:25:54
*/
@Data
@Schema(name = "请求返回对象")
public class Result<T> implements Serializable {
private static final long serialVersionUID = -7806513009135956518L;
@Schema(description = "请求处理状态", example = "1")
private Integer status;
@Schema(description = "状态码", example = "1000")
private String code;
@Schema(description = "返回消息")
private String msg;
@Schema(description = "返回数据")
private Object data;
private T obj;
public Result(Integer status, String code, String msg, Object data) {
this.status = status;
this.code = code;
this.msg = msg;
this.data = data;
}
public Result(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public Result(Integer status) {
this.status = status;
}
public Result() {
}
public Result(Integer status, String code, String msg) {
this.status = status;
this.code = code;
this.msg = msg;
}
public Result(Integer status, String msg) {
this.status = status;
this.msg = msg;
}
public Result<T> success(Object o) {
this.status = 1;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = CodeMsg.SUCCESS.getMsg();
this.data = o;
return this;
}
public Result<T> success(String msg, Object o) {
this.status = 1;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = msg;
this.data = o;
return this;
}
public Result<T> success(String msg) {
this.status = 1;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = msg;
this.data = CodeMsg.SUCCESS.getMsg();
return this;
}
public Result<T> success(String code, String msg, Object o) {
this.status = 1;
this.code = code;
this.msg = msg;
this.data = o;
return this;
}
public Result<T> success(CodeMsg cm, Object o) {
this.status = 0;
this.code = cm.getCode();
this.msg = cm.getMsg();
this.data = o;
return this;
}
public Result<T> error(String msg) {
this.status = 0;
this.code = CodeMsg.ERROR.getCode();
this.msg = msg;
this.data = "ERROR";
return this;
}
public Result<T> error(String code, String msg) {
this.status = 0;
this.code = code;
this.msg = msg;
this.data = "ERROR";
return this;
}
public Result<T> error(CodeMsg cm) {
this.status = 0;
this.code = cm.getCode();
this.msg = cm.getMsg();
return this;
}
public Result<T> error(CodeMsg cm, Object o) {
return error(cm.getCode(), cm.getMsg(), o);
}
public Result<T> error(String code, String msg, Object o) {
this.status = 0;
this.code = code;
this.msg = msg;
this.data = o;
return this;
}
public Result<T> error(String msg, Object o) {
this.status = 0;
this.code = CodeMsg.ERROR.getCode();
this.msg = msg;
this.data = o;
return this;
}
public Result<T> exception(Object data) {
this.status = -1;
this.code = CodeMsg.ERROR.getCode();
this.msg = CodeMsg.ERROR.getMsg();
this.data = data==null?"未知异常":data;
return this;
}
public Result<T> bussinessException(String code, String msg, Object o) {
this.status = -1;
this.code = code;
this.msg = msg;
this.data = o;
return this;
}
}
//package com.evotech.hd.common.core.entity;
//
//import java.io.Serializable;
//
//import com.evotech.hd.common.core.enums.CodeMsg;
//
//import io.swagger.v3.oas.annotations.media.Schema;
//import lombok.Data;
//
///**
// * @author zrb
// * @date 2024年9月2日17:25:54
// */
//@Data
//@Schema(name = "请求返回对象")
//public class Result<T> implements Serializable {
//
// private static final long serialVersionUID = -7806513009135956518L;
//
// @Schema(description = "请求处理状态", example = "1")
// private Integer status;
// @Schema(description = "状态码", example = "1000")
// private String code;
// @Schema(description = "返回消息")
// private String msg;
// @Schema(description = "返回数据")
// private Object data;
//
// private T obj;
//
//
// public Result(Integer status, String code, String msg, Object data) {
// this.status = status;
// this.code = code;
// this.msg = msg;
// this.data = data;
// }
//
// public Result(Integer status, String msg, Object data) {
// this.status = status;
// this.msg = msg;
// this.data = data;
// }
//
// public Result(Integer status) {
// this.status = status;
// }
//
// public Result() {
// }
//
// public Result(Integer status, String code, String msg) {
// this.status = status;
// this.code = code;
// this.msg = msg;
// }
//
// public Result(Integer status, String msg) {
// this.status = status;
// this.msg = msg;
// }
//
// public Result<T> success() {
// this.status = 1;
// this.code = CodeMsg.SUCCESS.getCode();
// this.msg = CodeMsg.SUCCESS.getMsg();
// return this;
// }
//
// public Result<T> success(Object o) {
// this.status = 1;
// this.code = CodeMsg.SUCCESS.getCode();
// this.msg = CodeMsg.SUCCESS.getMsg();
// this.data = o;
// return this;
// }
//
// public Result<T> success(String msg, Object o) {
// this.status = 1;
// this.code = CodeMsg.SUCCESS.getCode();
// this.msg = msg;
// this.data = o;
// return this;
// }
//
// public Result<T> success(String msg) {
// this.status = 1;
// this.code = CodeMsg.SUCCESS.getCode();
// this.msg = msg;
// this.data = CodeMsg.SUCCESS.getMsg();
// return this;
// }
//
// public Result<T> success(String code, String msg, Object o) {
// this.status = 1;
// this.code = code;
// this.msg = msg;
// this.data = o;
// return this;
// }
//
// public Result<T> success(CodeMsg cm, Object o) {
// this.status = 0;
// this.code = cm.getCode();
// this.msg = cm.getMsg();
// this.data = o;
// return this;
// }
//
// public Result<T> error(String msg) {
// this.status = 0;
// this.code = CodeMsg.ERROR.getCode();
// this.msg = msg;
// this.data = "ERROR";
// return this;
// }
//
// public Result<T> error(String code, String msg) {
// this.status = 0;
// this.code = code;
// this.msg = msg;
// this.data = "ERROR";
// return this;
// }
//
// public Result<T> error(CodeMsg cm) {
// this.status = 0;
// this.code = cm.getCode();
// this.msg = cm.getMsg();
// return this;
// }
//
// public Result<T> error(CodeMsg cm, Object o) {
// return error(cm.getCode(), cm.getMsg(), o);
// }
//
// public Result<T> error(String code, String msg, Object o) {
// this.status = 0;
// this.code = code;
// this.msg = msg;
// this.data = o;
// return this;
// }
//
// public Result<T> error(String msg, Object o) {
// this.status = 0;
// this.code = CodeMsg.ERROR.getCode();
// this.msg = msg;
// this.data = o;
// return this;
// }
//
//
// public Result<T> exception(Object data) {
// this.status = -1;
// this.code = CodeMsg.ERROR.getCode();
// this.msg = CodeMsg.ERROR.getMsg();
// this.data = data==null?"未知异常":data;
// return this;
// }
//
//
// public Result<T> bussinessException(String code, String msg, Object o) {
// this.status = -1;
// this.code = code;
// this.msg = msg;
// this.data = o;
// return this;
// }
//
//}

View File

@ -1,16 +1,7 @@
package com.evotech.hd.common.core.entity.cloud;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
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;
@ -18,6 +9,8 @@ import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* @author zrb
* @since 2024-10-17
@ -54,11 +47,16 @@ public class BatteryStationDc extends BaseEntity implements Serializable {
@Schema(description = "站码或车牌照", requiredMode = RequiredMode.REQUIRED)
@NotBlank
private String sourceCode;
/***
* 具体参考 HDConstant.DcConstant.STATUS_*
*/
@Schema(description = "状态1-出租中2-充电中3-空闲4-故障5-其它", requiredMode = RequiredMode.REQUIRED)
@NotNull(message = "状态不能为空")
private Integer status;
/***
* 具体参考 HDConstant.DcConstant.POINT_TYPE_*
*/
@Schema(description = "轨迹点类型1-电站2-车辆")
private Integer pointType;

View File

@ -1,55 +0,0 @@
package com.evotech.hd.common.core.entity.cloud;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
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 lombok.Getter;
import lombok.Setter;
/**
* @author zrb
* @since 2024-11-22
*/
@Getter
@Setter
@TableName("hd_cloud_manage.yt_t_order_recharge")
@Schema(name = "充值订单")
public class OrderRecharge extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "订单时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date orderTime;
@Schema(description = "订单编码", hidden = true)
private String orderNo;
@Schema(description = "换电站编码")
private String stationCode;
@Schema(description = "换电站名称")
private String stationName;
@Schema(description = "钱包账户账号")
private String accountCode;
@Schema(description = "充值账号ID")
private String userId;
@Schema(description = "交易编码")
private String tradeNo;
@Schema(description = "删除状态1-已删除0-未删除", hidden = true)
private Integer delFlag;
}

View File

@ -1,21 +1,17 @@
package com.evotech.hd.common.core.entity.cloud;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
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
@ -35,7 +31,7 @@ public class OrderSwapBatteryPre extends BaseEntity implements Serializable {
@Schema(description = "来源是站端时记录发送Id其他来源不需要", hidden = true)
private String sourceId;
@Schema(description = "预约人编码", requiredMode = RequiredMode.REQUIRED)
@Schema(description = "预约人的微信Id", requiredMode = RequiredMode.REQUIRED)
private String ucode;
@Schema(description = "预约人姓名", requiredMode = RequiredMode.REQUIRED)

View File

@ -1,19 +1,15 @@
package com.evotech.hd.common.core.entity.cloud;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author zrb
* @since 2024-11-22
@ -28,38 +24,31 @@ public class TradeDetail extends BaseEntity implements Serializable {
@Schema(description = "换电站编码")
private String stationCode;
@Schema(description = "交易人")
@Schema(description = "交易人name")
private String trader;
@Schema(description = "交易人编码")
@Schema(description = "交易人微信Id")
private String traderCode;
@Schema(description = "交易类型1-充值2-订单消费9-提现")
private Integer tradeType;
@Schema(description = "变动金额的钱包账户,钱包金额不变时不需要")
private String wallet;
@Schema(description = "appid")
private String appid;
@Schema(description = "银行类型")
private String bankType;
@Schema(description = "收款商户号")
private String mchid;
@Schema(description = "微信支付API类型")
private String wechatPayApiType;
@Schema(description = "订单总描述")
private String description;
@Schema(description = "交易编码")
private String outTradeNo;
@Schema(description = "交易类型1-充值2-订单消费3-退款, 9-提现")
private Integer tradeType;
@Schema(description = "支付方式1-账户余额2-微信3-支付宝4-网银5 -充电补偿")
private Integer payType;
@Schema(description = "微信支付API类型")
private String wechatPayApiType;
/***
* 交易信息
*/
private String tradeMessage;
/***
* 交易账号
*/
// @Schema(description = "变动金额的钱包账户,钱包金额不变时不需要")
private String payAccount;
@Schema(description = "订单数量")
private Integer orderCount;
@ -82,12 +71,9 @@ public class TradeDetail extends BaseEntity implements Serializable {
@Schema(description = "支付结果,暂用微信结果的枚举类型")
private String payResult;
@Schema(description = "在微信等支付网关创建支付订单时失败,返回的失败原因")
private String payMsg;
@Schema(description = "付款人编码,对于个人账户,交易发起人和付款人一般是同一人。公司账户交易发起人是公司,付款人可能是 微信账户")
private String payer;
private String payWechatId;
@Schema(description = "支付完成时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@ -96,12 +82,33 @@ public class TradeDetail extends BaseEntity implements Serializable {
@Schema(description = "删除标识1-已删除0-未删除", hidden = true)
private Integer delFlag;
@Schema(description = "退款结果: 0-未退款, 1-退款中2-已退款, 3-退款失败")
private Integer refundResult;
@Schema(description = "appid")
private String appid;
//
@Schema(description = "银行类型")
private String bankType;
@Schema(description = "在微信等退款网关创建退款订单时失败,返回的失败原因")
private String refundMsg;
@Schema(description = "收款商户号")
private String mchid;
@Schema(description = "退款返回数据")
private String refundReturn;
@Schema(description = "订单总描述")
private String description;
// @Schema(description = "在微信等支付网关创建支付订单时失败,返回的失败原因")
// private String payMsg;
// @Schema(description = "退款结果: 0-未退款, 1-退款中2-已退款, 3-退款失败")
// private Integer refundResult;
//
// @Schema(description = "在微信等退款网关创建退款订单时失败,返回的失败原因")
// private String refundMsg;
//
// @Schema(description = "退款返回数据")
// private String refundReturn;
}

View File

@ -0,0 +1,158 @@
package com.evotech.hd.common.core.entity.cloud.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*
* @ClassName:OrderVo
* @date: 2025年06月20日 16:08
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Data
public class OrderVo {
private static final long serialVersionUID = 1L;
@Schema(description = "预约订单ID")
private Integer orderPreId;
@Schema(description = "预约用户")
private String orderPreUid;
@Schema(description = "预约用户名称")
private String orderPreUname;
@Schema(description = "预约用户手机")
private String orderPrePhone;
@NotNull(message = "订单类型不能为空")
private Integer orderType;
@Schema(description = "订单编码", hidden = true)
private String orderNo;
@NotBlank(message = "车牌号不能为空")
private String plateNum;
@Schema(description = "订单时间", example = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date orderTime;
@NotBlank(message = "换电站编码不能为空")
private String stationCode;
@NotBlank(message = "换电站名称不能为空")
private String stationName;
@Schema(description = "金额账号")
private String accountCode;
@Schema(description = "订单金额")
private Integer amount;
@Schema(description = "订单状态1-已创建2-换电中3-换电完成4-充电中5-充电完成6-待结算7-已完成9-已取消, -1-退款")
private Integer status;
@Schema(description = "计算费用方式1-ODO2-SOC3-按电量")
private Integer feeType;
@Schema(description = "基础费用")
private BigDecimal basicFee;
@Schema(description = "服务开始时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date serviceTimeBegin;
@Schema(description = "服务结束时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date serviceTimeEnd;
@Schema(description = "服务费")
private BigDecimal serviceFee;
@Schema(description = "费用标准")
private String feeStandardJson;
@Schema(description = "费用标准详情")
@TableField(exist = false)
private BatteryStationHdFeeStandard feeStandardDetail;
@Schema(description = "上次租赁电池时车辆里程")
private BigDecimal lastRentBatCarOdo;
@Schema(description = "归还电池时车辆里程")
private BigDecimal nowReturnBatCarOdo;
@Schema(description = "按ODO换电费")
private BigDecimal odoAmount;
@Schema(description = "充电开始时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date chargeTimeBegin;
@Schema(description = "充电结束时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date chargeTimeEnd;
@Schema(description = "总充电量")
private BigDecimal electAmount;
@Schema(description = "租借电池包仓位")
private Integer rentBatNo;
@Schema(description = "租用电池包编码")
private String rentBatCode;
@Schema(description = "租用电池包SOC")
private Integer rentBatSoc;
@Schema(description = "归还电池包编码")
private String returnBatCode;
@Schema(description = "归还电池包仓位")
private Integer returnBatNo;
@Schema(description = "归还电池包SOC")
private Integer returnBatSoc;
@Schema(description = "归还电池租出时soc")
private Integer returnBatRentSoc;
@Schema(description = "归还电池租出的换电站编码")
private String returnBatRentStationCode;
@Schema(description = "归还电池租出的换电站")
private String returnBatRentStationName;
@Schema(description = "换电模式1-全自动2-半自动3-人工干预 ")
private Integer changeMode;
@Schema(description = "换电车道 1-A 车道;2-B 车道")
private Integer changeLane;
@Schema(description = "删除状态1-已删除0-未删除", hidden = true)
private Integer delFlag;
@Schema(description = "交易编码", hidden = true)
private String tradeNo;
@Schema(description = "备注信息")
private String remark;
}

View File

@ -1,4 +1,4 @@
package com.evotech.hd.cloud.entity.order;
package com.evotech.hd.common.core.entity.order;
import com.evotech.hd.common.core.entity.IdEntity;
import com.fasterxml.jackson.annotation.JsonFormat;

View File

@ -1,4 +1,4 @@
package com.evotech.hd.cloud.entity.order;
package com.evotech.hd.common.core.entity.order;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -19,7 +19,7 @@ import java.util.Date;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName(value = "yt_t_product_order", schema = "hd_cloud_manage")
@TableName(value = "yt_t_order", schema = "hd_cloud_manage")
public class Order extends BaseOrder{
private Integer orderPreId;
@ -32,7 +32,7 @@ public class Order extends BaseOrder{
/***
* 预约用户名称
*/
private String preName;
private String orderPreUname;
/***
* 订单类型, 具体参考 HDConstant.OrderConstant.ORDER_TYPE_*
*/

View File

@ -1,4 +1,4 @@
package com.evotech.hd.cloud.entity.order;
package com.evotech.hd.common.core.entity.order;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.IdEntity;
@ -83,7 +83,7 @@ public class OrderDetail extends IdEntity {
/***
* 租借电池包SOC
*/
private Double rentBatSOC;
private Double rentBatSoc;
/***
* 归还电池包仓位
*/
@ -95,7 +95,7 @@ public class OrderDetail extends IdEntity {
/***
* 归还电池包SOC
*/
private Double returnBatSOC;
private Double returnBatSoc;
/***
* 换电模式 HDConstant.OrderConstant.CHANGE_MODE_*
*/

View File

@ -0,0 +1,28 @@
package com.evotech.hd.common.core.entity.order;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* @author zrb
* @since 2024-11-22
*/
@Data
@TableName(value = "yt_t_order_recharge", schema = "hd_cloud_manage")
@Schema(name = "充值订单")
public class OrderRecharge extends BaseOrder implements Serializable {
/***
* 1 待支付 2 已支付
*/
private Integer orderType;
private String wuId;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,72 @@
package com.evotech.hd.common.core.entity.order;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.IdEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 退款订单类
*
* @ClassName:OrderRefund
* @date: 2025年06月28日 16:21
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Data
@TableName(value = "yt_t_order_refund", schema = "hd_cloud_manage")
@Schema(name = "退款订单")
public class OrderRefund extends IdEntity {
/***
* 微信支付单号
*/
String transactionId;
/***
* 退款订单号
*/
String refundOrderNo;
/***
* 充值订单号
*/
String outTradeNo;
/***
* 退款原因
*/
String reason;
/***
* 订单金额
*/
Integer orderAmount;
/***
* 退款金额
*/
Integer refundAmount;
/***
* 退款状态. 默认待退款
* PENDING_REFUND-待退款
* SUCCESS退款成功
* CLOSED退款关闭
* PROCESSING退款处理中
* ABNORMAL退款异常退款到银行发现用户的卡作废或者冻结了导致原路退款银行卡失败可前往商户平台-交易中心手动处理此笔退款可参考 退款异常的处理或者通过发起异常退款接口进行处理
*/
String refundStatus = "PENDING_REFUND";
/***
* 微信退款单号
*/
String refundId;
/***
* 微信退款用户Id
*/
String refundWechatId;
/***
* 微信请求结果
*/
String refundRequestInfo;
/***
* 微信退款回调结果
*/
String notifyInfo;
}

View File

@ -0,0 +1,34 @@
package com.evotech.hd.common.core.entity.system;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.IdEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @ClassName:SysParam
* @date: 2025年07月02日 14:26
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName(value = "yt_t_sys_param", schema = "hd_cloud_manage")
public class SysParam extends IdEntity {
/** 参数名 */
private String paramName;
/** 参数码 */
private String paramCode;
/** 参数值 */
private String paramValue;
/** 说明 */
private String description;
}

View File

@ -1,5 +1,9 @@
package com.evotech.hd.common.core.enums;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 100 Continue 继续客户端应继续其请求
101 Switching Protocols 切换协议服务器根据客户端的请求切换协议只能切换到更高级的协议例如切换到HTTP的新版本协议
@ -99,5 +103,11 @@ public enum CodeMsg {
this.code = code;
this.msg = msg;
}
public static CodeMsg getCodeMsgByCode(String code){
Map<String, CodeMsg> map = Arrays.stream(CodeMsg.values()).collect(Collectors.toMap(CodeMsg::getCode, v->v));
return map.get(code);
}
}

View File

@ -20,6 +20,8 @@ public enum OrderStatusEnums implements BaseEnum<Integer, String> {
REFUND(-1, "订单退款"),
REFUND_PART(-2, "订单不分退款"),
;

View File

@ -0,0 +1,61 @@
package com.evotech.hd.common.core.enums;
/**
* 枚举
*
* @ClassName:SwapBatteryStepEnum
* @date: 2025年06月23日 16:08
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public enum SwapBatteryStepEnum implements BaseEnum<Integer, String>{
// @Schema(description = "步骤1-车辆进站2-车辆到达指定位置3-对中机构4-取新电5-拆旧电6-装新电7-放旧电8-完成")
VEHICLES_ENTER_STATION(1, "车辆进站"),
VEHICLE_POSITION(2, "车辆到达指定位置"),
INSTITUTIONS_FOR_CHINA(3, "对中机构"),
GET_NEW_ELECTRICITY(4, "取新电"),
DISMANTLE_OLD_ELECTRICITY(5, "拆旧电"),
INSTALL_NEW_ELECTRICITY(6, "装新电"),
DISCHARGE_OLD_ELECTRICITY(7, "放旧电"),
COMPLETED(8, "完成"),
;
Integer code;
String name;
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
SwapBatteryStepEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getKey() {
return this.code;
}
@Override
public String getValue() {return this.name;}
}

View File

@ -6,6 +6,7 @@ import cn.hutool.core.util.RandomUtil;
import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
public class CommonUtil {
@ -57,4 +58,11 @@ public class CommonUtil {
return yuan.multiply(new BigDecimal(100));
}
public static BigDecimal fenToYuan(BigDecimal yuan){
if(ObjectUtils.isEmpty(yuan)){
return new BigDecimal(0);
}
return yuan.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
}
}

View File

@ -18,6 +18,11 @@ public class MongoDBException extends Exception{
super();
}
public MongoDBException(Exception e) {
super(e);
log.error("mongodb 数据库存储异常============{}", e.getMessage());
}
public MongoDBException(String message) {
super(message);
log.error("mongodb 数据库存储异常============{}", message);

View File

@ -0,0 +1,47 @@
package com.evotech.hd.common.redis.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
*
* @ClassName:RedisServiceUtils
* @date: 2025年06月18日 14:43
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Service
public class RedisServiceUtils {
private static RedisUtil redisUtil;
@Autowired
public RedisServiceUtils(RedisUtil redisUtil){
this.redisUtil = redisUtil;
}
public static boolean set(String key, Object value){
return redisUtil.set(key, value);
}
public static boolean set(String key, Object value, long time){
return redisUtil.set(key, value, time);
}
public static Object get(String key){
return redisUtil.get(key);
}
public static String getStr(String key){
return redisUtil.getStringValue(key);
}
public static void del(String... key){
redisUtil.del(key);
}
}

View File

@ -1,18 +1,17 @@
package com.evotech.hd.common.web.exception;
import java.util.stream.Collectors;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.enums.CodeMsg;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import java.util.stream.Collectors;
/**
* 全局异常处理
@ -36,7 +35,7 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = NullPointerException.class)
public Result<String> exceptionHandler(HttpServletRequest req, NullPointerException e) {
log.error("\r\n===>>>空指针异常:", e);
return new Result<String>().bussinessException(CodeMsg.ERROR.getCode(), e.getMessage(), null);
return new Result<String>().businessException(CodeMsg.ERROR.getCode(), e.getMessage(), null);
}
@ -46,7 +45,7 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = HttpMessageNotReadableException.class)
public Result<String> exceptionHandler(HttpServletRequest req, HttpMessageNotReadableException e) {
log.error("\r\n===>>>http请求参数解析异常", e);
return new Result<String>().bussinessException(CodeMsg.PARAM_ERROR.getCode(), "http请求参数解析异常", e.getMessage());
return new Result<String>().businessException(CodeMsg.PARAM_ERROR.getCode(), "http请求参数解析异常", e.getMessage());
}
/**
@ -57,7 +56,7 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = MyArgumentException.class)
public Result<String> exceptionHandler(HttpServletRequest req, MyArgumentException e) {
log.error("\r\n===>>>请求参数异常:", e);
return new Result<String>().bussinessException(CodeMsg.PARAM_ERROR.getCode(), CodeMsg.PARAM_ERROR.getMsg(), e.getParamArr());
return new Result<String>().businessException(CodeMsg.PARAM_ERROR.getCode(), CodeMsg.PARAM_ERROR.getMsg(), String.join(",", e.getParamArr()));
}
@ -70,7 +69,7 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = DataIntegrityViolationException.class)
public Result<String> exceptionHandler(HttpServletRequest req, DataIntegrityViolationException e) {
log.error("\r\n===>>>sql语句异常", e);
return new Result<String>().bussinessException(CodeMsg.SQL_RUN_ERROR.getCode(), e.getCause().toString(), null);
return new Result<String>().businessException(CodeMsg.SQL_RUN_ERROR.getCode(), e.getCause().toString(), null);
}
/**
@ -80,7 +79,7 @@ public class GlobalExceptionHandler {
public Result<String> exceptionHandler(HttpServletRequest req, MethodArgumentNotValidException e) {
log.error("\r\n===>>>传参 自动检测出 错误:", e);
String param = e.getBindingResult().getFieldErrors().stream().map(i -> i.getField()).collect(Collectors.joining(","));
return new Result<String>().bussinessException(CodeMsg.PARAM_ERROR.getCode(), param, e.getBindingResult().getFieldErrors());
return new Result<String>().businessException(CodeMsg.PARAM_ERROR.getCode(), param, e.getBindingResult().getFieldErrors().stream().map(FieldError::getField).collect(Collectors.joining()));
}
/**
@ -91,7 +90,7 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result<String> exceptionHandler(HttpServletRequest req, Exception e) {
log.error("\r\n===>>>捕获运行异常:", e);
return new Result<String>().bussinessException(CodeMsg.ERROR.getCode(), e instanceof RuntimeException?e.getMessage():e.toString(), null);
return new Result<String>().businessException(CodeMsg.ERROR.getCode(), e instanceof RuntimeException?e.getMessage():e.toString(), null);
}
}

View File

@ -1,29 +1,27 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.evotech.hd.cloud.service.BatteryStationCdStrategyService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy;
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategyDetail;
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 com.evotech.hd.cloud.service.BatteryStationCdStrategyService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy;
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategyDetail;
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 java.util.List;
@Tag(name = "充电策略")
@ApiSupport(order = 48)
@RestController
@RequestMapping("/batterystation/cd/strategy")
@RequestMapping("/battery/station/cd/strategy")
public class BatteryStationCdStrategyController {
@Resource

View File

@ -1,5 +1,6 @@
package com.evotech.hd.cloud.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest;
import com.evotech.hd.cloud.mqtt.message.handle.RequestMessageService;
import com.evotech.hd.cloud.service.BatteryStationService;
@ -25,7 +26,7 @@ import java.util.Map;
@Tag(name = "换电站")
@ApiSupport(order = 11)
@RestController
@RequestMapping("/batterystation")
@RequestMapping("/battery/station")
public class BatteryStationController {
@Resource
@ -36,43 +37,36 @@ public class BatteryStationController {
@Operation(summary = "增加")
@PostMapping("/add")
@ApiOperationSupport(order = 1)
public com.evotech.hd.common.core.entity.Result<Integer> add(@Valid @ParameterObject BatteryStation bs) {
public Result<Integer> add(@Valid @ParameterObject BatteryStation bs) {
return batteryStationService.add(bs);
}
@Operation(summary = "删除")
@PostMapping("/del")
@ApiOperationSupport(order = 2)
public com.evotech.hd.common.core.entity.Result<Integer> delete(Integer id) {
public Result<Integer> delete(Integer id) {
return batteryStationService.delete(id);
}
@Operation(summary = "修改")
@PostMapping({"/update"})
@ApiOperationSupport(order = 3)
public com.evotech.hd.common.core.entity.Result<Integer> update(@ParameterObject BatteryStation bs) {
public Result<Integer> update(@ParameterObject BatteryStation bs) {
return batteryStationService.update(bs);
}
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public com.evotech.hd.common.core.entity.Result<List<BatteryStation>> list(@ParameterObject PageListBatteryStationRequest plbsr) {
public Result<Page<BatteryStation>> list(@ParameterObject PageListBatteryStationRequest plbsr) {
return batteryStationService.list(plbsr);
}
@Operation(summary = "查询2")
@GetMapping("/liststation")
@Hidden
public com.evotech.hd.common.core.entity.Result<List<BatteryStationVO>> listStation(@RequestParam(required = false) String plateNum) {
return batteryStationService.listStation(plateNum);
}
@Operation(summary = "站点秘钥")
@PostMapping("/rsa_secret_key")
@ApiOperationSupport(order = 5)
public com.evotech.hd.common.core.entity.Result<Map<String, String>> RsaSecretKey(@NotBlank @RequestParam String stationCode) {
public Result<Map<String, String>> RsaSecretKey(@NotBlank @RequestParam String stationCode) {
return batteryStationService.RsaSecretKey(stationCode);
}
@ -109,4 +103,12 @@ public class BatteryStationController {
return batteryStationService.resourceList(pkIds);
}
@Operation(summary = "微信首页换电站地图信息")
@GetMapping("/list/station")
@Hidden
public Result<List<BatteryStationVO>> listStation(@RequestParam(required = false) String longitudeAndLatitude, @RequestParam(required = false) String plateNum) {
return batteryStationService.listStation(longitudeAndLatitude, plateNum);
}
}

View File

@ -1,31 +1,30 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListBatteryStationDcRequest;
import com.evotech.hd.cloud.service.BatteryStationDcService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
import com.evotech.hd.common.core.entity.cloud.BatteryTrace;
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.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.entity.request.PageListBatteryStationDcRequest;
import com.evotech.hd.cloud.service.BatteryStationDcService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
import com.evotech.hd.common.core.entity.cloud.BatteryTrace;
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 java.util.List;
@Tag(name = "换电站电池")
@ApiSupport(order = 12)
@RestController
@RequestMapping("/batterystation/dc")
@RequestMapping("/battery/station/dc")
public class BatteryStationDcController {
@ -56,7 +55,7 @@ public class BatteryStationDcController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public Result<List<BatteryStationDc>> list(@ParameterObject PageListBatteryStationDcRequest plbsdcr) {
public Result<Page<BatteryStationDc>> list(@ParameterObject PageListBatteryStationDcRequest plbsdcr) {
return batteryStationDcService.list(plbsdcr);
}

View File

@ -1,29 +1,26 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListBatteryStationDccRequest;
import com.evotech.hd.cloud.service.BatteryStationDccService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDcc;
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 com.evotech.hd.cloud.entity.request.PageListBatteryStationDccRequest;
import com.evotech.hd.cloud.service.BatteryStationDccService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDcc;
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;
@Tag(name = "换电站电池仓")
@ApiSupport(order = 13)
@RestController
@RequestMapping("/batterystation/dcc")
@RequestMapping("/battery/station/dcc")
public class BatteryStationDccController {
@ -54,7 +51,7 @@ public class BatteryStationDccController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public Result<List<BatteryStationDcc>> list(@ParameterObject PageListBatteryStationDccRequest plbsDccr) {
public Result<Page<BatteryStationDcc>> list(@ParameterObject PageListBatteryStationDccRequest plbsDccr) {
return batteryStationDccService.list(plbsDccr);
}

View File

@ -1,29 +1,26 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListBatteryStationDjRequest;
import com.evotech.hd.cloud.service.BatteryStationDjService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDj;
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 com.evotech.hd.cloud.entity.request.PageListBatteryStationDjRequest;
import com.evotech.hd.cloud.service.BatteryStationDjService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDj;
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;
@Tag(name = "换电站电机")
@ApiSupport(order = 14)
@RestController
@RequestMapping("/batterystation/dj")
@RequestMapping("/battery/station/dj")
public class BatteryStationDjController {
@ -54,7 +51,7 @@ public class BatteryStationDjController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public Result<List<BatteryStationDj>> list(@ParameterObject PageListBatteryStationDjRequest plbsdjr) {
public Result<Page<BatteryStationDj>> list(@ParameterObject PageListBatteryStationDjRequest plbsdjr) {
return batteryStationDjService.list(plbsdjr);
}

View File

@ -1,28 +1,26 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.evotech.hd.cloud.service.BatteryStationHdFeeStandardService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard;
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 com.evotech.hd.cloud.service.BatteryStationHdFeeStandardService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard;
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 java.util.List;
@Tag(name = "换电站费用标准")
@ApiSupport(order = 16)
@RestController
@RequestMapping("/batterystation/fee")
@RequestMapping("/battery/station/fee")
public class BatteryStationHdFeeStandardController {

View File

@ -1,28 +1,26 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.evotech.hd.cloud.service.BatteryStationHdFeeStandardDetailService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail;
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 com.evotech.hd.cloud.service.BatteryStationHdFeeStandardDetailService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail;
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 java.util.List;
@Tag(name = "换电站费用标准明细")
@ApiSupport(order = 17)
@RestController
@RequestMapping("/batterystation/fee/detail")
@RequestMapping("/battery/station/fee/detail")
public class BatteryStationHdFeeStandardDetailController {

View File

@ -1,29 +1,27 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.evotech.hd.cloud.service.BatteryStationRobotService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot;
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.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.BatteryStationRobotService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot;
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 java.util.List;
@Tag(name = "换电站机器人")
@ApiSupport(order = 15)
@RestController
@RequestMapping("/batterystation/robot")
@RequestMapping("/battery/station/robot")
public class BatteryStationRobotController {

View File

@ -1,23 +1,20 @@
package com.evotech.hd.cloud.controller;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.MessageMqtt;
import com.evotech.hd.cloud.entity.request.PageListMessageMqttRequest;
import com.evotech.hd.cloud.service.MessageMqttService;
import com.evotech.hd.common.core.Dto.Result;
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 org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.evotech.hd.cloud.entity.MessageMqtt;
import com.evotech.hd.cloud.entity.request.PageListMessageMqttRequest;
import com.evotech.hd.cloud.service.MessageMqttService;
import com.evotech.hd.common.core.entity.Result;
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;
@Tag(name = "MQTT消息")
@ApiSupport(order = 9)
@RestController
@ -32,7 +29,7 @@ public class MessageMqttController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 1)
public Result<List<MessageMqtt>> list(@ParameterObject PageListMessageMqttRequest plmmr) {
public Result<Page<MessageMqtt>> list(@ParameterObject PageListMessageMqttRequest plmmr) {
return messageMqttService.list(plmmr);
}

View File

@ -1,5 +1,6 @@
package com.evotech.hd.cloud.controller.customer;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.service.CompanyService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.BasePageRequest;
@ -31,33 +32,33 @@ public class CompanyController {
@Operation(summary = "增加")
@PostMapping("/add")
@ApiOperationSupport(order = 1)
public com.evotech.hd.common.core.entity.Result<Integer> add(@Valid @ParameterObject Company company) {
public Result<Integer> add(@Valid @ParameterObject Company company) {
return companyService.add(company);
}
@Operation(summary = "删除")
@PostMapping("/del")
@ApiOperationSupport(order = 2)
public com.evotech.hd.common.core.entity.Result<Integer> delete(@NotNull Integer id) {
public Result<Integer> delete(@NotNull Integer id) {
return companyService.delete(id);
}
@Operation(summary = "修改")
@PostMapping({"/update"})
@ApiOperationSupport(order = 3)
public com.evotech.hd.common.core.entity.Result<Integer> update(@ParameterObject Company company) {
public Result<Integer> update(@ParameterObject Company company) {
return companyService.update(company);
}
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public com.evotech.hd.common.core.entity.Result<List<Company>> list(@Valid @ParameterObject BasePageRequest bpr) {
public Result<Page<Company>> list(@Valid @ParameterObject BasePageRequest bpr) {
return companyService.list(bpr);
}
@GetMapping("/companyByCode")
public com.evotech.hd.common.core.entity.Result<Map<String, String>> companyByCode(String ccode) {
public Result<Map<String, String>> companyByCode(String ccode) {
return companyService.companyByCode(ccode);
}

View File

@ -1,5 +1,6 @@
package com.evotech.hd.cloud.controller.customer;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListVehicleRequest;
import com.evotech.hd.cloud.service.VehicleService;
import com.evotech.hd.common.core.Dto.Result;
@ -33,49 +34,49 @@ public class VehicleController {
@Operation(summary = "增加")
@PostMapping("/add")
@ApiOperationSupport(order = 1)
public com.evotech.hd.common.core.entity.Result<Integer> add(@Valid @ParameterObject VehicleInfo vi) {
public Result<Integer> add(@Valid @ParameterObject VehicleInfo vi) {
return vehicleService.add(vi);
}
@Operation(summary = "删除")
@PostMapping("/del")
@ApiOperationSupport(order = 2)
public com.evotech.hd.common.core.entity.Result<Integer> delete(Integer id) {
public Result<Integer> delete(Integer id) {
return vehicleService.delete(id);
}
@Operation(summary = "修改")
@PostMapping({"/update"})
@ApiOperationSupport(order = 3)
public com.evotech.hd.common.core.entity.Result<Integer> update(@ParameterObject VehicleInfo vi) {
public Result<Integer> update(@ParameterObject VehicleInfo vi) {
return vehicleService.update(vi);
}
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public com.evotech.hd.common.core.entity.Result<List<VehicleInfo>> list(@ParameterObject PageListVehicleRequest plvr) {
public Result<Page<VehicleInfo>> list(@ParameterObject PageListVehicleRequest plvr) {
return vehicleService.list(plvr);
}
@Operation(summary = "关联公司")
@PostMapping("/company/relation")
@ApiOperationSupport(order = 5)
public com.evotech.hd.common.core.entity.Result<Integer> companyRelation(String plateNum, String ccode, String cname) {
public Result<Integer> companyRelation(String plateNum, String ccode, String cname) {
return vehicleService.companyRelation(plateNum, ccode, cname);
}
@Operation(summary = "删除关联公司")
@PostMapping("/company/relation/del")
@ApiOperationSupport(order = 6)
public com.evotech.hd.common.core.entity.Result<Integer> delCompanyRelation(String plateNum) {
public Result<Integer> delCompanyRelation(String plateNum) {
return vehicleService.delCompanyRelation(plateNum);
}
@Operation(summary = "微信用户关联")
@PostMapping("/wechatuser/relation/add")
@ApiOperationSupport(order = 7)
public com.evotech.hd.common.core.entity.Result<Integer> addWechatUserRelation(@Valid @ParameterObject VehicleWechatUserRelation relation) {
public Result<Integer> addWechatUserRelation(@Valid @ParameterObject VehicleWechatUserRelation relation) {
return vehicleService.addWechatUserRelation(relation);
}
@ -83,7 +84,7 @@ public class VehicleController {
@Operation(summary = "删除微信用户关联")
@PostMapping("/wechatuser/relation/del")
@ApiOperationSupport(order = 8)
public com.evotech.hd.common.core.entity.Result<Integer> deleteWechatUserRelation(Integer id) {
public Result<Integer> deleteWechatUserRelation(Integer id) {
return vehicleService.deleteWechatUserRelation(id);
}
@ -91,14 +92,14 @@ public class VehicleController {
@Operation(summary = "查询微信用户车辆")
@GetMapping("/wechatuser/relation/list")
@ApiOperationSupport(order = 9)
public com.evotech.hd.common.core.entity.Result<List<VehicleInfo>> listWechatUserRelation(@NotBlank @RequestParam String wuid) {
public Result<List<VehicleInfo>> listWechatUserRelation(@NotBlank @RequestParam String wuid) {
return vehicleService.listWechatUserRelation(wuid, null);
}
@Operation(summary = "查询车辆的关联用户")
@GetMapping("/relationuser/list")
@ApiOperationSupport(order = 10)
public com.evotech.hd.common.core.entity.Result<List<VehicleWechatUserRelation>> listRelationUser(@NotBlank @RequestParam String PlantNo) {
public Result<List<VehicleWechatUserRelation>> listRelationUser(@NotBlank @RequestParam String PlantNo) {
return vehicleService.listRelationUser(PlantNo);
}

View File

@ -1,23 +1,20 @@
package com.evotech.hd.cloud.controller.customer;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListWechatUserRequest;
import com.evotech.hd.cloud.service.WechatUserService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.wechat.WechatUser;
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 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.entity.request.PageListWechatUserRequest;
import com.evotech.hd.cloud.service.WechatUserService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.wechat.WechatUser;
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;
@Tag(name = "微信用户")
@RestController
@RequestMapping("/wechat/user")
@ -30,7 +27,7 @@ public class WechatUserController {
@Operation(summary = "查询")
@GetMapping("/list")
public Result<List<WechatUser>> list(@ParameterObject PageListWechatUserRequest plwur) {
public Result<Page<WechatUser>> list(@ParameterObject PageListWechatUserRequest plwur) {
return wechatUserService.list(plwur);
}

View File

@ -1,12 +1,15 @@
package com.evotech.hd.cloud.controller.order;
import com.evotech.hd.common.core.entity.Result;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.service.OrderSwapBatteryPreService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest;
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;
@ -16,7 +19,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.List;
/**
* 预约订单管理类
@ -32,26 +34,30 @@ import java.util.List;
@RequestMapping("/order/per")
public class OrderPerController {
@Resource
OrderSwapBatteryPreService orderSwapBatteryPreService;
@Operation(summary = "查询预约")
@GetMapping("/list")
@ApiOperationSupport(order = 3)
public Result<Page<OrderSwapBatteryPre>> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException {
return orderSwapBatteryPreService.list(plsopr);
}
@Operation(summary = "增加预约")
@PostMapping("/add")
@ApiOperationSupport(order = 1)
public Result<Integer> addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) {
return orderSwapBatteryService.addPre(osbp);
public Result<Boolean> addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) {
return orderSwapBatteryPreService.addOrderSwapBatteryPre(osbp);
}
@Operation(summary = "取消预约")
@PostMapping("/cancel")
@ApiOperationSupport(order = 2)
public Result<Integer> cancelPre(@NotNull Integer id) {
return orderSwapBatteryService.cancelPre(id, null);
return orderSwapBatteryPreService.cancelPre(id, 3);
}
@Operation(summary = "查询预约")
@GetMapping("/list")
@ApiOperationSupport(order = 3)
public Result<List<OrderSwapBatteryPre>> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException {
return orderSwapBatteryService.listPre(plsopr);
}
}

View File

@ -1,24 +1,20 @@
package com.evotech.hd.cloud.controller.order;
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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListRechargeOrderRequest;
import com.evotech.hd.cloud.service.OrderRechargeService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.OrderRecharge;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.order.OrderRecharge;
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.*;
import java.util.List;
@Tag(name = "充值订单")
@ -57,8 +53,17 @@ public class OrderRechargeController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public Result<List<OrderRecharge>> list(@ParameterObject PageListRechargeOrderRequest plror) {
public Result<Page<OrderRecharge>> list(@ParameterObject PageListRechargeOrderRequest plror) {
return orderRechargeService.list(plror);
}
/***
* 待退款订单查询
* @return
*/
@GetMapping("/refund/list")
public Result<List<OrderRecharge>> refundList(@RequestParam String wechatId) {
return orderRechargeService.refundList(wechatId);
}
}

View File

@ -0,0 +1,43 @@
package com.evotech.hd.cloud.controller.order;
import cn.hutool.json.JSONUtil;
import com.evotech.hd.cloud.service.OrderRefundService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.order.OrderRefund;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.annotation.Resource;
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;
/**
* 订单退款类
*
* @ClassName:OrderRefundController
* @date: 2025年06月30日 14:20
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@RestController
@RequestMapping("/order/refund")
public class OrderRefundController {
@Resource
private OrderRefundService orderRefundService;
@Operation(summary = "增加")
@PostMapping("/addAll")
public Result<Boolean> addAll(@RequestParam String listJson) {
return orderRefundService.addAll(JSONUtil.toList(listJson, OrderRefund.class));
}
@Operation(summary = "查询")
@PostMapping("/orderNo")
public Result<OrderRefund> orderNoOne(@RequestParam String orderNo) {
return orderRefundService.orderNoOne(orderNo);
}
}

View File

@ -1,15 +1,14 @@
package com.evotech.hd.cloud.controller.order;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.order.Order;
import com.evotech.hd.cloud.entity.vo.NativePayVO;
import com.evotech.hd.cloud.service.OrderService;
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.Dto.order.OrderListVo;
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.PageListSwapOrderRequest;
import com.evotech.hd.common.core.entity.order.Order;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.swagger.v3.oas.annotations.Hidden;
@ -32,9 +31,6 @@ public class OrderSwapBatteryController {
@Resource
private OrderService orderService;
private OrderSwapBatteryService orderSwapBatteryService;
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 7)
@ -42,6 +38,31 @@ public class OrderSwapBatteryController {
return orderService.pageList(plsor);
}
@Operation(summary = "查询换电步骤")
@GetMapping("/step/list")
@ApiOperationSupport(order = 9)
public Result<List<OrderSwapBatteryStep>> listStep(@NotBlank String orderNo) {
return orderService.listStep(orderNo);
}
@Operation(summary = "个人账户余额支付")
@PostMapping({"/one"})
@ApiOperationSupport(order = 11)
public Result<Order> one(@RequestParam String orderNo) {
return orderService.one(orderNo);
}
@Operation(summary = "个人账户余额支付")
@PostMapping({"/wallet/pay"})
@ApiOperationSupport(order = 11)
public Result<String> walletPay(@RequestParam String orderNo, String wuid, String uname) {
return orderService.walletPay(orderNo, wuid, uname);
}
@Operation(summary = "查询公司订单")
@GetMapping("/listcompanyorder")
@ApiOperationSupport(order = 8)
@ -51,12 +72,7 @@ public class OrderSwapBatteryController {
return orderService.listByCompany(plsor);
}
@Operation(summary = "查询换电步骤")
@GetMapping("/step/list")
@ApiOperationSupport(order = 9)
public Result<List<OrderSwapBatteryStep>> listStep(@NotBlank String orderNo) {
return orderService.listStep(orderNo);
}
@Operation(summary = "费用计算")
@PostMapping({"/cost"})
@ -66,12 +82,6 @@ public class OrderSwapBatteryController {
}
@Operation(summary = "个人账户余额支付")
@PostMapping({"/wallet/pay"})
@ApiOperationSupport(order = 11)
public Result<String> walletPay(@RequestParam String orderNo, String wuid, String uname) {
return orderService.walletPay(orderNo, wuid, uname);
}
@Operation(summary = "公司订单余额支付")
@ -106,8 +116,8 @@ public class OrderSwapBatteryController {
@Operation(summary = "开始换电")
@PostMapping("/startSwap")
@ApiOperationSupport(order = 16)
public Result<Boolean> startSwap(@RequestParam String wuid,String orderId) {
return orderService.startSwap(wuid,orderId);
public Result<Boolean> startSwap(@RequestParam String wuid,String orderNo) {
return orderService.startSwap(wuid,orderNo);
}
@Operation(summary = "获取开始换电回复")
@PostMapping("/getStartSwap")

View File

@ -1,26 +1,22 @@
package com.evotech.hd.cloud.controller.order;
import java.util.List;
import com.evotech.hd.common.core.entity.cloud.request.PrePayRequest;
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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.entity.request.PageListTradeRequest;
import com.evotech.hd.cloud.service.TradeService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
import com.evotech.hd.common.core.entity.cloud.request.PrePayRequest;
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;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "交易详情")
@ -58,7 +54,7 @@ public class TradeController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public Result<List<TradeDetail>> list(@ParameterObject PageListTradeRequest pltr) {
public Result<Page<TradeDetail>> list(@ParameterObject PageListTradeRequest pltr) {
return tradeService.list(pltr);
}
@ -67,7 +63,6 @@ public class TradeController {
@PostMapping({"/wechatpay/notify"})
@ApiOperationSupport(order = 5)
@Hidden
public Result<String> wechatPayNotifyHandle(@ParameterObject TradeDetail tradeDetail) {
return tradeService.wechatPayNotifyHandle(tradeDetail);
}

View File

@ -1,26 +1,22 @@
package com.evotech.hd.cloud.controller.order;
import java.util.List;
import com.evotech.hd.common.core.entity.cloud.vo.WalletAccountVO;
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotBlank;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.cloud.service.WalletAccountService;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.Dto.Result;
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.PageListWalletRequest;
import com.evotech.hd.common.core.entity.cloud.vo.WalletAccountVO;
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
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.*;
@Tag(name = "资金账户管理")
@ -57,7 +53,7 @@ public class WalletAccountController {
@Operation(summary = "查询")
@GetMapping("/list")
@ApiOperationSupport(order = 4)
public Result<List<WalletAccountVO>> list(@ParameterObject PageListWalletRequest plwr) {
public Result<Page<WalletAccountVO>> list(@ParameterObject PageListWalletRequest plwr) {
return walletAccountService.list(plwr);
}
@ -77,12 +73,7 @@ public class WalletAccountController {
}
@Operation(summary = "查询明细")
@GetMapping("/detail/list")
@ApiOperationSupport(order = 7)
public Result<List<WalletAccountDetail>> listDetail(@ParameterObject PageListWalletRequest plwr) {
return walletAccountService.listDetail(plwr);
}
@Operation(summary = "查询是否开通微信钱包")
@PostMapping("/isOpenAccount")
@ApiOperationSupport(order = 8)
@ -101,12 +92,15 @@ public class WalletAccountController {
public Result<WechatPayAttach> getPayAttach(String wuid) {
return walletAccountService.getPayAttach(wuid);
}
@Operation(summary = "更新账户姓名")
@PostMapping({"/updateName"})
@ApiOperationSupport(order = 11)
public Result<Integer> updateName(@ParameterObject WalletAccount wa) {
return walletAccountService.updateName(wa);
}
@Operation(summary = "获取钱包对象")
@PostMapping("/getDetailById")
@ -114,4 +108,26 @@ public class WalletAccountController {
public WalletAccount getDetailById(@NotBlank @RequestParam String outTradeNo) {
return walletAccountService.getDetailById(outTradeNo);
}
@PostMapping("/wechatId")
public com.evotech.hd.common.core.Dto.Result<WalletAccount> getWalletAccountByWechatId(@NotBlank @RequestParam String wechatId) {
return walletAccountService.getWalletAccountByWechatId(wechatId);
}
@Operation(summary = "更新账户信息")
@PostMapping({"/update/wechat"})
@ApiOperationSupport(order = 11)
public com.evotech.hd.common.core.Dto.Result<Integer> updateWechat(@ParameterObject WalletAccount wa) {
return walletAccountService.updateWechat(wa);
}
@Operation(summary = "查询账户明细")
@GetMapping("/detail/list")
@ApiOperationSupport(order = 7)
public com.evotech.hd.common.core.Dto.Result<Page<WalletAccountDetail>> listDetail(@ParameterObject PageListWalletRequest plwr) {
return walletAccountService.listDetail(plwr);
}
}

View File

@ -1,19 +1,17 @@
package com.evotech.hd.cloud.controller.test;
import com.evotech.hd.cloud.service.HomeDataManualCollateService;
import com.evotech.hd.common.core.Dto.Result;
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 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.service.HomeDataManualCollateService;
import com.evotech.hd.common.core.entity.Result;
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;
@Tag(name = "首页数据手动整理中间表")
@ApiSupport(order = 701)
@RestController

View File

@ -1,12 +1,9 @@
package com.evotech.hd.cloud.controller.test;
import java.util.Date;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.evotech.hd.cloud.controller.test.service.MqttTestUtil;
import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
@ -16,17 +13,18 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderByPlateNumReq;
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.common.core.entity.Result;
import com.evotech.hd.common.core.Dto.Result;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@Tag(name = "Mqtt消息测试")
@ApiSupport(order = 700)

View File

@ -1,96 +1,100 @@
//package com.evotech.hd.cloud.controller.test;
//
//import cn.hutool.core.date.DatePattern;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.RandomUtil;
//import cn.hutool.json.JSONUtil;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.evotech.hd.cloud.dao.BatteryStationDao;
//import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
//import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao;
//import com.evotech.hd.cloud.device.dh.DHRequestUtil;
//import com.evotech.hd.cloud.mqtt.message.MessageTopic;
//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
//import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
//import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor;
//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
//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.OrderSwapBattery;
//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
//import com.evotech.hd.common.core.utils.Collections;
//import jakarta.annotation.Resource;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.ApplicationContext;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//
///**
// * @desc:
// * @ClassName:TestController
// * @date: 2025年04月18日 14:40
// * @author: andy.shi
// * @contact: 17330188597
// * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
// */
//@RestController
//@RequestMapping("/test")
//public class TestController {
//
package com.evotech.hd.cloud.controller.test;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.evotech.hd.cloud.dao.BatteryStationDao;
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao;
import com.evotech.hd.cloud.device.dh.DHRequestUtil;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor;
import com.evotech.hd.cloud.service.TradeService;
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.utils.Collections;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;
/**
* @desc:
* @ClassName:TestController
* @date: 2025年04月18日 14:40
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Resource
private BatteryStationDao batteryStationDao;
private VehicleWechatUserRelationDao vehicleWechatUserRelationDao;
@Resource
private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
@Resource
private SwapOrderBasicFeeComponent orderBasicFeeComponent;
@Resource
MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor;
@Autowired
private ApplicationContext applicationContext;
@Resource
TradeService tradeService;
// @Resource
// private BatteryStationDao batteryStationDao;
// private VehicleWechatUserRelationDao vehicleWechatUserRelationDao;
// @Resource
// private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
// @Resource
// private SwapOrderBasicFeeComponent orderBasicFeeComponent;
// @Resource
// MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor;
// @Autowired
// private ApplicationContext applicationContext;
//// @Resource
//// VehicleService vehicleService;
//// @Resource
//// MongoDBService mongoDBService;
//
// @PostMapping("/mongodb/save")
// public Result mongodbSave() {
// mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}"));
// return new Result().success("搞定");
// }
//
// @PostMapping("/mongodb/list")
// public Result mongoList() {
//// mongoDBService.find("123", ChargingData.class, Collections.asMap(MongoConstant.REGEX+MongoConstant.SEPARATION+"value","\"batCode\":124"))
// return new Result().success("");
// }
//
//
// @PostMapping("/mqtt/test")
// public Result mqttTest(@RequestBody JSONObject json) {
// MessageTopic topic = new MessageTopic();
// topic.setDataDirection(json.getString("dataDirection"));
// topic.setMessageType(json.getString("messageType"));
// topic.setStationCode(json.getString("stationCode"));
// MqttMessageHeader header = new MqttMessageHeader();
// header.setFunction(json.getString("function"));
// cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy"));
//
// Map<String, MqttStrategyExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
// for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
// if(processor.accept(header.getFunction())){
// processor.exchange(topic, header, dataBody);
// }
// }
// return new Result().success("搞定");
// }
//
//
// MongoDBService mongoDBService;
@PostMapping("/mongodb/save")
public Result mongodbSave() {
mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}"));
return new Result().success("搞定");
}
@PostMapping("/mongodb/list")
public Result mongoList() {
// mongoDBService.find("123", ChargingData.class, Collections.asMap(MongoConstant.REGEX+MongoConstant.SEPARATION+"value","\"batCode\":124"))
return new Result().success("");
}
@PostMapping("/mqtt/test")
public Result mqttTest(@RequestBody JSONObject json) {
MessageTopic topic = new MessageTopic();
topic.setDataDirection(json.getString("dataDirection"));
topic.setMessageType(json.getString("messageType"));
topic.setStationCode(json.getString("stationCode"));
MqttMessageHeader header = new MqttMessageHeader();
header.setFunction(json.getString("function"));
cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy"));
Map<String, MqttStrategyExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
if(processor.accept(header.getFunction())){
processor.exchange(topic, header, dataBody);
}
}
return new Result().success("搞定");
}
@GetMapping("/trade/{tradeId}")
public Result trade(@PathVariable(value = "tradeId") String tradeId) {
return new Result().success(JSONUtil.toJsonStr(tradeService.getById(tradeId)));
}
//
// @GetMapping("/station")
// public Result list() {
@ -129,44 +133,44 @@
// System.out.println(JSONUtil.toJsonStr(order));
// return new Result().success(order);
// }
//
//
// private String orderNo(String stationCode, Date d) {
// String orderNoPrefix = "YTSO";
// String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8);
// String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER);
// String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF");
// return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix;
// }
//
// @PostMapping("/device/live")
// public Result deviceLive(@RequestParam String deviceId, @RequestParam String channelId) {
// return new Result().success(DHRequestUtil.live(deviceId, channelId));
// }
//
// @PostMapping("/device/liveInfo")
// public Result deviceLiveInfo(@RequestParam String deviceId, @RequestParam String channelId) {
// return new Result().success(DHRequestUtil.liveInfo(deviceId, channelId));
// }
//
// @PostMapping("/device/delLive")
// public Result delLive(@RequestParam String liveToken) {
// return new Result().success(DHRequestUtil.delLive(liveToken));
// }
//
// @PostMapping("/device/list")
// public Result deviceList(@RequestParam Integer page, @RequestParam Integer pageSize) {
// return new Result().success(DHRequestUtil.deviceList(Collections.asMap("pageNum", page, "pageSize", pageSize)));
// }
//
// @PostMapping("/device/createDeviceStreamUrl")
// public Result createDeviceStreamUrl(@RequestParam String deviceId, @RequestParam String channelId) {
// return new Result().success(DHRequestUtil.createDeviceStreamUrl(deviceId, channelId));
// }
//
// @PostMapping("/store/list")
// public Result storeList(@RequestParam Integer page, @RequestParam Integer pageSize) {
// return new Result().success(DHRequestUtil.storeList(page, pageSize));
// }
//
//}
private String orderNo(String stationCode, Date d) {
String orderNoPrefix = "YTSO";
String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8);
String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER);
String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF");
return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix;
}
@PostMapping("/device/live")
public Result deviceLive(@RequestParam String deviceId, @RequestParam String channelId) {
return new Result().success(DHRequestUtil.live(deviceId, channelId));
}
@PostMapping("/device/liveInfo")
public Result deviceLiveInfo(@RequestParam String deviceId, @RequestParam String channelId) {
return new Result().success(DHRequestUtil.liveInfo(deviceId, channelId));
}
@PostMapping("/device/delLive")
public Result delLive(@RequestParam String liveToken) {
return new Result().success(DHRequestUtil.delLive(liveToken));
}
@PostMapping("/device/list")
public Result deviceList(@RequestParam Integer page, @RequestParam Integer pageSize) {
return new Result().success(DHRequestUtil.deviceList(Collections.asMap("pageNum", page, "pageSize", pageSize)));
}
@PostMapping("/device/createDeviceStreamUrl")
public Result createDeviceStreamUrl(@RequestParam String deviceId, @RequestParam String channelId) {
return new Result().success(DHRequestUtil.createDeviceStreamUrl(deviceId, channelId));
}
@PostMapping("/store/list")
public Result storeList(@RequestParam Integer page, @RequestParam Integer pageSize) {
return new Result().success(DHRequestUtil.storeList(page, pageSize));
}
}

View File

@ -1,18 +1,13 @@
package com.evotech.hd.cloud.controller.test.service;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.stereotype.Service;
import java.net.InetAddress;
import java.net.UnknownHostException;
@Service
@Slf4j
@ -39,7 +34,7 @@ public class MqttConfigService {
try {
MqttClient testClient = new MqttClient(mqttUrl, clientId, new MemoryPersistence());
//连接设置
MqttConnectOptions options = connectOptions();
MqttConnectOptions options = connectOptions();
//设置回调
testClient.setCallback(mqttTestCallback);
testClient.connect(options);

View File

@ -2,7 +2,7 @@ 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.OrderRecharge;
import com.evotech.hd.common.core.entity.order.OrderRecharge;
import com.evotech.hd.common.core.permission.DataScope;
/**

View File

@ -0,0 +1,18 @@
package com.evotech.hd.cloud.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.entity.order.OrderRefund;
/**
* 接口
*
* @ClassName:OrderRefundDao
* @date: 2025年06月30日 14:26
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
//@DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE)
public interface OrderRefundDao extends BaseMapper<OrderRefund> {
}

View File

@ -1,21 +0,0 @@
package com.evotech.hd.cloud.entity.order;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 充值订单类
* @ClassName:RechargeOrder
* @date: 2025年05月16日 11:06
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName(value = "yt_t_recharge_order", schema = "hd_cloud_manage")
public class RechargeOrder extends BaseOrder {
}

View File

@ -12,14 +12,13 @@ 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 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 {

View File

@ -1,10 +1,9 @@
package com.evotech.hd.cloud.mqtt.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import lombok.Data;
@ConfigurationProperties(prefix = "mqtt", ignoreUnknownFields = true)
@Data
@Component

View File

@ -1,10 +1,6 @@
package com.evotech.hd.cloud.mqtt.config;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.*;
import org.springframework.stereotype.Component;
@Component

View File

@ -1,19 +1,17 @@
package com.evotech.hd.cloud.mqtt.config;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.cloud.dao.BatteryStationDao;
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.cloud.dao.BatteryStationDao;
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
@Service
@EnableAsync
@ -38,19 +36,31 @@ public class MqttSubscribeService {
}
List<String> stationCodeList = stationList.stream().map(i -> i.getCode()).toList();
for (int i = 0; i < stationCodeList.size(); i++) {
String stationCode = stationCodeList.get(i);
String topicPrefix = "YTHD/" + stationCode + "/S2M/";
for (int j = 0; j < mqttMessageTypeArr.length; j++) {
String topic = topicPrefix + mqttMessageTypeArr[j];
try {
cloudClient.subscribe(topic, mpProperties.getQos());
log.info("\r\n=====>>>MQTT订阅主题 {} 成功...", topic);
} catch (MqttException e) {
e.printStackTrace();
log.error("\r\n=====>>>MQTT订阅主题 {} 失败。。。", topic);
}
}
subscribe(cloudClient, stationCodeList.get(i));
}
log.info("\r\n=====>>>MQTT订阅完成<<<===");
}
@Async("taskExecutor")
public void subscribeAdd(String stationCode) {
log.info("\r\n=====>>>MQTT新增站点订阅主题>>>");
// 订阅主题
subscribe(MqttConnectInit.mqttClientMap.get("cloudClient"), stationCode);
log.info("\r\n=====>>>MQTT新增站点订阅完成<<<===");
}
public void subscribe(MqttClient cloudClient, String stationCode){
String topicPrefix = "YTHD/" + stationCode + "/S2M/";
for (int j = 0; j < mqttMessageTypeArr.length; j++) {
String topic = topicPrefix + mqttMessageTypeArr[j];
try {
cloudClient.subscribe(topic, mpProperties.getQos());
log.info("\r\n=====>>>MQTT订阅主题 {} 成功...", topic);
} catch (MqttException e) {
e.printStackTrace();
log.error("\r\n=====>>>MQTT订阅主题 {} 失败。。。", topic);
}
}
}
}

View File

@ -1,15 +1,14 @@
package com.evotech.hd.cloud.mqtt.config;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Component;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.handle.MqttMessageHandleService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Component;
@Component
@Slf4j

View File

@ -1,7 +1,5 @@
package com.evotech.hd.cloud.mqtt.enums;
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData;
import java.util.Arrays;
public enum EventFunctionTypesEnum {

View File

@ -1,10 +1,10 @@
package com.evotech.hd.cloud.mqtt.message;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
public class MessageTopic implements Serializable {

View File

@ -1,9 +1,9 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery;
import java.util.List;
import lombok.Data;
import java.util.List;
@Data
public class BatteryInfoResponse {

View File

@ -1,9 +1,9 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo;
import java.util.List;
import lombok.Data;
import java.util.List;
/**
* 云端回复站端用户车辆数据
*/

View File

@ -1,9 +1,9 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.req.order;
import java.io.Serializable;
import lombok.Data;
import java.io.Serializable;
@Data
public class OrderByPlateNumResponse implements Serializable {

View File

@ -1,9 +1,9 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.req.order;
import java.util.Date;
import lombok.Data;
import java.util.Date;
@Data
public class OrderData {

View File

@ -1,9 +1,9 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.req.preorder;
import java.util.Date;
import lombok.Data;
import java.util.Date;
/**
* 站端预约订单
*/

View File

@ -1,11 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.state;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 订单状态

View File

@ -1,10 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.state;
import java.math.BigDecimal;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OrderStatusData {

View File

@ -1,11 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.newer.state;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 换电步骤

View File

@ -1,6 +1,7 @@
package com.evotech.hd.cloud.mqtt.message.dto.older;
import lombok.Data;
import java.util.Date;
import java.util.List;

View File

@ -1,11 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.older.req;
import lombok.Data;
import java.util.List;
import com.evotech.hd.cloud.mqtt.message.dto.older.RateMode;
import com.evotech.hd.cloud.mqtt.message.dto.older.RateModeSync;
import lombok.Data;
import java.util.List;
@Data
public class RateModeSyncReq{

View File

@ -1,11 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.older.req;
import com.evotech.hd.cloud.mqtt.message.dto.older.VehicleSync;
import lombok.Data;
import java.util.List;
import com.evotech.hd.cloud.mqtt.message.dto.older.VehicleSync;
@Data
public class VehicleSyncReq{
// 1 添加 VIN存在时更新数据 2删除 3更新VIN不存在是失败 4全部同步 删除站端 存储本次下发

View File

@ -1,11 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.older.state;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
import io.swagger.v3.oas.annotations.media.Schema;
@Data
@Schema(name = "电池箱实时信息", hidden = true)
public class ChargingData {

View File

@ -1,10 +1,10 @@
package com.evotech.hd.cloud.mqtt.message.dto.older.state;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
/**
* @author zls
* @date 2023-12-03

View File

@ -1,15 +1,14 @@
package com.evotech.hd.cloud.mqtt.message.handle;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Service;
import cn.hutool.json.JSONObject;
import com.evotech.hd.cloud.entity.MessageMqtt;
import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.service.MessageMqttService;
import cn.hutool.json.JSONObject;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Service;
/**
* 请求密钥 处理

View File

@ -1,189 +1,134 @@
package com.evotech.hd.cloud.mqtt.message.handle;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.cloud.dao.BatteryStationDcDao;
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao;
import com.evotech.hd.cloud.dao.VehicleInfoDao;
import com.evotech.hd.cloud.mqtt.enums.ConfirmFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.message.dto.newer.confirm.SwapCompleteConfirm;
import com.evotech.hd.cloud.mqtt.message.dto.newer.event.SwapComplete;
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.service.BatteryStationDcService;
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
import com.evotech.hd.common.core.entity.cloud.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import cn.hutool.json.JSONObject;
import jakarta.annotation.Resource;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event.MqttStrategyEventExchangeProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.Objects;
import java.util.Map;
@Service
@Slf4j
public class EventMessageService {
@Resource
private MessageUtilService messageUtilService;
@Resource
private OrderSwapBatteryDao orderSwapBatteryDao;
@Resource
private OrderSwapBatteryStepDao orderSwapBatteryStepDao;
@Resource
private BatteryStationDcService batteryStationDcService;
@Resource
private HDStepDictComponent hdStepDictComponent;
@Resource
private VehicleInfoDao vehicleInfoDao;
@Resource
private BatteryStationDcDao batteryStationDcDao;
@Resource
private OrderSwapBatteryService orderSwapBatteryService;
@Autowired
private ApplicationContext applicationContext;
/**
* event消息 处理
*/
public void event(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
switch (Objects.requireNonNull(EventFunctionTypesEnum.getFunctionType(header.getFunction()))) {
case FUN_WARN_RECORD:
// TODO 写预警记录表
// TODO 回复 confirm 消息
// TODO 业务处理
break;
// 站端反馈订单状态
case FUN_ORDEREVENT:
SwapComplete orderStatus = JSONUtil.toBean(dataBody, SwapComplete.class);
OrderStatusData statusData = JSONUtil.toBean(dataBody.getJSONObject("statusData"), OrderStatusData.class);
// 订单状态更新处理
handleOrderStatus(orderStatus, statusData);
Date d = new Date();
//回复 confirm 消息
SwapCompleteConfirm swapRecordConfirm = new SwapCompleteConfirm();
swapRecordConfirm.setAckStatus(1);
swapRecordConfirm.setOrderNo(orderStatus.getOrderNo());
swapRecordConfirm.setError("");
topic.setDataDirection("M2S");
topic.setMessageType(MqttMessageTypeEnum.CONFIRM.getType());
header.setFunction(ConfirmFunctionTypesEnum.FUN_SWAP_RECORD_CONF.getReFunction());
header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER));
log.info("\r\n=====>>>回复站端收到换电完成--MQTT发送到消息主题{},头部信息:{}订单编码;{},message:{}", topic,header, orderStatus.getOrderNo(),JSONUtil.parseObj(swapRecordConfirm, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(swapRecordConfirm, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
break;
default:
break;
Map<String, MqttStrategyEventExchangeProcessor> mqttEventExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyEventExchangeProcessor.class);
if(CollectionUtils.isEmpty(mqttEventExchangeProcessorMap)){
log.error("mqttEventExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
}
for (MqttStrategyEventExchangeProcessor processor : mqttEventExchangeProcessorMap.values()) {
if(processor.accept(header.getFunction())){
processor.exchange(topic, header, dataBody);
}
}
}
/**
* 订单最终状态的更新
* @param orderStatus
* @param statusData
*/
private void handleOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) {
// 换电步骤添加最后一条
if (orderStatus.getStatus() == 3){
OrderSwapBattery osb = alterOrderStatus(orderStatus, statusData);
OrderSwapBatteryStep step = new OrderSwapBatteryStep();
step.setOrderNo(orderStatus.getOrderNo());
step.setStep(8);
step.setStepTime(orderStatus.getStatusTime());
step.setCtime(new Date());
step.setCreater("SYS");
step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
orderSwapBatteryStepDao.insert(step);
// 修改车上电池编码
VehicleInfo vi = new VehicleInfo();
vi.setBatCode(statusData.getRentBatCode());
vi.setBatSoc(statusData.getRentBatSoc());
vehicleInfoDao.update(vi, new QueryWrapper<VehicleInfo>().eq("plate_num", osb.getPlateNum()));
// 修改2块电池的信息
BatteryStationDc dc1 = new BatteryStationDc();
BatteryStationDc dc2 = new BatteryStationDc();
dc1.setStatus(1);
dc1.setSourceFrom(1);
dc1.setPointType(2);
dc1.setPointCode(osb.getPlateNum());
dc1.setPointName(osb.getPlateNum());
dc1.setSoc(statusData.getRentBatSoc());
dc1.setDccNo(0);
batteryStationDcDao.update(dc1, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getRentBatCode()));
dc2.setStatus(2);
dc2.setSourceFrom(1);
dc2.setPointType(1);
dc2.setPointCode(osb.getStationCode());
dc2.setPointName(osb.getStationName());
dc2.setSoc(statusData.getReturnBatSoc());
dc2.setDccNo(statusData.getReturnBatNo());
batteryStationDcDao.update(dc2, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getReturnBatCode()));
// 添加2块电池的溯源记录
addBatteryTrace(orderStatus, statusData, osb);
//计算费用方式
log.info("\r\n=====>>>订单状态更新处理订单状态开始结算:{},{}",orderStatus.getOrderNo(),orderStatus.getStatus() );
//费用结算
orderSwapBatteryService.calculateCost1(orderStatus.getOrderNo(), statusData);
}
}
/**
* 修改订单状态方法
*
* @param orderStatus
* @param statusData
* @return
*/
private OrderSwapBattery alterOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) {
OrderSwapBattery osb = orderSwapBatteryDao.selectOne(new QueryWrapper<OrderSwapBattery>().eq("order_no", orderStatus.getOrderNo()));
osb.setStatus(orderStatus.getStatus());
if (orderStatus.getStatus() == 3) {
osb.setServiceTimeEnd(orderStatus.getStatusTime());
BeanUtils.copyProperties(statusData, osb);
}
osb.setUptime(null);
orderSwapBatteryDao.updateById(osb);
return osb;
}
/**
* 添加电池轨迹记录
*
* @param orderStatus
* @param statusData
* @param osb
*/
private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, OrderSwapBattery osb) {
BatteryTrace bt1 = new BatteryTrace();
bt1.setOrderNo(orderStatus.getOrderNo());
bt1.setBatCode(statusData.getRentBatCode());
bt1.setSoc(statusData.getRentBatSoc());
bt1.setBeginTime(orderStatus.getStatusTime());
bt1.setPointType(2);
bt1.setPointCode(osb.getPlateNum());
bt1.setPointName(osb.getPlateNum());
bt1.setCreater("SYS");
BatteryTrace bt2 = new BatteryTrace();
BeanUtils.copyProperties(bt1, bt2);
bt2.setBatCode(statusData.getReturnBatCode());
bt2.setSoc(statusData.getRentBatSoc());
bt2.setPointType(1);
bt2.setPointCode(osb.getStationCode());
bt2.setPointName(osb.getStationName());
batteryStationDcService.addTrace(bt1);
batteryStationDcService.addTrace(bt2);
}
// /**
// * 订单最终状态的更新
// * @param orderStatus
// * @param statusData
// */
// private void handleOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) {
// // 换电步骤添加最后一条
// if (orderStatus.getStatus() == 3){
// OrderSwapBattery osb = alterOrderStatus(orderStatus, statusData);
// OrderSwapBatteryStep step = new OrderSwapBatteryStep();
// step.setOrderNo(orderStatus.getOrderNo());
// step.setStep(8);
// step.setStepTime(orderStatus.getStatusTime());
// step.setCtime(new Date());
// step.setCreater("SYS");
// step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
// orderSwapBatteryStepDao.insert(step);
// // 修改车上电池编码
// VehicleInfo vi = new VehicleInfo();
// vi.setBatCode(statusData.getRentBatCode());
// vi.setBatSoc(statusData.getRentBatSoc());
// vehicleInfoDao.update(vi, new QueryWrapper<VehicleInfo>().eq("plate_num", osb.getPlateNum()));
// // 修改2块电池的信息
// BatteryStationDc dc1 = new BatteryStationDc();
// BatteryStationDc dc2 = new BatteryStationDc();
// dc1.setStatus(1);
// dc1.setSourceFrom(1);
// dc1.setPointType(2);
// dc1.setPointCode(osb.getPlateNum());
// dc1.setPointName(osb.getPlateNum());
// dc1.setSoc(statusData.getRentBatSoc());
// dc1.setDccNo(0);
// batteryStationDcDao.update(dc1, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getRentBatCode()));
// dc2.setStatus(2);
// dc2.setSourceFrom(1);
// dc2.setPointType(1);
// dc2.setPointCode(osb.getStationCode());
// dc2.setPointName(osb.getStationName());
// dc2.setSoc(statusData.getReturnBatSoc());
// dc2.setDccNo(statusData.getReturnBatNo());
// batteryStationDcDao.update(dc2, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getReturnBatCode()));
// // 添加2块电池的溯源记录
// addBatteryTrace(orderStatus, statusData, osb);
// //计算费用方式
// log.info("\r\n=====>>>订单状态更新处理订单状态开始结算:{},{}",orderStatus.getOrderNo(),orderStatus.getStatus() );
// //费用结算
// orderSwapBatteryService.calculateCost1(orderStatus.getOrderNo(), statusData);
//
// }
// }
// /**
// * 修改订单状态方法
// *
// * @param orderStatus
// * @param statusData
// * @return
// */
// private OrderSwapBattery alterOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) {
// OrderSwapBattery osb = orderSwapBatteryDao.selectOne(new QueryWrapper<OrderSwapBattery>().eq("order_no", orderStatus.getOrderNo()));
// osb.setStatus(orderStatus.getStatus());
// if (orderStatus.getStatus() == 3) {
// osb.setServiceTimeEnd(orderStatus.getStatusTime());
// BeanUtils.copyProperties(statusData, osb);
// }
// osb.setUptime(null);
// orderSwapBatteryDao.updateById(osb);
// return osb;
// }
// /**
// * 添加电池轨迹记录
// *
// * @param orderStatus
// * @param statusData
// * @param osb
// */
// private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, OrderSwapBattery osb) {
// BatteryTrace bt1 = new BatteryTrace();
// bt1.setOrderNo(orderStatus.getOrderNo());
// bt1.setBatCode(statusData.getRentBatCode());
// bt1.setSoc(statusData.getRentBatSoc());
// bt1.setBeginTime(orderStatus.getStatusTime());
// bt1.setPointType(2);
// bt1.setPointCode(osb.getPlateNum());
// bt1.setPointName(osb.getPlateNum());
// bt1.setCreater("SYS");
// BatteryTrace bt2 = new BatteryTrace();
// BeanUtils.copyProperties(bt1, bt2);
// bt2.setBatCode(statusData.getReturnBatCode());
// bt2.setSoc(statusData.getRentBatSoc());
// bt2.setPointType(1);
// bt2.setPointCode(osb.getStationCode());
// bt2.setPointName(osb.getStationName());
// batteryStationDcService.addTrace(bt1);
// batteryStationDcService.addTrace(bt2);
// }
}

View File

@ -1,15 +1,13 @@
package com.evotech.hd.cloud.mqtt.message.handle;
import java.util.Date;
import cn.hutool.core.date.DateUtil;
import com.evotech.hd.cloud.mqtt.config.MqttPublishMessage;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import jakarta.annotation.Resource;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Service;
import com.evotech.hd.cloud.mqtt.config.MqttPublishMessage;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import java.util.Date;
/**

View File

@ -46,7 +46,7 @@ public class MessageUtilService {
@Resource
private MqttPublishMessage publishMessage;
/**
* 记录MQTT消息

View File

@ -1,14 +1,12 @@
package com.evotech.hd.cloud.mqtt.message.handle;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Service;
import cn.hutool.json.JSONObject;
import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import cn.hutool.json.JSONObject;
import jakarta.annotation.Resource;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Service;
/**
* Mqtt消息处理
@ -57,7 +55,6 @@ public class MqttMessageHandleService {
// 3.2 分类处理
// 3.2.1 state
if (MqttMessageTypeEnum.STATE.getType().equals(topic.getMessageType())) {
stateMessageService.state(topic, header, dataBody);
return;
}

View File

@ -2,17 +2,9 @@ package com.evotech.hd.cloud.mqtt.message.handle;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.evotech.hd.cloud.dao.BatteryStationDcDao;
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao;
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.processor.strategy.MqttStrategyExchangeProcessor;
import com.evotech.hd.cloud.service.WechatUserService;
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
import com.evotech.hd.common.redis.utils.RedisUtil;
import jakarta.annotation.Resource;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request.MqttStrategyRequestExchangeProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
@ -21,7 +13,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Map;
import java.util.Objects;
/**
* request消息 处理
@ -29,318 +20,20 @@ import java.util.Objects;
@Service
@Slf4j
public class RequestMessageService {
@Resource
private WechatUserService wechatUserService;
@Resource
private VehicleWechatUserRelationDao vehicleWechatUserRelationDao;
@Resource
private MessageUtilService messageUtilService;
@Resource
private BatteryStationDcDao batteryStationDcDao;
// @Resource
// private OrderSwapBatteryDao orderSwapBatteryDao;
@Resource
private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
// @Resource
// private OrderSwapBatteryService orderSwapBatteryService;
@Resource
private RedisUtil redisUtil;
@Autowired
private ApplicationContext applicationContext;
@Async("taskExecutor")
public void request(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
switch (Objects.requireNonNull(RequestFunctionTypesEnum.getFunctionType(header.getFunction()))) {
// case FUN_CARINFO:
// CarInfoReq carInfoReq = JSONUtil.toBean(dataBody, CarInfoReq.class);
// handleCarInfo(topic, header, carInfoReq);
// break;
// case FUN_BATTERYINFO:
// BatteryInfoReq batteryInfoReq = JSONUtil.toBean(dataBody, BatteryInfoReq.class);
// handleBatteryInfo(topic, header, batteryInfoReq);
// break;
// case FUN_PREORDER:
// OrderSwapBatteryPre orderSwapBatteryPre = JSONUtil.toBean(dataBody, OrderSwapBatteryPre.class);
// handlOrderSwapBatteryPre(topic,header,orderSwapBatteryPre);
// break;
// case FUN_ORDERBYPLATENUM:
// OrderByPlateNumReq orderByPlateNumReq = JSONUtil.toBean(dataBody, OrderByPlateNumReq.class);
// handleOrderByPlateNum(topic, header, orderByPlateNumReq);
// break;
// case FUN_CANCELORDER:
// CancelOrderReq cancelOrder = JSONUtil.toBean(dataBody, CancelOrderReq.class);
// handlOrderCancel(topic,header,cancelOrder);
// break;
case FUN_STARTSWAP: //没搞明白干啥用了, 暂时不动
BatterySwapResponse battery = JSONUtil.toBean(dataBody, BatterySwapResponse.class);
handlStartSwap(topic,header,battery);
break;
default:
Map<String, MqttStrategyExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
Map<String, MqttStrategyRequestExchangeProcessor> mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyRequestExchangeProcessor.class);
if(CollectionUtils.isEmpty(mqttMessageRequestExchangeProcessorMap)){
log.error("mqttRequestExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
}
for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
for (MqttStrategyRequestExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) {
if(processor.accept(header.getFunction())){
processor.exchange(topic, header, dataBody);
}
}
break;
}
}
/**
* 站端回复开始换电
* @param topic
* @param header
* @param battery
*/
private void handlStartSwap(MessageTopic topic, MqttMessageHeader header, BatterySwapResponse battery) {
// 校验 battery.getOrderId() 是否有效
String orderNo = battery.getOrderNo();
if (orderNo == null || orderNo.isEmpty()) {
log.error("电池订单编码无效: battery={}", battery);
throw new IllegalArgumentException("电池订单orderNo无效");
}
// 定义 Redis 过期时间5分钟
final int REDIS_EXPIRE_TIME_IN_SECONDS = 60 * 5; // 5分钟
// Redis 键值
String redisKey = "battery:" + orderNo;
// 将响应存到 Redis
redisUtil.set(redisKey, battery, REDIS_EXPIRE_TIME_IN_SECONDS);
// 记录成功日志
log.info("换电响应已成功存储到 Redis: key={}", redisKey);
}
/**
* 站端取消订单
* @param topic
* @param header
* @param cancelOrder
*/
// private void handlOrderCancel(MessageTopic topic, MqttMessageHeader header, CancelOrderReq cancelOrder) {
// Date d = new Date();
// CancelOrderResponse response = new CancelOrderResponse();
//
// Result<Integer> integerResult = orderSwapBatteryService.cancelOrder(cancelOrder.getOrderNo(), 9);
// if (integerResult.getStatus()==0){
// response.setCode(0);
// response.setMsg(integerResult.getMsg());
// response.setOrderNo(cancelOrder.getOrderNo());
// }else {
// response.setCode(1);
// response.setMsg(integerResult.getMsg());
// response.setOrderNo("OK");
// }
// // 发送
// topic.setDataDirection("M2S");
// topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType());
// header.setFunction(RequestFunctionTypesEnum.FUN_CANCELORDER.getReFunction());
// header.setTimeStamp(DateUtil.format(d, DatePattern.NORM_DATETIME_FORMATTER));
// log.info("\r\n=====>>>站端取消订单--MQTT发送到消息主题{},头部信息:{}订单编码;{},message:{}", topic,header, cancelOrder.getOrderNo(),JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// }
// /**
// * 站端添加预约单
// * @param topic
// * @param header
// * @param orderSwapBatteryPre
// */
// private void handlOrderSwapBatteryPre(MessageTopic topic, MqttMessageHeader header, OrderSwapBatteryPre orderSwapBatteryPre) {
// OrdeSwapBatteryPreRespose response = new OrdeSwapBatteryPreRespose();
// Date d = new Date();
// // 1. 基础字段校验
// if (validateRequiredFields(orderSwapBatteryPre)) {
// // 返回错误消息
// response.setStationPreOrderId(orderSwapBatteryPre.getSourceId());
// response.setMsg("预约信息不完整");
// response.setCode(0);
// }else {
// //添加预约单
// WechatUser wechatUser =wechatUserService.selectUcode(orderSwapBatteryPre.getPhone(),orderSwapBatteryPre.getUname());
// //查询用户编码
// orderSwapBatteryPre.setUcode(wechatUser.getWuid());
// orderSwapBatteryPre.setSource(3);
// Result<Integer> integerResult = orderSwapBatteryService.addPre(orderSwapBatteryPre);
// //添加失败情况
// if (integerResult.getStatus()==0){
// response.setStationPreOrderId(orderSwapBatteryPre.getSourceId());
// //返回失败状态
// response.setMsg(integerResult.getMsg());
// response.setCode(0);
// }else{
// response.setStationPreOrderId(orderSwapBatteryPre.getSourceId());
// response.setCode(1);
// response.setMsg("OK");
// }
// }
// // 发送
// topic.setDataDirection("M2S");
// topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType());
// header.setFunction(RequestFunctionTypesEnum.FUN_PREORDER.getReFunction());
// header.setTimeStamp(DateUtil.format(d, DatePattern.NORM_DATETIME_FORMATTER));
// log.info("\r\n=====>>>站端添加预约单--MQTT发送到消息主题{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// }
/**
* OrderByPlateNum请求处理
* @param topic
* @param header
* @param orderByPlateNumReq
*/
// private void handleOrderByPlateNum(MessageTopic topic, MqttMessageHeader header, OrderByPlateNumReq orderByPlateNumReq) {
// OrderByPlateNumResponse response = new OrderByPlateNumResponse();
// Date d = new Date();
// // 查预约
// OrderSwapBatteryPre osbp = orderSwapBatteryPreDao.selectOne(new QueryWrapper<OrderSwapBatteryPre>()
// .eq("plate_num", orderByPlateNumReq.getPlateNum())
// .eq("station_code", orderByPlateNumReq.getStationCode())
// .eq("status", 1)
// .eq("swap_day", DateUtil.format(d, DatePattern.PURE_DATE_FORMATTER))
// .last("limit 1"));
// if (osbp == null) {
// response.setOrderRequestId(orderByPlateNumReq.getOrderRequestId());
// response.setCode(0);
// response.setMsg("车辆未预约,请扫码进入");
// } else {
// OrderSwapBattery osb = orderSwapBatteryDao.selectOne(new QueryWrapper<OrderSwapBattery>()
// .eq("plate_num", orderByPlateNumReq.getPlateNum())
// .eq("station_code", orderByPlateNumReq.getStationCode())
// .eq("order_pre_id", osbp.getPkId())
// .eq("status", 1));
// if (osb == null) {
// // 生成订单
// osb = new OrderSwapBattery();
// osb.setOrderNo(CommonUtil.swapBatteryOrderNo(orderByPlateNumReq.getStationCode()));
// osb.setOrderPreId(osbp.getPkId());
// osb.setOrderPrePhone(osbp.getPhone());
// osb.setOrderPreUid(osbp.getUcode());
// osb.setOrderPreUname(osbp.getUname());
// osb.setPlateNum(osbp.getPlateNum());
// osb.setOrderTime(d);
// osb.setOrderType(1);
// osb.setStatus(1);
// osb.setStationCode(osbp.getStationCode());
// osb.setStationName(osbp.getStationName());
// // TODO 查询换电站信息拿到计费方式放到订单信息中
//
//
//// // 加上费用标准 - 移到订单服务中了
//// osb = orderBasicFeeComponent.orderBasicFee(osb);
// log.info("\r\n=====>>>生成订单信息--MQTT发送到消息主题{},订单编码:{}", topic,CommonUtil.swapBatteryOrderNo(orderByPlateNumReq.getStationCode()));
// orderSwapBatteryService.add(osb);
// }
// //走到此处, 证明上面逻辑没有问题, 需要删除预约单过期标识
// redisUtil.del("preorder:expire:"+osbp.getPkId());
// // 返回数据
// OrderData od = new OrderData();
// BeanUtils.copyProperties(osb, od);
// response.setOrderRequestId(orderByPlateNumReq.getOrderRequestId());
// response.setCode(1);
// response.setMsg("OK");
// response.setOrderData(od);
// }
// // 发送
// topic.setDataDirection("M2S");
// topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType());
// header.setFunction(RequestFunctionTypesEnum.FUN_ORDERBYPLATENUM.getReFunction());
// header.setTimeStamp(DateUtil.format(d, DatePattern.NORM_DATETIME_FORMATTER));
// log.info("\r\n=====>>>站端用车牌号查询订单--MQTT发送到消息主题{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// }
// /**
// * BatteryInfo请求处理
// * @param topic
// * @param header
// * @param batteryInfoReq
// */
// private void handleBatteryInfo(MessageTopic topic, MqttMessageHeader header, BatteryInfoReq batteryInfoReq) {
// String batCode = batteryInfoReq.getBatCode();
// int pageNo = 0;
// int pageSize = 500;
// Page<BatteryStationDc> page = new Page<BatteryStationDc>(pageNo, pageSize);
// do {
// pageNo += 1;
// page = new Page<BatteryStationDc>(pageNo, pageSize);
// page = batteryStationDcDao.selectPage(page, new QueryWrapper<BatteryStationDc>().eq(StringUtils.hasText(batCode), "bat_code", batCode));
// BatteryInfoResponse response = new BatteryInfoResponse();
// response.setBatteryInfoRequestId(batteryInfoReq.getBatteryInfoRequestId());
// response.setPageNo(Integer.valueOf(page.getCurrent() + ""));
// response.setPageSize(Integer.valueOf(page.getSize() + ""));
// response.setTotal(Integer.valueOf(page.getTotal() + ""));
// response.setIsOver(page.getCurrent() < page.getPages()? 0 : 1);
// List<BatteryData> list = new ArrayList<BatteryData>();
// if (page.getCurrent() > 0) {
// list = page.getRecords().stream().map(i -> {
// BatteryData bd = new BatteryData();
// BeanUtils.copyProperties(i, bd);
// return bd;
// }).toList();
// response.setBatteryData(list);
// }
// topic.setDataDirection("M2S");
// topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType());
// header.setFunction(RequestFunctionTypesEnum.FUN_BATTERYINFO.getReFunction());
// header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER));
// log.info("\r\n=====>>>站端请求电池数据--MQTT发送到消息主题{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// } while (page.getCurrent() < page.getPages());
//
// }
// /**
// * CarInfo请求处理
// * @param topic
// * @param header
// * @param carInfoReq
// */
// private void handleCarInfo(MessageTopic topic, MqttMessageHeader header, CarInfoReq carInfoReq) {
// String plateNum = carInfoReq.getPlateNum();
// int pageNo = 0;
// int pageSize = 500;
// Page<VehicleWechatUserRelation> page = new Page<VehicleWechatUserRelation>(pageNo, pageSize);
// do {
// pageNo += 1;
// page = new Page<VehicleWechatUserRelation>(pageNo, pageSize);
// page = vehicleWechatUserRelationDao.selectPage(page, new QueryWrapper<VehicleWechatUserRelation>()
// .eq(StringUtils.hasText(plateNum), "plate_num", plateNum));
// CarInfoResponse response = new CarInfoResponse();
// response.setCarInfoRequestId(carInfoReq.getCarInfoRequestId());
// response.setPageNo(Integer.valueOf(page.getCurrent() + ""));
// response.setPageSize(Integer.valueOf(page.getSize() + ""));
// response.setTotal(Integer.valueOf(page.getTotal() + ""));
// response.setIsOver(page.getCurrent() < page.getPages()? 0 : 1);
// List<VehicleData> list = new ArrayList<VehicleData>();
// if (page.getCurrent() > 0) {
// list = page.getRecords().stream().map(i -> {
// VehicleData vd = new VehicleData();
// BeanUtils.copyProperties(i, vd);
// return vd;
// }).toList();
// response.setVehicleData(list);
// }
// topic.setDataDirection("M2S");
// topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType());
// header.setFunction(RequestFunctionTypesEnum.FUN_CARINFO.getReFunction());
// header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER));
// log.info("\r\n=====>>>站端请求用户车辆数据--MQTT发送到消息主题{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
// } while (page.getCurrent() < page.getPages());
// }
// private boolean validateRequiredFields(OrderSwapBatteryPre order) {
// return Stream.of(
// order.getPlateNum(),
// order.getPhone(),
// order.getStationCode(),
// order.getStationName(),
// order.getUname(),
// order.getSwapDay(),
// order.getSwapDuration(),
// order.getReservationTime()
// ).anyMatch(StrUtil::isBlankIfStr);
// }
}

View File

@ -2,35 +2,17 @@ package com.evotech.hd.cloud.mqtt.message.handle;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao;
import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao;
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
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.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.processor.strategy.MqttStrategyExchangeProcessor;
import com.evotech.hd.cloud.service.BatteryStationDcService;
import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao;
import com.evotech.hd.common.core.entity.cloud.BatteryTrace;
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 jakarta.annotation.Resource;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStrategyStateExchangeProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
/**
* state消息 处理
@ -39,203 +21,19 @@ import java.util.Objects;
@Slf4j
public class StateMessageService {
@Resource
private OrderSwapBatteryDao orderSwapBatteryDao;
@Resource
private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
@Resource
private OrderSwapBatteryStepDao orderSwapBatteryStepDao;
@Resource
private BatteryStationDcService batteryStationDcService;
@Resource
private HDStepDictComponent hdStepDictComponent;
@Autowired
private ApplicationContext applicationContext;
@Async("taskExecutor")
public void state(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
switch (Objects.requireNonNull(StateFunctionTypesEnum.getFunctionType(header.getFunction()))) {
// 站端反馈订单状态
case FUN_ORDERSTATUS:
OrderStatus orderStatus = JSONUtil.toBean(dataBody, OrderStatus.class);
OrderStatusData statusData = JSONUtil.toBean(dataBody.getJSONObject("statusData"), OrderStatusData.class);
// 订单状态更新处理
handleOrderStatus(orderStatus);
break;
// 站端反馈换电步骤
case FUN_SWAPSTEP:
SwapStep swapStep = JSONUtil.toBean(dataBody, SwapStep.class);
// 记录换电步骤
OrderSwapBatteryStep step = new OrderSwapBatteryStep();
BeanUtils.copyProperties(swapStep, step);
step.setCtime(new Date());
step.setCreater("SYS");
step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
log.info("\r\n=====>>>站端反馈换电步骤--MQTT收到消息主题{},换电步骤名称:{}",topic,hdStepDictComponent.hdStepDictName(step.getStep()) );
orderSwapBatteryStepDao.insert(step);
break;
case FUN_TEST:
break;
default:
Map<String, MqttStrategyExchangeProcessor> mqttRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class);
if(CollectionUtils.isEmpty(mqttRequestExchangeProcessorMap)){
log.error("mqttRequestExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
}
for (MqttStrategyExchangeProcessor processor : mqttRequestExchangeProcessorMap.values()) {
if(processor.accept(header.getFunction())){
processor.exchange(topic, header, dataBody);
}
}
break;
Map<String, MqttStrategyStateExchangeProcessor> mqttStateExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyStateExchangeProcessor.class);
if(CollectionUtils.isEmpty(mqttStateExchangeProcessorMap)){
log.error("mqttStateExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
}
}
/**
* 订单状态更新处理
* @param orderStatus
*/
private void handleOrderStatus(OrderStatus orderStatus) {
switch (orderStatus.getStatus()) {
case 2:
orderStatus2(orderStatus);
break;
case 3:
/* // 修改订单状态和数据
OrderSwapBattery osb = alterOrderStatus(orderStatus, statusData);
// 换电步骤添加最后一条
OrderSwapBatteryStep step = new OrderSwapBatteryStep();
step.setOrderNo(orderStatus.getOrderNo());
step.setStep(8);
step.setStepTime(orderStatus.getStatusTime());
step.setCtime(new Date());
step.setCreater("SYS");
step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
orderSwapBatteryStepDao.insert(step);
//计算费用方式
log.info("\r\n=====>>>订单状态更新处理订单状态开始结算:{},{}",orderStatus.getOrderNo(),orderStatus.getStatus() );
//费用结算
orderSwapBatteryService.calculateCost1(orderStatus.getOrderNo(), statusData);
// 修改车上电池编码
VehicleInfo vi = new VehicleInfo();
vi.setBatCode(statusData.getRentBatCode());
vi.setBatSoc(statusData.getRentBatSoc());
vehicleInfoDao.update(vi, new QueryWrapper<VehicleInfo>().eq("plate_num", osb.getPlateNum()));
// 修改2块电池的信息
BatteryStationDc dc1 = new BatteryStationDc();
BatteryStationDc dc2 = new BatteryStationDc();
dc1.setStatus(1);
dc1.setPointType(2);
dc1.setPointCode(osb.getPlateNum());
dc1.setPointName(osb.getPlateNum());
dc1.setSoc(statusData.getRentBatSoc());
dc1.setDccNo(0);
batteryStationDcDao.update(dc1,
new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getRentBatCode()));
dc2.setStatus(2);
dc2.setPointType(1);
dc2.setPointCode(osb.getStationCode());
dc2.setPointName(osb.getStationName());
dc2.setSoc(statusData.getReturnBatSoc());
dc2.setDccNo(statusData.getReturnBatNo());
batteryStationDcDao.update(dc2, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getReturnBatCode()));
// 添加2块电池的溯源记录
addBatteryTrace(orderStatus, statusData, osb);
break;*/
case 4:
// 修改订单状态
alterOrderStatus(orderStatus);
break;
/* case 5:
// 修改订单状态和数据
alterOrderStatus(orderStatus, statusData);
// 修改电池状态
BatteryStationDc dc = new BatteryStationDc();
dc.setStatus(3);
dc.setSoc(statusData.getSoc());
batteryStationDcDao.update(dc, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getBatCode()));
break;*/
default:
break;
for (MqttStrategyStateExchangeProcessor processor : mqttStateExchangeProcessorMap.values()) {
if(processor.accept(header.getFunction())){
processor.exchange(topic, header, dataBody);
}
}
}
/**
* 添加电池轨迹记录
*
* @param orderStatus
* @param statusData
* @param osb
*/
private void addBatteryTrace(OrderStatus orderStatus, OrderStatusData statusData, OrderSwapBattery osb) {
BatteryTrace bt1 = new BatteryTrace();
bt1.setOrderNo(orderStatus.getOrderNo());
bt1.setBatCode(statusData.getRentBatCode());
bt1.setSoc(statusData.getRentBatSoc());
bt1.setBeginTime(orderStatus.getStatusTime());
bt1.setPointType(2);
bt1.setPointCode(osb.getPlateNum());
bt1.setPointName(osb.getPlateNum());
bt1.setCreater("SYS");
BatteryTrace bt2 = new BatteryTrace();
BeanUtils.copyProperties(bt1, bt2);
bt2.setBatCode(statusData.getReturnBatCode());
bt2.setSoc(statusData.getRentBatSoc());
bt2.setPointType(1);
bt2.setPointCode(osb.getStationCode());
bt2.setPointName(osb.getStationName());
batteryStationDcService.addTrace(bt1);
batteryStationDcService.addTrace(bt2);
}
/**
* 换电开始时的处理
*
* @param orderStatus
*/
private void orderStatus2(OrderStatus orderStatus) {
// 修改订单状态
OrderSwapBattery osb = alterOrderStatus(orderStatus);
// 添加换电步骤1-车辆进站
OrderSwapBatteryStep step = new OrderSwapBatteryStep();
step.setOrderNo(orderStatus.getOrderNo());
step.setStep(1);
step.setStepTime(orderStatus.getStatusTime());
step.setCtime(new Date());
step.setCreater("SYS");
step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
orderSwapBatteryStepDao.insert(step);
// 修改预约订单为完成
OrderSwapBatteryPre osbp = new OrderSwapBatteryPre();
osbp.setStatus(2);
osbp.setPkId(osb.getOrderPreId());
orderSwapBatteryPreDao.updateById(osbp);
}
/**
* 修改订单状态方法
*
* @param orderStatus
* @return
*/
private OrderSwapBattery alterOrderStatus(OrderStatus orderStatus) {
OrderSwapBattery osb = orderSwapBatteryDao
.selectOne(new QueryWrapper<OrderSwapBattery>().eq("order_no", orderStatus.getOrderNo()));
osb.setStatus(orderStatus.getStatus());
if (orderStatus.getStatus() == 2) {
osb.setServiceTimeBegin(orderStatus.getStatusTime());
}
if (orderStatus.getStatus() == 4) {
osb.setChargeTimeBegin(orderStatus.getStatusTime());
}
osb.setUptime(new Date());
orderSwapBatteryDao.updateById(osb);
return osb;
}
}

View File

@ -1,7 +1,7 @@
package com.evotech.hd.cloud.mqtt.message.processor.observer.listener;
import com.evotech.hd.cloud.mqtt.message.processor.observer.event.BatteryStationStopServerEvent;
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
import com.evotech.hd.cloud.service.OrderSwapBatteryPreService;
import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService;
import com.evotech.hd.cloud.service.rpc.ResourceService;
import com.evotech.hd.common.core.Dto.ResultUtil;
@ -33,7 +33,7 @@ import java.util.stream.Collectors;
public class BatteryStationStopServerListener {
@Resource
OrderSwapBatteryService orderSwapBatteryService;
OrderSwapBatteryPreService orderSwapBatteryPre;
@Resource
private GZHTemplateMessageService templateMessageService;
@Resource
@ -45,12 +45,12 @@ public class BatteryStationStopServerListener {
//监听站端运营状态状态, 如果不为运营状态
if(!Integer.valueOf(1).equals(batteryStation.getStatus())){
//不是营运状态, 获取当前站点是否存在预约单
List<OrderSwapBatteryPre> preList = orderSwapBatteryService.findOrderSwapBatteryPreList(batteryStation.getCode());
List<OrderSwapBatteryPre> preList = orderSwapBatteryPre.findOrderSwapBatteryPreList(batteryStation.getCode());
Map<String, String> plateNum = new LinkedHashMap<>();
//查询站点是否存在预约单, 存在的话. 通知客户,
if(Collections.isNotEmpty(preList)){
//直接关闭预约单
orderSwapBatteryService.clearOrderSwapBatteryPre(preList.stream().map(OrderSwapBatteryPre::getPkId).collect(Collectors.toList()));
orderSwapBatteryPre.clearOrderSwapBatteryPre(preList.stream().map(com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre::getPkId).collect(Collectors.toList()));
plateNum = preList.stream().collect(Collectors.toMap(OrderSwapBatteryPre::getUcode, OrderSwapBatteryPre::getPlateNum, (k1, k2) -> k1));
}

View File

@ -3,30 +3,31 @@ package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.cloud.entity.order.Order;
import com.evotech.hd.cloud.entity.order.OrderDetail;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum;
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.confirm.SwapCompleteConfirm;
import com.evotech.hd.cloud.mqtt.message.dto.newer.event.SwapComplete;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
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.service.BatteryStationDcService;
import com.evotech.hd.cloud.service.OrderDetailService;
import com.evotech.hd.cloud.service.OrderService;
import com.evotech.hd.cloud.service.*;
import com.evotech.hd.cloud.service.rpc.WechatService;
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
import com.evotech.hd.common.core.entity.cloud.BatteryTrace;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep;
import com.evotech.hd.common.core.entity.cloud.VehicleInfo;
import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.common.core.entity.order.OrderDetail;
import com.evotech.hd.common.core.enums.SwapBatteryStepEnum;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -46,6 +47,16 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE
OrderService orderService;
@Resource
OrderDetailService orderDetailService;
@Resource
private SwapOrderBasicFeeComponent orderBasicFeeComponent;
@Resource
private OrderSwapBatteryStepService orderSwapBatteryStepService;
@Resource
private VehicleService vehicleService;
@Resource
BatteryStationDcService batteryStationDcService;
@Resource
WechatService wechatService;
@Override
public boolean accept(String functionName) {
@ -66,6 +77,7 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE
swapRecordConfirm.setAckStatus(MqttResponse.PUBLIC_SUCCESS);
swapRecordConfirm.setOrderNo(orderStatus.getOrderNo());
} catch (Exception e) {
e.printStackTrace();
log.error("更新订单信息出现错误: {}", e.getMessage());
response.setCode(MqttResponse.PUBLIC_ERROR);
response.setMsg(orderStatus.getOrderNo());
@ -84,174 +96,107 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE
* @param statusData
*/
private void handleOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) {
// 换电步骤添加最后一条
if (orderStatus.getStatus() == 3){
Order order = alterOrderStatus(orderStatus, statusData);
OrderSwapBatteryStep step = new OrderSwapBatteryStep();
step.setOrderNo(orderStatus.getOrderNo());
step.setStep(8);
step.setStepTime(orderStatus.getStatusTime());
step.setCtime(new Date());
step.setCreater("SYS");
step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
orderSwapBatteryStepDao.insert(step);
// 修改车上电池编码
VehicleInfo vi = new VehicleInfo();
vi.setBatCode(statusData.getRentBatCode());
vi.setBatSoc(statusData.getRentBatSoc());
vehicleInfoDao.update(vi, new QueryWrapper<VehicleInfo>().eq("plate_num", osb.getPlateNum()));
// 修改2块电池的信息
BatteryStationDc dc1 = new BatteryStationDc();
BatteryStationDc dc2 = new BatteryStationDc();
dc1.setStatus(1);
dc1.setSourceFrom(1);
dc1.setPointType(2);
dc1.setPointCode(osb.getPlateNum());
dc1.setPointName(osb.getPlateNum());
dc1.setSoc(statusData.getRentBatSoc());
dc1.setDccNo(0);
batteryStationDcDao.update(dc1, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getRentBatCode()));
dc2.setStatus(2);
dc2.setSourceFrom(1);
dc2.setPointType(1);
dc2.setPointCode(osb.getStationCode());
dc2.setPointName(osb.getStationName());
dc2.setSoc(statusData.getReturnBatSoc());
dc2.setDccNo(statusData.getReturnBatNo());
batteryStationDcDao.update(dc2, new QueryWrapper<BatteryStationDc>().eq("bat_code", statusData.getReturnBatCode()));
// 添加2块电池的溯源记录
addBatteryTrace(orderStatus, statusData, osb);
//计算费用方式
log.info("\r\n=====>>>订单状态更新处理订单状态开始结算:{},{}",orderStatus.getOrderNo(),orderStatus.getStatus() );
//费用结算
orderSwapBatteryService.calculateCost1(orderStatus.getOrderNo(), statusData);
}
}
/**
* 修改订单状态方法
*
* @param orderStatus
* @param statusData
* @return
*/
private Order alterOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) {
Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderStatus.getOrderNo()));
if(ObjectUtils.isEmpty(order)){
throw new RuntimeException("未找到订单信息");
}
//更新订单状态
order.setStatus(orderStatus.getStatus());
if (orderStatus.getStatus() == 3 || orderStatus.getStatus() == 5) {
orderService.updateById(order);
//修改订单状态及金额
alterOrderStatus(order, statusData);
//记录换电步骤
alterSwapBatteryStep(orderStatus, statusData, order);
}
/**
* 修改订单状态方法
* @param order
* @param statusData
* @return
*/
private void alterOrderStatus(Order order, OrderStatusData statusData) {
if (order.getStatus() == 3 || order.getStatus() == 5) {
//如果订单是完成. 查询订单详情
OrderDetail orderDetail = orderDetailService.getOne(new LambdaQueryWrapper<OrderDetail>().eq(OrderDetail::getOrderId, order.getPkId()));
// /***
// * 计费类型, 具体参考 HDConstant.OrderConstant.FEE_TYPE_*
// */
// private Integer feeType;
// /***
// * 订单金额 (此金额是当前订单的金额, 不包含基础服务费, 所以不是订单总额)
// */
// private Integer orderFee;
// /***
// * 服务费
// */
// private Integer serviceFee;
// /***
// * 单价()
// */
// private Integer unitPrice;
// /***
// * 服务开始时间
// */
// private Date serviceTimeBegin;
// /***
// * 服务结束时间
// */
// private Date serviceTimeEnd;
// /***
// * 订单开始时间
// */
// private Date orderTimeBegin;
// /***
// * 订单结束时间
// */
// private Date orderTimeEnd;
// /***
// * 费用标准详情
// */
// private String feeStandard;
// /***
// * 耗电量; 如果是soc结算 则是soc的差值, ODO则是里程
// */
// private Double electricityQuantity;
//
// /***
// * 开始充电的电量
// */
// private Double electStart;
// /***
// * 结束充电的电量
// */
// private Double electEnd;
// /***
// * 租借电池包仓位
// */
// private String rentBatNo;
// /***
// * 租借电池包编码
// */
// private String rentBatCode;
// /***
// * 租借电池包SOC
// */
// private Double rentBatSOC;
// /***
// * 归还电池包仓位
// */
// private String returnBatNo;
// /***
// * 归还电池包编码
// */
// private String returnBatCode;
// /***
// * 归还电池包SOC
// */
// private Double returnBatSOC;
// /***
// * 换电模式 HDConstant.OrderConstant.CHANGE_MODE_*
// */
// private Integer changeMode;
// /***
// * 换电车道 HDConstant.OrderConstant.CHANGE_LANE_*
// */
// private Integer changeLane;
order.setServiceTimeEnd(orderStatus.getStatusTime());
BeanUtils.copyProperties(statusData, osb);
orderDetail.setFeeType(HDConstant.OrderConstant.FEE_TYPE_SOC);
orderDetail.setOrderTimeEnd(new Date());
orderDetail.setServiceTimeEnd(new Date());
//copy属性
BeanUtils.copyProperties(statusData, orderDetail);
orderDetail.setRentBatSoc(Double.valueOf(statusData.getRentBatSoc()));
orderDetail.setReturnBatSoc(Double.valueOf(statusData.getReturnBatSoc()));
switch (orderDetail.getFeeType()){
case HDConstant.OrderConstant.FEE_TYPE_DL:
orderDetail.setElectricityQuantity(statusData.getElectAmount().doubleValue());
break;
case HDConstant.OrderConstant.FEE_TYPE_ODO:
// orderDetail.setElectricityQuantity(new BigDecimal(statusData.getSoc()).doubleValue());
break;
case HDConstant.OrderConstant.FEE_TYPE_SOC:
default:
orderDetail.setElectricityQuantity(new BigDecimal(statusData.getRentBatSoc()).subtract(new BigDecimal(statusData.getReturnBatSoc())).doubleValue());
break;
}
//计算费用方式
log.info("\r\n=====>>>订单状态更新处理订单状态开始结算:{},{}",order.getOrderNo(),order.getStatus() );
//计算费用信息
orderBasicFeeComponent.orderBasicFee(order, orderDetail);
//发送换电完成推送
wechatService.sendGzhSwapOrderSuccessMessage(order);
orderService.calculateCost(order);
}
// order.setUptime(null);
orderService.updateById(order);
return order;
}
/**
* 修改订单费用
* @param order
* @param statusData
* @return
*/
private void alterSwapBatteryStep(SwapComplete orderStatus, OrderStatusData statusData, Order order) {
if (orderStatus.getStatus() == 3 || orderStatus.getStatus() == 5){
//生成步骤
orderSwapBatteryStepService.addOrderSwapBatteryStepBySwapComplete(orderStatus.getOrderNo(), SwapBatteryStepEnum.COMPLETED.getKey(), orderStatus.getStatusTime());
// 修改车上电池编码
vehicleService.update(new UpdateWrapper<VehicleInfo>()
.set("bat_code", statusData.getRentBatCode())
.set("bat_soc", statusData.getRentBatSoc())
.eq("plate_num", order.getPlateNum()));
//出租电池信息维护
batteryStationDcService.update(new UpdateWrapper<BatteryStationDc>()
.set("status", HDConstant.DcConstant.STATUS_CZ)
.set("source_from", HDConstant.DcConstant.SOURCE_FROM_STATION)
.set("point_type", HDConstant.DcConstant.POINT_TYPE_CAR)
.set("point_code", order.getPlateNum())
.set("point_name", order.getPlateNum())
.set("dcc_no", 0)
.eq("bat_code", statusData.getRentBatCode()));
//归还电池信息维护
batteryStationDcService.update(new UpdateWrapper<BatteryStationDc>()
.set("status", HDConstant.DcConstant.STATUS_CD)
.set("source_from", HDConstant.DcConstant.SOURCE_FROM_CAR)
.set("point_type", HDConstant.DcConstant.POINT_TYPE_STATION)
.set("point_code", order.getPlateNum())
.set("point_name", order.getPlateNum())
.set("soc", statusData.getReturnBatSoc())
.set("dcc_no", statusData.getReturnBatNo())
.eq("bat_code", statusData.getReturnBatCode()));
// 添加2块电池的溯源记录
addBatteryTrace(orderStatus, statusData, order);
}
}
/**
* 添加电池轨迹记录
*
@ -259,7 +204,7 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE
* @param statusData
* @param osb
*/
private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, OrderSwapBattery osb) {
private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, Order osb) {
BatteryTrace bt1 = new BatteryTrace();
bt1.setOrderNo(orderStatus.getOrderNo());
bt1.setBatCode(statusData.getRentBatCode());

View File

@ -61,6 +61,8 @@ public class MqttRequestBatteryInfoExchangeProcessorImpl implements MqttStrategy
}else {
response.setMsg("未查询到电池信息");
}
logger.info("\r\n站端请求电池数据: MqttRequestBatteryInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_BATTERYINFO, response);
}

View File

@ -0,0 +1,79 @@
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.MqttResponse;
import com.evotech.hd.cloud.service.OrderDetailService;
import com.evotech.hd.cloud.service.OrderService;
import com.evotech.hd.cloud.service.rpc.WechatService;
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.common.core.entity.order.OrderDetail;
import com.evotech.hd.common.core.utils.Collections;
import com.evotech.hd.common.redis.utils.RedisServiceUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 站端回复开始换电通知信息类
*
* @ClassName:MqttRequestBatterySwapExchangeProcessorImpl
* @date: 2025年06月20日 11:29
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Service
@Slf4j
public class MqttRequestBatterySwapExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor{
@Resource
OrderService orderService;
@Resource
OrderDetailService orderDetailService;
@Resource
WechatService wechatService;
@Override
public boolean accept(String functionName) {
return RequestFunctionTypesEnum.FUN_STARTSWAP.getReFunction().equals(functionName);
}
@Override
public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
BatterySwapResponse battery = JSONUtil.toBean(dataBody, BatterySwapResponse.class);
String orderNo = battery.getOrderNo();
if (orderNo == null || orderNo.isEmpty()) {
log.error("电池订单编码无效: battery={}", battery);
throw new IllegalArgumentException("电池订单orderNo无效");
}
// 定义 Redis 过期时间5分钟
final int REDIS_EXPIRE_TIME_IN_SECONDS = 60 * 5; // 5分钟
// Redis 键值
String redisKey = "battery:" + orderNo;
// 将响应存到 Redis
RedisServiceUtils.set(redisKey, battery, REDIS_EXPIRE_TIME_IN_SECONDS);
// 记录成功日志
log.info("换电响应已成功存储到 Redis: key={}", redisKey);
//解开线程
//TODO 待验证
Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
//如果是成功, 创建订单详情
if(MqttResponse.PUBLIC_SUCCESS.equals(battery.getCode())){
OrderDetail detail = new OrderDetail();
detail.setOrderId(order.getPkId());
detail.setServiceTimeBegin(new Date());
detail.setOrderTimeBegin(new Date());
orderDetailService.save(detail);
}else{
wechatService.sendClientMessage(order.getPreWechatId(), JSON.toJSONString(Collections.asMap("code",0, "msg", battery.getMsg())));
}
}
}

View File

@ -43,6 +43,8 @@ public class MqttRequestCancelOrderExchangeProcessorImpl implements MqttStrategy
}else{
response = new MqttResponse().error(JSONUtil.toJsonStr(Collections.asMap("orderNo", orderNo)),updateResult.getMsg());
}
logger.info("\r\n取消订单请求类: MqttRequestCancelOrderExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CANCELORDER, response);
}

View File

@ -57,6 +57,8 @@ public class MqttRequestCarInfoExchangeProcessorImpl implements MqttStrategyRequ
response.setMsg("未查询到车辆信息");
}
}
logger.info("\r\n站端请求车辆信息: MqttRequestCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CARINFO, response);
}

View File

@ -7,7 +7,6 @@ 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.MqttResponse;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
import com.evotech.hd.cloud.service.OrderSwapBatteryPreService;
import com.evotech.hd.cloud.service.WechatUserService;
import com.evotech.hd.common.core.Dto.Result;
@ -66,6 +65,8 @@ public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyReq
}
}
}
logger.info("\r\n站端请求创建预约单类: MqttRequestPreOrderExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_PREORDER, response);
// 发送

View File

@ -6,7 +6,6 @@ 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.MqttResponse;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
import com.evotech.hd.cloud.service.OrderSwapBatteryPreService;
import com.evotech.hd.cloud.service.VehicleService;
import jakarta.annotation.Resource;
@ -66,6 +65,8 @@ public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategy
}else{
response = new MqttResponse().error("参数不全, 没有车牌号信息");
}
logger.info("\r\n接收站端推送的车牌照, 创建车辆信息和预约单: MqttRequestPushCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_PUSH_CAR_INFO, response);
}
}

View File

@ -5,7 +5,6 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evotech.hd.cloud.entity.order.Order;
import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
@ -14,10 +13,13 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderByPlateNumReq;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderData;
import com.evotech.hd.cloud.service.OrderService;
import com.evotech.hd.cloud.service.OrderSwapBatteryPreService;
import com.evotech.hd.cloud.service.OrderSwapBatteryStepService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.common.core.enums.OrderStatusEnums;
import com.evotech.hd.common.core.enums.SwapBatteryStepEnum;
import com.evotech.hd.common.redis.utils.RedisServiceUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -44,7 +46,8 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR
OrderService orderService;
@Resource
OrderSwapBatteryPreService OrderSwapBatteryPreService;
@Resource
private OrderSwapBatteryStepService orderSwapBatteryStepService;
@Override
public boolean accept(String functionName) {
return RequestFunctionTypesEnum.FUN_ORDERBYPLATENUM.getFunction().equals(functionName);
@ -70,7 +73,9 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR
.eq(Order::getStationCode, orderSwapBatteryPre.getStationCode())
.eq(Order::getOrderPreId, orderSwapBatteryPre.getPkId())
.eq(Order::getStatus, OrderStatusEnums.CREATE.getCode()));
if (order == null) {
if (ObjectUtils.isNotEmpty(order)) {
response.setCode(MqttResponse.PUBLIC_SUCCESS);
}else{
Result<Order> result = orderService.addOrderByPre(orderSwapBatteryPre);
//如果不等于成功
if(!CodeMsg.SUCCESS.getCode().equals(result.getCode())){
@ -80,15 +85,20 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR
response.setCode(MqttResponse.PUBLIC_SUCCESS);
}
}
//走到此处, 证明上面逻辑没有问题, 需要删除预约单过期标识
RedisServiceUtils.del("preorder:expire:"+orderSwapBatteryPre.getPkId());
if(MqttResponse.PUBLIC_SUCCESS.equals(response.getCode())){
//走到此处, 证明上面逻辑没有问题, 需要删除预约单过期标识
RedisServiceUtils.del("preorder:expire:"+orderSwapBatteryPre.getPkId());
//更新预约单为到店使用
orderSwapBatteryPre.setStatus(2);
OrderSwapBatteryPreService.updateById(orderSwapBatteryPre);
orderSwapBatteryStepService.addOrderSwapBatteryStepBySwapComplete(order.getOrderNo(), SwapBatteryStepEnum.VEHICLES_ENTER_STATION.getKey(), new Date());
}
// 返回数据
OrderData od = new OrderData();
BeanUtils.copyProperties(order, od);
response.setData(od);
}
logger.info("\r\n站端根据车牌号查询订单: MqttRequestQueryOrderExchangeProcessorImpl=====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_ORDERBYPLATENUM, response);
}

View File

@ -47,6 +47,8 @@ public class MqttRequestStrategyExchangeProcessorImpl implements MqttStrategyReq
log.info("MqttRequestStrategyExchangeProcessorImpl-->>>>> 查询到的策略信息{}", JSONUtil.toJsonStr(list));
response = new MqttResponse<List<BatteryStationCdStrategy>>().success(list);
}
logger.info("\r\nMqtt查询充电策略: MqttRequestStrategyExchangeProcessorImpl=====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_STRATEGY_INFO, response);
}
}

Some files were not shown because too many files have changed in this diff Show More