diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationFailureHandler.java b/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationFailureHandler.java index 8c72ebb..013704d 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationFailureHandler.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationFailureHandler.java @@ -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 { diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationSuccessHandler.java b/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationSuccessHandler.java index 1ee2f56..ea3275e 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationSuccessHandler.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/config/oauth2/MyAuthenticationSuccessHandler.java @@ -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().success(tokenResponseParameters), null, httpResponse); + this.accessTokenHttpResponseConverter.write(new Result>().success(tokenResponseParameters), null, httpResponse); } diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAccessDeniedHandler.java b/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAccessDeniedHandler.java index 00be4da..90ed7b6 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAccessDeniedHandler.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAccessDeniedHandler.java @@ -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; /** * 登陆了,没有权限时,触发异常 返回信息 diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAuthenticationEntryPoint.java b/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAuthenticationEntryPoint.java index 6b8b602..e45fb38 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAuthenticationEntryPoint.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/MyAuthenticationEntryPoint.java @@ -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; /** * 未认证(没有登录)时,返回异常 信息 diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/userdetail/UserDetailService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/userdetail/UserDetailService.java index 5d0e419..eebc74b 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/userdetail/UserDetailService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/config/security/userdetail/UserDetailService.java @@ -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 { diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/controller/CaptchaController.java b/authorization-server/src/main/java/com/evotech/hd/authorization/controller/CaptchaController.java index 1d324d0..a8d0d2d 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/controller/CaptchaController.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/controller/CaptchaController.java @@ -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") diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java b/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java index 07850f9..0890a86 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java @@ -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 diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/CaptchaService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/CaptchaService.java index 997c758..e9e6f52 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/CaptchaService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/CaptchaService.java @@ -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 { diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java index 2e5745d..4e8b9c0 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/CloudService.java @@ -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> loadBatteryStation(@RequestParam("proxyCode") String proxyCode); @GetMapping(value = "/company/login/one", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE}) diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java index 1e29814..057871d 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java @@ -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 { diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java index ffcd9e3..86414b9 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/ResourceService.java @@ -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 loadUserByName(@RequestParam("uname") String userName); + public Result loadUserByName(@RequestParam("uname") String userName); @PostMapping(value = "/user/userpermbyid", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public com.evotech.hd.common.core.entity.Result userPermById(@NotNull @RequestParam("uid") String userId, @RequestParam("type")Integer type); + public Result 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 addLoginLog(@RequestBody LogLogin log); + public Result addLoginLog(@RequestBody LogLogin log); @GetMapping(value = "/logininfo/get", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public com.evotech.hd.common.core.entity.Result loginInfo(@RequestParam("uid") String uid); + public Result loginInfo(@RequestParam("uid") String uid); @GetMapping(value = "/user/station",consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE}) public Result> loadBatteryStation(@RequestParam("uid") String uid); diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/CaptchaServiceImpl.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/CaptchaServiceImpl.java index 0d772ba..be9d78b 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/CaptchaServiceImpl.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/CaptchaServiceImpl.java @@ -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().success("OK", captchaId + ":" + imageBase64Data); + return new Result().success(captchaId + ":" + imageBase64Data); } @Override diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java index 2fe40a8..2087964 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java @@ -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 res = captchaService.checkCaptcha(lr.getCode()); if (res.getStatus() != 1) { - return new Result().error(res.getCode(), res.getMsg()); + return new Result().error(CodeMsg.getCodeMsgByCode(res.getCode()), res.getMsg()); } // 2. 从请求头获取client信息 Map oAuth2Client = LoginRequesHeadertUtil.getOAuth2Client(request); diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java index a3d1f95..bed766a 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java @@ -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 implements Serializable { @Schema(description = "返回数据") private T data; + public static Result getInstance(){ + return new Result(); + } + public Result() { } + public Result build(Class cls) { + return (Result) this; + } + + public Result> buildList(Class cls) { + return (Result>) this; + } + + public Result success() { + this.status = 1; + this.code = CodeMsg.SUCCESS.getCode(); + this.msg = CodeMsg.SUCCESS.getMsg(); + return this; + } + public Result success(T o) { this.status = 1; this.code = CodeMsg.SUCCESS.getCode(); @@ -37,6 +57,21 @@ public class Result implements Serializable { return this; } + public Result error(String errMsg) { + this.status = 1; + this.code = CodeMsg.ERROR.getCode(); + this.msg = errMsg; + return this; + } + + public Result error(String errMsg, T data) { + this.status = 1; + this.code = CodeMsg.ERROR.getCode(); + this.msg = errMsg; + this.data = data; + return this; + } + public Result error(CodeMsg codeMsg) { this.status = 1; this.code = codeMsg.getCode(); @@ -50,4 +85,20 @@ public class Result implements Serializable { this.msg = errorMsg; return this; } + + public Result exception(T data) { + this.status = -1; + this.code = CodeMsg.ERROR.getCode(); + this.msg = CodeMsg.ERROR.getMsg(); + this.data = data; + return this; + } + + public Result businessException(String code, String msg, T o) { + this.status = -1; + this.code = code; + this.msg = msg; + this.data = o; + return this; + } } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/DeviceDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/device/DeviceDto.java similarity index 96% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/DeviceDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/device/DeviceDto.java index 6a56218..f504236 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/DeviceDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/device/DeviceDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto; +package com.evotech.hd.common.core.Dto.device; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderInfo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderInfo.java similarity index 93% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderInfo.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderInfo.java index b7fde0e..d250650 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderInfo.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderInfo.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryAmountDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryAmountDto.java similarity index 60% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryAmountDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryAmountDto.java index 98f03d9..05e4e2a 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryAmountDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryAmountDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import lombok.Data; @@ -20,4 +20,11 @@ public class HomeOrderSwapBatteryAmountDto { Integer status; + public HomeOrderSwapBatteryAmountDto() { + } + + public HomeOrderSwapBatteryAmountDto(Double amount, Long dataCount) { + this.amount = amount; + this.dataCount = dataCount; + } } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearAmountDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearAmountDto.java similarity index 93% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearAmountDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearAmountDto.java index 0c078d8..57f9a07 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearAmountDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearAmountDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearDto.java similarity index 88% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearDto.java index 41f90b4..f472d30 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryProportionDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryProportionDto.java similarity index 93% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryProportionDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryProportionDto.java index c7ac509..fe43f94 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryProportionDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryProportionDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java new file mode 100644 index 0000000..17e56ed --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java @@ -0,0 +1,55 @@ +package com.evotech.hd.common.core.Dto.order; + +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.util.Date; + +/** + * 类 + * + * @ClassName:OrderListVo + * @date: 2025年05月16日 13:54 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@Schema(name = "订单列表") +public class OrderListVo { + + @Schema(description = "唯一标识") + private Integer pkId; + + @Schema(description = "订单编号") + private String orderNo; + + @Schema(name = "订单类型", description = "1=换电;2=充电") + private Integer orderType; + + @Schema(name = "车牌号") + private String plateNum; + + @Schema(name = "换电站") + private String stationName; + + @Schema(name = "订单金额") + private Integer amount; + + @Schema(name = "预约人") + private String perName; + + @Schema(name = "订单时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date orderTime; + + @Schema(name = "订单状态", description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消, -1-退款") + private Integer status; + + @Schema(name = "交易编码", description = "第三方收款返回的唯一标识") + private String notifyOrderNo; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java new file mode 100644 index 0000000..eb9d1b0 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java @@ -0,0 +1,53 @@ +package com.evotech.hd.common.core.Dto.request.order; + +import com.evotech.hd.common.core.entity.BasePageRequest; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderRequest + * @date: 2025年05月16日 15:28 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@Schema(name = "查询订单请求参数", hidden = true) +@EqualsAndHashCode(callSuper=false) +public class OrderRequest extends BasePageRequest { + + @Schema(description = "订单编码") + private String orderNo; + + @Schema(description = "车牌号") + 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 orderTimeBegin; + + @Schema(description = "订单时间结束") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date orderTimeEnd; + + @Schema(description = "换电站编码") + private String stationCode; + + @Schema(description = "交易编码") + private String tradeNo; + + @Schema(description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消") + private String status; + + + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java index da0c53c..c7b1423 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java @@ -2,6 +2,16 @@ package com.evotech.hd.common.core.constant; public interface HDConstant { + /*** + * 全局删除标识-已删除 + */ + final static Integer DELETE_YES = 1; + + /*** + * 全局删除标识-未删除 + */ + final static Integer DELETE_NO = 0; + /*** * 大华设备相关CONSTANT */ @@ -12,6 +22,133 @@ 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; + + + } + + /*** + * 订单相关参数 + */ + final class OrderConstant{ + + /*** + * 计费方式-ODO(里程数) + */ + public static final int FEE_TYPE_ODO = 1; + /*** + * 计费方式-SOC(电池百分比) + */ + public static final int FEE_TYPE_SOC = 2; + /*** + * 计费方式-电量 + */ + public static final int FEE_TYPE_DL = 3; + /*** + * 换电模式 全自动 + */ + public static final Integer CHANGE_MODE_AUTOMATIC = 1; + /*** + * 换电模式 半自动 + */ + public static final Integer CHANGE_MODE_AUTOMATIC_SEMI = 2; + /*** + * 换电模式 人工干预 + */ + public static final Integer CHANGE_MODE_ARTIFICIAL = 3; + /*** + * 换电车道 A + */ + public static final Integer CHANGE_LANE_A = 1; + /*** + * 换电车道 B + */ + public static final Integer CHANGE_LANE_B = 2; + + /*** + * 订单类型-充电 + */ + public static final Integer ORDER_TYPE_CHARGING = 2; + /*** + * 订单类型-换电 + */ + public static final Integer ORDER_TYPE_SWAP = 1; + + /*** + * 支付方式-支付宝支付 + */ + public static final String PAY_TYPE_ALI_PAY = "aliPay"; + /*** + * 支付方式-微信支付 + */ + public static final String PAY_TYPE_WECHAT_PAY = "wechatPay"; + /*** + * 支付方式-余额支付 + */ + public static final String PAY_TYPE_BALANCE_PAY = "balancePay"; + + + +// +// /*** +// * 订单状态-已创建 +// */ +// public static final Integer ORDER_STATUS_CREATE = 1; +// /*** +// * 订单状态-换电中 +// */ +// public static final Integer ORDER_STATUS_BATTERY_SWAPPING = 2; +// /*** +// * 订单状态-换电完成 +// */ +// public static final Integer ORDER_STATUS_BATTERY_SWAPPING_END = 3; +// /*** +// * 订单状态-充电中 +// */ +// public static final Integer ORDER_STATUS_CHARGING = 4; +// /*** +// * 订单状态-充电完成 +// */ +// public static final Integer ORDER_STATUS_CHARGING_END = 5; +// /*** +// * 订单状态-待结算 +// */ +// public static final Integer ORDER_STATUS_TO_BE_SETTLED = 6; +// /*** +// * 订单状态-已完成 +// */ +// public static final Integer ORDER_STATUS_END = 7; +// /*** +// * 订单状态-已取消 +// */ +// public static final Integer ORDER_STATUS_CLOSE = 9; +// /*** +// * 订单状态-退款 +// */ +// public static final Integer ORDER_STATUS_REFUND = -1; + + } + /*** * 大华设备相关CONSTANT */ @@ -33,7 +170,6 @@ public interface HDConstant { } - /*** * 权限相关CONSTANT */ @@ -113,14 +249,14 @@ public interface HDConstant { */ String JWT_PAYLOAD_KEY = "payload"; - + /** * jwt中添加的属性 */ String USER_ID_KEY = "uid"; String ROLE_CODE_KEY = "rcodes"; - - + + /** * 登陆验证码缓存key * hd:login:captcha: + captchaId @@ -132,37 +268,37 @@ public interface HDConstant { * key: hd:login:jti:token */ String LOGIN_CACHE_KEY_PREFIX = "hd:login:"; - + /** * 缓存系统token有效时间,s */ String HD_CACHE_TOKEN_EXP_KEY = "hd:cache:tokenExp"; - + /** * 资源权限类型 */ String RESOURCE_TYPE_PERM = "PER"; String RESOURCE_TYPE_MENU = "MENU"; - - + + /** * 交换数据非对称加密RSA秘钥前缀 */ String HD_STATION_SECRET_KEY_RSA_PREFIX = "hd:station:secretKey:rsa:"; - - + + /** - * 交换数据对称加密AES秘钥前缀 + * 交换数据对称加密AES秘钥前缀 */ String HD_STATION_SECRET_KEY_AES_PREFIX = "hd:station:secretKey:aes:"; - - + + /** * 微信服务请求头中权限验证字段 */ String WECHAT_SERVER_AUTHORIZATION_KEY = "WXUID"; String WECHAT_SERVER_TOKEN_KEY = "WXTOKEN"; - + /** * 微信登录缓存数据前缀 */ diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java new file mode 100644 index 0000000..d46eeac --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java @@ -0,0 +1,46 @@ +package com.evotech.hd.common.core.dao.cloud; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +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; +import com.evotech.hd.common.core.permission.DataScope; +import com.evotech.hd.common.core.permission.DataScopes; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +/** + * 接口 + * + * @ClassName:OrderMapper + * @date: 2025年05月16日 14:00 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@DataScopes({ + @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), + @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), +}) +//@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"}) +public interface OrderDao extends BaseMapper { + + List homeFindProportionData(@Param("params") HomeRequestDto params); + + List homeFindAmountData(@Param("params") HomeRequestDto params); +// + List homeFindHalfYearOrderData(@Param("params") HomeRequestDto params); + +// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE) + List homeFindHalfYearAmountData(@Param("params") HomeRequestDto params); + //因为站端不需要显示金额, 所有重新写一个 + List homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params); + + Long homeFindOrderCountData(@Param("date") Date date); + + Double homeFindOrderAmountData(@Param("date") Date date); + + List findOrderListByStatus(@Param("status") Integer status); +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDetailDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDetailDao.java new file mode 100644 index 0000000..b755707 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDetailDao.java @@ -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.order.OrderDetail; + +/** + * 接口 + * + * @ClassName:OrderDetailDap + * @date: 2025年05月17日 11:09 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderDetailDao extends BaseMapper { +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java index e9c2064..dc65d99 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java @@ -1,43 +1,43 @@ -package com.evotech.hd.common.core.dao.cloud; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.evotech.hd.common.core.Dto.request.HomeRequestDto; -import com.evotech.hd.common.core.Dto.result.home.*; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.permission.DataScope; -import com.evotech.hd.common.core.permission.DataScopes; -import org.apache.ibatis.annotations.Param; - -import java.util.Date; -import java.util.List; - -/** - * @author zrb - * @since 2024-11-22 - */ -@DataScopes({ - @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), - @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), -}) -//@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"}) -public interface OrderSwapBatteryDao extends BaseMapper { - - - List homeFindProportionData(@Param("params") HomeRequestDto params); - - List homeFindAmountData(@Param("params") HomeRequestDto params); - - List homeFindHalfYearOrderData(@Param("params") HomeRequestDto params); - -// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE) - List homeFindHalfYearAmountData(@Param("params") HomeRequestDto params); - //因为站端不需要显示金额, 所有重新写一个 - List homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params); - - Long homeFindOrderCountData(@Param("date") Date date); - - Double homeFindOrderAmountData(@Param("date") Date date); - - List findOrderListByStatus(@Param("status") Integer status); -} +//package com.evotech.hd.common.core.dao.cloud; +// +//import com.baomidou.mybatisplus.core.mapper.BaseMapper; +//import com.evotech.hd.common.core.Dto.request.HomeRequestDto; +//import com.evotech.hd.common.core.Dto.result.home.*; +//import com.evotech.hd.common.core.constant.HDConstant; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +//import com.evotech.hd.common.core.permission.DataScope; +//import com.evotech.hd.common.core.permission.DataScopes; +//import org.apache.ibatis.annotations.Param; +// +//import java.util.Date; +//import java.util.List; +// +///** +// * @author zrb +// * @since 2024-11-22 +// */ +//@DataScopes({ +// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), +// @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), +//}) +////@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"}) +//public interface OrderSwapBatteryDao extends BaseMapper { +// +// +// List homeFindProportionData(@Param("params") HomeRequestDto params); +// +// List homeFindAmountData(@Param("params") HomeRequestDto params); +// +// List homeFindHalfYearOrderData(@Param("params") HomeRequestDto params); +// +//// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE) +// List homeFindHalfYearAmountData(@Param("params") HomeRequestDto params); +// //因为站端不需要显示金额, 所有重新写一个 +// List homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params); +// +// Long homeFindOrderCountData(@Param("date") Date date); +// +// Double homeFindOrderAmountData(@Param("date") Date date); +// +// List findOrderListByStatus(@Param("status") Integer status); +//} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/SysParamDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/SysParamDao.java new file mode 100644 index 0000000..d1dd08c --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/SysParamDao.java @@ -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 { +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java index 8d9e06d..e6e90e9 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java @@ -2,18 +2,12 @@ package com.evotech.hd.common.core.entity; import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; -import jakarta.validation.constraints.Min; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; -import java.io.Serializable; import java.util.Date; /** @@ -23,25 +17,16 @@ import java.util.Date; */ @Data @Schema(name = "BaseEntity", description = "基础实体类") -public class BaseEntity implements Serializable { +public class BaseEntity extends IdEntity { private static final long serialVersionUID = 1L; - @TableId(value = "pk_id", type = IdType.AUTO) - @Hidden - private Integer pkId; @Schema(description = "创建人", hidden = true) @TableField(fill = FieldFill.INSERT) private String creater; - @Schema(description = "创建时间", hidden = true) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - @TableField(fill = FieldFill.INSERT) - private Date ctime; - @Schema(description = "更新人", hidden = true) @TableField(fill = FieldFill.UPDATE) private String updater; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java new file mode 100644 index 0000000..0706709 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java @@ -0,0 +1,39 @@ +package com.evotech.hd.common.core.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.Hidden; +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; + +/** + * 类 + * + * @ClassName:IdEntity + * @date: 2025年05月16日 11:08 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class IdEntity implements Serializable { + + + @TableId(value = "pk_id", type = IdType.AUTO) + @Hidden + private Integer pkId; + + + @Schema(description = "创建时间", hidden = true) + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private Date ctime; +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/Result.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/Result.java index 304e9f6..b8d0e14 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/Result.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/Result.java @@ -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 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 success(Object o) { - this.status = 1; - this.code = CodeMsg.SUCCESS.getCode(); - this.msg = CodeMsg.SUCCESS.getMsg(); - this.data = o; - return this; - } - - public Result success(String msg, Object o) { - this.status = 1; - this.code = CodeMsg.SUCCESS.getCode(); - this.msg = msg; - this.data = o; - return this; - } - - public Result success(String msg) { - this.status = 1; - this.code = CodeMsg.SUCCESS.getCode(); - this.msg = msg; - this.data = CodeMsg.SUCCESS.getMsg(); - return this; - } - - public Result success(String code, String msg, Object o) { - this.status = 1; - this.code = code; - this.msg = msg; - this.data = o; - return this; - } - - public Result success(CodeMsg cm, Object o) { - this.status = 0; - this.code = cm.getCode(); - this.msg = cm.getMsg(); - this.data = o; - return this; - } - - public Result error(String msg) { - this.status = 0; - this.code = CodeMsg.ERROR.getCode(); - this.msg = msg; - this.data = "ERROR"; - return this; - } - - public Result error(String code, String msg) { - this.status = 0; - this.code = code; - this.msg = msg; - this.data = "ERROR"; - return this; - } - - public Result error(CodeMsg cm) { - this.status = 0; - this.code = cm.getCode(); - this.msg = cm.getMsg(); - return this; - } - - public Result error(CodeMsg cm, Object o) { - return error(cm.getCode(), cm.getMsg(), o); - } - - public Result error(String code, String msg, Object o) { - this.status = 0; - this.code = code; - this.msg = msg; - this.data = o; - return this; - } - - public Result error(String msg, Object o) { - this.status = 0; - this.code = CodeMsg.ERROR.getCode(); - this.msg = msg; - this.data = o; - return this; - } - - - public Result 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 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 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 success() { +// this.status = 1; +// this.code = CodeMsg.SUCCESS.getCode(); +// this.msg = CodeMsg.SUCCESS.getMsg(); +// return this; +// } +// +// public Result success(Object o) { +// this.status = 1; +// this.code = CodeMsg.SUCCESS.getCode(); +// this.msg = CodeMsg.SUCCESS.getMsg(); +// this.data = o; +// return this; +// } +// +// public Result success(String msg, Object o) { +// this.status = 1; +// this.code = CodeMsg.SUCCESS.getCode(); +// this.msg = msg; +// this.data = o; +// return this; +// } +// +// public Result success(String msg) { +// this.status = 1; +// this.code = CodeMsg.SUCCESS.getCode(); +// this.msg = msg; +// this.data = CodeMsg.SUCCESS.getMsg(); +// return this; +// } +// +// public Result success(String code, String msg, Object o) { +// this.status = 1; +// this.code = code; +// this.msg = msg; +// this.data = o; +// return this; +// } +// +// public Result success(CodeMsg cm, Object o) { +// this.status = 0; +// this.code = cm.getCode(); +// this.msg = cm.getMsg(); +// this.data = o; +// return this; +// } +// +// public Result error(String msg) { +// this.status = 0; +// this.code = CodeMsg.ERROR.getCode(); +// this.msg = msg; +// this.data = "ERROR"; +// return this; +// } +// +// public Result error(String code, String msg) { +// this.status = 0; +// this.code = code; +// this.msg = msg; +// this.data = "ERROR"; +// return this; +// } +// +// public Result error(CodeMsg cm) { +// this.status = 0; +// this.code = cm.getCode(); +// this.msg = cm.getMsg(); +// return this; +// } +// +// public Result error(CodeMsg cm, Object o) { +// return error(cm.getCode(), cm.getMsg(), o); +// } +// +// public Result error(String code, String msg, Object o) { +// this.status = 0; +// this.code = code; +// this.msg = msg; +// this.data = o; +// return this; +// } +// +// public Result error(String msg, Object o) { +// this.status = 0; +// this.code = CodeMsg.ERROR.getCode(); +// this.msg = msg; +// this.data = o; +// return this; +// } +// +// +// public Result 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 bussinessException(String code, String msg, Object o) { +// this.status = -1; +// this.code = code; +// this.msg = msg; +// this.data = o; +// return this; +// } +// +//} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java index 158079f..86905fc 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java @@ -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; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java index 2d9968a..c6597a8 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java @@ -1,27 +1,19 @@ package com.evotech.hd.common.core.entity.cloud; -import com.baomidou.mybatisplus.annotation.IdType; +import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.annotation.TableField; -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 cn.hutool.core.date.DatePattern; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; -import java.util.List; - -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 lombok.Getter; import lombok.Setter; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + /** * @author zrb * @since 2024-10-17 @@ -44,6 +36,9 @@ public class BatteryStationHdFeeStandard extends BaseEntity implements Serializa @Schema(description = "换电站编码") private String stationName; + @Schema(description = "基本服务费") + private BigDecimal serviceFee; + @Schema(description = "开始日期", requiredMode = RequiredMode.REQUIRED, example = DatePattern.PURE_DATE_PATTERN) @NotBlank(message = "开始时间不能为空") private String dayBegin; @@ -61,6 +56,9 @@ public class BatteryStationHdFeeStandard extends BaseEntity implements Serializa @Schema(description = "每度电收费") private BigDecimal eachKwhFee; + + + @Schema(description = "正常换电服务费") private BigDecimal commonRemainFee; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java index 5f10ba3..d355b52 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java @@ -1,26 +1,19 @@ package com.evotech.hd.common.core.entity.cloud; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; +import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.annotation.TableName; import com.evotech.hd.common.core.entity.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import cn.hutool.core.date.DatePattern; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalTime; -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.Getter; import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalTime; /** * @author zrb @@ -42,6 +35,9 @@ public class BatteryStationHdFeeStandardDetail extends BaseEntity implements Ser @NotNull private Integer standardId; + @Schema(description = "服务费") + private BigDecimal serviceFee; + @Schema(description = "每公里收费") private BigDecimal eachKmFee; @@ -61,6 +57,5 @@ public class BatteryStationHdFeeStandardDetail extends BaseEntity implements Ser @DateTimeFormat(pattern = DatePattern.NORM_TIME_PATTERN) private LocalTime timeEnd; - @Schema(description = "谷段服务费") - private BigDecimal timeServiceFee; + } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderRecharge.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderRecharge.java deleted file mode 100644 index 9028c04..0000000 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderRecharge.java +++ /dev/null @@ -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; -} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java index 5202053..45f1ef1 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java @@ -1,162 +1,162 @@ -package com.evotech.hd.common.core.entity.cloud; - -import com.baomidou.mybatisplus.annotation.TableField; -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 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.math.BigDecimal; -import java.util.Date; - -/** - * @author zrb - * @since 2024-11-22 - */ -@Data -@TableName("hd_cloud_manage.yt_t_order_swap_battery") -@Schema(name = "换电订单信息表") -public class OrderSwapBattery extends BaseEntity implements Serializable { - - 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; - - @Schema(description = "类型:1-换电,2-充电", requiredMode = RequiredMode.REQUIRED) - @NotNull(message = "订单类型不能为空") - private Integer orderType; - - @Schema(description = "订单编码", hidden = true) - private String orderNo; - - @Schema(description = "车牌号", requiredMode = RequiredMode.REQUIRED) - @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; - - @Schema(description = "换电站编码", requiredMode = RequiredMode.REQUIRED) - @NotBlank(message = "换电站编码不能为空") - private String stationCode; - - @Schema(description = "换电站名称", requiredMode = RequiredMode.REQUIRED) - @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-ODO,2-SOC,3-按电量") - 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; -} +//package com.evotech.hd.common.core.entity.cloud; +// +//import com.baomidou.mybatisplus.annotation.TableField; +//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 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.math.BigDecimal; +//import java.util.Date; +// +///** +// * @author zrb +// * @since 2024-11-22 +// */ +//@Data +//@TableName("hd_cloud_manage.yt_t_order_swap_battery") +//@Schema(name = "换电订单信息表") +//public class OrderSwapBattery extends BaseEntity implements Serializable { +// +// 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; +// +// @Schema(description = "类型:1-换电,2-充电", requiredMode = RequiredMode.REQUIRED) +// @NotNull(message = "订单类型不能为空") +// private Integer orderType; +// +// @Schema(description = "订单编码", hidden = true) +// private String orderNo; +// +// @Schema(description = "车牌号", requiredMode = RequiredMode.REQUIRED) +// @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; +// +// @Schema(description = "换电站编码", requiredMode = RequiredMode.REQUIRED) +// @NotBlank(message = "换电站编码不能为空") +// private String stationCode; +// +// @Schema(description = "换电站名称", requiredMode = RequiredMode.REQUIRED) +// @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-ODO,2-SOC,3-按电量") +// 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; +//} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBatteryPre.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBatteryPre.java index bebacf0..e8e4241 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBatteryPre.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBatteryPre.java @@ -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) diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TradeDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TradeDetail.java index 98935c9..1073ec7 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TradeDetail.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TradeDetail.java @@ -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; } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/vo/OrderVo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/vo/OrderVo.java new file mode 100644 index 0000000..03b6a30 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/vo/OrderVo.java @@ -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-ODO,2-SOC,3-按电量") + 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; +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/BaseOrder.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/BaseOrder.java new file mode 100644 index 0000000..2899da9 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/BaseOrder.java @@ -0,0 +1,59 @@ +package com.evotech.hd.common.core.entity.order; + +import com.evotech.hd.common.core.entity.IdEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:BaseOrder + * @date: 2025年05月16日 11:11 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class BaseOrder extends IdEntity { + + /*** + * 订单编码 + */ + private String orderNo; + + /*** + * 订单金额 + */ + private Integer orderAmount; + + /*** + * 订单状态, 具体参考 OrderStatusEnums //HDConstant.OrderConstant.ORDER_STATUS_* + */ + private Integer status; + /*** + * 支付方式 具体参考 HDConstant.OrderConstant.PAY_TYPE_* + */ + private String payType; + /*** + * 支付时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date payTime; + /*** + * 支付人的微信ID + */ + private String payWechatId; + + /*** + * 第三方返回的唯一订单标识 + */ + private String notifyOrderNo; + /*** + * 支付的回调信息 + */ + private String notifyInfo; +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/Order.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/Order.java new file mode 100644 index 0000000..4afc6f5 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/Order.java @@ -0,0 +1,77 @@ +package com.evotech.hd.common.core.entity.order; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:SwapOrder + * @date: 2025年05月16日 11:29 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName(value = "yt_t_order", schema = "hd_cloud_manage") +public class Order extends BaseOrder{ + + private Integer orderPreId; + + /*** + * 预约用户的微信ID + */ + private String preWechatId; + + /*** + * 预约用户名称 + */ + private String orderPreUname; + /*** + * 订单类型, 具体参考 HDConstant.OrderConstant.ORDER_TYPE_* + */ + private Integer orderType; + /*** + * 车牌号 + */ + private String plateNum; + + /*** + * 下单时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date orderTime; + /*** + * '换电站编码' + */ + private String stationCode; + + /*** + * ''换电站名称'' + */ + private String stationName; + + /*** + * 订单状态, 具体参考 HDConstant.DELETE_* + */ + private Integer delFlag; + + /*** + * 备注信息 + */ + private String remark; + + /*** + * 变更时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderDetail.java new file mode 100644 index 0000000..ad71931 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderDetail.java @@ -0,0 +1,108 @@ +package com.evotech.hd.common.core.entity.order; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.evotech.hd.common.core.entity.IdEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderDetail + * @date: 2025年05月17日 9:10 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@TableName(value = "yt_t_order_detail", schema = "hd_cloud_manage") +@EqualsAndHashCode(callSuper=false) +public class OrderDetail extends IdEntity { + + private Integer orderId; + + /*** + * 计费类型, 具体参考 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; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderRecharge.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderRecharge.java new file mode 100644 index 0000000..e8a8301 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderRecharge.java @@ -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; + + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderRefund.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderRefund.java new file mode 100644 index 0000000..83cb757 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderRefund.java @@ -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; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/system/SysParam.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/system/SysParam.java new file mode 100644 index 0000000..727bc2a --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/system/SysParam.java @@ -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; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java new file mode 100644 index 0000000..669fa56 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java @@ -0,0 +1,16 @@ +package com.evotech.hd.common.core.enums; + +/** + * 枚举 + * + * @ClassName:BaseEnum + * @date: 2025年05月19日 15:36 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface BaseEnum { + + K getKey(); + V getValue(); +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/CodeMsg.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/CodeMsg.java index f52c178..54b969c 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/CodeMsg.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/CodeMsg.java @@ -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 map = Arrays.stream(CodeMsg.values()).collect(Collectors.toMap(CodeMsg::getCode, v->v)); + return map.get(code); + } + } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java index d4e01d2..fc5e2ac 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java @@ -1,10 +1,10 @@ package com.evotech.hd.common.core.enums; -public enum OrderStatusEnums { +public enum OrderStatusEnums implements BaseEnum { CREATE(1, "已创建"), - SWAP(2, "换电开始"), + SWAP(2, "换电中"), SWAPOVER(3, "换电完成"), @@ -16,7 +16,14 @@ public enum OrderStatusEnums { FINISH(7, "已完成"), - CANCLE(9, "已取消"); + CANCLE(9, "已取消"), + + REFUND(-1, "订单退款"), + + REFUND_PART(-2, "订单不分退款"), + + ; + Integer code; @@ -36,4 +43,14 @@ public enum OrderStatusEnums { this.name = name; } + + @Override + public Integer getKey() { + return this.code; + } + + @Override + public String getValue() { + return this.name; + } } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java new file mode 100644 index 0000000..c973df0 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java @@ -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{ + + // @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;} +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java index e67ef4c..cc372a6 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java @@ -45,7 +45,6 @@ public class Collections implements Serializable{ /** * @DES 检查集合为空 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午2:14:43 * @methodName Collections.isEmpty * @param list @@ -59,7 +58,6 @@ public class Collections implements Serializable{ /** * @DES 检查集合不为空 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午2:15:07 * @methodName Collections.isNotEmpty * @param collection @@ -73,7 +71,6 @@ public class Collections implements Serializable{ /** * 将list进行分页 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月15日上午9:37:07 * @param 泛型, 根据传入的对对象类型,返回类型 * @param list 需要分组的集合 @@ -109,7 +106,6 @@ public class Collections implements Serializable{ /** * 创建对象 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月15日上午9:37:07 * @param * @return @@ -121,7 +117,6 @@ public class Collections implements Serializable{ /** * @DES 数组转对象 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午2:09:14 * @methodName Collections.asList * @param objs @@ -157,7 +152,6 @@ public class Collections implements Serializable{ /** * 去除集合的重复项 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:09:07 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param list1 去重的集合1 @@ -172,7 +166,6 @@ public class Collections implements Serializable{ /** * 去除集合的重复项 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:13:09 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param listArray 去重的集合数组 @@ -203,7 +196,6 @@ public class Collections implements Serializable{ /** * 获取重复数据 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:46:03 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param list1 查重的集合1 @@ -217,7 +209,6 @@ public class Collections implements Serializable{ /** * 获取重复数据 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:44:30 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param listArray 需要查重的集合数组 @@ -281,7 +272,6 @@ public class Collections implements Serializable{ /** * @DES 组装map数据对象 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午1:37:05 * @methodName MapLists.createMap * @param args diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java index 9bd1eca..3ed4174 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java @@ -1,10 +1,13 @@ package com.evotech.hd.common.core.utils; -import java.util.Date; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; 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 { @@ -47,6 +50,19 @@ public class CommonUtil { return prefix + "1100"; } - + + public static BigDecimal yuanToFen(BigDecimal yuan){ + if(ObjectUtils.isEmpty(yuan)){ + return new BigDecimal(0); + } + 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); + } } diff --git a/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/exception/MongoDBException.java b/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/exception/MongoDBException.java index 74cac60..ba8e087 100644 --- a/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/exception/MongoDBException.java +++ b/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/exception/MongoDBException.java @@ -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); diff --git a/base-commons/common-redis/src/main/java/com/evotech/hd/common/redis/utils/RedisServiceUtils.java b/base-commons/common-redis/src/main/java/com/evotech/hd/common/redis/utils/RedisServiceUtils.java new file mode 100644 index 0000000..dc416ee --- /dev/null +++ b/base-commons/common-redis/src/main/java/com/evotech/hd/common/redis/utils/RedisServiceUtils.java @@ -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); + } + + +} diff --git a/base-commons/common-web/src/main/java/com/evotech/hd/common/web/exception/GlobalExceptionHandler.java b/base-commons/common-web/src/main/java/com/evotech/hd/common/web/exception/GlobalExceptionHandler.java index d26de7b..7846d5a 100644 --- a/base-commons/common-web/src/main/java/com/evotech/hd/common/web/exception/GlobalExceptionHandler.java +++ b/base-commons/common-web/src/main/java/com/evotech/hd/common/web/exception/GlobalExceptionHandler.java @@ -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 exceptionHandler(HttpServletRequest req, NullPointerException e) { log.error("\r\n===>>>空指针异常:", e); - return new Result().bussinessException(CodeMsg.ERROR.getCode(), e.getMessage(), null); + return new Result().businessException(CodeMsg.ERROR.getCode(), e.getMessage(), null); } @@ -46,7 +45,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(value = HttpMessageNotReadableException.class) public Result exceptionHandler(HttpServletRequest req, HttpMessageNotReadableException e) { log.error("\r\n===>>>http请求参数解析异常:", e); - return new Result().bussinessException(CodeMsg.PARAM_ERROR.getCode(), "http请求参数解析异常", e.getMessage()); + return new Result().businessException(CodeMsg.PARAM_ERROR.getCode(), "http请求参数解析异常", e.getMessage()); } /** @@ -57,7 +56,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(value = MyArgumentException.class) public Result exceptionHandler(HttpServletRequest req, MyArgumentException e) { log.error("\r\n===>>>请求参数异常:", e); - return new Result().bussinessException(CodeMsg.PARAM_ERROR.getCode(), CodeMsg.PARAM_ERROR.getMsg(), e.getParamArr()); + return new Result().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 exceptionHandler(HttpServletRequest req, DataIntegrityViolationException e) { log.error("\r\n===>>>sql语句异常:", e); - return new Result().bussinessException(CodeMsg.SQL_RUN_ERROR.getCode(), e.getCause().toString(), null); + return new Result().businessException(CodeMsg.SQL_RUN_ERROR.getCode(), e.getCause().toString(), null); } /** @@ -80,7 +79,7 @@ public class GlobalExceptionHandler { public Result 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().bussinessException(CodeMsg.PARAM_ERROR.getCode(), param, e.getBindingResult().getFieldErrors()); + return new Result().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 exceptionHandler(HttpServletRequest req, Exception e) { log.error("\r\n===>>>捕获运行异常:", e); - return new Result().bussinessException(CodeMsg.ERROR.getCode(), e instanceof RuntimeException?e.getMessage():e.toString(), null); + return new Result().businessException(CodeMsg.ERROR.getCode(), e instanceof RuntimeException?e.getMessage():e.toString(), null); } } diff --git a/base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java b/base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java new file mode 100644 index 0000000..efa7332 --- /dev/null +++ b/base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java @@ -0,0 +1,40 @@ +package com.evotech.hd.common.web.util; + +import com.evotech.hd.common.core.enums.BaseEnum; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * + * 类 + * @ClassName:EnumUtils + * @date: 2025年05月19日 15:30 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public class EnumUtils extends org.apache.commons.lang3.EnumUtils{ + + + public static , K, V> E getEnumProperty(final Class enumClass, final K k) { + List el = new ArrayList<>(Arrays.asList(enumClass.getEnumConstants())); + for (E e: el){ + if(e.getKey().equals(k)){ + return e; + } + } + return null; + } + public static , K,V> V getEnumPropertyValue(final Class enumClass, final K k) { + List el = new ArrayList<>(Arrays.asList(enumClass.getEnumConstants())); + for (E e: el){ + if(e.getKey().equals(k)){ + return e.getValue(); + } + } + return (V)"未知属性"; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationCdStrategyController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationCdStrategyController.java index cfe264d..f62e4d4 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationCdStrategyController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationCdStrategyController.java @@ -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 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java index 0b9404c..e432b19 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationController.java @@ -1,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 add(@Valid @ParameterObject BatteryStation bs) { + public Result add(@Valid @ParameterObject BatteryStation bs) { return batteryStationService.add(bs); } @Operation(summary = "删除") @PostMapping("/del") @ApiOperationSupport(order = 2) - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { return batteryStationService.delete(id); } @Operation(summary = "修改") @PostMapping({"/update"}) @ApiOperationSupport(order = 3) - public com.evotech.hd.common.core.entity.Result update(@ParameterObject BatteryStation bs) { + public Result update(@ParameterObject BatteryStation bs) { return batteryStationService.update(bs); } @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 4) - public com.evotech.hd.common.core.entity.Result> list(@ParameterObject PageListBatteryStationRequest plbsr) { + public Result> list(@ParameterObject PageListBatteryStationRequest plbsr) { return batteryStationService.list(plbsr); } - - @Operation(summary = "查询2") - @GetMapping("/liststation") - @Hidden - public com.evotech.hd.common.core.entity.Result> 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> RsaSecretKey(@NotBlank @RequestParam String stationCode) { + public Result> 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> listStation(@RequestParam(required = false) String longitudeAndLatitude, @RequestParam(required = false) String plateNum) { + return batteryStationService.listStation(longitudeAndLatitude, plateNum); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDcController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDcController.java index 0126cb4..c5f58db 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDcController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDcController.java @@ -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(@ParameterObject PageListBatteryStationDcRequest plbsdcr) { + public Result> list(@ParameterObject PageListBatteryStationDcRequest plbsdcr) { return batteryStationDcService.list(plbsdcr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDccController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDccController.java index 9720b6a..928468a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDccController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDccController.java @@ -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(@ParameterObject PageListBatteryStationDccRequest plbsDccr) { + public Result> list(@ParameterObject PageListBatteryStationDccRequest plbsDccr) { return batteryStationDccService.list(plbsDccr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDjController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDjController.java index 9268486..cdaa0e7 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDjController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationDjController.java @@ -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(@ParameterObject PageListBatteryStationDjRequest plbsdjr) { + public Result> list(@ParameterObject PageListBatteryStationDjRequest plbsdjr) { return batteryStationDjService.list(plbsdjr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardController.java index 086f472..30b5eca 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardController.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardDetailController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardDetailController.java index c881d0a..14e2bc3 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardDetailController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationHdFeeStandardDetailController.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationRobotController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationRobotController.java index 43dbd2a..d051d23 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationRobotController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/BatteryStationRobotController.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java index f77af12..7c6c4e5 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java @@ -148,10 +148,10 @@ public class HomeController { // return homeService.homeData7(type); // } - - @Operation(hidden = true) - @GetMapping("/login/data") - public void loginData() { - homeService.loginData(); - } +// +// @Operation(hidden = true) +// @GetMapping("/login/data") +// public void loginData() { +// homeService.loginData(); +// } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/MessageMqttController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/MessageMqttController.java index c64bf45..90d4489 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/MessageMqttController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/MessageMqttController.java @@ -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(@ParameterObject PageListMessageMqttRequest plmmr) { + public Result> list(@ParameterObject PageListMessageMqttRequest plmmr) { return messageMqttService.list(plmmr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java index 75064d4..837e0a7 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/CompanyController.java @@ -1,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 add(@Valid @ParameterObject Company company) { + public Result add(@Valid @ParameterObject Company company) { return companyService.add(company); } @Operation(summary = "删除") @PostMapping("/del") @ApiOperationSupport(order = 2) - public com.evotech.hd.common.core.entity.Result delete(@NotNull Integer id) { + public Result delete(@NotNull Integer id) { return companyService.delete(id); } @Operation(summary = "修改") @PostMapping({"/update"}) @ApiOperationSupport(order = 3) - public com.evotech.hd.common.core.entity.Result update(@ParameterObject Company company) { + public Result update(@ParameterObject Company company) { return companyService.update(company); } @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 4) - public com.evotech.hd.common.core.entity.Result> list(@Valid @ParameterObject BasePageRequest bpr) { + public Result> list(@Valid @ParameterObject BasePageRequest bpr) { return companyService.list(bpr); } @GetMapping("/companyByCode") - public com.evotech.hd.common.core.entity.Result> companyByCode(String ccode) { + public Result> companyByCode(String ccode) { return companyService.companyByCode(ccode); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java index 0618622..8c3d155 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java @@ -1,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 add(@Valid @ParameterObject VehicleInfo vi) { + public Result add(@Valid @ParameterObject VehicleInfo vi) { return vehicleService.add(vi); } @Operation(summary = "删除") @PostMapping("/del") @ApiOperationSupport(order = 2) - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { return vehicleService.delete(id); } @Operation(summary = "修改") @PostMapping({"/update"}) @ApiOperationSupport(order = 3) - public com.evotech.hd.common.core.entity.Result update(@ParameterObject VehicleInfo vi) { + public Result update(@ParameterObject VehicleInfo vi) { return vehicleService.update(vi); } @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 4) - public com.evotech.hd.common.core.entity.Result> list(@ParameterObject PageListVehicleRequest plvr) { + public Result> list(@ParameterObject PageListVehicleRequest plvr) { return vehicleService.list(plvr); } @Operation(summary = "关联公司") @PostMapping("/company/relation") @ApiOperationSupport(order = 5) - public com.evotech.hd.common.core.entity.Result companyRelation(String plateNum, String ccode, String cname) { + public Result 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 delCompanyRelation(String plateNum) { + public Result delCompanyRelation(String plateNum) { return vehicleService.delCompanyRelation(plateNum); } @Operation(summary = "微信用户关联") @PostMapping("/wechatuser/relation/add") @ApiOperationSupport(order = 7) - public com.evotech.hd.common.core.entity.Result addWechatUserRelation(@Valid @ParameterObject VehicleWechatUserRelation relation) { + public Result 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 deleteWechatUserRelation(Integer id) { + public Result 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> listWechatUserRelation(@NotBlank @RequestParam String wuid) { + public Result> 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> listRelationUser(@NotBlank @RequestParam String PlantNo) { + public Result> listRelationUser(@NotBlank @RequestParam String PlantNo) { return vehicleService.listRelationUser(PlantNo); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java index 7d84dd3..c070862 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java @@ -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(@ParameterObject PageListWechatUserRequest plwur) { + public Result> list(@ParameterObject PageListWechatUserRequest plwur) { return wechatUserService.list(plwur); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java index b2ca8eb..b02ca79 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java @@ -2,7 +2,7 @@ package com.evotech.hd.cloud.controller.dh; import com.evotech.hd.cloud.service.DHDeviceService; import com.evotech.hd.common.core.Dto.Result; -import com.evotech.hd.common.core.Dto.DeviceDto; +import com.evotech.hd.common.core.Dto.device.DeviceDto; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java new file mode 100644 index 0000000..d69560e --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java @@ -0,0 +1,63 @@ +package com.evotech.hd.cloud.controller.order; + +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; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.text.ParseException; + +/** + * 预约订单管理类 + * @ClassName:OrderPerController + * @date: 2025年05月16日 13:51 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Tag(name = "预约订单") +@ApiSupport(order = 22) +@RestController +@RequestMapping("/order/per") +public class OrderPerController { + + @Resource + OrderSwapBatteryPreService orderSwapBatteryPreService; + + @Operation(summary = "查询预约") + @GetMapping("/list") + @ApiOperationSupport(order = 3) + public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException { + return orderSwapBatteryPreService.list(plsopr); + } + + @Operation(summary = "增加预约") + @PostMapping("/add") + @ApiOperationSupport(order = 1) + public Result addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) { + return orderSwapBatteryPreService.addOrderSwapBatteryPre(osbp); + } + + @Operation(summary = "取消预约") + @PostMapping("/cancel") + @ApiOperationSupport(order = 2) + public Result cancelPre(@NotNull Integer id) { + return orderSwapBatteryPreService.cancelPre(id, 3); + } + + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRechargeController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRechargeController.java index 287abc4..13152b6 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRechargeController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRechargeController.java @@ -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(@ParameterObject PageListRechargeOrderRequest plror) { + public Result> list(@ParameterObject PageListRechargeOrderRequest plror) { return orderRechargeService.list(plror); } + /*** + * 待退款订单查询 + * @return + */ + @GetMapping("/refund/list") + public Result> refundList(@RequestParam String wechatId) { + return orderRechargeService.refundList(wechatId); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRefundController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRefundController.java new file mode 100644 index 0000000..8045d30 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderRefundController.java @@ -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 addAll(@RequestParam String listJson) { + return orderRefundService.addAll(JSONUtil.toList(listJson, OrderRefund.class)); + } + + @Operation(summary = "查询") + @PostMapping("/orderNo") + public Result orderNoOne(@RequestParam String orderNo) { + return orderRefundService.orderNoOne(orderNo); + } + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java index d13c1cb..78d9b72 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java @@ -1,27 +1,25 @@ package com.evotech.hd.cloud.controller.order; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.vo.NativePayVO; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.cloud.service.OrderService; +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.PageListSwapOrderPreRequest; 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; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import org.springdoc.core.annotations.ParameterObject; import org.springframework.web.bind.annotation.*; -import java.text.ParseException; import java.util.List; @Tag(name = "换电订单") @@ -29,94 +27,63 @@ import java.util.List; @RestController @RequestMapping("/order/swap") public class OrderSwapBatteryController { - + @Resource - private OrderSwapBatteryService orderSwapBatteryService; - - - @Operation(summary = "增加预约") - @PostMapping("/pre/add") - @ApiOperationSupport(order = 1) - public Result addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) { - return orderSwapBatteryService.addPre(osbp); - } - - @Operation(summary = "取消预约") - @PostMapping("/pre/cancel") - @ApiOperationSupport(order = 2) - public Result cancelPre(@NotNull Integer id) { - return orderSwapBatteryService.cancelPre(id, null); - } - - @Operation(summary = "查询预约") - @GetMapping("/pre/list") - @ApiOperationSupport(order = 3) - public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException { - return orderSwapBatteryService.listPre(plsopr); - } - - - - @Operation(summary = "增加") - @PostMapping("/add") - @ApiOperationSupport(order = 4) - public Result add(@Valid @ParameterObject OrderSwapBattery osb) { - return orderSwapBatteryService.add(osb); - } - - @Operation(summary = "删除") - @PostMapping("/del") - @ApiOperationSupport(order = 5) - public Result delete(Integer id) { - return orderSwapBatteryService.delete(id); - } - - @Operation(summary = "修改") - @PostMapping({"/update"}) - @ApiOperationSupport(order = 6) - public Result update(@ParameterObject OrderSwapBattery osb) { - return orderSwapBatteryService.update(osb); - } - + private OrderService orderService; + @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 7) - public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { - return orderSwapBatteryService.list(plsor); + public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { + return orderService.pageList(plsor); } - + + @Operation(summary = "查询换电步骤") + @GetMapping("/step/list") + @ApiOperationSupport(order = 9) + public Result> listStep(@NotBlank String orderNo) { + return orderService.listStep(orderNo); + } + + @Operation(summary = "个人账户余额支付") + @PostMapping({"/one"}) + @ApiOperationSupport(order = 11) + public Result one(@RequestParam String orderNo) { + return orderService.one(orderNo); + } + + @Operation(summary = "个人账户余额支付") + @PostMapping({"/wallet/pay"}) + @ApiOperationSupport(order = 11) + public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { + return orderService.walletPay(orderNo, wuid, uname); + } + + + + + @Operation(summary = "查询公司订单") @GetMapping("/listcompanyorder") @ApiOperationSupport(order = 8) @Hidden @Deprecated - public Result> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) { - return orderSwapBatteryService.listByCompany(plsor); + public Result> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) { + return orderService.listByCompany(plsor); } - - @Operation(summary = "查询换电步骤") - @GetMapping("/step/list") - @ApiOperationSupport(order = 9) - public Result> listStep(@NotBlank String orderNo) { - return orderSwapBatteryService.listStep(orderNo); - } - + + + @Operation(summary = "费用计算") @PostMapping({"/cost"}) @ApiOperationSupport(order = 9) - public Result calculateCost(@NotBlank @RequestParam OrderSwapBattery osb) { - return orderSwapBatteryService.calculateCost(osb); + public Result calculateCost(@NotBlank @RequestParam Order osb) { + return orderService.calculateCost(osb); } - - - @Operation(summary = "个人账户余额支付") - @PostMapping({"/wallet/pay"}) - @ApiOperationSupport(order = 11) - public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { - return orderSwapBatteryService.walletPay(orderNo, wuid, uname); - } - - + + + + @Operation(summary = "公司订单余额支付") @PostMapping({"/companywallet/pay"}) @ApiOperationSupport(order = 12) @@ -124,46 +91,46 @@ public class OrderSwapBatteryController { // TODO return null; } - - + + @Operation(summary = "公司订单扫码支付") @PostMapping({"/wechat/nativepay"}) @ApiOperationSupport(order = 13) public Result companyNativePay(@RequestBody NativePayVO prePay) { - return orderSwapBatteryService.companyNativePay(prePay); + return orderService.companyNativePay(prePay); } - + @Operation(summary = "扫码支付订单查询状态") @GetMapping("/paystatus/query") @ApiOperationSupport(order = 14) public Result orderQuery(String outTradeNo) { - return orderSwapBatteryService.orderQuery(outTradeNo); + return orderService.orderQuery(outTradeNo); } @Operation(summary = "站端取消订单") @PostMapping("/pre/cancelOrder") @ApiOperationSupport(order = 15) public Result cancelOrder(@NotNull String orderNo) { - return orderSwapBatteryService.cancelOrder(orderNo, null); + return orderService.cancelOrder(orderNo, null); } @Operation(summary = "开始换电") @PostMapping("/startSwap") @ApiOperationSupport(order = 16) - public Result startSwap(@RequestParam String wuid,String orderId) { - return orderSwapBatteryService.startSwap(wuid,orderId); + public Result startSwap(@RequestParam String wuid,String orderNo) { + return orderService.startSwap(wuid,orderNo); } @Operation(summary = "获取开始换电回复") @PostMapping("/getStartSwap") @ApiOperationSupport(order = 17) public Result getStartSwap(@RequestParam String wuid, String orderId) { - return orderSwapBatteryService.getStartSwap(wuid,orderId); + return orderService.getStartSwap(wuid,orderId); } @Operation(summary = "未完成订单查询:plateNum") @GetMapping("/checkList") @ApiOperationSupport(order = 18) public Result checkList(@ParameterObject PageListSwapOrderRequest plsor) { - return orderSwapBatteryService.checkList(plsor); + return orderService.checkList(plsor); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/TradeController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/TradeController.java index 260ee90..5b33c9a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/TradeController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/TradeController.java @@ -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(@ParameterObject PageListTradeRequest pltr) { + public Result> list(@ParameterObject PageListTradeRequest pltr) { return tradeService.list(pltr); } @@ -67,7 +63,6 @@ public class TradeController { @PostMapping({"/wechatpay/notify"}) @ApiOperationSupport(order = 5) @Hidden - public Result wechatPayNotifyHandle(@ParameterObject TradeDetail tradeDetail) { return tradeService.wechatPayNotifyHandle(tradeDetail); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java index 73d1069..2a4d6f2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java @@ -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(@ParameterObject PageListWalletRequest plwr) { + public Result> 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> listDetail(@ParameterObject PageListWalletRequest plwr) { - return walletAccountService.listDetail(plwr); - } + @Operation(summary = "查询是否开通微信钱包") @PostMapping("/isOpenAccount") @ApiOperationSupport(order = 8) @@ -101,12 +92,15 @@ public class WalletAccountController { public Result getPayAttach(String wuid) { return walletAccountService.getPayAttach(wuid); } - @Operation(summary = "更新账户姓名") - @PostMapping({"/updateName"}) - @ApiOperationSupport(order = 11) - public Result 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 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 updateWechat(@ParameterObject WalletAccount wa) { + return walletAccountService.updateWechat(wa); + } + + @Operation(summary = "查询账户明细") + @GetMapping("/detail/list") + @ApiOperationSupport(order = 7) + public com.evotech.hd.common.core.Dto.Result> listDetail(@ParameterObject PageListWalletRequest plwr) { + return walletAccountService.listDetail(plwr); + } + + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/HomeDataManualCollateController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/HomeDataManualCollateController.java index e15834d..57b1570 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/HomeDataManualCollateController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/HomeDataManualCollateController.java @@ -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 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/MqttMessageTestController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/MqttMessageTestController.java index e10f80d..7a6358f 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/MqttMessageTestController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/MqttMessageTestController.java @@ -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) diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java index b8716f7..17980fe 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java @@ -5,8 +5,6 @@ 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; @@ -15,11 +13,9 @@ 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.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.Dto.Result; import com.evotech.hd.common.core.utils.Collections; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +23,6 @@ import org.springframework.context.ApplicationContext; import org.springframework.web.bind.annotation.*; import java.util.Date; -import java.util.List; import java.util.Map; /** @@ -53,8 +48,8 @@ public class TestController { MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor; @Autowired private ApplicationContext applicationContext; -// @Resource -// VehicleService vehicleService; + @Resource + TradeService tradeService; // @Resource // MongoDBService mongoDBService; @@ -91,46 +86,55 @@ public class TestController { } + @GetMapping("/trade/{tradeId}") + public Result trade(@PathVariable(value = "tradeId") String tradeId) { - @GetMapping("/station") - public Result list() { - System.out.println("======>>开始......"); - BatteryStation station = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode,"FD12795455")); - // 查这天,这个站的预约 - List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper().eq("station_code", station.getCode()).eq("status", 1).eq("ucode","e2fb21b6447e10006f19a23e06b67914")); - // 根据预约生成订单 - if (orderPreList.isEmpty()) { - System.out.println("没有预约单"); - } - OrderSwapBatteryPre orderPre = orderPreList.get(0); - OrderSwapBattery order = new OrderSwapBattery(); - order.setOrderType(1); - order.setCtime(new Date()); - order.setCreater("TEST"); - order.setOrderPreId(orderPre.getPkId()); - order.setOrderPreUid(orderPre.getUcode()); - order.setOrderPreUname(orderPre.getUname()); - order.setOrderPrePhone(orderPre.getPhone()); - order.setOrderTime(new Date()); - order.setOrderNo(orderNo(station.getCode(), order.getOrderTime())); - order.setPlateNum(orderPre.getPlateNum()); - - order.setStationCode(orderPre.getStationCode()); - order.setStationName(orderPre.getStationName()); - order.setStatus(1); - order.setFeeType(3); - order.setDelFlag(0); - order.setRemark("测试用的"); - order.setChangeMode(1); - order.setChangeLane(1); - // 加上费用标准 - order = orderBasicFeeComponent.orderBasicFee(order); - - System.out.println(JSONUtil.toJsonStr(order)); - return new Result().success(order); + return new Result().success(JSONUtil.toJsonStr(tradeService.getById(tradeId))); } + + +// +// @GetMapping("/station") +// public Result list() { +// System.out.println("======>>开始......"); +// BatteryStation station = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode,"FD12795455")); +// // 查这天,这个站的预约 +// List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper().eq("station_code", station.getCode()).eq("status", 1).eq("ucode","e2fb21b6447e10006f19a23e06b67914")); +// // 根据预约生成订单 +// if (orderPreList.isEmpty()) { +// System.out.println("没有预约单"); +// } +// OrderSwapBatteryPre orderPre = orderPreList.get(0); +// OrderSwapBattery order = new OrderSwapBattery(); +// order.setOrderType(1); +// order.setCtime(new Date()); +// order.setCreater("TEST"); +// order.setOrderPreId(orderPre.getPkId()); +// order.setOrderPreUid(orderPre.getUcode()); +// order.setOrderPreUname(orderPre.getUname()); +// order.setOrderPrePhone(orderPre.getPhone()); +// order.setOrderTime(new Date()); +// order.setOrderNo(orderNo(station.getCode(), order.getOrderTime())); +// order.setPlateNum(orderPre.getPlateNum()); +// +// order.setStationCode(orderPre.getStationCode()); +// order.setStationName(orderPre.getStationName()); +// order.setStatus(1); +// order.setFeeType(3); +// order.setDelFlag(0); +// order.setRemark("测试用的"); +// order.setChangeMode(1); +// order.setChangeLane(1); +// // 加上费用标准 +// order = orderBasicFeeComponent.orderBasicFee(order); +// +// 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); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/service/MqttConfigService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/service/MqttConfigService.java index a2986c9..6007668 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/service/MqttConfigService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/service/MqttConfigService.java @@ -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); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRechargeDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRechargeDao.java index 0166256..393a549 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRechargeDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRechargeDao.java @@ -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; /** diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRefundDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRefundDao.java new file mode 100644 index 0000000..9212d75 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderRefundDao.java @@ -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 { +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java index 9d48006..f293a43 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java @@ -4,15 +4,13 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; - -import 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; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @author zrb @@ -57,4 +55,15 @@ public class MessageMqtt implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date ctime; + + public MessageMqtt() { + } + + public MessageMqtt(String stationCode, String direction, String type, String messageFunction, Date ctime) { + this.stationCode = stationCode; + this.direction = direction; + this.type = type; + this.messageFunction = messageFunction; + this.ctime = ctime; + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java index b4873f6..0e45440 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo; +import com.evotech.hd.common.core.Dto.home.HomeOrderInfo; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java index 252e224..c3a4cbf 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryProportionDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java index 09a4d7a..fc75711 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryHalfYearAmountDto; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java index 5f3244d..b28bd2e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java @@ -1,7 +1,7 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryHalfYearAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryProportionDto; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java index 21797e4..d6c9543 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryHalfYearAmountDto; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java new file mode 100644 index 0000000..251a680 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java @@ -0,0 +1,33 @@ +package com.evotech.hd.cloud.entity.vo; + +import com.evotech.hd.cloud.entity.MessageMqtt; +import lombok.Data; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:MqttMessageParam + * @date: 2025年05月19日 10:26 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class MqttMessageParam extends MessageMqtt { + + /*** + * 订单编号 + */ + String orderNo; + + public MqttMessageParam() { + } + + + public MqttMessageParam(String orderNo, String stationCode, String direction, String type, String messageFunction, Date ctime) { + super(stationCode, direction, type, messageFunction, ctime); + this.orderNo = orderNo; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttProperties.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttProperties.java index be38abe..07cc2fd 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttProperties.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttProperties.java @@ -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 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttPublishMessage.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttPublishMessage.java index 14b2235..002d80c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttPublishMessage.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttPublishMessage.java @@ -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 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttSubscribeService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttSubscribeService.java index 9a72990..3d43328 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttSubscribeService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttSubscribeService.java @@ -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 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 subscribe(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); + } + } + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MyMqttCallback.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MyMqttCallback.java index 9d10466..93f84f6 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MyMqttCallback.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MyMqttCallback.java @@ -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 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/EventFunctionTypesEnum.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/EventFunctionTypesEnum.java index 1a1a066..389cbd3 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/EventFunctionTypesEnum.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/EventFunctionTypesEnum.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/MessageTopic.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/MessageTopic.java index 94d8461..6ce4db7 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/MessageTopic.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/MessageTopic.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java index 20864fb..96d634b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java @@ -15,10 +15,13 @@ import java.io.Serializable; @Data public class MqttResponse implements Serializable { + private Integer code; private String msg; + private String dataId; + private T data; @@ -28,9 +31,21 @@ public class MqttResponse implements Serializable { static final Integer PARAMS_ERROR = 2; + public static final Integer PUBLIC_SUCCESS = SUCCESS; + public static final Integer PUBLIC_ERROR = ERROR; + + /*** + * 默认新创建的对象直接为错误 + */ public MqttResponse() { } + public MqttResponse createError(String dataId) { + this.code=ERROR; + this.dataId = dataId; + return this; + } + public MqttResponse success(T data){ this.code=SUCCESS; this.msg="成功"; @@ -43,6 +58,12 @@ public class MqttResponse implements Serializable { this.msg=errorMessage; return this; } + public MqttResponse error(T data, String errorMessage){ + this.code=ERROR; + this.msg=errorMessage; + this.data=data; + return this; + } public MqttResponse paramsError(String errorMessage){ this.code=PARAMS_ERROR; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryData.java index d36737e..8bbbcec 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryData.java @@ -2,16 +2,27 @@ package com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; @Data public class BatteryData { private String batCode; - @Schema(description = "生产日期", example = "yyyyMMdd") + @Schema(description = "生产日期", example = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private String productionDate; - @Schema(description = "注册时间", example = "yyyyMMdd") + @Schema(description = "注册时间", example = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private String registrationDate; + public BatteryData() { + } + + public BatteryData(String batCode, String productionDate, String registrationDate) { + this.batCode = batCode; + this.productionDate = productionDate; + this.registrationDate = registrationDate; + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryInfoResponse.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryInfoResponse.java index 8474358..3c6e25e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryInfoResponse.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/battery/BatteryInfoResponse.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/carinfo/CarInfoResponse.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/carinfo/CarInfoResponse.java index 2697908..4f491c2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/carinfo/CarInfoResponse.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/carinfo/CarInfoResponse.java @@ -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; + /** * 云端回复站端用户车辆数据 */ diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderByPlateNumResponse.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderByPlateNumResponse.java index 9234cb3..7712868 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderByPlateNumResponse.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderByPlateNumResponse.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderData.java index 80970d0..6cf052f 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/order/OrderData.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/preorder/PreOrderReq.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/preorder/PreOrderReq.java index 84f3a18..0fad419 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/preorder/PreOrderReq.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/preorder/PreOrderReq.java @@ -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; + /** * 站端预约订单 */ diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatus.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatus.java index 89c72f1..ac2627e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatus.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatus.java @@ -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; /** * 订单状态 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatusData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatusData.java index e22b04c..787c41f 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatusData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/OrderStatusData.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/SwapStep.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/SwapStep.java index 921d209..08e53d2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/SwapStep.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/state/SwapStep.java @@ -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; /** * 换电步骤 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/BatData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/BatData.java index d8487d6..d018d2c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/BatData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/BatData.java @@ -1,6 +1,7 @@ package com.evotech.hd.cloud.mqtt.message.dto.older; import lombok.Data; + import java.util.Date; import java.util.List; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/RateModeSyncReq.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/RateModeSyncReq.java index cca7cc8..1ca7fd0 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/RateModeSyncReq.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/RateModeSyncReq.java @@ -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{ diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/VehicleSyncReq.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/VehicleSyncReq.java index a4318b2..b28ee4b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/VehicleSyncReq.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/req/VehicleSyncReq.java @@ -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全部同步 删除站端 存储本次下发 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/ChargingData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/ChargingData.java index 5740313..a0580dd 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/ChargingData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/ChargingData.java @@ -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 { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/HdChargingData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/HdChargingData.java index 6acea6a..709dc0f 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/HdChargingData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/older/state/HdChargingData.java @@ -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 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EncryptKeyReqMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EncryptKeyReqMessageService.java index 6947455..e39d101 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EncryptKeyReqMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EncryptKeyReqMessageService.java @@ -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; /** * 请求密钥 处理 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java index da3fc83..137ab59 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java @@ -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 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().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().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().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().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().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().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().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().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); +// } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/KeepaliveMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/KeepaliveMessageService.java index 82b3098..85a2939 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/KeepaliveMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/KeepaliveMessageService.java @@ -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; /** diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java index b569a6f..55c97f2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java @@ -46,7 +46,7 @@ public class MessageUtilService { @Resource private MqttPublishMessage publishMessage; - + /** * 记录MQTT消息 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MqttMessageHandleService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MqttMessageHandleService.java index ec822e6..6ae0b6c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MqttMessageHandleService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MqttMessageHandleService.java @@ -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; } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java index 5d1d0fe..e571b25 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java @@ -1,52 +1,18 @@ package com.evotech.hd.cloud.mqtt.message.handle; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -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.baomidou.mybatisplus.extension.plugins.pagination.Page; -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.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryData; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryInfoReq; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryInfoResponse; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoReq; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoResponse; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.*; -import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.cloud.service.WechatUserService; -import com.evotech.hd.cloud.utils.CommonUtil; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -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.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -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.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 org.springframework.util.StringUtils; -import java.util.*; -import java.util.stream.Stream; +import java.util.Map; /** * request消息 处理 @@ -54,318 +20,20 @@ import java.util.stream.Stream; @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 mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class); + + Map 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 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 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() - .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() - .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 page = new Page(pageNo, pageSize); - do { - pageNo += 1; - page = new Page(pageNo, pageSize); - page = batteryStationDcDao.selectPage(page, new QueryWrapper().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 list = new ArrayList(); - 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 page = new Page(pageNo, pageSize); - do { - pageNo += 1; - page = new Page(pageNo, pageSize); - page = vehicleWechatUserRelationDao.selectPage(page, new QueryWrapper() - .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 list = new ArrayList(); - 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); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java index 02b314b..701e8ac 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java @@ -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 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 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().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().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().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().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().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; - } - } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/observer/listener/BatteryStationStopServerListener.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/observer/listener/BatteryStationStopServerListener.java index 814c0c1..7e17fbd 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/observer/listener/BatteryStationStopServerListener.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/observer/listener/BatteryStationStopServerListener.java @@ -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 preList = orderSwapBatteryService.findOrderSwapBatteryPreList(batteryStation.getCode()); + List preList = orderSwapBatteryPre.findOrderSwapBatteryPreList(batteryStation.getCode()); Map 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)); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/MqttStrategyExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/MqttStrategyExchangeProcessor.java index 5cf2a5c..2e03b03 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/MqttStrategyExchangeProcessor.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/MqttStrategyExchangeProcessor.java @@ -5,8 +5,6 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; @@ -37,17 +35,17 @@ public interface MqttStrategyExchangeProcessor { void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody); - default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, RequestFunctionTypesEnum typesEnum, MqttResponse response){ + + default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, MqttResponse response){ MessageUtilService messageUtilService = SpringUtil.getBean(MessageUtilService.class); // 发送 topic.setDataDirection("M2S"); - topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType()); - header.setFunction(typesEnum.getReFunction()); header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); - logger.info("\r\n=====>>>站端取消订单--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + logger.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))); } + /*** * 存储到mongoDB中 * @param database diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java new file mode 100644 index 0000000..50c3435 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java @@ -0,0 +1,231 @@ +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.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.OrderStatusData; +import com.evotech.hd.cloud.service.*; +import com.evotech.hd.cloud.service.rpc.WechatService; +import com.evotech.hd.cloud.utils.ParamServiceUtils; +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.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; + +/** + * 换电完成事件数据 + * + * @ClassName:MqttRequestBatteryInfoExchangeProcessorImpl + * @date: 2025年05月19日 17:41 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +@Slf4j +public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyEventExchangeProcessor { + + @Resource + 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) { + return EventFunctionTypesEnum.FUN_ORDEREVENT.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + SwapComplete orderStatus = JSONUtil.toBean(dataBody, SwapComplete.class); + OrderStatusData statusData = JSONUtil.toBean(dataBody.getJSONObject("statusData"), OrderStatusData.class); + + MqttResponse response = new MqttResponse(); + SwapCompleteConfirm swapRecordConfirm = new SwapCompleteConfirm(); + try { + // 订单状态更新处理 + handleOrderStatus(orderStatus, statusData); + response.setCode(MqttResponse.PUBLIC_SUCCESS); + 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()); + swapRecordConfirm.setAckStatus(MqttResponse.PUBLIC_ERROR); + swapRecordConfirm.setOrderNo(orderStatus.getOrderNo()); + swapRecordConfirm.setError(e.getMessage()); + } + response.setData(swapRecordConfirm); + sendAESMessage(topic, header, EventFunctionTypesEnum.FUN_ORDEREVENT, response); + } + + + /** + * 订单最终状态的更新 + * @param orderStatus + * @param statusData + */ + private void handleOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) { + + Order order = orderService.getOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderStatus.getOrderNo())); + if(ObjectUtils.isEmpty(order)){ + throw new RuntimeException("未找到订单信息"); + } + //更新订单状态 + order.setStatus(orderStatus.getStatus()); + 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().eq(OrderDetail::getOrderId, order.getPkId())); + orderDetail.setFeeType(ParamServiceUtils.getSettlementType()); + 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); + } + } + + + + /** + * 修改订单费用 + * @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() + .set("bat_code", statusData.getRentBatCode()) + .set("bat_soc", statusData.getRentBatSoc()) + .eq("plate_num", order.getPlateNum())); + //出租电池信息维护 + batteryStationDcService.update(new UpdateWrapper() + .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() + .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); + + } + } + + + + + + + /** + * 添加电池轨迹记录 + * + * @param orderStatus + * @param statusData + * @param osb + */ + private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, Order 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); + } + + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java new file mode 100644 index 0000000..b775ca7 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java @@ -0,0 +1,31 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum; +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 com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; + +/** + * 接口 + * + * @ClassName:MqttStrategyequestExchangeProcessor + * @date: 2025年06月19日 16:29 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface MqttStrategyEventExchangeProcessor extends MqttStrategyExchangeProcessor { + + + default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, EventFunctionTypesEnum typesEnum, MqttResponse response){ + topic.setMessageType(MqttMessageTypeEnum.CONFIRM.getType()); + header.setFunction(typesEnum.getReFunction()); + logger.info("\r\n=====>>>回复站端的EVENT消息--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + sendAESMessage(topic, header, response); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestBatteryInfoExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestBatteryInfoExchangeProcessorImpl.java new file mode 100644 index 0000000..6a826e2 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestBatteryInfoExchangeProcessorImpl.java @@ -0,0 +1,69 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +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.mqtt.message.dto.newer.req.battery.BatteryData; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryInfoReq; +import com.evotech.hd.cloud.service.BatteryStationDcService; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 站端请求电池数据 + * + * @ClassName:MqttRequestBatteryInfoExchangeProcessorImpl + * @date: 2025年05月19日 17:41 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +@Slf4j +public class MqttRequestBatteryInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { + + @Resource + BatteryStationDcService batteryStationDcService; + + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_BATTERYINFO.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + BatteryInfoReq batteryInfoReq = JSONUtil.toBean(dataBody, BatteryInfoReq.class); + String batCode = batteryInfoReq.getBatCode(); + //直接默认为错误 + MqttResponse> response = new MqttResponse>().createError(batteryInfoReq.getBatteryInfoRequestId()); + + List list = Collections.emptyList(); + if(org.apache.commons.lang3.StringUtils.isNotEmpty(batCode)){ + list.addAll(batteryStationDcService.list(new LambdaQueryWrapper().eq(BatteryStationDc::getBatCode, batCode).eq(BatteryStationDc::getDelFlag, HDConstant.DELETE_NO))); + }else{ + //如果没有电池编号, 则以当前站的电池数据为准 + list.addAll(batteryStationDcService.listByStationCode(topic.getStationCode())); + } + if(com.evotech.hd.common.core.utils.Collections.isNotEmpty(list)){ + response.setCode(MqttResponse.PUBLIC_SUCCESS); + response.setData(list.stream().map(x -> new BatteryData(x.getBatCode(), x.getProductionDate(), x.getRegistrationDate())).collect(Collectors.toList())); + }else { + response.setMsg("未查询到电池信息"); + } + + logger.info("\r\n站端请求电池数据: MqttRequestBatteryInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg()); + sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_BATTERYINFO, response); + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestBatterySwapExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestBatterySwapExchangeProcessorImpl.java new file mode 100644 index 0000000..5993ff5 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestBatterySwapExchangeProcessorImpl.java @@ -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().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()))); + } + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java new file mode 100644 index 0000000..d4b35bf --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java @@ -0,0 +1,51 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +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.OrderService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.utils.Collections; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +/** + * 取消订单请求类 + * @ClassName:MqttRequestCancelOrderExchangeProcessorImpl + * @date: 2025年05月19日 14:51 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class MqttRequestCancelOrderExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { + @Resource + OrderService orderService; + + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_CANCELORDER.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + String orderNo = dataBody.getStr("orderNo"); + Assert.hasText(orderNo, "orderNo is null"); + + Result updateResult = orderService.updateStatus(orderNo, 9); + MqttResponse response = null; + if(updateResult.getData()){ + response = new MqttResponse().success(JSONUtil.toJsonStr(Collections.asMap("orderNo", orderNo))); + }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); + + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCarInfoExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCarInfoExchangeProcessorImpl.java new file mode 100644 index 0000000..819217c --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCarInfoExchangeProcessorImpl.java @@ -0,0 +1,73 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.dto.newer.req.MqttResponse; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoReq; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData; +import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 站端请求车辆信息 + * @ClassName:MqttRequestCarInfoExchangeProcessorImpl + * @date: 2025年06月19日 11:21 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +@Slf4j +public class MqttRequestCarInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { + + @Resource + private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; + + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_CARINFO.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + CarInfoReq carInfoReq = JSONUtil.toBean(dataBody, CarInfoReq.class); + //直接默认为错误 + MqttResponse> response = new MqttResponse>().createError(carInfoReq.getCarInfoRequestId()); + String plateNum = carInfoReq.getPlateNum(); + if(StringUtils.isEmpty(plateNum)){ + response.setMsg("没有车牌号参数"); + }else{ + List list = vehicleWechatUserRelationDao.selectList(new LambdaQueryWrapper().eq( VehicleWechatUserRelation::getPlateNum, plateNum)); + if(com.evotech.hd.common.core.utils.Collections.isNotEmpty(list)){ + response.setCode(MqttResponse.PUBLIC_SUCCESS); + response.setData(list.stream().map(x->convertVehicleData(x)).collect(Collectors.toList())); + }else { + response.setMsg("未查询到车辆信息"); + } + } + + logger.info("\r\n站端请求车辆信息: MqttRequestCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg()); + sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CARINFO, response); + } + + + public static VehicleData convertVehicleData(VehicleWechatUserRelation data){ + VehicleData vd = new VehicleData(); + BeanUtils.copyProperties(data, vd); + return vd; + } + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java new file mode 100644 index 0000000..ba3d63a --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java @@ -0,0 +1,96 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +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.OrderSwapBatteryPreService; +import com.evotech.hd.cloud.service.WechatUserService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.common.core.entity.wechat.WechatUser; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.stream.Stream; + +/** + * 站端请求创建预约单类 + * + * @ClassName:MqttRequestPreOrderExchangeProcessorImpl + * @date: 2025年05月19日 17:41 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { + + @Resource + WechatUserService wechatUserService; + @Resource + OrderSwapBatteryPreService orderSwapBatteryPreService; + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_PREORDER.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + OrderSwapBatteryPre orderSwapBatteryPre = JSONUtil.toBean(dataBody, OrderSwapBatteryPre.class); + MqttResponse response = new MqttResponse().createError(orderSwapBatteryPre.getSourceId()); + // 1. 基础字段校验 + if (validateRequiredFields(orderSwapBatteryPre)) { + response.setMsg("预约信息不完整"); + }else { + //添加预约单 + WechatUser wechatUser =wechatUserService.selectUcode(orderSwapBatteryPre.getPhone(),orderSwapBatteryPre.getUname()); + if(ObjectUtils.isEmpty(wechatUser)){ + response.setMsg("未找到预约人信息"); + }else{ + // 创建预约单信息 + orderSwapBatteryPre.setUcode(wechatUser.getWuid()); + orderSwapBatteryPre.setSource(3); + Result integerResult = orderSwapBatteryPreService.addOrderSwapBatteryPre(orderSwapBatteryPre); + //检查结果 + if (integerResult.getData()){ + //返回成功 + response.setCode(MqttResponse.PUBLIC_SUCCESS); + }else{ + response.setMsg(integerResult.getMsg()); + } + } + } + + logger.info("\r\n站端请求创建预约单类: MqttRequestPreOrderExchangeProcessorImpl =====>>>message:{}", response.getMsg()); + sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_PREORDER, response); + + // 发送 +// 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))); + + + } + + + 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); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java index 57dc0f5..f9e570c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java @@ -6,8 +6,7 @@ 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.OrderSwapBatteryService; +import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; import com.evotech.hd.cloud.service.VehicleService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -27,12 +26,12 @@ import org.springframework.util.Assert; @Slf4j @Service -public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategyExchangeProcessor { +public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { @Resource VehicleService vehicleService; @Resource - OrderSwapBatteryService orderSwapBatteryService; + OrderSwapBatteryPreService orderSwapBatteryPreService; @Override public boolean accept(String functionName) { @@ -56,39 +55,18 @@ public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategy //如果response == null 则证明 车辆创建成功了 if(response == null){ //创建预约订单 - if (orderSwapBatteryService.addPreByPlateNum(plateNum, topic.getStationCode())){ + if (orderSwapBatteryPreService.addPreByPlateNum(plateNum, topic.getStationCode())){ //返回状态信息 response = new MqttResponse().success("预约单初始化完成"); }else{ response = new MqttResponse().error("车辆初始化完成, 但是预约单创建失败了"); } } -// if (vehicleService.existsVehicleByPlateNum(plateNum)){ -// //创建预约订单 -// if (orderSwapBatteryService.addPreByPlanNum(plateNum, topic.getStationCode())){ -// //返回状态信息 -// response = new MqttResponse().success("预约单初始化完成"); -// }else{ -// response = new MqttResponse().error("车辆初始化完成, 但是预约单创建失败了"); -// } -// }else{ -// //没有车辆信息, 开始创建 -// if(vehicleService.createVehicleByPlateNum(plateNum, topic.getStationCode())){ -// //创建预约订单 -// if (orderSwapBatteryService.addPreByPlanNum(plateNum, topic.getStationCode())){ -// //返回状态信息 -// response = new MqttResponse().success("预约单初始化完成"); -// }else{ -// response = new MqttResponse().error("车辆初始化完成, 但是预约单创建失败了"); -// } -// }else{ -// response = new MqttResponse().error("创建车辆信息失败了"); -// } -// -// } }else{ response = new MqttResponse().error("参数不全, 没有车牌号信息"); } + + logger.info("\r\n接收站端推送的车牌照, 创建车辆信息和预约单: MqttRequestPushCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_PUSH_CAR_INFO, response); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestQueryOrderExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestQueryOrderExchangeProcessorImpl.java new file mode 100644 index 0000000..e88c404 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestQueryOrderExchangeProcessorImpl.java @@ -0,0 +1,105 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.core.date.DatePattern; +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.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.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; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 站端根据车牌号查询订单 + * + * @ClassName:MqttRequestQueryOrderExchangeProcessorImpl + * @date: 2025年05月19日 17:41 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +@Slf4j +public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { + + @Resource + OrderService orderService; + @Resource + OrderSwapBatteryPreService OrderSwapBatteryPreService; + @Resource + private OrderSwapBatteryStepService orderSwapBatteryStepService; + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_ORDERBYPLATENUM.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + OrderByPlateNumReq orderByPlateNumReq = JSONUtil.toBean(dataBody, OrderByPlateNumReq.class); + //直接默认为错误 + MqttResponse response = new MqttResponse().createError(orderByPlateNumReq.getOrderRequestId()); + // 查预约 + OrderSwapBatteryPre orderSwapBatteryPre = OrderSwapBatteryPreService.getOne(new LambdaQueryWrapper() + .eq(OrderSwapBatteryPre::getPlateNum, orderByPlateNumReq.getPlateNum()) + .eq(OrderSwapBatteryPre::getStationCode, orderByPlateNumReq.getStationCode()) + .eq(OrderSwapBatteryPre::getStatus, 1) + .eq(OrderSwapBatteryPre::getSwapDay, DateUtil.format(new Date(), DatePattern.PURE_DATE_FORMATTER)) + .last("limit 1")); + if (ObjectUtils.isEmpty(orderSwapBatteryPre)) { + response.setMsg("车辆未预约,请扫码进入"); + } else { + Order order = orderService.getOne(new LambdaQueryWrapper() + .eq(Order::getPlateNum, orderSwapBatteryPre.getPlateNum()) + .eq(Order::getStationCode, orderSwapBatteryPre.getStationCode()) + .eq(Order::getOrderPreId, orderSwapBatteryPre.getPkId()) + .eq(Order::getStatus, OrderStatusEnums.CREATE.getCode())); + if (ObjectUtils.isNotEmpty(order)) { + response.setCode(MqttResponse.PUBLIC_SUCCESS); + }else{ + Result result = orderService.addOrderByPre(orderSwapBatteryPre); + //如果不等于成功 + if(!CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + response.setMsg(result.getMsg()); + }else{ + order = result.getData(); + response.setCode(MqttResponse.PUBLIC_SUCCESS); + } + } + 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); + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestStrategyExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestStrategyExchangeProcessorImpl.java index 628e2a1..4a2f465 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestStrategyExchangeProcessorImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestStrategyExchangeProcessorImpl.java @@ -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.BatteryStationCdStrategyService; import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy; import jakarta.annotation.Resource; @@ -26,7 +25,7 @@ import java.util.List; */ @Slf4j @Service -public class MqttRequestStrategyExchangeProcessorImpl implements MqttStrategyExchangeProcessor { +public class MqttRequestStrategyExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor { @Resource BatteryStationCdStrategyService batteryStationCdStrategyService; @@ -48,6 +47,8 @@ public class MqttRequestStrategyExchangeProcessorImpl implements MqttStrategyExc log.info("MqttRequestStrategyExchangeProcessorImpl-->>>>> 查询到的策略信息{}", JSONUtil.toJsonStr(list)); response = new MqttResponse>().success(list); } + + logger.info("\r\nMqtt查询充电策略: MqttRequestStrategyExchangeProcessorImpl=====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_STRATEGY_INFO, response); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttStrategyRequestExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttStrategyRequestExchangeProcessor.java new file mode 100644 index 0000000..9b1c417 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttStrategyRequestExchangeProcessor.java @@ -0,0 +1,32 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; + +/** + * 接口 + * + * @ClassName:MqttStrategyequestExchangeProcessor + * @date: 2025年06月19日 16:29 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface MqttStrategyRequestExchangeProcessor extends MqttStrategyExchangeProcessor { + + + + default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, RequestFunctionTypesEnum typesEnum, MqttResponse response){ + topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType()); + header.setFunction(typesEnum.getReFunction()); + logger.info("\r\n=====>>>回复站端的REQUEST消息--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + sendAESMessage(topic, header, response); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateBatDataDataExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateBatDataDataExchangeProcessor.java index c9718f6..1a3e017 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateBatDataDataExchangeProcessor.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateBatDataDataExchangeProcessor.java @@ -5,7 +5,6 @@ import cn.hutool.json.JSONUtil; 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.processor.strategy.MqttStrategyExchangeProcessor; import com.evotech.hd.common.constant.MongoConstant; import com.evotech.hd.common.documnet.BatData; import lombok.extern.slf4j.Slf4j; @@ -23,7 +22,7 @@ import org.springframework.util.StringUtils; */ @Slf4j @Service -public class MqttStateBatDataDataExchangeProcessor implements MqttStrategyExchangeProcessor { +public class MqttStateBatDataDataExchangeProcessor implements MqttStrategyStateExchangeProcessor { @Override public boolean accept(String functionName) { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateChargingDataExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateChargingDataExchangeProcessor.java index c736ccf..8b31650 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateChargingDataExchangeProcessor.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateChargingDataExchangeProcessor.java @@ -5,7 +5,6 @@ import cn.hutool.json.JSONUtil; 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.processor.strategy.MqttStrategyExchangeProcessor; import com.evotech.hd.common.constant.MongoConstant; import com.evotech.hd.common.documnet.ChargingData; import lombok.extern.slf4j.Slf4j; @@ -23,7 +22,7 @@ import org.springframework.util.StringUtils; */ @Slf4j @Service -public class MqttStateChargingDataExchangeProcessor implements MqttStrategyExchangeProcessor { +public class MqttStateChargingDataExchangeProcessor implements MqttStrategyStateExchangeProcessor { @Override public boolean accept(String functionName) { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateOrderStatusDataExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateOrderStatusDataExchangeProcessor.java new file mode 100644 index 0000000..62d21fa --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateOrderStatusDataExchangeProcessor.java @@ -0,0 +1,42 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state; + +import cn.hutool.json.JSONObject; +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.utils.components.HDStepDictComponent; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 站端反馈订单状态 + * + * @ClassName:MqttStateSwapStepDataExchangeProcessor + * @date: 2025年04月29日 13:26 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +@Service +public class MqttStateOrderStatusDataExchangeProcessor implements MqttStrategyStateExchangeProcessor { + + @Resource + private HDStepDictComponent hdStepDictComponent; + @Resource + private OrderSwapBatteryStepDao orderSwapBatteryStepDao; + + @Override + public boolean accept(String functionName) { + return StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { +// OrderStatus orderStatus = JSONUtil.toBean(dataBody, OrderStatus.class); +// OrderStatusData statusData = JSONUtil.toBean(dataBody.getJSONObject("statusData"), OrderStatusData.class); + log.info("\r\n=====>>>站端反馈订单状态--MQTT收到消息主题:{},换电步骤名称:{}",topic, dataBody.toString()); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java index 0e78984..5f4c5c2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java @@ -5,7 +5,6 @@ import cn.hutool.json.JSONUtil; 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.processor.strategy.MqttStrategyExchangeProcessor; import com.evotech.hd.cloud.service.BatteryStationService; import com.evotech.hd.common.constant.MongoConstant; import com.evotech.hd.common.documnet.StationState; @@ -24,7 +23,7 @@ import org.springframework.stereotype.Service; */ @Slf4j @Service -public class MqttStateStationStateExchangeProcessor implements MqttStrategyExchangeProcessor { +public class MqttStateStationStateExchangeProcessor implements MqttStrategyStateExchangeProcessor { @Resource BatteryStationService batteryStationService; @@ -43,7 +42,13 @@ public class MqttStateStationStateExchangeProcessor implements MqttStrategyExcha * fire: 获取消防告警信号 0-未知;1-正常;2-告警 */ //通知云端站做状态调整 - batteryStationService.updateStatusByAlarm(topic.getStationCode(), dataBody.getInt("state"), dataBody.getStr("smoke"), dataBody.getInt("fire")); - saveMongoDB(topic, MongoConstant.STATION_INFO_BASE, header.getFunction(),new StationState(dataBody.toString())); + try { + batteryStationService.updateStatusByAlarm(topic.getStationCode(), dataBody.getInt("state"), dataBody.getStr("smoke"), dataBody.getInt("fire")); + } catch (Exception e) { + log.error("更改云端数据信息出错"+e.getMessage()); + }finally { + saveMongoDB(topic, MongoConstant.STATION_INFO_BASE, header.getFunction(),new StationState(dataBody.toString())); + } + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateSwapStepDataExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateSwapStepDataExchangeProcessor.java new file mode 100644 index 0000000..47f774d --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateSwapStepDataExchangeProcessor.java @@ -0,0 +1,65 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state; + +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.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.SwapStep; +import com.evotech.hd.cloud.service.OrderService; +import com.evotech.hd.cloud.service.OrderSwapBatteryStepService; +import com.evotech.hd.cloud.service.rpc.WechatService; +import com.evotech.hd.cloud.utils.components.HDStepDictComponent; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +import com.evotech.hd.common.core.entity.order.Order; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 站端反馈换电步骤类 + * + * @ClassName:MqttStateSwapStepDataExchangeProcessor + * @date: 2025年04月29日 13:26 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +@Service +public class MqttStateSwapStepDataExchangeProcessor implements MqttStrategyStateExchangeProcessor { + + @Resource + private HDStepDictComponent hdStepDictComponent; + @Resource + private OrderSwapBatteryStepService orderSwapBatteryStepService; + @Resource + private OrderService orderService; + @Resource + private WechatService wechatService; + + @Override + public boolean accept(String functionName) { + return StateFunctionTypesEnum.FUN_SWAPSTEP.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + 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(swapStep.getStep())); + if(orderSwapBatteryStepService.addOrderSwapBatteryStepBySwapComplete(swapStep.getOrderNo(), swapStep.getStep(), swapStep.getStepTime())){ + Order order = orderService.getOne(new LambdaQueryWrapper().eq(Order::getOrderNo, swapStep.getOrderNo()).eq(Order::getDelFlag, HDConstant.DELETE_NO)); + //发送通知到指定客户端 + wechatService.sendClientMessage(order.getPreWechatId(), JSON.toJSONString(orderSwapBatteryStepService.list(new LambdaQueryWrapper().eq(OrderSwapBatteryStep::getOrderNo, order.getOrderNo()).orderByAsc(OrderSwapBatteryStep::getStepTime)))); + } + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStrategyStateExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStrategyStateExchangeProcessor.java new file mode 100644 index 0000000..b3faf04 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStrategyStateExchangeProcessor.java @@ -0,0 +1,16 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state; + +import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; + +/** + * 接口 + * + * @ClassName:MqttStrategyStateExchangeProcessor + * @date: 2025年06月19日 16:29 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface MqttStrategyStateExchangeProcessor extends MqttStrategyExchangeProcessor { + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java index 7e9a5db..801acfc 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java @@ -1,11 +1,11 @@ package com.evotech.hd.cloud.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +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 java.util.List; + public interface BatteryStationCdStrategyService { public Result add(BatteryStationCdStrategy bscs); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDcService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDcService.java index 4626d83..8ce6b79 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDcService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDcService.java @@ -1,13 +1,15 @@ package com.evotech.hd.cloud.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.evotech.hd.cloud.entity.request.PageListBatteryStationDcRequest; -import com.evotech.hd.common.core.entity.Result; +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; -public interface BatteryStationDcService { +import java.util.List; + +public interface BatteryStationDcService extends IService { public Result add(BatteryStationDc bsdc); @@ -15,11 +17,13 @@ public interface BatteryStationDcService { public Result update(BatteryStationDc bsdc); - public Result> list(PageListBatteryStationDcRequest plbsdcr); + public Result> list(PageListBatteryStationDcRequest plbsdcr); public Result> listTrace(String batteryCode); public Result addTrace(BatteryTrace bt); public Result deleteTrace(Integer id); + + public List listByStationCode(String stationCode); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDccService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDccService.java index 4b79ac1..9980c77 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDccService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDccService.java @@ -1,9 +1,8 @@ package com.evotech.hd.cloud.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.request.PageListBatteryStationDccRequest; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationDcc; public interface BatteryStationDccService { @@ -14,6 +13,6 @@ public interface BatteryStationDccService { public Result update(BatteryStationDcc bsdcc); - public Result> list(PageListBatteryStationDccRequest plbsDccr); + public Result> list(PageListBatteryStationDccRequest plbsDccr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDjService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDjService.java index 0dc2378..edd6fcf 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDjService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationDjService.java @@ -1,9 +1,8 @@ package com.evotech.hd.cloud.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.request.PageListBatteryStationDjRequest; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationDj; public interface BatteryStationDjService { @@ -14,6 +13,6 @@ public interface BatteryStationDjService { public Result update(BatteryStationDj bsdj); - public Result> list(PageListBatteryStationDjRequest plbsdjr); + public Result> list(PageListBatteryStationDjRequest plbsdjr); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardDetailService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardDetailService.java index ec16780..eff020f 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardDetailService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardDetailService.java @@ -1,10 +1,10 @@ package com.evotech.hd.cloud.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail; +import java.util.List; + public interface BatteryStationHdFeeStandardDetailService { public Result add(BatteryStationHdFeeStandardDetail bsfsd); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardService.java index 602cdd1..e26bdcb 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationHdFeeStandardService.java @@ -1,10 +1,10 @@ package com.evotech.hd.cloud.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard; +import java.util.List; + public interface BatteryStationHdFeeStandardService { public Result add(BatteryStationHdFeeStandard bsfs); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationRobotService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationRobotService.java index 556260d..b3472fc 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationRobotService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationRobotService.java @@ -1,10 +1,10 @@ package com.evotech.hd.cloud.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot; +import java.util.List; + public interface BatteryStationRobotService { public Result add(BatteryStationRobot bsr); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java index 3519b65..20eb02a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationService.java @@ -1,5 +1,6 @@ package com.evotech.hd.cloud.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStation; @@ -11,17 +12,18 @@ import java.util.Map; public interface BatteryStationService { - public com.evotech.hd.common.core.entity.Result add(BatteryStation bs); + public Result add(BatteryStation bs); - public com.evotech.hd.common.core.entity.Result delete(Integer id); + public Result delete(Integer id); - public com.evotech.hd.common.core.entity.Result update(BatteryStation bs); + public Result update(BatteryStation bs); - public com.evotech.hd.common.core.entity.Result> list(PageListBatteryStationRequest plbsr); + public Result> list(PageListBatteryStationRequest plbsr); + + + - public com.evotech.hd.common.core.entity.Result> listStation(String plateNum); - - public com.evotech.hd.common.core.entity.Result> RsaSecretKey(String stationCode); + public Result> RsaSecretKey(String stationCode); public void getQRCode2(String path, String width, String env_version, HttpServletResponse response); @@ -29,6 +31,10 @@ public interface BatteryStationService { public void downloadQRCode2(String path, String width, HttpServletResponse response); + + + + public Result> loginList(String proxyId); public Result> resourceList(String pkIds); @@ -45,4 +51,11 @@ public interface BatteryStationService { */ Boolean updateStatusByAlarm(String stationCode, Integer state, String smoke, Integer fire); + /*** + * 微信首页地图加载站位置信息 + * @param longitudeAndLatitude 经纬度 + * @param plateNum 车牌号 + * @return + */ + public Result> listStation(String longitudeAndLatitude, String plateNum); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java index 5997d83..fafc002 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/CompanyService.java @@ -1,5 +1,6 @@ package com.evotech.hd.cloud.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; import com.evotech.hd.common.core.entity.cloud.Company; @@ -9,15 +10,15 @@ import java.util.Map; public interface CompanyService { - public com.evotech.hd.common.core.entity.Result add(Company company); + public Result add(Company company); - public com.evotech.hd.common.core.entity.Result delete(Integer id); + public Result delete(Integer id); - public com.evotech.hd.common.core.entity.Result update(Company company); + public Result update(Company company); - public com.evotech.hd.common.core.entity.Result> list(BasePageRequest bpr); + public Result> list(BasePageRequest bpr); - public com.evotech.hd.common.core.entity.Result> companyByCode(String ccode); + public Result> companyByCode(String ccode); public Result loginOne(String code); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java index a80dc5c..d151dab 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java @@ -1,7 +1,7 @@ package com.evotech.hd.cloud.service; -import com.evotech.hd.common.core.Dto.DeviceDto; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.device.DeviceDto; import java.util.List; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeDataManualCollateService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeDataManualCollateService.java index 272747e..e5c1e74 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeDataManualCollateService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeDataManualCollateService.java @@ -1,6 +1,7 @@ package com.evotech.hd.cloud.service; -import com.evotech.hd.common.core.entity.Result; + +import com.evotech.hd.common.core.Dto.Result; public interface HomeDataManualCollateService { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java index d5c71c7..160190b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java @@ -1,6 +1,5 @@ package com.evotech.hd.cloud.service; -import com.evotech.hd.cloud.entity.request.HomeDataRequest; import com.evotech.hd.cloud.entity.vo.*; import com.evotech.hd.common.core.Dto.Result; @@ -43,21 +42,21 @@ public interface HomeService { * @return */ Result> alarmData(); - - public Result homeData1(HomeDataRequest hd); - - public Result homeData2(); - - public Result homeData3(HomeDataRequest hd); - - public Result homeData4(HomeDataRequest hd); - - public Result> homeData5(HomeDataRequest hd); - - public Result> homeData6(HomeDataRequest hd); - - public Result homeData7(Integer type); - - public void loginData(); +// +// public Result homeData1(HomeDataRequest hd); +// +// public Result homeData2(); +// +// public Result homeData3(HomeDataRequest hd); +// +// public Result homeData4(HomeDataRequest hd); +// +// public Result> homeData5(HomeDataRequest hd); +// +// public Result> homeData6(HomeDataRequest hd); +// +// public Result homeData7(Integer type); +// +// public void loginData(); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java index 1a134f6..1d10c1a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java @@ -1,17 +1,19 @@ package com.evotech.hd.cloud.service; -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.common.core.entity.Result; +import com.evotech.hd.cloud.entity.vo.MqttMessageParam; +import com.evotech.hd.common.core.Dto.Result; public interface MessageMqttService { - public Result> list(PageListMessageMqttRequest plmmr); + public Result> list(PageListMessageMqttRequest plmmr); public Result add(MessageMqtt message); public Result del(); + public MessageMqtt getOne(MqttMessageParam param); + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderDetailService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderDetailService.java new file mode 100644 index 0000000..c9e215c --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderDetailService.java @@ -0,0 +1,16 @@ +package com.evotech.hd.cloud.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.common.core.entity.order.OrderDetail; + +/** + * 接口 + * + * @ClassName:OrderDetailService + * @date: 2025年06月19日 17:24 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderDetailService extends IService { +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRechargeService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRechargeService.java index 7a7cac9..e93799c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRechargeService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRechargeService.java @@ -1,10 +1,12 @@ package com.evotech.hd.cloud.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.request.PageListRechargeOrderRequest; -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.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.OrderRecharge; + +import java.util.List; public interface OrderRechargeService { @@ -14,6 +16,14 @@ public interface OrderRechargeService { public Result update(OrderRecharge or); - public Result> list(PageListRechargeOrderRequest plror); + public Result> list(PageListRechargeOrderRequest plror); + /*** + * 查询允许退款的订单 + * @param wechatId + * @return + */ + Result> refundList(String wechatId); + + void addByTradeDetail(TradeDetail tradeDetail); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRefundService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRefundService.java new file mode 100644 index 0000000..66b6d1b --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderRefundService.java @@ -0,0 +1,26 @@ +package com.evotech.hd.cloud.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.OrderRefund; + +import java.util.List; + +/** + * 退款订单接口 + * + * @ClassName:OrderRefundService + * @date: 2025年06月30日 14:23 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderRefundService extends IService { + + Result addAll(List list); + + Result orderNoOne(String orderNo); + + void updateByTradeDetail(TradeDetail tradeDetail); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java new file mode 100644 index 0000000..edb8ee9 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java @@ -0,0 +1,76 @@ +package com.evotech.hd.cloud.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.cloud.entity.vo.NativePayVO; +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.OrderSwapBatteryPre; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +/** + * 订单接口 + * @ClassName:OrderService + * @date: 2025年05月16日 13:56 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderService extends IService { + + /*** + * 云平台查询订单列表 + * @param plsor + * @return + */ + Result> pageList(PageListSwapOrderRequest plsor); + /*** + * 订单结算 + * @param osb + * @return + */ + public Result calculateCost(Order osb); + + /*** + * 更改订单状态信息 + */ + public Result updateStatus(String orderNo, Integer status); + + public Result addOrderByPre(OrderSwapBatteryPre orderSwapBatteryPre); + + /*** + * 开始换电 + */ + public Result startSwap(String wuid, String orderNo); + /*** + * 查询公司订单 + */ + Result> listByCompany(PageListSwapOrderRequest plsor); + /*** + * 查询换电步骤 + */ + Result> listStep(@NotBlank String orderNo); + /* + 个人账户余额支付 + */ + Result walletPay(String orderNo, String wuid, String uname); + + Result companyNativePay(NativePayVO prePay); + + Result orderQuery(String outTradeNo); + + Result cancelOrder(@NotNull String orderNo,Integer status); + + Result checkList(PageListSwapOrderRequest plsor); + + Result getStartSwap(String wuid, String orderId); + + Result one(String orderNo); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java new file mode 100644 index 0000000..f1bd5b6 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java @@ -0,0 +1,33 @@ +package com.evotech.hd.cloud.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +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 java.util.List; + +/** + * 预约单接口 + * + * @ClassName:OrderSwapBatteryPreService + * @date: 2025年05月19日 16:16 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderSwapBatteryPreService extends IService { + + public Boolean addPreByPlateNum(String plateNum, String stationCode); + + public Result addOrderSwapBatteryPre(OrderSwapBatteryPre orderSwapBatteryPre); + + public Result> list(PageListSwapOrderPreRequest plsopr); + + public Result cancelPre(Integer id, Integer status); + + List findOrderSwapBatteryPreList(String stationCode); + + public Boolean clearOrderSwapBatteryPre(List ids); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java index 75ef1b5..2bdf49e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java @@ -1,63 +1,63 @@ -package com.evotech.hd.cloud.service; - -import com.evotech.hd.cloud.entity.vo.NativePayVO; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; - -import java.text.ParseException; -import java.util.List; - -public interface OrderSwapBatteryService { - - public Result addPre(OrderSwapBatteryPre osbp); - - public Result cancelPre(Integer id, Integer status); - - public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException; - - public Result add(OrderSwapBattery osb); - - public Result delete(Integer id); - - public Result update(OrderSwapBattery osb); - - public Result> list(PageListSwapOrderRequest plsor); - - public Result> listByCompany(PageListSwapOrderRequest plsor); - - public Result> listStep(String orderNo); - - public Result calculateCost1(String orderNo, OrderStatusData statusData); - - public Result calculateCost(OrderSwapBattery osb); - - public Result walletPay(String orderNo, String wuid, String uname); - - public Result companyNativePay(NativePayVO prePay); - - public Result orderQuery(String outTradeNo); - - - public Result cancelOrder(String orderNo, Integer status); - - public Result markOrderAsExpired(Integer pkId); - - public Result startSwap(String wuid,String orderId); - - public Result getStartSwap(String wuid, String orderId); - - public Result checkList(PageListSwapOrderRequest plsor); - - - public Boolean addPreByPlateNum(String plateNum, String stationCode); - - public List findOrderSwapBatteryPreList(String stationCode); - - Boolean clearOrderSwapBatteryPre(List ids); -} +//package com.evotech.hd.cloud.service; +// +//import com.evotech.hd.cloud.entity.vo.NativePayVO; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +//import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +//import com.evotech.hd.common.core.entity.cloud.vo.OrderVo; +// +//import java.text.ParseException; +//import java.util.List; +// +//public interface OrderSwapBatteryService { +// +// public Result addPre(OrderSwapBatteryPre osbp); +// +// public Result cancelPre(Integer id, Integer status); +// +// public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException; +// +//// public Result add(OrderSwapBattery osb); +// +// public Result delete(Integer id); +// +//// public Result update(OrderSwapBattery osb); +// +//// public Result> list(PageListSwapOrderRequest plsor); +// +// public Result> listByCompany(PageListSwapOrderRequest plsor); +// +// public Result> listStep(String orderNo); +// +// public Result calculateCost1(String orderNo, OrderStatusData statusData); +// +//// public Result calculateCost(OrderSwapBattery osb); +// +// public Result walletPay(String orderNo, String wuid, String uname); +// +// public Result companyNativePay(NativePayVO prePay); +// +// public Result orderQuery(String outTradeNo); +// +// +// public Result cancelOrder(String orderNo, Integer status); +// +// public Result markOrderAsExpired(Integer pkId); +// +// public Result startSwap(String wuid,String orderId); +// +// public Result getStartSwap(String wuid, String orderId); +// +// public Result checkList(PageListSwapOrderRequest plsor); +// +// +// public Boolean addPreByPlateNum(String plateNum, String stationCode); +// +// public List findOrderSwapBatteryPreList(String stationCode); +// +// Boolean clearOrderSwapBatteryPre(List ids); +//} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java new file mode 100644 index 0000000..50bb024 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java @@ -0,0 +1,19 @@ +package com.evotech.hd.cloud.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; + +import java.util.Date; + +/** + * 换电步骤 + * @ClassName:OrderSwapBatteryStepService + * @date: 2025年06月23日 15:53 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderSwapBatteryStepService extends IService { + + public Boolean addOrderSwapBatteryStepBySwapComplete(String orderNo, Integer step, Date stepTime); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/SysParamService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/SysParamService.java new file mode 100644 index 0000000..b5f34f4 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/SysParamService.java @@ -0,0 +1,25 @@ +package com.evotech.hd.cloud.service; + +import com.evotech.hd.common.core.entity.system.SysParam; + +/** + * 接口 + * + * @ClassName:SysParamService + * @date: 2025年07月02日 14:36 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface SysParamService{ + + /*** + * 获取数据信息 + * @param name + * @param code + * @param defVal + * @param des + * @return + */ + public SysParam getSysParam(String name, String code, String defVal, String des); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TradeService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TradeService.java index 766370e..c9972ee 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TradeService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TradeService.java @@ -1,12 +1,14 @@ package com.evotech.hd.cloud.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.cloud.entity.request.PageListTradeRequest; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; + import java.util.List; -import com.evotech.hd.cloud.entity.request.PageListTradeRequest; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.TradeDetail; - -public interface TradeService { +public interface TradeService extends IService { public Result add(TradeDetail td); @@ -14,7 +16,7 @@ public interface TradeService { public Result update(TradeDetail td); - public Result> list(PageListTradeRequest pltr); + public Result> list(PageListTradeRequest pltr); public List tradeList(PageListTradeRequest pltr); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java index 8a0909c..cd6777a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java @@ -1,5 +1,7 @@ package com.evotech.hd.cloud.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import com.evotech.hd.cloud.entity.request.PageListVehicleRequest; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; @@ -7,27 +9,27 @@ import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; import java.util.List; -public interface VehicleService { +public interface VehicleService extends IService { - public com.evotech.hd.common.core.entity.Result add(VehicleInfo vi); + public Result add(VehicleInfo vi); - public com.evotech.hd.common.core.entity.Result delete(Integer id); + public Result delete(Integer id); - public com.evotech.hd.common.core.entity.Result update(VehicleInfo vi); + public Result update(VehicleInfo vi); - public com.evotech.hd.common.core.entity.Result> list(PageListVehicleRequest plvr); + public Result> list(PageListVehicleRequest plvr); - public com.evotech.hd.common.core.entity.Result companyRelation(String plateNum, String ccode, String cname); + public Result companyRelation(String plateNum, String ccode, String cname); - public com.evotech.hd.common.core.entity.Result delCompanyRelation(String plateNum); + public Result delCompanyRelation(String plateNum); - public com.evotech.hd.common.core.entity.Result addWechatUserRelation(VehicleWechatUserRelation relation); + public Result addWechatUserRelation(VehicleWechatUserRelation relation); - public com.evotech.hd.common.core.entity.Result deleteWechatUserRelation(Integer id); + public Result deleteWechatUserRelation(Integer id); - public com.evotech.hd.common.core.entity.Result> listWechatUserRelation(String openid, String plateNum); + public Result> listWechatUserRelation(String openid, String plateNum); - public com.evotech.hd.common.core.entity.Result> listRelationUser(String PlantNo); + public Result> listRelationUser(String PlantNo); public Result> loginList(String companyCode); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java index f3958c5..e7cbce7 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java @@ -1,15 +1,15 @@ package com.evotech.hd.cloud.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +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; -public interface WalletAccountService { +public interface WalletAccountService extends IService { public Result add(WalletAccount wa); @@ -17,13 +17,13 @@ public interface WalletAccountService { public Result update(WalletAccount wa); - public Result> list(PageListWalletRequest plwr); + public Result> list(PageListWalletRequest plwr); public Result addDetail(WalletAccountDetail wad); public Result deleteDetail(Integer id, String code); - public Result> listDetail(PageListWalletRequest plwr); + public Result isOpenAccount(String wuid); @@ -31,7 +31,13 @@ public interface WalletAccountService { public Result getPayAttach(String wuid); - public Result updateName(WalletAccount wa); + public WalletAccount getDetailById(String outTradeNo); + + public com.evotech.hd.common.core.Dto.Result> listDetail(PageListWalletRequest plwr); + + public com.evotech.hd.common.core.Dto.Result getWalletAccountByWechatId(String wechatId); + + public com.evotech.hd.common.core.Dto.Result updateWechat(WalletAccount wa); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java index 4e07481..661d753 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java @@ -1,14 +1,13 @@ package com.evotech.hd.cloud.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.entity.request.PageListWechatUserRequest; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.wechat.WechatUser; public interface WechatUserService { - public Result> list(PageListWechatUserRequest plwur); + public Result> list(PageListWechatUserRequest plwur); public Result alterPhone(String wuid, String phone, String name); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java new file mode 100644 index 0000000..7668dfe --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java @@ -0,0 +1,37 @@ +package com.evotech.hd.cloud.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.utils.Collections; +import org.springframework.beans.BeanUtils; + +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * + * 类 + * @ClassName:BaseServiceImpl + * @date: 2025年05月16日 14:55 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@SuppressWarnings("unchecked") +public class BaseServiceImpl, T, D> extends ServiceImpl { + + Page selectPage(Page page, Wrapper queryWrapper, Function function){ + Page result = new Page(); + page = getBaseMapper().selectPage(page,queryWrapper); + BeanUtils.copyProperties(page, result, "records"); + if(Collections.isNotEmpty(result.getRecords())){ + result.setRecords(page.getRecords().stream().map(t ->{ + return function.apply(t); + }).collect(Collectors.toList())); + } + + return result; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java index e1a2487..d39e6c1 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java @@ -1,24 +1,22 @@ package com.evotech.hd.cloud.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDao; +import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDetailDao; +import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy; +import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategyDetail; +import com.evotech.hd.common.core.enums.CodeMsg; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import java.util.ArrayList; import java.util.Date; import java.util.List; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; -import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDao; -import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDetailDao; -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.evotech.hd.common.core.enums.CodeMsg; - -import jakarta.annotation.Resource; - @Service public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStrategyService { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java index ca123e0..1ed7e8d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java @@ -1,28 +1,27 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evotech.hd.cloud.dao.BatteryStationDcDao; import com.evotech.hd.cloud.dao.BatteryTraceDao; 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.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; import com.evotech.hd.common.core.entity.cloud.BatteryTrace; import com.evotech.hd.common.core.enums.CodeMsg; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service -public class BatteryStationDcServiceImpl implements BatteryStationDcService { +public class BatteryStationDcServiceImpl extends ServiceImpl implements BatteryStationDcService { @Resource private BatteryStationDcDao batteryStationDcDao; @@ -71,16 +70,16 @@ public class BatteryStationDcServiceImpl implements BatteryStationDcService { } @Override - public Result> list(PageListBatteryStationDcRequest plbsdcr) { + public Result> list(PageListBatteryStationDcRequest plbsdcr) { Page page = new Page(plbsdcr.getPageNo(), plbsdcr.getPageSize()); page = batteryStationDcDao.selectPage(page, new QueryWrapper() .eq("del_flag", 0) .eq(StringUtils.hasText(plbsdcr.getProxyId()), "proxy_id", plbsdcr.getProxyId()) .eq(StringUtils.hasText(plbsdcr.getStationCode()), "point_code", plbsdcr.getStationCode())); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } @Override @@ -113,4 +112,9 @@ public class BatteryStationDcServiceImpl implements BatteryStationDcService { return new Result().error("删除追溯失败!"); } + @Override + public List listByStationCode(String stationCode) { + return getBaseMapper().getDcByStationCode(stationCode); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDccServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDccServiceImpl.java index c8596b5..549667a 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDccServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDccServiceImpl.java @@ -1,21 +1,19 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.dao.BatteryStationDccDao; 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.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationDcc; import com.evotech.hd.common.core.enums.CodeMsg; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service @@ -53,15 +51,15 @@ public class BatteryStationDccServiceImpl implements BatteryStationDccService { } @Override - public Result> list(PageListBatteryStationDccRequest plbsDccr) { + public Result> list(PageListBatteryStationDccRequest plbsDccr) { Page page = new Page(plbsDccr.getPageNo(), plbsDccr.getPageSize()); page = batteryStationDccDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(plbsDccr.getProxyId()), "proxy_id", plbsDccr.getProxyId()) .eq(StringUtils.hasText(plbsDccr.getStationCode()), "station_code", plbsDccr.getStationCode())); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDjServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDjServiceImpl.java index 73a2cf5..f420f3d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDjServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDjServiceImpl.java @@ -1,21 +1,19 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.dao.BatteryStationDjDao; 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.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationDj; import com.evotech.hd.common.core.enums.CodeMsg; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service @@ -53,15 +51,15 @@ public class BatteryStationDjServiceImpl implements BatteryStationDjService { } @Override - public Result> list(PageListBatteryStationDjRequest plbsdjr) { + public Result> list(PageListBatteryStationDjRequest plbsdjr) { Page page = new Page(plbsdjr.getPageNo(), plbsdjr.getPageSize()); page = batteryStationDjDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(plbsdjr.getProxyId()), "proxy_id", plbsdjr.getProxyId()) .eq(StringUtils.hasText(plbsdjr.getStationCode()), "station_code", plbsdjr.getStationCode())); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java index 7061904..a18edfe 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java @@ -3,7 +3,7 @@ package com.evotech.hd.cloud.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.evotech.hd.cloud.dao.BatteryStationHdFeeStandardDetailDao; import com.evotech.hd.cloud.service.BatteryStationHdFeeStandardDetailService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail; import com.evotech.hd.common.core.enums.CodeMsg; import jakarta.annotation.Resource; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java index 0791acc..bcc6613 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.evotech.hd.cloud.dao.BatteryStationHdFeeStandardDao; import com.evotech.hd.cloud.dao.BatteryStationHdFeeStandardDetailDao; import com.evotech.hd.cloud.service.BatteryStationHdFeeStandardService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail; import com.evotech.hd.common.core.enums.CodeMsg; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationRobotServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationRobotServiceImpl.java index f6b357f..d41560c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationRobotServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationRobotServiceImpl.java @@ -1,19 +1,17 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.evotech.hd.cloud.dao.BatteryStationRobotDao; import com.evotech.hd.cloud.service.BatteryStationRobotService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationRobot; import com.evotech.hd.common.core.enums.CodeMsg; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java index 5d12289..07ab48d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java @@ -16,16 +16,20 @@ import com.evotech.hd.cloud.device.dh.DHRequestUtil; import com.evotech.hd.cloud.entity.BatteryStationSecretKey; import com.evotech.hd.cloud.entity.request.PageListBatteryStationRequest; import com.evotech.hd.cloud.exception.DHException; +import com.evotech.hd.cloud.mqtt.config.MqttSubscribeService; import com.evotech.hd.cloud.mqtt.message.processor.observer.event.BatteryStationStopServerEvent; import com.evotech.hd.cloud.mqtt.message.processor.observer.publisher.CommonEventPublisher; import com.evotech.hd.cloud.service.BatteryStationService; import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; import com.evotech.hd.cloud.service.rpc.ResourceService; import com.evotech.hd.cloud.service.rpc.WechatService; +import com.evotech.hd.cloud.utils.GeoUtils; +import com.evotech.hd.cloud.utils.ParamServiceUtils; import com.evotech.hd.common.constant.MongoConstant; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto; +import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.cloud.BatteryStation; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; @@ -64,24 +68,28 @@ public class BatteryStationServiceImpl implements BatteryStationService { private ResourceService resourceService; @Resource private GZHTemplateMessageService templateMessageService; - + @Resource + private MqttSubscribeService mqttSubscribeService; @Resource CommonEventPublisher eventPublisher; @Override - public com.evotech.hd.common.core.entity.Result add(BatteryStation bs) { + public Result add(BatteryStation bs) { bs.setCtime(new Date()); boolean b = batteryStationDao.exists(new QueryWrapper() .eq("del_flag", 0) .eq("code", bs.getCode())); if (b) { - return new com.evotech.hd.common.core.entity.Result().error("换电站已存在!"); + return new Result().error("换电站已存在!"); } int n = batteryStationDao.insert(bs); if (n == 1) { + //添加监控场所 addStore(bs); - return new com.evotech.hd.common.core.entity.Result().success(n); + //新增站点, 添加订阅信息 + mqttSubscribeService.subscribe(bs.getCode()); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加换电站出错!"); + return new Result().error("添加换电站出错!"); } @@ -116,33 +124,33 @@ public class BatteryStationServiceImpl implements BatteryStationService { @Override @Transactional - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { BatteryStation bs = new BatteryStation(); bs.setPkId(id); bs.setDelFlag(1); int n = batteryStationDao.updateById(bs); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } throw new RuntimeException("删除换电站出错!"); } @Override - public com.evotech.hd.common.core.entity.Result update(BatteryStation bs) { + public Result update(BatteryStation bs) { int n = batteryStationDao.updateById(bs); if (n == 1) { eventPublisher.publishEvent(new BatteryStationStopServerEvent(this,bs)); - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("更新换电站失败!"); + return new Result().error("更新换电站失败!"); } @Override - public com.evotech.hd.common.core.entity.Result> list(PageListBatteryStationRequest plbsr) { + public Result> list(PageListBatteryStationRequest plbsr) { Page page = new Page(plbsr.getPageNo(), plbsr.getPageSize()); List list = batteryStationDao.listStation(page, plbsr); if (list.isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } // page = batteryStationDao.selectPage(page, new QueryWrapper() @@ -155,7 +163,7 @@ public class BatteryStationServiceImpl implements BatteryStationService { // if (page.getRecords().isEmpty()) { // return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); // } - return new com.evotech.hd.common.core.entity.Result>().success(page.setRecords(list)); + return new Result>().success(page.setRecords(list)); } /** @@ -165,7 +173,7 @@ public class BatteryStationServiceImpl implements BatteryStationService { * @return 返回包含密钥对信息的Result对象 */ @Override - public com.evotech.hd.common.core.entity.Result> RsaSecretKey(String stationCode) { + public Result> RsaSecretKey(String stationCode) { // 查询数据库中是否存在对应电站编码的密钥对 BatteryStationSecretKey existingKey = batteryStationSecretKeyDao.selectOne( new QueryWrapper() @@ -177,7 +185,7 @@ public class BatteryStationServiceImpl implements BatteryStationService { Map map = new HashMap<>(); map.put("publickey", existingKey.getPublicKey()); map.put("privatekey", existingKey.getPrivateKey()); - return new com.evotech.hd.common.core.entity.Result>().success(map); + return new Result>().success(map); } else { // 如果不存在密钥对,则生成新的密钥对 KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue()); @@ -199,17 +207,25 @@ public class BatteryStationServiceImpl implements BatteryStationService { map.put("publickey", publickeyBase64String); map.put("privatekey", privatekeyBase64String); // 返回包含密钥对信息的成功结果 - return new com.evotech.hd.common.core.entity.Result>().success(map); + return new Result>().success(map); } } @Override - public com.evotech.hd.common.core.entity.Result> listStation(String plateNum) { + public Result> listStation(String longitudeAndLatitude, String plateNum) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper().eq(BatteryStation::getDelFlag, HDConstant.DELETE_NO).eq(BatteryStation::getStatus, 1); + //如果经纬度不为空, 需要限制经纬度 + if(org.apache.commons.lang3.StringUtils.isNotEmpty(longitudeAndLatitude)){ + String[] coordinate = longitudeAndLatitude.split(","); + Map map = GeoUtils.findNeighDrugstore(Double.valueOf(coordinate[1]),Double.valueOf(coordinate[0]), ParamServiceUtils.getStationDistance()); + lqw.apply(" SUBSTRING_INDEX(location_point,',',1) BETWEEN {0} and {1} and SUBSTRING_INDEX(location_point,',',-1) BETWEEN {2} and {3} ", map.get("minlat"),map.get("maxlat"), map.get("minlng"),map.get("maxlng")); + } + //过滤未营业的换电站 - List list = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0).eq("status", 1)); + List list = batteryStationDao.selectList(lqw); if (list.isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } List res = list.stream().map(i -> { BatteryStationVO vo = new BatteryStationVO(); @@ -222,7 +238,7 @@ public class BatteryStationServiceImpl implements BatteryStationService { .eq("del_flag", 0) .eq("plate_num", plateNum)); if (vi == null) { - return new com.evotech.hd.common.core.entity.Result>().error("无车辆信息!"); + return Result.getInstance().buildList(BatteryStationVO.class).error("无车辆信息!"); } // 过滤未营业的换电站并根据车辆类型过滤 res = res.stream() @@ -235,7 +251,7 @@ public class BatteryStationServiceImpl implements BatteryStationService { .toList(); } - return new com.evotech.hd.common.core.entity.Result>().success(res); + return new Result>().success(res); } @Override diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java index 87c0bf0..10e74e8 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/CompanyServiceImpl.java @@ -26,58 +26,58 @@ public class CompanyServiceImpl implements CompanyService { private CompanyDao companyDao; @Override - public com.evotech.hd.common.core.entity.Result add(Company company) { + public Result add(Company company) { company.setCtime(new Date()); int n = companyDao.insert(company); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加公司出错!"); + return new Result().error("添加公司出错!"); } @Override - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { Company company = new Company(); company.setPkId(id); company.setDelFlag(1); int n = companyDao.updateById(company); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("删除公司出错!"); + return new Result().error("删除公司出错!"); } @Override - public com.evotech.hd.common.core.entity.Result update(Company company) { + public Result update(Company company) { int n = companyDao.updateById(company); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("更新公司失败!"); + return new Result().error("更新公司失败!"); } @Override - public com.evotech.hd.common.core.entity.Result> list(BasePageRequest bpr) { + public Result> list(BasePageRequest bpr) { Page page = new Page(bpr.getPageNo(), bpr.getPageSize()); page = companyDao.selectPage(page, new QueryWrapper().eq("del_flag", 0)); if (page.getRecords().isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new com.evotech.hd.common.core.entity.Result>().success(page); + return new Result>().success(page); } @Override - public com.evotech.hd.common.core.entity.Result> companyByCode(String ccode) { + public Result> companyByCode(String ccode) { Company one = companyDao.selectOne(new QueryWrapper().eq("ccode", ccode)); if (one == null) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } Map m = new HashMap(); m.put("ccode", one.getCcode()); m.put("cname", one.getCname()); m.put("address", one.getAddress()); m.put("phone", one.getPhone()); - return new com.evotech.hd.common.core.entity.Result>().success(m); + return new Result>().success(m); } @Override diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java index 7830779..a9c4127 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java @@ -6,10 +6,10 @@ import com.evotech.hd.cloud.device.dh.DHRequestUtil; import com.evotech.hd.cloud.service.BatteryStationService; import com.evotech.hd.cloud.service.DHDeviceService; import com.evotech.hd.cloud.service.rpc.ResourceService; -import com.evotech.hd.common.core.Dto.DeviceDto; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.ResultUtil; +import com.evotech.hd.common.core.Dto.device.DeviceDto; import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.common.core.utils.Collections; import jakarta.annotation.Resource; @@ -78,7 +78,7 @@ public class DHDeviceServiceImpl implements DHDeviceService { } }); } - return (StringUtils.isNotEmpty(url.get()) ? new Result().success("成功", url.get()) : new Result().error("未找到设备直播地址")); + return (StringUtils.isNotEmpty(url.get()) ? new Result().success( url.get()) : new Result().error("未找到设备直播地址")); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeDataManualCollateServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeDataManualCollateServiceImpl.java index c7ca3b2..26833ed 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeDataManualCollateServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeDataManualCollateServiceImpl.java @@ -5,14 +5,14 @@ import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.evotech.hd.cloud.dao.TradeDetailDao; import com.evotech.hd.cloud.service.HomeDataManualCollateService; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.dao.cloud.HomeDataOrderSwapCollateDao; import com.evotech.hd.common.core.dao.cloud.HomeDataTradeCollateDao; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.dao.cloud.OrderDao; import com.evotech.hd.common.core.entity.cloud.HomeDataOrderSwapCollate; import com.evotech.hd.common.core.entity.cloud.HomeDataTradeCollate; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.Order; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -32,7 +32,7 @@ public class HomeDataManualCollateServiceImpl implements HomeDataManualCollateSe @Resource private HomeDataOrderSwapCollateDao homeDataOrderSwapCollateDao; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; + private OrderDao orderDao; @Resource private TradeDetailDao tradeDetailDao; @Resource @@ -55,7 +55,7 @@ public class HomeDataManualCollateServiceImpl implements HomeDataManualCollateSe for (int i = 0; i < dayStringList.size(); i++) { String dayString = dayStringList.get(i); Date day = DateUtil.parse(dayString, DatePattern.PURE_DATE_PATTERN); - List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() + List orderList = orderDao.selectList(new QueryWrapper() .eq(StringUtils.hasText(stationCode), "station_code", stationCode) .eq("del_flag", 0) .ge("order_time", DateUtil.beginOfDay(day)) @@ -74,15 +74,15 @@ public class HomeDataManualCollateServiceImpl implements HomeDataManualCollateSe return item; }).toList(); - Map>> map = orderList.stream().collect(Collectors.groupingBy(OrderSwapBattery::getStationCode, Collectors.groupingBy(OrderSwapBattery::getStatus))); + Map>> map = orderList.stream().collect(Collectors.groupingBy(Order::getStationCode, Collectors.groupingBy(Order::getStatus))); Date d = new Date(); List orderSwapCollateList = new ArrayList(); - for (Map.Entry>> m : map.entrySet()) { + for (Map.Entry>> m : map.entrySet()) { String stationCodeKey = m.getKey(); - Map> statusMap = m.getValue(); - for (Map.Entry> entry : statusMap.entrySet()) { + Map> statusMap = m.getValue(); + for (Map.Entry> entry : statusMap.entrySet()) { Integer status = entry.getKey(); - List dayStatusOrderList = entry.getValue(); + List dayStatusOrderList = entry.getValue(); HomeDataOrderSwapCollate orderSwapCollate = new HomeDataOrderSwapCollate(); orderSwapCollate.setDay(dayString); orderSwapCollate.setCtime(d); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java index 461fec1..1394ff3 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java @@ -1,47 +1,35 @@ package com.evotech.hd.cloud.service.impl; -import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; -import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.request.HomeDataRequest; import com.evotech.hd.cloud.entity.vo.*; import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; import com.evotech.hd.cloud.service.HomeService; import com.evotech.hd.common.constant.MongoConstant; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.ResultUtil; +import com.evotech.hd.common.core.Dto.home.HomeOrderInfo; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryProportionDto; import com.evotech.hd.common.core.Dto.request.HomeRequestDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.dao.cloud.HomeDataOrderSwapCollateDao; -import com.evotech.hd.common.core.dao.cloud.HomeDataTradeCollateDao; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +import com.evotech.hd.common.core.dao.cloud.OrderDao; import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; import com.evotech.hd.common.core.entity.cloud.*; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.utils.Collections; import com.evotech.hd.common.documnet.StationState; -import com.evotech.hd.common.permission.util.RedisPermissionUtils; import com.evotech.hd.common.redis.utils.RedisUtil; import com.evotech.hd.common.service.MongoDBService; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; -import java.math.BigDecimal; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -65,13 +53,7 @@ public class HomeServiceImpl implements HomeService { @Resource private VehicleInfoDao vehicleInfoDao; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; -// @Resource -// private TradeDetailDao tradeDetailDao; - @Resource - private HomeDataOrderSwapCollateDao homeDataOrderSwapCollateDao; - @Resource - private HomeDataTradeCollateDao homeDataTradeCollateDao; + private OrderDao orderDao; @Resource private RedisUtil redisUtil; @@ -97,14 +79,14 @@ public class HomeServiceImpl implements HomeService { Date d = new Date(); HomeRequestDto homeRequestDto = new HomeRequestDto(DateUtil.offsetMonth(d, -5), d); //订单数量 or 订单金额 - List orderAmountlist = orderSwapBatteryDao.homeFindAmountData(homeRequestDto); + List orderAmountlist = orderDao.homeFindAmountData(homeRequestDto); if(Collections.isNotEmpty(orderAmountlist)){ - HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null); + HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(new HomeOrderSwapBatteryAmountDto(0d,0l)); if(totalFinishOrder != null){ data.setTotalFinishOrderNum(totalFinishOrder.getDataCount()); data.setTotalFinishAmount(totalFinishOrder.getAmount()); } - HomeOrderSwapBatteryAmountDto totalPendingOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(6).equals(i.getStatus())).findFirst().orElse(null); + HomeOrderSwapBatteryAmountDto totalPendingOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(6).equals(i.getStatus())).findFirst().orElse(new HomeOrderSwapBatteryAmountDto(0d,0l)); if(totalPendingOrder != null){ data.setTotalPendingOrderNum(totalPendingOrder.getDataCount()); data.setTotalPendingOrderAmount(totalPendingOrder.getAmount()); @@ -113,7 +95,7 @@ public class HomeServiceImpl implements HomeService { //计算占比 Map countMap = Collections.emptyMap(); - List list = orderSwapBatteryDao.homeFindProportionData(homeRequestDto); + List list = orderDao.homeFindProportionData(homeRequestDto); if(Collections.isNotEmpty(list)){ //总订单数 data.setTotalOrderNum(list.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); @@ -137,7 +119,7 @@ public class HomeServiceImpl implements HomeService { }); data.setCountList(countList); //近半年走势情况 - data.setTrendList(orderSwapBatteryDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ + data.setTrendList(orderDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ return o1.getMonth().compareTo(o2.getMonth()); }).collect(Collectors.toList())); return new Result().success(data); @@ -170,7 +152,7 @@ public class HomeServiceImpl implements HomeService { Date d = new Date(); HomeRequestDto homeRequestDto = new HomeRequestDto(DateUtil.beginOfMonth(d), d); //订单数量 or 订单金额 - List orderAmountlist = orderSwapBatteryDao.homeFindAmountData(homeRequestDto); + List orderAmountlist = orderDao.homeFindAmountData(homeRequestDto); if(Collections.isNotEmpty(orderAmountlist)){ HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null); if(totalFinishOrder != null){ @@ -188,7 +170,7 @@ public class HomeServiceImpl implements HomeService { homeRequestDto = new HomeRequestDto(DateUtil.offsetMonth(d, -5), d); //订单数量 or 订单金额 //计算占比 - List list = orderSwapBatteryDao.homeFindProportionData(homeRequestDto); + List list = orderDao.homeFindProportionData(homeRequestDto); if(Collections.isNotEmpty(list)){ //总订单数 data.setHalfYearTotalOrderNum(list.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); @@ -196,7 +178,7 @@ public class HomeServiceImpl implements HomeService { } //近半年走势情况 - data.setTrendList(orderSwapBatteryDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ + data.setTrendList(orderDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ return o1.getMonth().compareTo(o2.getMonth()); }).collect(Collectors.toList())); return new Result().success(data); @@ -222,7 +204,7 @@ public class HomeServiceImpl implements HomeService { //订单数量 or 订单金额 Date d = new Date(); - List orderAmountlist = orderSwapBatteryDao.homeFindAmountData(new HomeRequestDto(DateUtil.beginOfMonth(d), d)); + List orderAmountlist = orderDao.homeFindAmountData(new HomeRequestDto(DateUtil.beginOfMonth(d), d)); if(Collections.isNotEmpty(orderAmountlist)){ HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null); if(totalFinishOrder != null){ @@ -235,7 +217,7 @@ public class HomeServiceImpl implements HomeService { data.setTotalOrderNum(defaultValue(data.getTotalFinishOrderNum(),0l)+defaultValue(data.getTotalPendingOrderNum(), 0l)); } //近半年走势情况 - data.setTrendList(orderSwapBatteryDao.homeFindHalfYearStationAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -5), d)).stream().sorted((o1,o2) ->{ + data.setTrendList(orderDao.homeFindHalfYearStationAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -5), d)).stream().sorted((o1,o2) ->{ return o1.getMonth().compareTo(o2.getMonth()); }).collect(Collectors.toList())); return new Result().success(data); @@ -249,7 +231,7 @@ public class HomeServiceImpl implements HomeService { //2 人员 data.setUserNum(wechatUserDao.selectCount(new LambdaQueryWrapper().select(WechatUser::getPkId))); //获取待结算订单 - List orderInfo = orderSwapBatteryDao.findOrderListByStatus(6); + List orderInfo = orderDao.findOrderListByStatus(6); //待结算订单数量 data.setPendingOrderNum(Long.valueOf(orderInfo.size())); //待结算订单金额 @@ -299,187 +281,187 @@ public class HomeServiceImpl implements HomeService { - - - - @Override - public Result homeData1(HomeDataRequest hd) { - // 1. 运营商 - List list1 = proxyOperaterDao.selectList(new LambdaQueryWrapper() - .eq(StringUtils.hasText(hd.getPoCode()), ProxyOperater::getPocode, hd.getPoCode())); - HomeData1 data = new HomeData1(); - data.setProxyer(list1.size()); - // 2. 换电站 - List list2 = batteryStationDao.selectList(new LambdaQueryWrapper() - .eq(BatteryStation::getDelFlag, 0) - .eq(StringUtils.hasText(hd.getPoCode()), BatteryStation::getProxyId, hd.getPoCode()) - .eq(StringUtils.hasText(hd.getStationCode()), BatteryStation::getCode, hd.getStationCode()).select(BatteryStation::getStatus)); - data.setTotalStation(list2.size()); - int size1 = list2.stream().filter(i -> i.getStatus() == 1).toList().size(); - data.setWorkStation(size1); - // 电池 - List list3 = batteryStationDcDao.selectList(new LambdaQueryWrapper() - .eq(BatteryStationDc::getDelFlag, 0) - .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationDc::getSourceCode, hd.getStationCode()).select(BatteryStationDc::getStatus)); - data.setTotalDC(list3.size()); - int dcSize1 = list3.stream().filter(i -> i.getStatus() == 2).toList().size(); - data.setChargeDC(dcSize1); - int dcSize2 = list3.stream().filter(i -> i.getStatus() == 3).toList().size(); - data.setAvailableDC(dcSize2); - // 机器人 - List list4 = batteryStationRobotDao.selectList(new LambdaQueryWrapper() - .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationRobot::getStationCode, hd.getStationCode()).select(BatteryStationRobot::getStatus)); - data.setTotalRobot(list4.size()); - int robotSize1 = list4.stream().filter(i -> i.getStatus() == 1).toList().size(); - data.setAvailableRobot(robotSize1); - - return new Result().success(data); - } - - @Override - public Result homeData2() { - HomeData2 data = new HomeData2(); - // 1. 公司 - Long count1 = companyDao.selectCount(new LambdaQueryWrapper().select(Company::getPkId)); - data.setConpany(count1.intValue()); - // 2. 用户 - Long count2 = wechatUserDao.selectCount(new LambdaQueryWrapper().select(WechatUser::getPkId)); - data.setTotalUser(count2.intValue()); - // 3. 车辆 - Long count3 = vehicleInfoDao.selectCount(new LambdaQueryWrapper().select(VehicleInfo::getPkId)); - data.setTotalCar(count3.intValue()); - - return new Result().success(data); - } - - @Override - public Result homeData3(HomeDataRequest hd) { - if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { - return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); - } - HomeData3 data = new HomeData3(); - data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); - data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); - - List list = orderSwapBatteryDao.homeFindProportionData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); - if(Collections.isNotEmpty(list)){ - Long total = list.stream().collect(Collectors.summingLong(i -> i.getQuantity())); - data.setQuantity(total); - } - data.setStationOrderDataList(list);; - return new Result().success(data); - } - - @Override - public Result homeData4(HomeDataRequest hd) { - if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { - return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); - } - HomeData4 data = new HomeData4(); - data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); - data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); - - List list = orderSwapBatteryDao.homeFindAmountData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); - if(Collections.isNotEmpty(list)){ - data.setTotalMoney(list.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); - data.setTotalRefund(list.stream().filter(i -> Integer.valueOf(-1).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); - } - return new Result().success(data); - } - - @Override - public Result> homeData5(HomeDataRequest hd) { - Integer id = RedisPermissionUtils.getUserPkId(); - String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_5+":"+id; - List list = Collections.emptyList(); - if(!redisUtil.hasKey(key)){ - Date d = new Date(); - list = orderSwapBatteryDao.homeFindHalfYearOrderData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().map(data->{ - HomeData5 homeData5 = new HomeData5(); - BeanUtils.copyProperties(data, homeData5); - homeData5.setTotalMoney(new BigDecimal(data.getTotalMoney()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); - return homeData5; - }).sorted((o1,o2) ->{ - return o1.getMonth().compareTo(o2.getMonth()); - }).collect(Collectors.toList()); - redisUtil.set(key, JSONUtil.toJsonStr(list)); - }else{ - list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData5.class); - } - // 1. 找出6个月\ - Date d = new Date(); - return new Result>().success(list); - } - - @Override - public Result> homeData6(HomeDataRequest hd) { - Integer id = RedisPermissionUtils.getUserPkId(); - String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_6+":"+id; - List list = Collections.emptyList(); - if(!redisUtil.hasKey(key)){ - Date d = new Date(); - Map> mapList= orderSwapBatteryDao.homeFindHalfYearAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().collect(Collectors.groupingBy(HomeOrderSwapBatteryHalfYearAmountDto::getMonth)); - Iterator it = mapList.keySet().iterator(); - while (it.hasNext()){ - String month = it.next(); - HomeData6 homeData6 = new HomeData6(); - homeData6.setMonth(month); -// List values = mapList.get(month); -// HomeOrderSwapBatteryHalfYearAmountDto wechat = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(2).equals(f.getPayType())).findFirst().orElse(null); -// if(ObjectUtils.isNotEmpty(wechat)){ -// homeData6.setInQuantity(wechat.getQuantity()); -// homeData6.setInMoney(wechat.getTotalMoney()); -// } // -// HomeOrderSwapBatteryHalfYearAmountDto account = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(1).equals(f.getPayType())).findFirst().orElse(null); -// if(ObjectUtils.isNotEmpty(account)){ -// homeData6.setWalletQuantity(account.getQuantity()); -// homeData6.setWalletMoney(account.getTotalMoney()); -// } // -// List refund = values.stream().filter(f -> Integer.valueOf(-1).equals(f.getStatus())).collect(Collectors.toList()); -// if(Collections.isNotEmpty(refund)){ -// homeData6.setRefundQuantity(refund.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); -// homeData6.setRefundMoney(refund.stream().collect(Collectors.summingDouble(i -> i.getTotalMoney()))); -// } - list.add(homeData6); - } - list = list.stream().sorted((o1,o2) ->{ - return o1.getMonth().compareTo(o2.getMonth()); - }).collect(Collectors.toList()); - redisUtil.set(key, JSONUtil.toJsonStr(list)); - }else{ - list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData6.class); - } - return new Result>().success(list); - } +// +// @Override +// public Result homeData1(HomeDataRequest hd) { +// // 1. 运营商 +// List list1 = proxyOperaterDao.selectList(new LambdaQueryWrapper() +// .eq(StringUtils.hasText(hd.getPoCode()), ProxyOperater::getPocode, hd.getPoCode())); +// HomeData1 data = new HomeData1(); +// data.setProxyer(list1.size()); +// // 2. 换电站 +// List list2 = batteryStationDao.selectList(new LambdaQueryWrapper() +// .eq(BatteryStation::getDelFlag, 0) +// .eq(StringUtils.hasText(hd.getPoCode()), BatteryStation::getProxyId, hd.getPoCode()) +// .eq(StringUtils.hasText(hd.getStationCode()), BatteryStation::getCode, hd.getStationCode()).select(BatteryStation::getStatus)); +// data.setTotalStation(list2.size()); +// int size1 = list2.stream().filter(i -> i.getStatus() == 1).toList().size(); +// data.setWorkStation(size1); +// // 电池 +// List list3 = batteryStationDcDao.selectList(new LambdaQueryWrapper() +// .eq(BatteryStationDc::getDelFlag, 0) +// .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationDc::getSourceCode, hd.getStationCode()).select(BatteryStationDc::getStatus)); +// data.setTotalDC(list3.size()); +// int dcSize1 = list3.stream().filter(i -> i.getStatus() == 2).toList().size(); +// data.setChargeDC(dcSize1); +// int dcSize2 = list3.stream().filter(i -> i.getStatus() == 3).toList().size(); +// data.setAvailableDC(dcSize2); +// // 机器人 +// List list4 = batteryStationRobotDao.selectList(new LambdaQueryWrapper() +// .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationRobot::getStationCode, hd.getStationCode()).select(BatteryStationRobot::getStatus)); +// data.setTotalRobot(list4.size()); +// int robotSize1 = list4.stream().filter(i -> i.getStatus() == 1).toList().size(); +// data.setAvailableRobot(robotSize1); +// +// return new Result().success(data); +// } +// +// @Override +// public Result homeData2() { +// HomeData2 data = new HomeData2(); +// // 1. 公司 +// Long count1 = companyDao.selectCount(new LambdaQueryWrapper().select(Company::getPkId)); +// data.setConpany(count1.intValue()); +// // 2. 用户 +// Long count2 = wechatUserDao.selectCount(new LambdaQueryWrapper().select(WechatUser::getPkId)); +// data.setTotalUser(count2.intValue()); +// // 3. 车辆 +// Long count3 = vehicleInfoDao.selectCount(new LambdaQueryWrapper().select(VehicleInfo::getPkId)); +// data.setTotalCar(count3.intValue()); +// +// return new Result().success(data); +// } +// +// @Override +// public Result homeData3(HomeDataRequest hd) { +// if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { +// return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); +// } +// HomeData3 data = new HomeData3(); +// data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); +// data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); +// +// List list = orderDao.homeFindProportionData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); +// if(Collections.isNotEmpty(list)){ +// Long total = list.stream().collect(Collectors.summingLong(i -> i.getQuantity())); +// data.setQuantity(total); +// } +// data.setStationOrderDataList(list);; +// return new Result().success(data); +// } +// +// @Override +// public Result homeData4(HomeDataRequest hd) { +// if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { +// return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); +// } +// HomeData4 data = new HomeData4(); +// data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); +// data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); +// +// List list = orderDao.homeFindAmountData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); +// if(Collections.isNotEmpty(list)){ +// data.setTotalMoney(list.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); +// data.setTotalRefund(list.stream().filter(i -> Integer.valueOf(-1).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); +// } +// return new Result().success(data); +// } +// +// @Override +// public Result> homeData5(HomeDataRequest hd) { +// Integer id = RedisPermissionUtils.getUserPkId(); +// String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_5+":"+id; +// List list = Collections.emptyList(); +// if(!redisUtil.hasKey(key)){ +// Date d = new Date(); +// list = orderDao.homeFindHalfYearOrderData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().map(data->{ +// HomeData5 homeData5 = new HomeData5(); +// BeanUtils.copyProperties(data, homeData5); +// homeData5.setTotalMoney(new BigDecimal(data.getTotalMoney()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); +// return homeData5; +// }).sorted((o1,o2) ->{ +// return o1.getMonth().compareTo(o2.getMonth()); +// }).collect(Collectors.toList()); +// redisUtil.set(key, JSONUtil.toJsonStr(list)); +// }else{ +// list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData5.class); +// } +// // 1. 找出6个月\ +// Date d = new Date(); +// return new Result>().success(list); +// } +// +// @Override +// public Result> homeData6(HomeDataRequest hd) { +// Integer id = RedisPermissionUtils.getUserPkId(); +// String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_6+":"+id; +// List list = Collections.emptyList(); +// if(!redisUtil.hasKey(key)){ +// Date d = new Date(); +// Map> mapList= orderDao.homeFindHalfYearAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().collect(Collectors.groupingBy(HomeOrderSwapBatteryHalfYearAmountDto::getMonth)); +// Iterator it = mapList.keySet().iterator(); +// while (it.hasNext()){ +// String month = it.next(); +// HomeData6 homeData6 = new HomeData6(); +// homeData6.setMonth(month); +//// List values = mapList.get(month); +//// HomeOrderSwapBatteryHalfYearAmountDto wechat = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(2).equals(f.getPayType())).findFirst().orElse(null); +//// if(ObjectUtils.isNotEmpty(wechat)){ +//// homeData6.setInQuantity(wechat.getQuantity()); +//// homeData6.setInMoney(wechat.getTotalMoney()); +//// } +//// +//// HomeOrderSwapBatteryHalfYearAmountDto account = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(1).equals(f.getPayType())).findFirst().orElse(null); +//// if(ObjectUtils.isNotEmpty(account)){ +//// homeData6.setWalletQuantity(account.getQuantity()); +//// homeData6.setWalletMoney(account.getTotalMoney()); +//// } +//// +//// List refund = values.stream().filter(f -> Integer.valueOf(-1).equals(f.getStatus())).collect(Collectors.toList()); +//// if(Collections.isNotEmpty(refund)){ +//// homeData6.setRefundQuantity(refund.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); +//// homeData6.setRefundMoney(refund.stream().collect(Collectors.summingDouble(i -> i.getTotalMoney()))); +//// } +// list.add(homeData6); +// } +// list = list.stream().sorted((o1,o2) ->{ +// return o1.getMonth().compareTo(o2.getMonth()); +// }).collect(Collectors.toList()); +// redisUtil.set(key, JSONUtil.toJsonStr(list)); +// }else{ +// list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData6.class); +// } +// return new Result>().success(list); +// } +// +// @Override +// public Result homeData7(Integer type) { +// HomeData7 data = new HomeData7(); +// Date d = new Date(); +// // 按月 +// Date month = DateUtil.beginOfMonth(d); +// Date beforeMonth = DateUtil.offsetMonth(month, -1); +// Date beforeYearMonth = DateUtil.offsetYear(d, -1); +// data.setMonth(DateUtil.format(month, "yyyy-MM")); +// //订单数量 +// data.setQuantity(orderDao.homeFindOrderCountData(month)); +// data.setTradeAmount(orderDao.homeFindOrderAmountData(month)); +// //环比 +// data.setLastMonthQuantity(orderDao.homeFindOrderCountData(beforeMonth)); +// data.setLastMonthTradeAmount(orderDao.homeFindOrderAmountData(beforeMonth)); +// //同比 +// data.setLastYearQuantity(orderDao.homeFindOrderCountData(beforeYearMonth)); +// data.setLastYearTradeAmount(orderDao.homeFindOrderAmountData(beforeYearMonth)); +// return new Result().success(data); +// } - @Override - public Result homeData7(Integer type) { - HomeData7 data = new HomeData7(); - Date d = new Date(); - // 按月 - Date month = DateUtil.beginOfMonth(d); - Date beforeMonth = DateUtil.offsetMonth(month, -1); - Date beforeYearMonth = DateUtil.offsetYear(d, -1); - data.setMonth(DateUtil.format(month, "yyyy-MM")); - //订单数量 - data.setQuantity(orderSwapBatteryDao.homeFindOrderCountData(month)); - data.setTradeAmount(orderSwapBatteryDao.homeFindOrderAmountData(month)); - //环比 - data.setLastMonthQuantity(orderSwapBatteryDao.homeFindOrderCountData(beforeMonth)); - data.setLastMonthTradeAmount(orderSwapBatteryDao.homeFindOrderAmountData(beforeMonth)); - //同比 - data.setLastYearQuantity(orderSwapBatteryDao.homeFindOrderCountData(beforeYearMonth)); - data.setLastYearTradeAmount(orderSwapBatteryDao.homeFindOrderAmountData(beforeYearMonth)); - return new Result().success(data); - } - - @Override - public void loginData() { - HomeDataRequest hd = new HomeDataRequest(); - homeData5(hd); - homeData6(hd); - } +// @Override +// public void loginData() { +// HomeDataRequest hd = new HomeDataRequest(); +// homeData5(hd); +// homeData6(hd); +// } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java index 8e8f4a2..62a06bd 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java @@ -1,21 +1,23 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.dao.MessageMqttDao; import com.evotech.hd.cloud.entity.MessageMqtt; import com.evotech.hd.cloud.entity.request.PageListMessageMqttRequest; +import com.evotech.hd.cloud.entity.vo.MqttMessageParam; import com.evotech.hd.cloud.service.MessageMqttService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.enums.CodeMsg; - +import com.evotech.hd.common.core.utils.Collections; import jakarta.annotation.Resource; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service @@ -26,7 +28,7 @@ public class MessageMqttServiceImpl implements MessageMqttService { private MessageMqttDao messageMqttDao; @Override - public Result> list(PageListMessageMqttRequest plmmr) { + public Result> list(PageListMessageMqttRequest plmmr) { Page page = new Page(plmmr.getPageNo(), plmmr.getPageSize()); page = messageMqttDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(plmmr.getStationCode()), "station_code", plmmr.getStationCode()) @@ -35,9 +37,9 @@ public class MessageMqttServiceImpl implements MessageMqttService { .eq(StringUtils.hasText(plmmr.getMessageFunction()), "message_function", plmmr.getMessageFunction()) .orderByDesc("pk_id")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } @Override @@ -56,4 +58,16 @@ public class MessageMqttServiceImpl implements MessageMqttService { return null; } + @Override + public MessageMqtt getOne(MqttMessageParam param) { + List list = messageMqttDao.selectList(new LambdaQueryWrapper() + .eq(MessageMqtt::getStationCode, param.getStationCode()) + .eq(MessageMqtt::getDirection, param.getDirection()) + .eq(MessageMqtt::getType, param.getType()) + .apply(" DATE_FORMAT(ctime,'%Y-%m-%d') ={0}", DateFormatUtils.format(param.getCtime(), "yyyy-MM-dd")) + .apply(" content->'$.dataBody.orderNo'={1}", param.getOrderNo()) + .eq(MessageMqtt::getMessageFunction, param.getMessageFunction()).orderByDesc(MessageMqtt::getCtime)); + return (Collections.isNotEmpty(list) ? list.get(0) : null); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderDetailServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderDetailServiceImpl.java new file mode 100644 index 0000000..88c9cff --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderDetailServiceImpl.java @@ -0,0 +1,26 @@ +package com.evotech.hd.cloud.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.common.core.dao.cloud.OrderDetailDao; +import com.evotech.hd.common.core.entity.order.OrderDetail; +import com.evotech.hd.cloud.service.OrderDetailService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 订单详情实现类 + * + * @ClassName:OrderDetailServiceImpl + * @date: 2025年05月16日 13:58 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Service +@Slf4j +public class OrderDetailServiceImpl extends ServiceImpl implements OrderDetailService { + +} + + diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRechargeServiceimpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRechargeServiceImpl.java similarity index 53% rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRechargeServiceimpl.java rename to cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRechargeServiceImpl.java index 01a8a07..2679875 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRechargeServiceimpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRechargeServiceImpl.java @@ -1,24 +1,28 @@ package com.evotech.hd.cloud.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.dao.OrderRechargeDao; +import com.evotech.hd.cloud.entity.request.PageListRechargeOrderRequest; +import com.evotech.hd.cloud.service.OrderRechargeService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.OrderRecharge; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.enums.OrderStatusEnums; +import com.evotech.hd.common.core.utils.Collections; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + import java.util.Date; import java.util.List; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.dao.OrderRechargeDao; -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.enums.CodeMsg; - -import jakarta.annotation.Resource; - @Service -public class OrderRechargeServiceimpl implements OrderRechargeService { +public class OrderRechargeServiceImpl extends ServiceImpl implements OrderRechargeService { @Resource private OrderRechargeDao orderRechargeDao; @@ -37,7 +41,8 @@ public class OrderRechargeServiceimpl implements OrderRechargeService { public Result delete(Integer id) { OrderRecharge or = new OrderRecharge(); or.setPkId(id); - or.setDelFlag(1); +// or.setDelFlag(1); + int n = orderRechargeDao.updateById(or); if (n == 1) { return new Result().success(n); @@ -52,7 +57,7 @@ public class OrderRechargeServiceimpl implements OrderRechargeService { } @Override - public Result> list(PageListRechargeOrderRequest plror) { + public Result> list(PageListRechargeOrderRequest plror) { Page page = new Page(plror.getPageNo(), plror.getPageSize()); page = orderRechargeDao.selectPage(page, new QueryWrapper() @@ -66,9 +71,32 @@ public class OrderRechargeServiceimpl implements OrderRechargeService { .ne("del_flag", 1) .orderByDesc("pk_id")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); + } + + @Override + public Result> refundList(String wechatId) { + return new Result>().success(getBaseMapper().selectList(new LambdaQueryWrapper().eq(OrderRecharge::getPayType, "wechatPay").in(OrderRecharge::getStatus, Collections.asList(OrderStatusEnums.FINISH.getCode(), OrderStatusEnums.REFUND_PART.getCode())).apply(" DATEDIFF(now(), pay_time) <={0} ", 365).orderByDesc(OrderRecharge::getPayTime))); + } + + @Override + public void addByTradeDetail(TradeDetail tradeDetail) { + OrderRecharge or = new OrderRecharge(); + or.setOrderType(2); + or.setWuId(tradeDetail.getPayWechatId()); + or.setOrderNo(tradeDetail.getOrderNo()); + or.setOrderAmount(tradeDetail.getTradeAmount()); + or.setStatus(OrderStatusEnums.FINISH.getCode()); + //直接指定默认为微信支付 + or.setPayType(HDConstant.OrderConstant.PAY_TYPE_WECHAT_PAY); + or.setPayTime(tradeDetail.getPayTime()); + or.setPayWechatId(tradeDetail.getPayWechatId()); + or.setNotifyOrderNo(tradeDetail.getTransactionId()); + or.setNotifyInfo(tradeDetail.getTradeMessage()); + or.setCtime(new Date()); + getBaseMapper().insert(or); } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRefundServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRefundServiceImpl.java new file mode 100644 index 0000000..bd42776 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderRefundServiceImpl.java @@ -0,0 +1,67 @@ +package com.evotech.hd.cloud.service.impl; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.dao.OrderRechargeDao; +import com.evotech.hd.cloud.dao.OrderRefundDao; +import com.evotech.hd.cloud.service.OrderRefundService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.OrderRecharge; +import com.evotech.hd.common.core.entity.order.OrderRefund; +import com.evotech.hd.common.core.enums.OrderStatusEnums; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 类 + * + * @ClassName:OrderRefundServiceImpl + * @date: 2025年06月30日 14:25 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class OrderRefundServiceImpl extends ServiceImpl implements OrderRefundService { + + @Resource + private OrderRechargeDao orderRechargeDao; + + @Override + public Result addAll(List list) { + Boolean saveResult= saveBatch(list); + //更新订单充值订单--- 全额退款 + List orderNoList = list.stream().filter((x) -> x.getOrderAmount().equals(x.getRefundAmount())).map(OrderRefund::getOutTradeNo).collect(Collectors.toList()); + orderRechargeDao.update(new UpdateWrapper().set("status", OrderStatusEnums.REFUND.getCode()).in("order_no", orderNoList)); + //获取部分退款的订单 + String orderNo = list.stream().filter((x) -> !x.getOrderAmount().equals(x.getRefundAmount())).map(OrderRefund::getOutTradeNo).findFirst().orElse(null); + if(StringUtils.isNotEmpty(orderNo)){ + orderRechargeDao.update(new UpdateWrapper().set("status", OrderStatusEnums.REFUND_PART.getCode()).eq("order_no", orderNo)); + } + return new Result().success(saveResult); + } + + @Override + public Result orderNoOne(String orderNo) { + return new Result().success(getOne(new LambdaQueryWrapper().eq(OrderRefund::getRefundOrderNo, orderNo))); + } + + @Override + public void updateByTradeDetail(TradeDetail tradeDetail) { + OrderRefund orderRefund = getOne(new LambdaQueryWrapper().eq(OrderRefund::getRefundOrderNo, tradeDetail.getOrderNo())); + if(orderRefund != null){ + JSONObject obj = JSONUtil.parseObj(tradeDetail.getTradeMessage()); + orderRefund.setRefundStatus(obj.getStr("status")); + orderRefund.setNotifyInfo(tradeDetail.getTradeMessage()); + updateById(orderRefund); + } + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java new file mode 100644 index 0000000..781ac5e --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java @@ -0,0 +1,503 @@ +package com.evotech.hd.cloud.service.impl; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.dao.WalletAccountDao; +import com.evotech.hd.cloud.entity.vo.NativePayVO; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq; +import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +import com.evotech.hd.cloud.service.OrderService; +import com.evotech.hd.cloud.service.TaxPointService; +import com.evotech.hd.cloud.service.TradeService; +import com.evotech.hd.cloud.service.WalletAccountService; +import com.evotech.hd.cloud.service.rpc.WechatService; +import com.evotech.hd.cloud.utils.CommonUtil; +import com.evotech.hd.cloud.utils.ParamServiceUtils; +import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.order.OrderListVo; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.dao.cloud.OrderDao; +import com.evotech.hd.common.core.dao.cloud.OrderDetailDao; +import com.evotech.hd.common.core.entity.cloud.*; +import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +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.CodeMsg; +import com.evotech.hd.common.core.enums.OrderStatusEnums; +import com.evotech.hd.common.core.enums.PayTypeEnums; +import com.evotech.hd.common.core.enums.TradeTypeEnums; +import com.evotech.hd.common.redis.utils.RedisServiceUtils; +import com.evotech.hd.common.web.util.EnumUtils; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 订单的业务实现类 + * + * @ClassName:OrderServiceImpl + * @date: 2025年05月16日 13:58 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Service +@Slf4j +public class OrderServiceImpl extends ServiceImpl implements OrderService { + @Resource + private OrderDetailDao orderDetailDao; + @Resource + private SwapOrderBasicFeeComponent orderBasicFeeComponent; + @Resource + private VehicleInfoDao vehicleInfoDao; + @Resource + private OrderDao orderDao; + @Resource + private OrderSwapBatteryStepDao orderSwapBatteryStepDao; + @Resource + private WalletAccountDao walletAccountDao; + @Resource + private TradeService tradeService; + @Resource + private WalletAccountService walletAccountService; + @Resource + TaxPointService taxPointService; + @Resource + private WechatService wechatService; + @Resource + private OrderSwapBatteryPreDao orderSwapBatteryPreDao; + @Resource + private MessageUtilService messageUtilService; + + + + public static OrderListVo convertOrderListVo(Order order){ + OrderListVo vo = new OrderListVo(); + BeanUtils.copyProperties(order, vo); + vo.setAmount(order.getOrderAmount()); + return vo; + } + + @Override + public Result> pageList(PageListSwapOrderRequest plsor) { + + Page page = getBaseMapper().selectPage(new Page(plsor.getPageNo(), plsor.getPageSize()), new LambdaQueryWrapper() + .eq(StringUtils.isNotEmpty(plsor.getOrderNo()), Order::getOrderNo, plsor.getOrderNo()) + .eq(StringUtils.isNotEmpty(plsor.getPlateNum()), Order::getPlateNum, plsor.getPlateNum()) + .ge(ObjectUtils.isNotEmpty(plsor.getOrderTimeBegin()), Order::getOrderTime, plsor.getOrderTimeBegin()) + .le(ObjectUtils.isNotEmpty(plsor.getOrderTimeEnd()), Order::getOrderTime, plsor.getOrderTimeEnd()) + .eq(StringUtils.isNotEmpty(plsor.getStationCode()), Order::getStationCode, plsor.getStationCode()) + .eq(StringUtils.isNotEmpty(plsor.getTradeNo()), Order::getNotifyOrderNo, plsor.getTradeNo()) + .eq(StringUtils.isNotEmpty(plsor.getStatus()), Order::getStatus, plsor.getStatus()) + .ne(Order::getDelFlag, 1) + .orderByDesc(Order::getOrderTime)); + + //构建返回数据 + Page pageResult = new Page<>(); + BeanUtils.copyProperties(page, pageResult, "records"); + pageResult.setRecords(page.getRecords().stream().map(x ->convertOrderListVo(x)).collect(Collectors.toList())); + return new Result>().success(pageResult); + } + + @Override + public Result calculateCost(Order order) { + //查询详情数据, 检查详情相关数据是否存在 + OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId()), false); + if (ObjectUtils.isEmpty(orderDetail)) { + return new Result().error("当前订单没有订单详情,无法处理"); + } + // 2. 检查数据 + if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) { + orderDetail = orderBasicFeeComponent.orderBasicFee(order, orderDetail); + if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) { + return new Result().error("订单费用标准异常!"); + } + } + // 2. 检查消耗量 + if (orderDetail.getElectricityQuantity() == null) { + orderDetail = orderBasicFeeComponent.calculateElectricityQuantity(order, orderDetail); + if (orderDetail.getElectricityQuantity() == null) { + return new Result().error("订单消费统计信息异常!"); + } + } + // 3. 选择费用计算方式 计算费用, 这里计算出来直接就是分 + BigDecimal orderFee = new BigDecimal(orderDetail.getUnitPrice()).multiply(new BigDecimal(orderDetail.getElectricityQuantity())).setScale(0, RoundingMode.HALF_UP); + //订单价格 + orderDetail.setOrderFee(orderFee.intValue()); + // 4. 跟新订单 + order.setOrderAmount(orderFee.add(new BigDecimal(orderDetail.getServiceFee())).intValue()); + order.setStatus(OrderStatusEnums.TOPAY.getCode()); + getBaseMapper().updateById(order); + //更新订单详情 + orderDetailDao.updateById(orderDetail); + //发送订单待结算通知 + wechatService.sendGzhToBeSettledOrderMessage(order); + return new Result().success(""); + } + + + @Override + public Result updateStatus(String orderNo, Integer status) { + //根据订单编码查询此订单 + Order order = getBaseMapper().selectOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderNo)); + if (order == null) { + return new Result().error("订单不存在", false); + } + // 2.如果当前是关闭状态, 检查当前订单是否只是创建状态, 如果不是创建状态, 返回无法关闭 + if (OrderStatusEnums.CANCLE.getCode().equals(status) && !OrderStatusEnums.CREATE.getCode().equals(order.getStatus())) { + return new Result().error("当前状态不允许关闭,订单状态:" + EnumUtils.getEnumPropertyValue(OrderStatusEnums.class, order.getStatus()), false); + } + order.setStatus(status); + order.setUpdateTime(new Date()); + // 3.更新订单状态 + if (getBaseMapper().updateById(order) > 0) { + return new Result().success(true); + } else { + return new Result().error((OrderStatusEnums.CANCLE.getCode().equals(status) ? "取消订单失败" : "订单状态调整失败"), false); + } + + } + + @Override + public Result addOrderByPre(OrderSwapBatteryPre orderSwapBatteryPre) { + // 生成订单 + Order order = new Order(); + order.setOrderNo(CommonUtil.swapBatteryOrderNo(orderSwapBatteryPre.getStationCode())); + order.setOrderPreId(orderSwapBatteryPre.getPkId()); +// order.setP(osbp.getPhone()); + order.setPreWechatId(orderSwapBatteryPre.getUcode()); + order.setOrderPreUname(orderSwapBatteryPre.getUname()); + order.setPlateNum(orderSwapBatteryPre.getPlateNum()); + order.setOrderTime(new Date()); + order.setOrderType(HDConstant.OrderConstant.ORDER_TYPE_SWAP); + order.setStatus(OrderStatusEnums.CREATE.getCode()); + order.setStationCode(orderSwapBatteryPre.getStationCode()); + order.setStationName(orderSwapBatteryPre.getStationName()); + order.setDelFlag(HDConstant.DELETE_NO); + // TODO 查询换电站信息,拿到计费方式,计费信息在充电结束时, 计算 +// osb = orderBasicFeeComponent.orderBasicFee(osb); + return (save(order) ? new Result().success(order) : new Result().error("订单生成异常", null)); + } + + @Override + public Result startSwap(String wuid, String orderNo) { + if (StringUtils.isBlank(wuid) || StringUtils.isBlank(orderNo)) { + log.warn("换电请求参数无效, wuid: {}, orderNo: {}", wuid, orderNo); + return new Result().error("换电请求参数无效"); + } + + // 获取用户订单 + Order order = getBaseMapper().selectOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderNo)); + if (ObjectUtils.isEmpty(order)) { + log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderNo); + return new Result().error("未找到符合条件的订单"); + } + + try { + log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid); + // 构建换电请求消息 + BatterySwapReq batterySwapReq = new BatterySwapReq(); + batterySwapReq.setOrderNo(order.getOrderNo()); + batterySwapReq.setMsg("换电开始"); + // 设置消息主题和头部信息 + MessageTopic topic = new MessageTopic(); + topic.setDataDirection("M2S"); + topic.setStationCode(order.getStationCode()); + topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType()); + MqttMessageHeader header = new MqttMessageHeader(); + header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction()); + header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); + // 发送消息给站端 + messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + log.info("换电开始消息发送成功, 订单编号: {}", order.getOrderNo()); + RedisServiceUtils.set("battery:"+order.getOrderNo(), ""); + + return new Result().success(true); + } catch (Exception e) { + log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid, e); + return new Result().error("系统处理换电请求时发生异常"); + } + } + + @Override + public Result> listByCompany(PageListSwapOrderRequest orderRequest) { + if (!StringUtils.isBlank(orderRequest.getCcode())) { + return null; + } + if (orderRequest.getOrderTimeBegin() == null || orderRequest.getOrderTimeEnd() == null) { + return null; + } + Page page = new Page<>(orderRequest.getPageNo(), orderRequest.getPageSize()); + List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", orderRequest.getCcode())); + if (vehicleList.isEmpty()) { + return new Result>().error("未发现该公司车辆"); + } + //查询车辆信息 + List plateNumList = vehicleList.stream().map(VehicleInfo::getPlateNum).toList(); + page = orderDao.selectPage(page, new QueryWrapper() + .in("plate_num", plateNumList) + .in(StringUtils.isBlank(orderRequest.getStatus()), "status", orderRequest.getStatus()) + .ge("order_time", orderRequest.getOrderTimeBegin()) + //疑问 换电开始时间和结束时间 跟谁比较 + .le("order_time", orderRequest.getOrderTimeEnd()) + .ne("del_flag", 1) + .orderByDesc("pk_id") + ); + if (page.getRecords().isEmpty()) { + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + } + return new Result>().success(page.getRecords()); + } + + @Override + public Result> listStep(String orderNo) { + List orderList = orderSwapBatteryStepDao.selectList(new QueryWrapper() + .eq("order_no", orderNo)); + if (orderList.isEmpty()) { + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + } + return new Result>().success(orderList); + } + + @Override + public Result walletPay(String orderNo, String wuid, String uname) { + Order order = orderDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); + if (!Objects.equals(order.getStatus(), OrderStatusEnums.TOPAY.getCode())) { + return new Result().error("订单异常!"); + } + if (order.getOrderAmount() < 1) { + return new Result().error("订单金额异常!"); + } + WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", wuid)); + if (wallet == null) { + return new Result().error("钱包账户异常!"); + } + if (wallet.getTotalAmount() < order.getOrderAmount()) { + return new Result().error("钱包余额不足!"); + } + //添加交易 + TradeDetail trade = new TradeDetail(); + trade.setOutTradeNo(com.evotech.hd.common.core.utils.CommonUtil.payTradeNo(2)); + trade.setTrader(uname); + trade.setTraderCode(wuid); + trade.setTradeType(TradeTypeEnums.PAYORDER.getCode()); + trade.setOrderCount(1); + trade.setOrderNo(orderNo); + trade.setTradeAmount(order.getOrderAmount()); + trade.setPayType(PayTypeEnums.WALLET.getCode()); + trade.setPayResult("SUCCESS"); + trade.setPayWechatId(wuid); + trade.setPayAccount(wallet.getCode()); + trade.setPayTime(new Date()); + tradeService.add(trade); + + /*** + * 计算金额占比 + */ + Integer tradeRechargeAmount = order.getOrderAmount(); + Integer tradeGiftAmount = 0; + //存在赠送金额 + if(wallet.getGiftAmount() != null && wallet.getGiftAmount() > 0){ + //检查是否允许使用积分结算 + if(ParamServiceUtils.getGiftAmountSettlementOpen()){ + //如果允许积分结算, 查询占比 + String[] proportion = ParamServiceUtils.getSettlementProportion(); + tradeRechargeAmount = new BigDecimal(order.getOrderAmount()).multiply(new BigDecimal(proportion[0])).setScale(2, RoundingMode.HALF_DOWN).intValue(); + tradeGiftAmount = new BigDecimal(order.getOrderAmount()).multiply(new BigDecimal(proportion[1])).setScale(2, RoundingMode.HALF_DOWN).intValue(); + //赠送金额结算大于账户剩余的赠送金额,更新结算金额 + if(tradeGiftAmount > wallet.getGiftAmount()){ + tradeGiftAmount = wallet.getGiftAmount(); + } + } + } + //当充值金额结算和赠送金额结算相加如果不等于订单金额, 则对应的结算金额增加缺少的金额 + if( (tradeRechargeAmount + tradeGiftAmount) < order.getOrderAmount()){ + tradeRechargeAmount = tradeRechargeAmount + (order.getOrderAmount()-(tradeRechargeAmount + tradeGiftAmount)); + } + + //添加钱包账户明细 + WalletAccountDetail wad = new WalletAccountDetail(); + //消费订单, 记录订单金额 + wad.setOrderNo(order.getOrderNo()); + wad.setPlateNum(order.getPlateNum()); + wad.setStationName(order.getStationName()); + + wad.setPreTotalAmount(wallet.getTotalAmount()); + wad.setPreRechargeAmount(wallet.getRechargeAmount()); + wad.setPreGiftAmount(wallet.getGiftAmount()); + //wad.setTradeRechargeAmount(-order.getOrderAmount()); + //wad.setTradeGiftAmount(0); + wad.setTradeRechargeAmount(tradeRechargeAmount); + wad.setTradeGiftAmount(tradeGiftAmount); + wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); + wad.setCode(wallet.getCode()); + wad.setTradeType(trade.getTradeType()); + wad.setTradeNo(trade.getOutTradeNo()); + + wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); + wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); + + walletAccountService.addDetail(wad); + +// wallet.setTotalAmount(wad.getAfterTotalAmount()); + wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount())); + wallet.setRechargeAmount(wad.getAfterRechargeAmount()); + wallet.setUptime(new Date()); + walletAccountDao.updateById(wallet); + // 修改订单状态 + order.setStatus(OrderStatusEnums.FINISH.getCode()); + //交易编码 + //order.setTradeNo(trade.getOutTradeNo()); + order.setUpdateTime(new Date()); + orderDao.updateById(order); + log.info("订单支付成功, 订单编号: {}", order.getOrderNo()); + //税点信息记录 + try { + taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getOrderAmount()), order.getStationCode()); + } catch (Exception e) { + log.error("生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); + } + return new Result().success("OK"); + } + + @Override + public Result companyNativePay(NativePayVO prePay) { + return wechatService.wechatNativePay(prePay); + } + + @Override + public Result orderQuery(String outTradeNo) { + return wechatService.orderQuery(2, outTradeNo); + } + + @Override + public Result cancelOrder(String orderNo, Integer status) { + Order order = orderDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); + + // 1. 查看订单是否存在 + if (order == null) { + return new Result().error("订单不存在"); + } + if (!Arrays.asList(3, 4, 5, 6, 7).contains(order.getStatus())) { + return new Result().error("当前状态不允许取消,订单状态:" + order.getStatus()); + } + order.setPkId(order.getPkId()); + order.setStatus(9); + order.setUpdateTime(new Date()); + int i = orderDao.updateById(order); + if (i == 1) { + return new Result().success(i); + } else { + return new Result().error("取消换电订单失败"); + } + } + + @Override + public Result checkList(PageListSwapOrderRequest plsor) { + Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); + List statusList = new ArrayList<>(); + String strs = "1,2,3,4,5,6"; + if (StringUtils.isBlank(strs)) {//订单状态"已完成"之前的状态 + statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList(); + } + page = orderDao.selectPage(page, new QueryWrapper() + .eq(StringUtils.isBlank(plsor.getOrderNo()), "order_no", plsor.getOrderNo()) + .eq(StringUtils.isBlank(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) + .in(!statusList.isEmpty(), "status", statusList) + .ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin()) + .le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd()) + .eq(StringUtils.isBlank(plsor.getStationCode()), "station_code", plsor.getStationCode()) + .like(StringUtils.isBlank(plsor.getStationName()), "station_name", plsor.getStationName()) + .eq(StringUtils.isBlank(plsor.getUserId()), "order_pre_uid", plsor.getUserId()) + .eq(StringUtils.isBlank(plsor.getTradeNo()), "trade_no", plsor.getTradeNo()) + .ne("del_flag", 1) + .orderByDesc("pk_id")); + if (!page.getRecords().isEmpty()) { + return new Result().error("该车辆有未结算的订单,请确认后重试!"); + } + Page page1 = new Page(plsor.getPageNo(), plsor.getPageSize()); + page1 = orderSwapBatteryPreDao.selectPage(page1, new QueryWrapper() + .eq(StringUtils.isBlank("1"), "status", "1") + .eq(StringUtils.isBlank(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) + .orderByDesc("pk_id")); + if (!page1.getRecords().isEmpty()) { + return new Result().error("该车辆有预约成功的订单,请处理后重试!"); + } + + return new Result().success(0); + } + + @Override + public Result getStartSwap(String wuid, String orderId) { + // 参数校验 + if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { + log.warn("获取换电状态参数无效, wuid: {}, orderId: {}", wuid, orderId); + return new Result().error("参数无效"); + } + // 获取用户订单 + Order orderSwap = orderDao.selectById(orderId); + if (orderSwap == null) { + log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); + return new Result().error("未找到符合条件的订单"); + } + try { + // 从 Redis 中获取换电信息 + String redisKey = "battery:" + orderSwap.getOrderNo(); + Object o = RedisServiceUtils.get(redisKey); + if (ObjectUtil.isEmpty(o)) { + log.info("未收到换电成功信息, 订单编号: {}", orderSwap.getOrderNo()); + return new Result().error("未收到换电成功信息"); + } + // 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象 + BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class); + if (response == null) { + log.error("换电响应数据解析失败, 订单编号: {}", orderSwap.getOrderNo()); + return new Result().error("换电响应数据解析失败"); + } + if (response.getCode() == 1) { + log.info("换电成功, 订单编号: {}", orderSwap.getOrderNo()); + return new Result().success(response); + } else { + log.warn("换电失败, 订单编号: {}, 错误信息: {}", orderSwap.getOrderNo(), response.getMsg()); + return new Result().error(response.getMsg()); + } + } catch (Exception e) { +// log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), e); + return new Result().error("系统获取换电状态时发生异常"); + } + } + + @Override + public Result one(String orderNo) { + return new Result().success(getOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderNo))); + } +} + + diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java new file mode 100644 index 0000000..71a02ef --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java @@ -0,0 +1,190 @@ +package com.evotech.hd.cloud.service.impl; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.dao.BatteryStationDao; +import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; +import com.evotech.hd.cloud.dao.VehicleInfoDao; +import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; +import com.evotech.hd.cloud.utils.CloudTemplateMessageUtils; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.cloud.OrderDao; +import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +import com.evotech.hd.common.core.entity.cloud.BatteryStation; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.common.core.entity.cloud.VehicleInfo; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.common.core.entity.wechat.WechatUser; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.redis.utils.RedisServiceUtils; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; + +/** + * 类 + * + * @ClassName:OrderSwapBatteryreServiceImpl + * @date: 2025年05月19日 16:18 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +@Service +public class OrderSwapBatteryPreServiceImpl extends ServiceImpl implements OrderSwapBatteryPreService { + + @Resource + BatteryStationDao batteryStationDao; + @Resource + private VehicleInfoDao vehicleInfoDao; + @Resource + private WechatUserDao wechatUserDao; + @Resource + private OrderDao orderDao; + + + @Override + public Boolean addPreByPlateNum(String plateNum, String stationCode) { + BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).select(BatteryStation::getCode, BatteryStation::getName), false); + // 3. 添加预约 + Date day = new Date(); + OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); + osbp.setSource(3); + osbp.setSourceId(batteryStation.getCode()); + osbp.setUcode("hp_station_push"); + osbp.setUname("慧鹏站端推送"); + osbp.setPhone("12332112345"); + osbp.setPlateNum(plateNum); + osbp.setStationCode(batteryStation.getCode()); + osbp.setStationName(batteryStation.getName()); + osbp.setSwapDay(DateUtil.format(day, DatePattern.PURE_DATE_FORMATTER)); + osbp.setSwapDuration("6:00-20:00"); + osbp.setStatus(1); + osbp.setCtime(osbp.getReservationTime()); + osbp.setCreater("TEST"); + osbp.setReservationTime(osbp.getReservationTime() == null ? day : osbp.getReservationTime()); + osbp.setCtime(day); + getBaseMapper().insert(osbp); + //特殊渠道反推的数据, 不需要发送通知 + return true; + } + + @Override + public Result addOrderSwapBatteryPre(OrderSwapBatteryPre orderSwapBatteryPre) { + // 1. 检查车辆 + VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(new LambdaQueryWrapper() + .eq(VehicleInfo::getPlateNum, orderSwapBatteryPre.getPlateNum()) + .select(VehicleInfo::getOwnerType)); + if (vehicleInfo == null) { + return new Result().error("未找到车辆信息", false); + } + + // 2. 检查预约人 + if (!wechatUserDao.exists(new LambdaQueryWrapper().ne(WechatUser::getPhoneNumber, " ").isNotNull(WechatUser::getPhoneNumber).eq(WechatUser::getWuid, orderSwapBatteryPre.getUcode()))) { + return new Result().error("用户认证信息不全!", false); + } + //判断换电站是否运营 status 不等于 1 则证明换电站未运营 + if (batteryStationDao.exists(new LambdaQueryWrapper().eq(BatteryStation::getCode, orderSwapBatteryPre.getStationCode()).ne(BatteryStation::getStatus, 1))) { + return new Result().error("该换电站未运营!", false); + } + //判断这个车是不是企业用车 类型为空, 或者 类型为1 是个人用车 + if (vehicleInfo.getOwnerType() == null || vehicleInfo.getOwnerType() == 1) { + try { + Long unpaidOrderCount = orderDao.selectCount(new LambdaQueryWrapper() + .eq(Order::getPreWechatId, orderSwapBatteryPre.getUcode()) + .eq(Order::getStatus, 6) + .eq(Order::getOrderPreUname, orderSwapBatteryPre.getUname()) + ); + log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", orderSwapBatteryPre.getUcode(), unpaidOrderCount); + if (unpaidOrderCount >= 3) { + return new Result().error("您有3笔及以上未支付的订单,请先支付!", false); + } + } catch (Exception e) { + log.error("检查未支付订单异常,用户编码:{},错误信息:{}", orderSwapBatteryPre.getUcode(), e.getMessage()); + return new Result().error("系统异常,请稍后重试", false); + } + } + + // 是否需要验证人和车绑定关系 + + // 是否需要验证公司和车的绑定关系 + + // 3. 添加预约 + Date d = new Date(); + orderSwapBatteryPre.setStatus(1); + orderSwapBatteryPre.setReservationTime(orderSwapBatteryPre.getReservationTime() == null ? d : orderSwapBatteryPre.getReservationTime()); + orderSwapBatteryPre.setCtime(d); + if (getBaseMapper().insert(orderSwapBatteryPre) == 1) { + // 计算过期时间(预约时间后30分钟) + Date expireTime = DateUtil.offsetMinute(orderSwapBatteryPre.getReservationTime(), 90); + // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 + String redisKey = "preorder:expire:" + orderSwapBatteryPre.getPkId(); + RedisServiceUtils.set(redisKey, expireTime); + // 发送服务号消息,没有消息队列,先用接口吧 + CloudTemplateMessageUtils.sendPreOrderMessage(orderSwapBatteryPre); + return new Result().success(true); + } + return new Result().error("添加预约换电订单出错!", false); + } + + @Override + public Result> list(PageListSwapOrderPreRequest plsopr) { + Page page = new Page(plsopr.getPageNo(), plsopr.getPageSize()); + page = getBaseMapper().selectPage(page, new LambdaQueryWrapper() + .eq(StringUtils.hasText(plsopr.getUcode()), OrderSwapBatteryPre::getUcode, plsopr.getUcode()) + .eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus()) + .eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum()) + .eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode()) +// .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) +// .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) + .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin()) + .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd()) + .orderByDesc(OrderSwapBatteryPre::getPkId)); + if (page.getRecords().isEmpty()) { + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + } + return new Result>().success(page); + } + + @Override + public Result cancelPre(Integer id, Integer status) { + OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); + osbp.setPkId(id); + osbp.setStatus(status != null? status : 3); + osbp.setUptime(null); + int n = getBaseMapper().updateById(osbp); + if (n == 1) { + return new Result().success(n); + } + return new Result().error("取消预约换电订单失败!"); + } + + @Override + public List findOrderSwapBatteryPreList(String stationCode) { + return getBaseMapper().selectList(new LambdaQueryWrapper() + .eq(OrderSwapBatteryPre::getStationCode, stationCode) +// .ne(OrderSwapBatteryPre::getUcode,"hp_station_push") + .eq(OrderSwapBatteryPre::getStatus, 1) + .select(OrderSwapBatteryPre::getUcode,OrderSwapBatteryPre::getPkId,OrderSwapBatteryPre::getPlateNum) + ); + } + + @Override + public Boolean clearOrderSwapBatteryPre(List ids) { + return getBaseMapper().update(new UpdateWrapper() + .in("pk_id", ids) + .set("status", 3) //直接取消 + ) > 0; + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java index 4da8c32..04a062e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java @@ -1,731 +1,709 @@ -package com.evotech.hd.cloud.service.impl; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONConfig; -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.vo.NativePayVO; -import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.message.MessageTopic; -import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.cloud.service.TaxPointService; -import com.evotech.hd.cloud.service.TradeService; -import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; -import com.evotech.hd.cloud.service.rpc.WechatService; -import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.*; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.common.core.enums.OrderStatusEnums; -import com.evotech.hd.common.core.enums.PayTypeEnums; -import com.evotech.hd.common.core.enums.TradeTypeEnums; -import com.evotech.hd.common.core.utils.CommonUtil; -import com.evotech.hd.common.redis.utils.RedisUtil; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -@Slf4j -@Service -public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { - - @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - @Resource - private OrderSwapBatteryPreDao orderSwapBatteryPreDao; - @Resource - private OrderSwapBatteryStepDao orderSwapBatteryStepDao; - @Resource - private VehicleInfoDao vehicleInfoDao; - @Resource - private WechatUserDao wechatUserDao; - @Resource - private SwapOrderBasicFeeComponent orderBasicFeeComponent; - @Resource - private GZHTemplateMessageService templateMessageService; - @Resource - private WalletAccountDao walletAccountDao; - @Resource - private WalletAccountService walletAccountService; - @Resource - private TradeService tradeService; - @Resource - private WechatService wechatService; - @Resource - private MessageUtilService messageUtilService; - @Resource - private RedisUtil redisUtil; - @Resource - private BatteryStationDao batteryStationDao; - @Resource - private GZHTemplateMessageService gzhTemplateMessageService; - @Resource - TaxPointService taxPointService; - - @Override - public Result addPre(OrderSwapBatteryPre osbp) { - // 1. 检查车辆 - LambdaQueryWrapper vehicleQuery = new LambdaQueryWrapper() - .eq(VehicleInfo::getPlateNum, osbp.getPlateNum()) - .select(VehicleInfo::getOwnerType); - - VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(vehicleQuery); - if (vehicleInfo == null) { - return new Result().error("未找到车辆信息"); - } - - // 2. 检查预约人 - boolean b2 = wechatUserDao.exists(new QueryWrapper() - .ne("phone_number", " ") - .isNotNull("phone_number") - .eq("wuid", osbp.getUcode()) - ); - if (!b2) { - return new Result().error("用户认证信息不全!"); - } - //判断换电站是否运营 - boolean b3 = batteryStationDao.exists(new QueryWrapper() - .eq("code", osbp.getStationCode()) - .eq("status", 1)); - if (!b3){ - return new Result().error("该换电站未运营!"); - } - //判断这个车是不是企业用车 - if (vehicleInfo.getOwnerType() != null && vehicleInfo.getOwnerType()==1 ){ - try { - Long unpaidOrderCount = orderSwapBatteryDao.selectCount(new LambdaQueryWrapper() - .eq(OrderSwapBattery::getOrderPreUid, osbp.getUcode()) - .eq(OrderSwapBattery::getStatus, 6) - .eq(OrderSwapBattery::getOrderPreUname, osbp.getUname()) - ); - - log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", osbp.getUcode(), unpaidOrderCount); - if (unpaidOrderCount >= 3) { - return new Result().error("您有3笔及以上未支付的订单,请先支付!"); - } - } catch (Exception e) { - log.error("检查未支付订单异常,用户编码:{},错误信息:{}", - osbp.getUcode(), e.getMessage()); - return new Result().error("系统异常,请稍后重试"); - } - } - - // 是否需要验证人和车绑定关系 - - // 是否需要验证公司和车的绑定关系 - - // 3. 添加预约 - Date d = new Date(); - osbp.setStatus(1); - osbp.setReservationTime(osbp.getReservationTime() == null ? d : osbp.getReservationTime()); - osbp.setCtime(d); - int n = orderSwapBatteryPreDao.insert(osbp); - if (n == 1) { - // 计算过期时间(预约时间后30分钟) - Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); - // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 - String redisKey = "preorder:expire:" + osbp.getPkId(); - redisUtil.set(redisKey, expireTime); - // 发送服务号消息,没有消息队列,先用接口吧 - templateMessageService.preOrderMessageSend(osbp); - return new Result().success(n); - } - return new Result().error("添加预约换电订单出错!"); - } - - @Override - public Result cancelPre(Integer id, Integer status) { - OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); - osbp.setPkId(id); - osbp.setStatus(status != null? status : 3); - osbp.setUptime(null); - int n = orderSwapBatteryPreDao.updateById(osbp); - if (n == 1) { - return new Result().success(n); - } - return new Result().error("取消预约换电订单失败!"); - } - - @Override - public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException { - Page page = new Page(plsopr.getPageNo(), plsopr.getPageSize()); - page = orderSwapBatteryPreDao.selectPage(page, new LambdaQueryWrapper() - .eq(StringUtils.hasText(plsopr.getUcode()), OrderSwapBatteryPre::getUcode, plsopr.getUcode()) - .eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus()) - .eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum()) - .eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode()) -// .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) -// .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) - .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin()) - .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd()) - .orderByDesc(OrderSwapBatteryPre::getPkId)); - if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - return new Result>().success(page); - } - - @Override - public Result add(OrderSwapBattery osb) { - - // 加上费用标准 - osb = orderBasicFeeComponent.orderBasicFee(osb); - osb.setCtime(new Date()); - int n = orderSwapBatteryDao.insert(osb); - if (n == 1) { - return new Result().success(n); - } - return new Result().error("添加换电订单出错!"); - } - - @Override - public Result delete(Integer id) { - OrderSwapBattery osb = new OrderSwapBattery(); - osb.setPkId(id); - osb.setDelFlag(1); - int n = orderSwapBatteryDao.updateById(osb); - if (n == 1) { - return new Result().success(n); - } - throw new RuntimeException("删除换电订单出错!"); - } - - @Override - public Result update(OrderSwapBattery osb) { - osb.setUptime(null); - int n = orderSwapBatteryDao.updateById(osb); - if (n == 1) { - return new Result().success(n); - } - return new Result().error("更新换电订单失败!"); - } - - @Override - public Result> list(PageListSwapOrderRequest plsor) { - Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); - List plateNumList = new ArrayList(); - if (StringUtils.hasText(plsor.getCcode())) { - List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); - if (vehicleList.isEmpty()) { - return new Result>().error("未发现该公司车辆"); - } - plateNumList = vehicleList.stream().map(VehicleInfo::getPlateNum).toList(); - } else if (StringUtils.hasText(plsor.getPlateNums())) { - plateNumList = Arrays.asList(plsor.getPlateNums().split(",")); - } - List statusList = new ArrayList(); - if (StringUtils.hasText(plsor.getStatus())) { - statusList = Arrays.asList(plsor.getStatus().split(",")).stream().map(Integer::valueOf).toList(); - } - - page = orderSwapBatteryDao.selectPage(page, new LambdaQueryWrapper() - .eq(StringUtils.hasText(plsor.getOrderNo()), OrderSwapBattery::getOrderNo, plsor.getOrderNo()) - .eq(StringUtils.hasText(plsor.getPlateNum()), OrderSwapBattery::getPlateNum, plsor.getPlateNum()) - .in(!plateNumList.isEmpty(), OrderSwapBattery::getPlateNum, plateNumList) - .in(!statusList.isEmpty(), OrderSwapBattery::getStatus, statusList) - .ge(plsor.getOrderTimeBegin() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeBegin()) - .le(plsor.getOrderTimeEnd() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeEnd()) - .eq(StringUtils.hasText(plsor.getStationCode()), OrderSwapBattery::getStationCode, plsor.getStationCode()) - .like(StringUtils.hasText(plsor.getStationName()), OrderSwapBattery::getStationName, plsor.getStationName()) - .eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreUid, plsor.getUserId()) - .eq(StringUtils.hasText(plsor.getTradeNo()), OrderSwapBattery::getTradeNo, plsor.getTradeNo()) - .ne(OrderSwapBattery::getDelFlag, 1) - .orderByDesc(OrderSwapBattery::getPkId)); - if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - page.getRecords().forEach(osb -> { - if (StringUtils.hasText(osb.getFeeStandardJson())){ - String feeStandardJson = osb.getFeeStandardJson(); - BatteryStationHdFeeStandard bean = JSONUtil.toBean(feeStandardJson, BatteryStationHdFeeStandard.class); - osb.setFeeStandardDetail(bean); - } - - }); - - return new Result>().success(page); - } - - @Override - public Result> listByCompany(PageListSwapOrderRequest plsor) { - if (!StringUtils.hasText(plsor.getCcode())) { - return new Result>().error("参数错误"); - } - if (plsor.getOrderTimeBegin() == null || plsor.getOrderTimeEnd() == null) { - return new Result>().error("参数错误"); - } - Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); - List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); - if (vehicleList.isEmpty()) { - return new Result>().error("未发现该公司车辆"); - } - List plateNumList = vehicleList.stream().map(i -> i.getPlateNum()).toList(); - page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() - .in("plate_num", plateNumList) - .in(StringUtils.hasText(plsor.getStatus()), "status", plsor.getStatus()) - .ge("order_time", plsor.getOrderTimeBegin()) - .le("order_time", plsor.getOrderTimeEnd()) - .ne("del_flag", 1) - .orderByDesc("pk_id")); - if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - return new Result>().success(page); - } - - @Override - public Result> listStep(String orderNo) { - List list = orderSwapBatteryStepDao.selectList(new QueryWrapper() - .eq("order_no", orderNo)); - if (list.isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - return new Result>().success(list); - } - - @Override - public Result calculateCost1(String orderNo, OrderStatusData statusData) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); - log.info("订单号:{}", JSONUtil.parseObj(order)); - if (order == null) { - return new Result().error("无此订单!"); - } - // 1. 检查状态 - if (order.getStatus() != 3) { - return new Result().error("订单状态异常!"); - } - - // 2. 检查数据 - if (order.getBasicFee() == null || order.getServiceFee() == null) { - order = orderBasicFeeComponent.orderBasicFee(order); - if (order.getBasicFee() == null || order.getServiceFee() == null) { - return new Result().error("订单费用标准异常!"); - } - } - BigDecimal fee; - // 3. 选择费用计算方式 计算费用 - if (order.getFeeType()==3){ - // 电量计算 - if (order.getElectAmount() == null) { - return new Result().error("充电订单充电量异常!"); - } - fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); - - }else if (order.getFeeType() == 2) { - // TODO 按SOC - if (statusData.getRentBatSoc() == null || statusData.getReturnBatSoc() == null) { - return new Result().error("充电订单 SOC 异常!"); - } - // 计算 SOC - BigDecimal socDifference = new BigDecimal(statusData.getRentBatSoc() - statusData.getReturnBatSoc()); - fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); - order.setElectAmount(socDifference); - }else { - return new Result().error("此订单不是按照电量计算"); - } - // 4. 修改订单 - - order.setAmount(fee.intValue()); - order.setStatus(6); - orderSwapBatteryDao.updateById(order); - log.info("订单费用计算完成:{}", JSONUtil.parseObj(order)); - gzhTemplateMessageService.orderMessageSend2(order.getPkId(),2); - return new Result().success(fee); - } - - - - @Override - public Result calculateCost(OrderSwapBattery order) { - // 2. 检查数据 - if (order.getBasicFee() == null || order.getServiceFee() == null) { - order = orderBasicFeeComponent.orderBasicFee(order); - if (order.getBasicFee() == null || order.getServiceFee() == null) { - return new Result().error("订单费用标准异常!"); - } - } - // 3. 选择费用计算方式 计算费用 - BigDecimal fee = BigDecimal.ZERO; - if (order.getFeeType() == 3) { - // 先按电量计算 - if (order.getElectAmount() == null) { - return new Result().error("充电订单 充电量 异常!"); - } - //基础费用*充电总量 - fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); - } else if (order.getFeeType() == 2) { - // TODO 按SOC - if (order.getReturnBatSoc() == null || order.getRentBatSoc() == null) { - return new Result().error("充电订单 SOC 异常!"); - } - // 计算 SOC - BigDecimal socDifference = new BigDecimal(order.getRentBatSoc() - order.getReturnBatSoc()); - fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); - - } else if (order.getFeeType() == 1) { - // TODO 按里程 - - } else { - - } - // 4. 修改订单 - order.setAmount(fee.intValue()); - order.setStatus(6); - order.setUptime(null); - orderSwapBatteryDao.updateById(order); - return new Result().success(fee); - } - - - @Override - @Transactional - public Result walletPay(String orderNo, String wuid, String uname) { - // 订单 - OrderSwapBattery order = orderSwapBatteryDao - .selectOne(new QueryWrapper().eq("order_no", orderNo)); - if (order.getStatus() != OrderStatusEnums.TOPAY.getCode()) { - return new Result().error("订单异常!"); - } - if (order.getAmount() < 1) { - return new Result().error("订单金额异常!"); - } - // 账户 - WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper() - .eq("owner_id", wuid)); - if (wallet == null) { - return new Result().error("钱包账户异常!"); - } - if (wallet.getTotalAmount() < order.getAmount()) { - return new Result().error("钱包余额不足!"); - } - - - // 添加交易 - TradeDetail trade = new TradeDetail(); - trade.setOutTradeNo(CommonUtil.payTradeNo(2)); - trade.setTrader(uname); - trade.setTraderCode(wuid); - trade.setTradeType(TradeTypeEnums.PAYORDER.getCode()); - trade.setOrderCount(1); - trade.setOrderNo(orderNo); - trade.setTradeAmount(order.getAmount()); - trade.setPayType(PayTypeEnums.WALLET.getCode()); - trade.setPayResult("SUCCESS"); - trade.setPayMsg("OK"); - trade.setPayer(wuid); - trade.setWallet(wallet.getCode()); - trade.setPayTime(new Date()); - tradeService.add(trade); - - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - wad.setPreTotalAmount(wallet.getTotalAmount()); - wad.setPreRechargeAmount(wallet.getRechargeAmount()); - wad.setPreGiftAmount(0); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(-order.getAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setCode(wallet.getCode()); - wad.setTradeType(trade.getTradeType()); - wad.setTradeNo(trade.getOutTradeNo()); - - wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); - wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount())); - - wad.setOrderNo(orderNo); - wad.setPlateNum(order.getPlateNum()); - wad.setStationName(order.getStationName());//添加订单关联关系及车牌号,站点信息0419 - walletAccountService.addDetail(wad); - // 改余额 - wallet.setTotalAmount(wad.getAfterTotalAmount()); - wallet.setRechargeAmount(wad.getAfterRechargeAmount()); - wallet.setUptime(null); - walletAccountDao.updateById(wallet); - - // 修改订单状态 - order.setStatus(OrderStatusEnums.FINISH.getCode()); - order.setTradeNo(trade.getOutTradeNo()); - order.setUptime(null); - orderSwapBatteryDao.updateById(order); - - //税点信息记录 - try { - taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getAmount()), order.getStationCode()); - } catch (Exception e) { - log.error("余额支付=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); - } - - return new Result().success("OK"); - } - - @Override - public Result companyNativePay(NativePayVO prePay) { - return wechatService.wechatNativePay(prePay); - } - - @Override - public Result orderQuery(String outTradeNo) { - return wechatService.orderQuery(2, outTradeNo); - } - - @Override - public Result cancelOrder(String orderNo, Integer status) { - //根据订单编码查询此订单 - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); - // 1. 查看订单是否存在 - OrderSwapBattery cancelOr = new OrderSwapBattery(); - if (order == null) { - return new Result().error("订单不存在"); - } - // 2. 校验当前状态是否允许取消 - if (!Arrays.asList(3,4,5,6,7).contains(order.getStatus())) { - return new Result().error("当前状态不允许取消,订单状态:" + order.getStatus()); - } - cancelOr.setPkId(order.getPkId()); - cancelOr.setStatus(9); - cancelOr.setUptime(new Date()); - // 3.更新订单状态 - int i = orderSwapBatteryDao.updateById(cancelOr); - if (i==1){ - return new Result().success(i); - }else{ - return new Result().error("取消换电订单失败"); - } - - } - - @Override - public Result markOrderAsExpired(Integer pkId) { - OrderSwapBatteryPre orderSwapBatteryPre = orderSwapBatteryPreDao.selectById(pkId); - orderSwapBatteryPre.setStatus(3); - int re = orderSwapBatteryPreDao.updateById(orderSwapBatteryPre); - if (re==1){ - return new Result().success(re); - } - else{ - return new Result().error("换电预约订单失败"); - } - } - - @Override - public Result startSwap(String wuid, String orderId) { - if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { - log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId); - return new Result().error("换电请求参数无效"); - } - - // 获取用户订单 - OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); - if (orderSwap == null) { - log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); - return new Result().error("未找到符合条件的订单"); - } - - try { - log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid); - - // 构建换电请求消息 - BatterySwapReq batterySwapReq = new BatterySwapReq(); - batterySwapReq.setOrderNo(orderSwap.getOrderNo()); - batterySwapReq.setMsg("换电开始"); - - // 设置消息主题和头部信息 - MessageTopic topic = new MessageTopic(); - topic.setDataDirection("M2S"); - topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType()); - - MqttMessageHeader header = new MqttMessageHeader(); - header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction()); - header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); - - // 发送消息给站端 - messageUtilService.publishAESMessage(topic, header, - JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); - - log.info("换电开始消息发送成功, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().success(true); - - } catch (Exception e) { - log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid, e); - return new Result().error("系统处理换电请求时发生异常"); - } - } - - @Override - public Result getStartSwap(String wuid, String orderId) { - // 参数校验 - if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { - log.warn("获取换电状态参数无效, wuid: {}, orderId: {}", wuid, orderId); - return new Result().error("参数无效"); - } - - // 获取用户订单 - OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); - if (orderSwap == null) { - log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); - return new Result().error("未找到符合条件的订单"); - } - - try { - // 从 Redis 中获取换电信息 - String redisKey = "battery:" + orderSwap.getOrderNo(); - Object o = redisUtil.get(redisKey); - if (ObjectUtil.isEmpty(o)) { - log.info("未收到换电成功信息, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().error("未收到换电成功信息"); - } - - // 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象 - BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class); - if (response == null) { - log.error("换电响应数据解析失败, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().error("换电响应数据解析失败"); - } - - if (response.getCode() == 1) { - log.info("换电成功, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().success(response); - } else { - log.warn("换电失败, 订单编号: {}, 错误信息: {}", orderSwap.getOrderNo(), response.getMsg()); - return new Result().error(response.getMsg()); - } - } catch (Exception e) { - log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), e); - return new Result().error("系统获取换电状态时发生异常"); - } - } - - - @Override - public Result checkList(PageListSwapOrderRequest plsor) { - - Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); - List statusList = new ArrayList(); - String strs= "1,2,3,4,5,6"; - if (StringUtils.hasText(strs)) {//订单状态"已完成"之前的状态 - statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList(); - } - - page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() - .eq(StringUtils.hasText(plsor.getOrderNo()), "order_no", plsor.getOrderNo()) - .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) - .in(!statusList.isEmpty(), "status", statusList) - .ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin()) - .le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd()) - .eq(StringUtils.hasText(plsor.getStationCode()), "station_code", plsor.getStationCode()) - .like(StringUtils.hasText(plsor.getStationName()), "station_name", plsor.getStationName()) - .eq(StringUtils.hasText(plsor.getUserId()), "order_pre_uid", plsor.getUserId()) - .eq(StringUtils.hasText(plsor.getTradeNo()), "trade_no", plsor.getTradeNo()) - .ne("del_flag", 1) - .orderByDesc("pk_id")); - if (!page.getRecords().isEmpty()) { - return new Result().error("该车辆有未结算的订单,请确认后重试!"); - } - - - /*Page page1 = new Page(plsor.getPageNo(), plsor.getPageSize()); - page1 = orderSwapBatteryPreDao.selectPage(page1, new QueryWrapper() - .eq(StringUtils.hasText("1"), "status", "1") - .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) - .orderByDesc("pk_id")); - if (!page1.getRecords().isEmpty()) { - return new Result().error("该车辆有预约成功的订单,请处理后重试!"); - }*/ - - - return new Result().success(0); - } - - - @Override - public Boolean addPreByPlateNum(String PlateNum, String stationCode) { - BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).select(BatteryStation::getCode, BatteryStation::getName), false); - // 3. 添加预约 - Date day = new Date(); - OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); - osbp.setSource(3); - osbp.setSourceId(batteryStation.getCode()); - osbp.setUcode("hp_station_push"); - osbp.setUname("慧鹏站端推送"); - osbp.setPhone("12332112345"); - osbp.setPlateNum(PlateNum); - osbp.setStationCode(batteryStation.getCode()); - osbp.setStationName(batteryStation.getName()); - osbp.setSwapDay(DateUtil.format(day, DatePattern.PURE_DATE_FORMATTER)); - osbp.setSwapDuration("6:00-20:00"); - osbp.setStatus(1); - osbp.setCtime(osbp.getReservationTime()); - osbp.setCreater("TEST"); - osbp.setReservationTime(osbp.getReservationTime() == null ? day : osbp.getReservationTime()); - osbp.setCtime(day); - int n = orderSwapBatteryPreDao.insert(osbp); - //特殊渠道反推的数据, 不需要发送通知 -// if (n == 1) { +//package com.evotech.hd.cloud.service.impl; +// +//import cn.hutool.core.date.DatePattern; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.StrUtil; +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +//import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +//import com.evotech.hd.cloud.dao.*; +//import com.evotech.hd.common.core.dao.cloud.OrderDao; +//import com.evotech.hd.common.core.entity.order.Order; +//import com.evotech.hd.cloud.entity.vo.NativePayVO; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +//import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +//import com.evotech.hd.cloud.service.OrderSwapBatteryService; +//import com.evotech.hd.cloud.service.TaxPointService; +//import com.evotech.hd.cloud.service.TradeService; +//import com.evotech.hd.cloud.service.WalletAccountService; +//import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; +//import com.evotech.hd.cloud.service.rpc.WechatService; +//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +//import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.BatteryStation; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +//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.cloud.request.BatterySwapResponse; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +//import com.evotech.hd.common.core.entity.wechat.WechatUser; +//import com.evotech.hd.common.core.enums.CodeMsg; +//import com.evotech.hd.common.redis.utils.RedisServiceUtils; +//import com.evotech.hd.common.redis.utils.RedisUtil; +//import jakarta.annotation.Resource; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +//import org.springframework.util.StringUtils; +// +//import java.text.ParseException; +//import java.util.Date; +//import java.util.List; +// +//@Slf4j +//@Service +//public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { +// +// @Resource +// private OrderDao orderDao; +// @Resource +// private OrderSwapBatteryPreDao orderSwapBatteryPreDao; +// @Resource +// private OrderSwapBatteryStepDao orderSwapBatteryStepDao; +// @Resource +// private VehicleInfoDao vehicleInfoDao; +// @Resource +// private WechatUserDao wechatUserDao; +// @Resource +// private SwapOrderBasicFeeComponent orderBasicFeeComponent; +// @Resource +// private GZHTemplateMessageService templateMessageService; +// @Resource +// private WalletAccountDao walletAccountDao; +// @Resource +// private WalletAccountService walletAccountService; +// @Resource +// private TradeService tradeService; +// @Resource +// private WechatService wechatService; +// @Resource +// private MessageUtilService messageUtilService; +// @Resource +// private RedisUtil redisUtil; +// @Resource +// private BatteryStationDao batteryStationDao; +// @Resource +// private GZHTemplateMessageService gzhTemplateMessageService; +// @Resource +// TaxPointService taxPointService; +// +// @Override +// public Result addPre(OrderSwapBatteryPre osbp) { +// // 1. 检查车辆 +// VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(new LambdaQueryWrapper() +// .eq(VehicleInfo::getPlateNum, osbp.getPlateNum()) +// .select(VehicleInfo::getOwnerType)); +// if (vehicleInfo == null) { +// return new Result().error("未找到车辆信息"); +// } +// +// // 2. 检查预约人 +// if (!wechatUserDao.exists(new LambdaQueryWrapper().ne(WechatUser::getPhoneNumber, " ").isNotNull(WechatUser::getPhoneNumber).eq(WechatUser::getWuid, osbp.getUcode()))) { +// return new Result().error("用户认证信息不全!"); +// } +// //判断换电站是否运营 status 不等于 1 则证明换电站未运营 +// if (batteryStationDao.exists(new LambdaQueryWrapper().eq(BatteryStation::getCode, osbp.getStationCode()).ne(BatteryStation::getStatus, 1))){ +// return new Result().error("该换电站未运营!"); +// } +// //判断这个车是不是企业用车 类型为空, 或者 类型为1 是个人用车 +// if (vehicleInfo.getOwnerType() == null || vehicleInfo.getOwnerType()==1 ){ +// try { +// Long unpaidOrderCount = orderDao.selectCount(new LambdaQueryWrapper() +// .eq(Order::getPreWechatId, osbp.getUcode()) +// .eq(Order::getStatus, 6) +// .eq(Order::getPreName, osbp.getUname()) +// ); +// log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", osbp.getUcode(), unpaidOrderCount); +// if (unpaidOrderCount >= 3) { +// return new Result().error("您有3笔及以上未支付的订单,请先支付!"); +// } +// } catch (Exception e) { +// log.error("检查未支付订单异常,用户编码:{},错误信息:{}", osbp.getUcode(), e.getMessage()); +// return new Result().error("系统异常,请稍后重试"); +// } +// } +// +// // 是否需要验证人和车绑定关系 +// +// // 是否需要验证公司和车的绑定关系 +// +// // 3. 添加预约 +// Date d = new Date(); +// osbp.setStatus(1); +// osbp.setReservationTime(osbp.getReservationTime() == null ? d : osbp.getReservationTime()); +// osbp.setCtime(d); +// if (orderSwapBatteryPreDao.insert(osbp) == 1) { // // 计算过期时间(预约时间后30分钟) // Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); // // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 // String redisKey = "preorder:expire:" + osbp.getPkId(); -// redisUtil.set(redisKey, expireTime); +// RedisServiceUtils.set(redisKey, expireTime); // // 发送服务号消息,没有消息队列,先用接口吧 // templateMessageService.preOrderMessageSend(osbp); -// return true; +// return new Result().success(); // } - return true; - - - - } - - @Override - public List findOrderSwapBatteryPreList(String stationCode) { - return orderSwapBatteryPreDao.selectList(new LambdaQueryWrapper() - .eq(OrderSwapBatteryPre::getStationCode, stationCode) -// .ne(OrderSwapBatteryPre::getUcode,"hp_station_push") - .eq(OrderSwapBatteryPre::getStatus, 1) - .select(OrderSwapBatteryPre::getUcode,OrderSwapBatteryPre::getPkId,OrderSwapBatteryPre::getPlateNum) - ); - } - - @Override - public Boolean clearOrderSwapBatteryPre(List ids) { - - return orderSwapBatteryPreDao.update(new UpdateWrapper() - .in("pk_id", ids) - .set("status", 3) //直接取消 - ) > 0; - } - -} +// return new Result().error("添加预约换电订单出错!"); +// } +// +// @Override +// public Result cancelPre(Integer id, Integer status) { +// OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); +// osbp.setPkId(id); +// osbp.setStatus(status != null? status : 3); +// osbp.setUptime(null); +// int n = orderSwapBatteryPreDao.updateById(osbp); +// if (n == 1) { +// return new Result().success(n); +// } +// return new Result().error("取消预约换电订单失败!"); +// } +// +// @Override +// public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException { +// Page page = new Page(plsopr.getPageNo(), plsopr.getPageSize()); +// page = orderSwapBatteryPreDao.selectPage(page, new LambdaQueryWrapper() +// .eq(StringUtils.hasText(plsopr.getUcode()), OrderSwapBatteryPre::getUcode, plsopr.getUcode()) +// .eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus()) +// .eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum()) +// .eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode()) +//// .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) +//// .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) +// .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin()) +// .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd()) +// .orderByDesc(OrderSwapBatteryPre::getPkId)); +// if (page.getRecords().isEmpty()) { +// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +// } +// return new Result>().success(page); +// } +// +//// @Override +//// public Result add(OrderSwapBattery osb) { +//// +//// // 加上费用标准 +//// osb = orderBasicFeeComponent.orderBasicFee(osb); +//// osb.setCtime(new Date()); +//// int n = orderSwapBatteryDao.insert(osb); +//// if (n == 1) { +//// return new Result().success(n); +//// } +//// return new Result().error("添加换电订单出错!"); +//// } +// +// @Override +// public Result delete(Integer id) { +//// OrderSwapBattery osb = new OrderSwapBattery(); +//// osb.setPkId(id); +//// osb.setDelFlag(1); +//// int n = orderSwapBatteryDao.updateById(osb); +//// if (n == 1) { +//// return new Result().success(n); +//// } +// throw new RuntimeException("删除换电订单出错!"); +// } +// +//// @Override +//// public Result update(OrderSwapBattery osb) { +//// osb.setUptime(null); +//// int n = orderSwapBatteryDao.updateById(osb); +//// if (n == 1) { +//// return new Result().success(n); +//// } +//// return new Result().error("更新换电订单失败!"); +//// } +// +//// @Override +//// public Result> list(PageListSwapOrderRequest plsor) { +//// Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); +//// List plateNumList = new ArrayList(); +//// if (StringUtils.hasText(plsor.getCcode())) { +//// List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); +//// if (vehicleList.isEmpty()) { +//// return new Result>().error("未发现该公司车辆"); +//// } +//// plateNumList = vehicleList.stream().map(VehicleInfo::getPlateNum).toList(); +//// } else if (StringUtils.hasText(plsor.getPlateNums())) { +//// plateNumList = Arrays.asList(plsor.getPlateNums().split(",")); +//// } +//// List statusList = new ArrayList(); +//// if (StringUtils.hasText(plsor.getStatus())) { +//// statusList = Arrays.asList(plsor.getStatus().split(",")).stream().map(Integer::valueOf).toList(); +//// } +//// +//// page = orderSwapBatteryDao.selectPage(page, new LambdaQueryWrapper() +//// .eq(StringUtils.hasText(plsor.getOrderNo()), OrderSwapBattery::getOrderNo, plsor.getOrderNo()) +//// .eq(StringUtils.hasText(plsor.getPlateNum()), OrderSwapBattery::getPlateNum, plsor.getPlateNum()) +//// .in(!plateNumList.isEmpty(), OrderSwapBattery::getPlateNum, plateNumList) +//// .in(!statusList.isEmpty(), OrderSwapBattery::getStatus, statusList) +//// .ge(plsor.getOrderTimeBegin() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeBegin()) +//// .le(plsor.getOrderTimeEnd() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeEnd()) +//// .eq(StringUtils.hasText(plsor.getStationCode()), OrderSwapBattery::getStationCode, plsor.getStationCode()) +//// .like(StringUtils.hasText(plsor.getStationName()), OrderSwapBattery::getStationName, plsor.getStationName()) +//// .eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreUid, plsor.getUserId()) +//// .eq(StringUtils.hasText(plsor.getTradeNo()), OrderSwapBattery::getTradeNo, plsor.getTradeNo()) +//// .ne(OrderSwapBattery::getDelFlag, 1) +//// .orderByDesc(OrderSwapBattery::getPkId)); +//// if (page.getRecords().isEmpty()) { +//// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +//// } +//// page.getRecords().forEach(osb -> { +//// if (StringUtils.hasText(osb.getFeeStandardJson())){ +//// String feeStandardJson = osb.getFeeStandardJson(); +//// BatteryStationHdFeeStandard bean = JSONUtil.toBean(feeStandardJson, BatteryStationHdFeeStandard.class); +//// osb.setFeeStandardDetail(bean); +//// } +//// +//// }); +//// +//// return new Result>().success(page); +//// } +// +//// @Override +//// public Result> listByCompany(PageListSwapOrderRequest plsor) { +//// if (!StringUtils.hasText(plsor.getCcode())) { +//// return new Result>().error("参数错误"); +//// } +//// if (plsor.getOrderTimeBegin() == null || plsor.getOrderTimeEnd() == null) { +//// return new Result>().error("参数错误"); +//// } +//// Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); +//// List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); +//// if (vehicleList.isEmpty()) { +//// return new Result>().error("未发现该公司车辆"); +//// } +//// List plateNumList = vehicleList.stream().map(i -> i.getPlateNum()).toList(); +//// page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() +//// .in("plate_num", plateNumList) +//// .in(StringUtils.hasText(plsor.getStatus()), "status", plsor.getStatus()) +//// .ge("order_time", plsor.getOrderTimeBegin()) +//// .le("order_time", plsor.getOrderTimeEnd()) +//// .ne("del_flag", 1) +//// .orderByDesc("pk_id")); +//// if (page.getRecords().isEmpty()) { +//// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +//// } +//// return new Result>().success(page); +//// } +// +// @Override +// public Result> listStep(String orderNo) { +// List list = orderSwapBatteryStepDao.selectList(new QueryWrapper() +// .eq("order_no", orderNo)); +// if (list.isEmpty()) { +// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +// } +// return new Result>().success(list); +// } +// +// @Override +// public Result calculateCost1(String orderNo, OrderStatusData statusData) { +//// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); +//// log.info("订单号:{}", JSONUtil.parseObj(order)); +//// if (order == null) { +//// return new Result().error("无此订单!"); +//// } +//// // 1. 检查状态 +//// if (order.getStatus() != 3) { +//// return new Result().error("订单状态异常!"); +//// } +//// +//// // 2. 检查数据 +//// if (order.getBasicFee() == null || order.getServiceFee() == null) { +//// order = orderBasicFeeComponent.orderBasicFee(order); +//// if (order.getBasicFee() == null || order.getServiceFee() == null) { +//// return new Result().error("订单费用标准异常!"); +//// } +//// } +//// BigDecimal fee; +//// // 3. 选择费用计算方式 计算费用 +//// if (order.getFeeType()==3){ +//// // 电量计算 +//// if (order.getElectAmount() == null) { +//// return new Result().error("充电订单充电量异常!"); +//// } +//// fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); +//// +//// }else if (order.getFeeType() == 2) { +//// // TODO 按SOC +//// if (statusData.getRentBatSoc() == null || statusData.getReturnBatSoc() == null) { +//// return new Result().error("充电订单 SOC 异常!"); +//// } +//// // 计算 SOC +//// BigDecimal socDifference = new BigDecimal(statusData.getRentBatSoc() - statusData.getReturnBatSoc()); +//// fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); +//// order.setElectAmount(socDifference); +//// }else { +//// return new Result().error("此订单不是按照电量计算"); +//// } +//// // 4. 修改订单 +//// +//// order.setAmount(fee.intValue()); +//// order.setStatus(6); +//// orderSwapBatteryDao.updateById(order); +//// log.info("订单费用计算完成:{}", JSONUtil.parseObj(order)); +//// gzhTemplateMessageService.orderMessageSend2(order.getPkId(),2); +//// return new Result().success(fee); +// return new Result().success("1"); +// } +// +// +// +//// @Override +//// public Result calculateCost(OrderSwapBattery order) { +//// // 2. 检查数据 +//// if (order.getBasicFee() == null || order.getServiceFee() == null) { +//// order = orderBasicFeeComponent.orderBasicFee(order); +//// if (order.getBasicFee() == null || order.getServiceFee() == null) { +//// return new Result().error("订单费用标准异常!"); +//// } +//// } +//// // 3. 选择费用计算方式 计算费用 +//// BigDecimal fee = BigDecimal.ZERO; +//// if (order.getFeeType() == 3) { +//// // 先按电量计算 +//// if (order.getElectAmount() == null) { +//// return new Result().error("充电订单 充电量 异常!"); +//// } +//// //基础费用*充电总量 +//// fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); +//// } else if (order.getFeeType() == 2) { +//// // TODO 按SOC +//// if (order.getReturnBatSoc() == null || order.getRentBatSoc() == null) { +//// return new Result().error("充电订单 SOC 异常!"); +//// } +//// // 计算 SOC +//// BigDecimal socDifference = new BigDecimal(order.getRentBatSoc() - order.getReturnBatSoc()); +//// fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); +//// +//// } else if (order.getFeeType() == 1) { +//// // TODO 按里程 +//// +//// } else { +//// +//// } +//// // 4. 修改订单 +//// order.setAmount(fee.intValue()); +//// order.setStatus(6); +//// order.setUptime(null); +//// orderSwapBatteryDao.updateById(order); +//// return new Result().success(fee); +//// } +// +// +// @Override +// @Transactional +// public Result walletPay(String orderNo, String wuid, String uname) { +//// // 订单 +//// OrderSwapBattery order = orderSwapBatteryDao +//// .selectOne(new QueryWrapper().eq("order_no", orderNo)); +//// if (order.getStatus() != OrderStatusEnums.TOPAY.getCode()) { +//// return new Result().error("订单异常!"); +//// } +//// if (order.getAmount() < 1) { +//// return new Result().error("订单金额异常!"); +//// } +//// // 账户 +//// WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper() +//// .eq("owner_id", wuid)); +//// if (wallet == null) { +//// return new Result().error("钱包账户异常!"); +//// } +//// if (wallet.getTotalAmount() < order.getAmount()) { +//// return new Result().error("钱包余额不足!"); +//// } +//// +//// +//// // 添加交易 +//// TradeDetail trade = new TradeDetail(); +//// trade.setOutTradeNo(CommonUtil.payTradeNo(2)); +//// trade.setTrader(uname); +//// trade.setTraderCode(wuid); +//// trade.setTradeType(TradeTypeEnums.PAYORDER.getCode()); +//// trade.setOrderCount(1); +//// trade.setOrderNo(orderNo); +//// trade.setTradeAmount(order.getAmount()); +//// trade.setPayType(PayTypeEnums.WALLET.getCode()); +//// trade.setPayResult("SUCCESS"); +//// trade.setPayMsg("OK"); +//// trade.setPayer(wuid); +//// trade.setWallet(wallet.getCode()); +//// trade.setPayTime(new Date()); +//// tradeService.add(trade); +//// +//// // 添加明细 +//// WalletAccountDetail wad = new WalletAccountDetail(); +//// wad.setPreTotalAmount(wallet.getTotalAmount()); +//// wad.setPreRechargeAmount(wallet.getRechargeAmount()); +//// wad.setPreGiftAmount(0); +//// // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 +//// wad.setTradeRechargeAmount(-order.getAmount()); +//// wad.setTradeGiftAmount(0); +//// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +//// +//// wad.setCode(wallet.getCode()); +//// wad.setTradeType(trade.getTradeType()); +//// wad.setTradeNo(trade.getOutTradeNo()); +//// +//// wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); +//// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); +//// wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount())); +//// +//// wad.setOrderNo(orderNo); +//// wad.setPlateNum(order.getPlateNum()); +//// wad.setStationName(order.getStationName());//添加订单关联关系及车牌号,站点信息0419 +//// walletAccountService.addDetail(wad); +//// // 改余额 +//// wallet.setTotalAmount(wad.getAfterTotalAmount()); +//// wallet.setRechargeAmount(wad.getAfterRechargeAmount()); +//// wallet.setUptime(null); +//// walletAccountDao.updateById(wallet); +//// +//// // 修改订单状态 +//// order.setStatus(OrderStatusEnums.FINISH.getCode()); +//// order.setTradeNo(trade.getOutTradeNo()); +//// order.setUptime(null); +//// orderSwapBatteryDao.updateById(order); +//// +//// //税点信息记录 +//// try { +//// taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getAmount()), order.getStationCode()); +//// } catch (Exception e) { +//// log.error("余额支付=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); +//// } +// +// return new Result().success("OK"); +// } +// +// @Override +// public Result companyNativePay(NativePayVO prePay) { +// return wechatService.wechatNativePay(prePay); +// } +// +// @Override +// public Result orderQuery(String outTradeNo) { +// return wechatService.orderQuery(2, outTradeNo); +// } +// +// @Override +// public Result cancelOrder(String orderNo, Integer status) { +//// //根据订单编码查询此订单 +//// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); +//// // 1. 查看订单是否存在 +//// OrderSwapBattery cancelOr = new OrderSwapBattery(); +//// if (order == null) { +//// return new Result().error("订单不存在"); +//// } +//// // 2. 校验当前状态是否允许取消 +//// if (!Arrays.asList(3,4,5,6,7).contains(order.getStatus())) { +//// return new Result().error("当前状态不允许取消,订单状态:" + order.getStatus()); +//// } +//// cancelOr.setPkId(order.getPkId()); +//// cancelOr.setStatus(9); +//// cancelOr.setUptime(new Date()); +//// // 3.更新订单状态 +//// int i = orderSwapBatteryDao.updateById(cancelOr); +//// if (i==1){ +//// return new Result().success(i); +//// }else{ +//// return new Result().error("取消换电订单失败"); +//// } +// return new Result().success(1); +// } +// +// @Override +// public Result markOrderAsExpired(Integer pkId) { +// OrderSwapBatteryPre orderSwapBatteryPre = orderSwapBatteryPreDao.selectById(pkId); +// orderSwapBatteryPre.setStatus(3); +// int re = orderSwapBatteryPreDao.updateById(orderSwapBatteryPre); +// if (re==1){ +// return new Result().success(re); +// } +// else{ +// return new Result().error("换电预约订单失败"); +// } +// } +// +// @Override +// public Result startSwap(String wuid, String orderId) { +//// if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { +//// log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId); +//// return new Result().error("换电请求参数无效"); +//// } +//// +//// // 获取用户订单 +//// OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); +//// if (orderSwap == null) { +//// log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); +//// return new Result().error("未找到符合条件的订单"); +//// } +//// +//// try { +//// log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid); +//// +//// // 构建换电请求消息 +//// BatterySwapReq batterySwapReq = new BatterySwapReq(); +//// batterySwapReq.setOrderNo(orderSwap.getOrderNo()); +//// batterySwapReq.setMsg("换电开始"); +//// +//// // 设置消息主题和头部信息 +//// MessageTopic topic = new MessageTopic(); +//// topic.setDataDirection("M2S"); +//// topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType()); +//// +//// MqttMessageHeader header = new MqttMessageHeader(); +//// header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction()); +//// header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); +//// +//// // 发送消息给站端 +//// messageUtilService.publishAESMessage(topic, header, +//// JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); +//// +//// log.info("换电开始消息发送成功, 订单编号: {}", orderSwap.getOrderNo()); +//// return new Result().success(true); +//// +//// } catch (Exception e) { +//// log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid, e); +//// return new Result().error("系统处理换电请求时发生异常"); +//// } +// +// return new Result().success(true); +// } +// +// @Override +// public Result getStartSwap(String wuid, String orderId) { +// // 参数校验 +// if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { +// log.warn("获取换电状态参数无效, wuid: {}, orderId: {}", wuid, orderId); +// return new Result().error("参数无效"); +// } +// return new Result().error("参数无效"); +// // 获取用户订单 +//// OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); +//// if (orderSwap == null) { +//// log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); +//// return new Result().error("未找到符合条件的订单"); +//// } +//// +//// try { +//// // 从 Redis 中获取换电信息 +//// String redisKey = "battery:" + orderSwap.getOrderNo(); +//// Object o = redisUtil.get(redisKey); +//// if (ObjectUtil.isEmpty(o)) { +//// log.info("未收到换电成功信息, 订单编号: {}", orderSwap.getOrderNo()); +//// return new Result().error("未收到换电成功信息"); +//// } +//// +//// // 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象 +//// BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class); +//// if (response == null) { +//// log.error("换电响应数据解析失败, 订单编号: {}", orderSwap.getOrderNo()); +//// return new Result().error("换电响应数据解析失败"); +//// } +//// +//// if (response.getCode() == 1) { +//// log.info("换电成功, 订单编号: {}", orderSwap.getOrderNo()); +//// return new Result().success(response); +//// } else { +//// log.warn("换电失败, 订单编号: {}, 错误信息: {}", orderSwap.getOrderNo(), response.getMsg()); +//// return new Result().error(response.getMsg()); +//// } +//// } catch (Exception e) { +//// log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), e); +//// return new Result().error("系统获取换电状态时发生异常"); +//// } +// } +// +// +// @Override +// public Result checkList(PageListSwapOrderRequest plsor) { +// +//// Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); +//// List statusList = new ArrayList(); +//// String strs= "1,2,3,4,5,6"; +//// if (StringUtils.hasText(strs)) {//订单状态"已完成"之前的状态 +//// statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList(); +//// } +//// +//// page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() +//// .eq(StringUtils.hasText(plsor.getOrderNo()), "order_no", plsor.getOrderNo()) +//// .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) +//// .in(!statusList.isEmpty(), "status", statusList) +//// .ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin()) +//// .le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd()) +//// .eq(StringUtils.hasText(plsor.getStationCode()), "station_code", plsor.getStationCode()) +//// .like(StringUtils.hasText(plsor.getStationName()), "station_name", plsor.getStationName()) +//// .eq(StringUtils.hasText(plsor.getUserId()), "order_pre_uid", plsor.getUserId()) +//// .eq(StringUtils.hasText(plsor.getTradeNo()), "trade_no", plsor.getTradeNo()) +//// .ne("del_flag", 1) +//// .orderByDesc("pk_id")); +//// if (!page.getRecords().isEmpty()) { +//// return new Result().error("该车辆有未结算的订单,请确认后重试!"); +//// } +// +// +// /*Page page1 = new Page(plsor.getPageNo(), plsor.getPageSize()); +// page1 = orderSwapBatteryPreDao.selectPage(page1, new QueryWrapper() +// .eq(StringUtils.hasText("1"), "status", "1") +// .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) +// .orderByDesc("pk_id")); +// if (!page1.getRecords().isEmpty()) { +// return new Result().error("该车辆有预约成功的订单,请处理后重试!"); +// }*/ +// +// +// return new Result().success(0); +// } +// +// +// @Override +// public Boolean addPreByPlateNum(String PlateNum, String stationCode) { +// BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).select(BatteryStation::getCode, BatteryStation::getName), false); +// // 3. 添加预约 +// Date day = new Date(); +// OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); +// osbp.setSource(3); +// osbp.setSourceId(batteryStation.getCode()); +// osbp.setUcode("hp_station_push"); +// osbp.setUname("慧鹏站端推送"); +// osbp.setPhone("12332112345"); +// osbp.setPlateNum(PlateNum); +// osbp.setStationCode(batteryStation.getCode()); +// osbp.setStationName(batteryStation.getName()); +// osbp.setSwapDay(DateUtil.format(day, DatePattern.PURE_DATE_FORMATTER)); +// osbp.setSwapDuration("6:00-20:00"); +// osbp.setStatus(1); +// osbp.setCtime(osbp.getReservationTime()); +// osbp.setCreater("TEST"); +// osbp.setReservationTime(osbp.getReservationTime() == null ? day : osbp.getReservationTime()); +// osbp.setCtime(day); +// int n = orderSwapBatteryPreDao.insert(osbp); +// //特殊渠道反推的数据, 不需要发送通知 +//// if (n == 1) { +//// // 计算过期时间(预约时间后30分钟) +//// Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); +//// // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 +//// String redisKey = "preorder:expire:" + osbp.getPkId(); +//// redisUtil.set(redisKey, expireTime); +//// // 发送服务号消息,没有消息队列,先用接口吧 +//// templateMessageService.preOrderMessageSend(osbp); +//// return true; +//// } +// return true; +// +// +// +// } +// +// @Override +// public List findOrderSwapBatteryPreList(String stationCode) { +// return orderSwapBatteryPreDao.selectList(new LambdaQueryWrapper() +// .eq(OrderSwapBatteryPre::getStationCode, stationCode) +//// .ne(OrderSwapBatteryPre::getUcode,"hp_station_push") +// .eq(OrderSwapBatteryPre::getStatus, 1) +// .select(OrderSwapBatteryPre::getUcode,OrderSwapBatteryPre::getPkId,OrderSwapBatteryPre::getPlateNum) +// ); +// } +// +// @Override +// public Boolean clearOrderSwapBatteryPre(List ids) { +// +// return orderSwapBatteryPreDao.update(new UpdateWrapper() +// .in("pk_id", ids) +// .set("status", 3) //直接取消 +// ) > 0; +// } +// +//} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java new file mode 100644 index 0000000..a3f47df --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java @@ -0,0 +1,48 @@ +package com.evotech.hd.cloud.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao; +import com.evotech.hd.cloud.service.OrderSwapBatteryStepService; +import com.evotech.hd.cloud.utils.components.HDStepDictComponent; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderSwapBatteryStepServiceImpl + * @date: 2025年06月23日 15:54 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class OrderSwapBatteryStepServiceImpl extends ServiceImpl implements OrderSwapBatteryStepService { + @Resource + private HDStepDictComponent hdStepDictComponent; + @Override + public Boolean addOrderSwapBatteryStepBySwapComplete(String orderNo, Integer step, Date stepTime) { + + OrderSwapBatteryStep orderSwapBatteryStep = getOne(new LambdaQueryWrapper().eq(OrderSwapBatteryStep::getOrderNo, orderNo).eq(OrderSwapBatteryStep::getStep,step)); + if(ObjectUtils.isEmpty(orderSwapBatteryStep)){ + orderSwapBatteryStep = new OrderSwapBatteryStep(); + } + orderSwapBatteryStep.setOrderNo(orderNo); + orderSwapBatteryStep.setStep(step); + orderSwapBatteryStep.setStepTime(stepTime); + orderSwapBatteryStep.setCtime(new Date()); + orderSwapBatteryStep.setCreater("SYS"); + orderSwapBatteryStep.setStepName(hdStepDictComponent.hdStepDictName(orderSwapBatteryStep.getStep())); + if(orderSwapBatteryStep.getPkId() == null){ + return save(orderSwapBatteryStep); + }else{ + return updateById(orderSwapBatteryStep); + } + + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/SysParamServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/SysParamServiceImpl.java new file mode 100644 index 0000000..9af441f --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/SysParamServiceImpl.java @@ -0,0 +1,39 @@ +package com.evotech.hd.cloud.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.service.SysParamService; +import com.evotech.hd.common.core.dao.cloud.SysParamDao; +import com.evotech.hd.common.core.entity.system.SysParam; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:SysParamServiceImpl + * @date: 2025年07月02日 14:38 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class SysParamServiceImpl extends ServiceImpl implements SysParamService { + + @Override + public SysParam getSysParam(String name, String code, String defVal, String des) { + SysParam param = getOne(new LambdaQueryWrapper().eq(SysParam::getParamCode, code)); + if(ObjectUtils.isEmpty(param)){ + param = new SysParam(); + param.setParamName(name); + param.setParamCode(code); + param.setParamValue(defVal); + param.setDescription(des); + param.setCtime(new Date()); + save(param); + } + return param; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java index db944e5..a686d15 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java @@ -7,7 +7,7 @@ import com.evotech.hd.cloud.dao.TaxPointDao; import com.evotech.hd.cloud.service.IndependentAccountService; import com.evotech.hd.cloud.service.TaxPointService; import com.evotech.hd.cloud.service.rpc.ResourceService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.TaxPoint; import com.evotech.hd.common.core.entity.resource.dict.Dict; import com.evotech.hd.common.core.enums.CodeMsg; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TradeServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TradeServiceImpl.java index 96101d3..eb681d0 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TradeServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TradeServiceImpl.java @@ -1,34 +1,31 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -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.resource.ProxyOperater; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evotech.hd.cloud.dao.TradeDetailDao; import com.evotech.hd.cloud.entity.request.PageListTradeRequest; import com.evotech.hd.cloud.service.TradeService; +import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; import com.evotech.hd.cloud.service.newthread.WechatPayNotifyHandleService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.cloud.OrderDao; import com.evotech.hd.common.core.entity.cloud.TradeDetail; import com.evotech.hd.common.core.enums.CodeMsg; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service @Slf4j -public class TradeServiceImpl implements TradeService { +public class TradeServiceImpl extends ServiceImpl implements TradeService { @Resource private TradeDetailDao tradeDetailDao; @@ -37,7 +34,7 @@ public class TradeServiceImpl implements TradeService { @Resource private GZHTemplateMessageService gzhTemplateMessageService; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; + private OrderDao orderDao; @Override public Result add(TradeDetail td) { td.setCtime(new Date()); @@ -70,7 +67,7 @@ public class TradeServiceImpl implements TradeService { } @Override - public Result> list(PageListTradeRequest pltr) { + public Result > list(PageListTradeRequest pltr) { Page page = new Page(pltr.getPageNo(), pltr.getPageSize()); page = tradeDetailDao.selectPage(page, new QueryWrapper() @@ -84,9 +81,9 @@ public class TradeServiceImpl implements TradeService { .ne("del_flag", 1) .orderByDesc("pk_id")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result >().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result >().success(page); } @@ -112,49 +109,22 @@ public class TradeServiceImpl implements TradeService { log.error("微信支付回调参数异常: {}", JSONUtil.toJsonStr(tradeDetail)); return new Result().error("参数异常"); } - // 2. 幂等性检查 - boolean isProcessed = tradeDetailDao.exists(new QueryWrapper() - .eq("out_trade_no", tradeDetail.getOutTradeNo()) - .eq("transaction_id", tradeDetail.getTransactionId()) - .eq("pay_result", tradeDetail.getPayResult())); - - if (isProcessed) { + if (tradeDetailDao.exists(new LambdaQueryWrapper().eq(TradeDetail::getOutTradeNo, tradeDetail.getOutTradeNo()).eq(TradeDetail::getTransactionId, tradeDetail.getTransactionId()))) { + //因为重复消息证明是已经状态更改了, 但是微信服务器不知道, 所以此处返回success log.info("重复的微信支付回调, outTradeNo: {}", tradeDetail.getOutTradeNo()); - return new Result().error("重复消息"); + return new Result().success("重复消息"); } - // 3. 记录交易 - log.info("开始处理微信支付回调, outTradeNo: {}, 交易信息: {}", - tradeDetail.getOutTradeNo(), - JSONUtil.toJsonStr(tradeDetail)); - - add(tradeDetail); - - // 4. 业务处理 - payNotifyHandleService.payNotifyBussinessHandle(tradeDetail); - - // 5. 发送支付成功通知 - if (StringUtils.hasText(tradeDetail.getOrderNo())) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne( - new LambdaQueryWrapper() - .eq(OrderSwapBattery::getOrderNo, tradeDetail.getOrderNo()) - ); - - if (order != null) { - gzhTemplateMessageService.orderMessageSend2(order.getPkId(), 3); - log.info("支付成功通知已发送, orderNo: {}", tradeDetail.getOrderNo()); - } else { - log.warn("未找到对应的订单, orderNo: {}", tradeDetail.getOrderNo()); - } + log.info("开始处理微信支付回调, 交易信息: {}", JSONUtil.toJsonStr(tradeDetail)); + Result result = payNotifyHandleService.payNotifyBusinessHandle(tradeDetail); + //只有当整体数据处理成功之后, 才保存交易记录, 防止出现异常,二次请求进来数据无法处理 + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + add(tradeDetail); } - - return new Result().success("OK"); + return result; } catch (Exception e) { - log.error("处理微信支付回调异常, outTradeNo: {}, 异常信息: {}", - tradeDetail.getOutTradeNo(), - e.getMessage(), - e); + log.error("处理微信支付回调异常, outTradeNo: {}, 异常信息: {}", tradeDetail.getOutTradeNo(), e.getMessage(), e); throw new RuntimeException("处理支付回调失败", e); } } @@ -185,7 +155,7 @@ public class TradeServiceImpl implements TradeService { add(tradeDetail); // 4. 业务处理 - payNotifyHandleService.payNotifyBussinessHandle(tradeDetail); + payNotifyHandleService.payNotifyBusinessHandle(tradeDetail); return new Result().success("OK"); } catch (Exception e) { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java index a6a2bef..91af678 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evotech.hd.cloud.dao.BatteryStationDao; import com.evotech.hd.cloud.dao.CompanyDao; import com.evotech.hd.cloud.dao.VehicleInfoDao; @@ -30,7 +31,7 @@ import java.util.List; @Service -public class VehicleServiceImpl implements VehicleService { +public class VehicleServiceImpl extends ServiceImpl implements VehicleService { @Resource private VehicleInfoDao vehicleInfoDao; @@ -46,38 +47,38 @@ public class VehicleServiceImpl implements VehicleService { String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; @Override - public com.evotech.hd.common.core.entity.Result add(VehicleInfo vi) { + public Result add(VehicleInfo vi) { vi.setCtime(new Date()); int n = vehicleInfoDao.insert(vi); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加车辆出错!"); + return new Result().error("添加车辆出错!"); } @Override - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { VehicleInfo vi = new VehicleInfo(); vi.setPkId(id); vi.setDelFlag(1); int n = vehicleInfoDao.updateById(vi); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } throw new RuntimeException("删除车辆出错!"); } @Override - public com.evotech.hd.common.core.entity.Result update(VehicleInfo vi) { + public Result update(VehicleInfo vi) { int n = vehicleInfoDao.updateById(vi); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("更新车辆失败!"); + return new Result().error("更新车辆失败!"); } @Override - public com.evotech.hd.common.core.entity.Result> list(PageListVehicleRequest plvr) { + public Result> list(PageListVehicleRequest plvr) { Page page = new Page(plvr.getPageNo(), plvr.getPageSize()); page = vehicleInfoDao.selectPage(page, new QueryWrapper() @@ -93,78 +94,78 @@ public class VehicleServiceImpl implements VehicleService { .ne("del_flag", 1) .orderByAsc("plate_num")); if (page.getRecords().isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new com.evotech.hd.common.core.entity.Result>().success(page); + return new Result>().success(page); } @Override - public com.evotech.hd.common.core.entity.Result companyRelation(String plateNum, String ccode, String cname) { + public Result companyRelation(String plateNum, String ccode, String cname) { VehicleInfo vi = new VehicleInfo(); vi.setCcode(ccode); vi.setCname(cname); vi.setOwnerType(2); int n = vehicleInfoDao.update(vi, new QueryWrapper().eq("plate_num", plateNum)); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("关联公司失败!"); + return new Result().error("关联公司失败!"); } @Override - public com.evotech.hd.common.core.entity.Result delCompanyRelation(String plateNum) { + public Result delCompanyRelation(String plateNum) { VehicleInfo vi = new VehicleInfo(); vi.setCcode(""); vi.setCname(""); vi.setOwnerType(1); int n = vehicleInfoDao.update(vi, new QueryWrapper().eq("plate_num", plateNum)); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("删除关联公司失败!"); + return new Result().error("删除关联公司失败!"); } @Override - public com.evotech.hd.common.core.entity.Result addWechatUserRelation(VehicleWechatUserRelation relation) { + public Result addWechatUserRelation(VehicleWechatUserRelation relation) { relation.setCtime(new Date()); int n = vehicleWechatUserRelationDao.insert(relation); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加车辆用户关系出错!"); + return new Result().error("添加车辆用户关系出错!"); } @Override - public com.evotech.hd.common.core.entity.Result deleteWechatUserRelation(Integer id) { + public Result deleteWechatUserRelation(Integer id) { int n = vehicleWechatUserRelationDao.deleteById(id); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } throw new RuntimeException("删除车辆用户关系出错!"); } @Override - public com.evotech.hd.common.core.entity.Result> listWechatUserRelation(String wuid, String plateNum) { + public Result> listWechatUserRelation(String wuid, String plateNum) { List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper().eq(StringUtils.hasText(wuid), "ucode", wuid)); if (relationList.isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } List plateNumList = relationList.stream().map(i -> i.getPlateNum()).toList(); List list = vehicleInfoDao.selectList(new QueryWrapper().ne("del_flag", 1).in("plate_num", plateNumList)); if (list.isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new com.evotech.hd.common.core.entity.Result>().success(list); + return new Result>().success(list); } @Override - public com.evotech.hd.common.core.entity.Result> listRelationUser(String PlantNo) { + public Result> listRelationUser(String PlantNo) { List list = vehicleWechatUserRelationDao.selectList(new QueryWrapper().eq("plate_num", PlantNo)); if (list.isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } list.stream().forEach(i -> i.setOpenid(null)); - return new com.evotech.hd.common.core.entity.Result>().success(list); + return new Result>().success(list); } @Override diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java index 811abac..9efcd44 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java @@ -1,45 +1,45 @@ package com.evotech.hd.cloud.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.dao.CompanyDao; +import com.evotech.hd.cloud.dao.TradeDetailDao; +import com.evotech.hd.cloud.dao.WalletAccountDao; +import com.evotech.hd.cloud.dao.WalletAccountDetailDao; +import com.evotech.hd.cloud.service.WalletAccountService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +import com.evotech.hd.common.core.entity.cloud.Company; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; +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.evotech.hd.common.core.entity.wechat.WechatUser; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.utils.SnowflakeUtil; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.evotech.hd.cloud.dao.CompanyDao; -import com.evotech.hd.cloud.dao.TradeDetailDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.cloud.Company; -import com.evotech.hd.common.core.entity.cloud.TradeDetail; -import com.evotech.hd.common.core.entity.cloud.vo.WalletAccountVO; -import com.evotech.hd.common.core.entity.wechat.WechatPayAttach; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.dao.WalletAccountDao; -import com.evotech.hd.cloud.dao.WalletAccountDetailDao; -import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.common.core.entity.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.enums.CodeMsg; -import com.evotech.hd.common.core.utils.SnowflakeUtil; - -import cn.hutool.core.util.RandomUtil; -import jakarta.annotation.Resource; -import cn.hutool.core.util.StrUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - @Service -public class WalletAccountServiceImpl implements WalletAccountService { +public class WalletAccountServiceImpl extends ServiceImpl implements WalletAccountService { private static final Logger log = LoggerFactory.getLogger(WalletAccountServiceImpl.class); @@ -117,7 +117,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { WalletAccount wa1 = new WalletAccount(); wa1.setAccName(wa.getAccName()); wa1.setGiftAmount(wa.getGiftAmount()); - wa1.setTotalAmount(wa.getTotalAmount()); +// wa1.setTotalAmount(wa.getTotalAmount()); wa1.setRechargeAmount(wa.getRechargeAmount()); int n = walletAccountDao.update(wa1, new QueryWrapper() .eq("code", wa.getCode()) @@ -130,7 +130,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { } @Override - public Result> list(PageListWalletRequest plwr) { + public Result> list(PageListWalletRequest plwr) { Page page = new Page<>(plwr.getPageNo(), plwr.getPageSize()); QueryWrapper queryWrapper = new QueryWrapper() .eq(StringUtils.hasText(plwr.getCode()), "code", plwr.getCode()) @@ -142,7 +142,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { page = walletAccountDao.selectPage(page, queryWrapper); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } // 2. 转换为VO并查询用户信息 @@ -171,7 +171,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { voPage.setRecords(voList); - return new Result>().success(voPage); + return new Result>().success(voPage); } @Override @@ -197,16 +197,16 @@ public class WalletAccountServiceImpl implements WalletAccountService { } @Override - public Result> listDetail(PageListWalletRequest plwr) { + public com.evotech.hd.common.core.Dto.Result> listDetail(PageListWalletRequest plwr) { Page page = new Page(plwr.getPageNo(), plwr.getPageSize()); page = walletAccountDetailDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(plwr.getCode()), "code", plwr.getCode()) .orderByDesc("pk_id")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new com.evotech.hd.common.core.Dto.Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new com.evotech.hd.common.core.Dto.Result>().success(page); } @Override @@ -244,7 +244,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { } } - return new Result().success("成功", (StringUtils.hasText(walletAccount.getAccName()) ? walletAccount.getAccName() : "") + "_" + walletAccount.getCode()); + return new Result().success( (StringUtils.hasText(walletAccount.getAccName()) ? walletAccount.getAccName() : "") + "_" + walletAccount.getCode()); } @Override @@ -279,21 +279,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { } } - @Override - public Result updateName(WalletAccount wa) { - if (wa == null) { - return new Result().error("参数不能为空"); - } - LambdaQueryWrapper walletAccountLambdaQueryWrapper = new LambdaQueryWrapper<>(); - walletAccountLambdaQueryWrapper.eq(WalletAccount::getOwnerId, wa.getOwnerId()); - WalletAccount walletAccount = walletAccountDao.selectOne(walletAccountLambdaQueryWrapper); - if (walletAccount != null) { - walletAccount.setAccName(wa.getAccName()); - walletAccountDao.updateById(walletAccount); - return new Result().success(1); - } - return new Result().error("未找到对应的账户"); - } + // 查询 WechatUser 的封装方法 private WechatUser queryWechatUserByWuid(String wuid) { @@ -337,5 +323,20 @@ public class WalletAccountServiceImpl implements WalletAccountService { return walletAccountDao.selectOne(queryWrapper1); } + @Override + public com.evotech.hd.common.core.Dto.Result getWalletAccountByWechatId(String wechatId) { + return com.evotech.hd.common.core.Dto.Result.getInstance().build(WalletAccount.class).success(getBaseMapper().selectOne(new LambdaQueryWrapper().eq(WalletAccount::getOwnerId,wechatId))); + } + + @Override + public com.evotech.hd.common.core.Dto.Result updateWechat(WalletAccount wa) { + if (wa == null) { + return com.evotech.hd.common.core.Dto.Result.getInstance().build(Integer.class).error("参数不能为空"); + } + if(getBaseMapper().update(new UpdateWrapper().set("acc_name", wa.getAccName()).eq("owner_id", wa.getOwnerId())) > 0){ + return com.evotech.hd.common.core.Dto.Result.getInstance().build(Integer.class).success(1); + } + return com.evotech.hd.common.core.Dto.Result.getInstance().build(Integer.class).error("未找到对应的账户"); + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java index 0b5b227..3575705 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java @@ -1,26 +1,24 @@ package com.evotech.hd.cloud.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +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.dao.wechat.WechatUserDao; +import com.evotech.hd.common.core.entity.wechat.WechatUser; +import com.evotech.hd.common.core.enums.CodeMsg; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.entity.request.PageListWechatUserRequest; -import com.evotech.hd.cloud.service.WechatUserService; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; - -import jakarta.annotation.Resource; - @Service public class WechatUserServiceImpl implements WechatUserService { @@ -29,7 +27,7 @@ public class WechatUserServiceImpl implements WechatUserService { private WechatUserDao wechatUserDao; @Override - public Result> list(PageListWechatUserRequest plwur) { + public Result> list(PageListWechatUserRequest plwur) { Page page = new Page(plwur.getPageNo(), plwur.getPageSize()); page = wechatUserDao.selectPage(page, new QueryWrapper() @@ -46,9 +44,9 @@ public class WechatUserServiceImpl implements WechatUserService { .eq(StringUtils.hasText(plwur.getState()), "state", plwur.getState()) .orderByDesc("pk_id")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } @Override diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/GZHTemplateMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/GZHTemplateMessageService.java index 3b50e96..bd4b36b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/GZHTemplateMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/GZHTemplateMessageService.java @@ -1,9 +1,9 @@ package com.evotech.hd.cloud.service.newthread; +import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.cloud.service.rpc.WechatService; import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto; import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto; -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.TradeDetail; import jakarta.annotation.Resource; @@ -23,8 +23,8 @@ public class GZHTemplateMessageService { @Async("taskExecutor") - public void orderMessageSend(OrderSwapBattery osb, Integer type) { - wechatService.orderMessage(osb, type); + public void orderMessageSend(Order order, Integer type) { + wechatService.orderMessage(order, type); } @Async("taskExecutor") diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java index aadf7b4..0c3418d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java @@ -1,21 +1,30 @@ package com.evotech.hd.cloud.service.newthread; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.evotech.hd.cloud.dao.WalletAccountDao; import com.evotech.hd.cloud.dao.WalletAccountDetailDao; +import com.evotech.hd.cloud.service.OrderRechargeService; +import com.evotech.hd.cloud.service.OrderRefundService; import com.evotech.hd.cloud.service.TaxPointService; import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.cloud.OrderDao; import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; -import com.evotech.hd.common.core.entity.cloud.*; +import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.cloud.WalletAccount; +import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail; +import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.common.core.enums.OrderStatusEnums; import com.evotech.hd.common.core.enums.TradeResultEnums; import com.evotech.hd.common.core.enums.WechatPayApiTypeEnums; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @@ -25,140 +34,157 @@ import java.util.List; public class WechatPayNotifyHandleService { @Resource - private WalletAccountDao walletAccountDao; + private WalletAccountService walletAccountService; @Resource private WalletAccountDetailDao walletAccountDetailDao; @Resource private GZHTemplateMessageService templateMessageService; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; + private OrderDao orderDao; @Resource private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao; @Resource TaxPointService taxPointService; @Resource - private WalletAccountService walletAccountService; - + OrderRechargeService orderRechargeService; + @Resource + OrderRefundService orderRefundService; // @Async("taskExecutor") - public void payNotifyBussinessHandle(TradeDetail tradeDetail) { + @Transactional + public Result payNotifyBusinessHandle(TradeDetail tradeDetail) { if (tradeDetail.getTradeType() == 1) { // 充值 - WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper().eq("code", tradeDetail.getWallet())); - if (wallet == null) { - return; - } - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(tradeDetail.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setPreTotalAmount(wallet.getTotalAmount()); - wad.setPreRechargeAmount(wallet.getRechargeAmount()); - wad.setPreGiftAmount(wallet.getGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); - - wad.setTradeGiftAmount(0); - wad.setCode(tradeDetail.getWallet()); - wad.setTradeType(tradeDetail.getTradeType()); - wad.setTradeNo(tradeDetail.getOutTradeNo()); - - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wallet.setTotalAmount(wad.getAfterTotalAmount()); - wallet.setRechargeAmount(wad.getAfterRechargeAmount()); - wallet.setGiftAmount(wad.getAfterGiftAmount()); - wallet.setUptime(null); - walletAccountDao.updateById(wallet); - - // 发送公众号消息 - templateMessageService.rechargeMessageSend(tradeDetail, wallet.getTotalAmount()); - - } else if (tradeDetail.getTradeType() == 2) { + try { + WalletAccount wallet = walletAccountService.getOne(new LambdaQueryWrapper().eq(WalletAccount::getOwnerId, tradeDetail.getPayWechatId())); + if (wallet == null) { + //创建账号 + walletAccountService.add(wallet); + } + WalletAccountDetail wad = createWalletAccount(tradeDetail, wallet, false); + // 改余额 +// wallet.setTotalAmount(wad.getAfterTotalAmount()); + wallet.setRechargeAmount(wad.getAfterRechargeAmount()); + wallet.setGiftAmount(wad.getAfterGiftAmount()); + wallet.setUptime(null); + walletAccountService.updateById(wallet); + // 发送公众号消息 + templateMessageService.rechargeMessageSend(tradeDetail, wallet.getTotalAmount()); + //生成充值订单 + orderRechargeService.addByTradeDetail(tradeDetail); + return new Result().success("成功"); + } catch (Exception e) { + e.printStackTrace(); + log.error("订单充值出现错误, 交易信息:{}", JSONUtil.toJsonStr(tradeDetail)); + return new Result().error("订单充值出现错误"); + } + + } else if (tradeDetail.getTradeType() == 2) { // 支付订单 if (WechatPayApiTypeEnums.JSAPI.getCode().equals(tradeDetail.getWechatPayApiType())) { // jsapi支付 - jsapiPayHandle(tradeDetail); + return jsapiPayHandle(tradeDetail); } if (WechatPayApiTypeEnums.NATIVE.getCode().equals(tradeDetail.getWechatPayApiType())) { // native支付,企业 nativePayHandle(tradeDetail); } - + return new Result().error("未知的支付类型"); } else if (tradeDetail.getTradeType() == 9) { - // 提现 - WalletAccount wallet = walletAccountService.getDetailById(tradeDetail.getOutTradeNo()); - if (wallet == null) { - return; - } - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(tradeDetail.getTradeAmount());//交易金额 - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount());//交易总金额 + try { + // 提现 + WalletAccount wallet = walletAccountService.getOne(new LambdaQueryWrapper().eq(WalletAccount::getOwnerId, tradeDetail.getPayWechatId())); + if (wallet == null) { + return new Result().error("账户余额不存在, 无法提现"); + } + WalletAccountDetail wad = createWalletAccount(tradeDetail, wallet, true); + // 改余额 + wallet.setRechargeAmount(wad.getAfterRechargeAmount()); + wallet.setGiftAmount(wad.getAfterGiftAmount()); + wallet.setUptime(null); + walletAccountService.updateById(wallet); + //处理退款订单 + orderRefundService.updateByTradeDetail(tradeDetail); + // 发送公众号消息 + templateMessageService.backMessageSend(tradeDetail, wallet.getTotalAmount()); + return new Result().success("提现成功"); + } catch (Exception e) { + log.error("订单提现出现错误, {}", e.getMessage()); + return new Result().error("订单提现出现错误: "+e.getMessage()); + } - wad.setPreTotalAmount(wallet.getTotalAmount()); - wad.setPreRechargeAmount(wallet.getRechargeAmount()); - wad.setPreGiftAmount(wallet.getGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); - wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); - wad.setAfterGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount())); - - wad.setTradeGiftAmount(0); - wad.setCode(tradeDetail.getWallet()); - wad.setTradeType(tradeDetail.getTradeType()); - wad.setTradeNo(tradeDetail.getOutTradeNo()); - - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wallet.setTotalAmount(wad.getAfterTotalAmount()); - wallet.setRechargeAmount(wad.getAfterRechargeAmount()); - wallet.setGiftAmount(wad.getAfterGiftAmount()); - wallet.setUptime(null); - walletAccountDao.updateById(wallet); - - // 发送公众号消息 - templateMessageService.backMessageSend(tradeDetail, wallet.getTotalAmount()); - - } else { - } + return new Result().error("未知的订单类型"); } + + private WalletAccountDetail createWalletAccount(TradeDetail tradeDetail, WalletAccount wallet, Boolean isTx){ + // 添加明细 + WalletAccountDetail wad = new WalletAccountDetail(); + wad.setCode(wallet.getCode()); + // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 + wad.setTradeRechargeAmount(tradeDetail.getTradeAmount()); + wad.setTradeGiftAmount(0); + wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); + + wad.setPreTotalAmount(wallet.getTotalAmount()); + wad.setPreRechargeAmount(wallet.getRechargeAmount()); + wad.setPreGiftAmount(wallet.getGiftAmount()); + + wad.setOrderNo(tradeDetail.getOrderNo()); + + if(isTx){ + wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); + wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); + }else{ + wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); + wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); + wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); + } + wad.setTradeGiftAmount(0); + wad.setTradeType(tradeDetail.getTradeType()); + wad.setTradeNo(tradeDetail.getOutTradeNo()); + wad.setCtime(new Date()); + walletAccountDetailDao.insert(wad); + return wad; + } /** * 一般个人单条付款 * @param tradeDetail */ - private void jsapiPayHandle(TradeDetail tradeDetail) { - OrderSwapBattery one = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", tradeDetail.getOrderNo())); - if (one.getStatus() == 6) { - if (TradeResultEnums.SUCCESS.getName().equals(tradeDetail.getPayResult())) { - // 支付成功,修改订单 - afterPayAlterOrder(tradeDetail, one); - //税点信息记录 - try { - taxPointService.addTaxPoint(one.getPkId(), one.getOrderNo(), Double.valueOf(one.getAmount()), one.getStationCode()); - } catch (Exception e) { - log.error("jsapiPay=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(one), e.getMessage()); + private Result jsapiPayHandle(TradeDetail tradeDetail) { + try { + Order order = orderDao.selectOne(new QueryWrapper().eq("order_no", tradeDetail.getOrderNo())); + if (order.getStatus() == 6) { + if (TradeResultEnums.SUCCESS.getName().equals(tradeDetail.getPayResult())) { + // 支付成功,修改订单 + order.setStatus(OrderStatusEnums.FINISH.getCode()); + order.setNotifyOrderNo(tradeDetail.getTransactionId()); + order.setNotifyInfo(tradeDetail.getTradeMessage()); + orderDao.updateById(order); + //税点信息记录 + try { + taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getOrderAmount()), order.getStationCode()); + } catch (Exception e) { + log.error("jsapiPay=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); + } + // 发送公众号消息. 支付成功, 取消模版发送 +// templateMessageService.orderMessageSend(order, 3); + return new Result().success("ok"); + }else{ + return new Result().error("微信支付结果未成功"+ tradeDetail.getPayResult()); } - // 发送公众号消息 - templateMessageService.orderMessageSend(one, 3); - } - } else { - log.info("\r\n===>>>支付订单存在问题:" + tradeDetail); - } - } + } else { + log.info("\r\n===>>>支付订单存在问题:" + tradeDetail); + return new Result().error("支付订单存在问题, 订单状态为: "+ order.getStatus()); + } + } catch (Exception e) { + log.error("===>>>支付订单存在问题:{}", JSONUtil.toJsonStr(tradeDetail)); + return new Result().error("支付订单存在问题"+ e.getMessage()); + } + } /** * 一般企业多条付款 @@ -167,15 +193,13 @@ public class WechatPayNotifyHandleService { private void nativePayHandle(TradeDetail tradeDetail) { List list = preOrderRelationSwapOrderDao.selectList(new QueryWrapper().eq("out_trade_no", tradeDetail.getOutTradeNo())); List orderNoList = list.stream().map(i -> i.getOrderNo()).toList(); - List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() + List orderList = orderDao.selectList(new QueryWrapper() .eq("status", 6).in("order_no", orderNoList)); if (orderList.size() != orderNoList.size()) { - log.info("\r\n **********"); log.error("\r\n===>>>交易订单存在问题:" + tradeDetail); - log.info("\r\n **********"); } List idList = orderList.stream().map(i -> i.getPkId()).toList(); - orderSwapBatteryDao.update(new UpdateWrapper().in("pk_id", idList) + orderDao.update(new UpdateWrapper().in("pk_id", idList) .set("status", OrderStatusEnums.FINISH.getCode()) .set("trade_no", tradeDetail.getOutTradeNo())); @@ -183,7 +207,7 @@ public class WechatPayNotifyHandleService { orderList.stream().forEach(order->{ //税点信息记录 try { - taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getAmount()), order.getStationCode()); + taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getOrderAmount()), order.getStationCode()); } catch (Exception e) { log.error("生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); } @@ -194,18 +218,4 @@ public class WechatPayNotifyHandleService { // 发送公众号消息,发给企业绑定的微信号 // templateMessageService.orderMessageSend(one, 3); } - - /** - * 支付成功后,修改订单状态 - * @param tradeDetail - * @param one - */ - private void afterPayAlterOrder(TradeDetail tradeDetail, OrderSwapBattery one) { - OrderSwapBattery osb = new OrderSwapBattery(); - osb.setPkId(one.getPkId()); - osb.setStatus(OrderStatusEnums.FINISH.getCode()); - osb.setTradeNo(tradeDetail.getOutTradeNo()); - orderSwapBatteryDao.updateById(osb); - } - } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java index c6bdba4..f171103 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java @@ -17,7 +17,7 @@ public interface ResourceService { @GetMapping(value = "/dict/listdict", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public com.evotech.hd.common.core.entity.Result> listDict(@RequestParam String typeCode); + public Result> listDict(@RequestParam String typeCode); @GetMapping(value = "/proxyoperater/device/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java index c1c95c3..d3ad3ac 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java @@ -1,15 +1,16 @@ package com.evotech.hd.cloud.service.rpc; import com.evotech.hd.cloud.entity.vo.NativePayVO; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto; import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.Order; import org.springdoc.core.annotations.ParameterObject; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -17,36 +18,36 @@ import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = "${WECHAT-SERVER-API-NAME}", path = "${WECHAT-SERVER-API-PATH}") public interface WechatService { - + @GetMapping(value = "/xcx/qrcode/get2", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public String getQRCode2(@RequestParam String path, @RequestParam String width, @RequestParam String env_version); - - + + @GetMapping(value = "/xcx/qrcode/create2", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public String createQRCode2(@RequestParam String path, @RequestParam String width); - + @PostMapping(value = "/gzh/msg/send/preorder2", consumes = {MediaType.APPLICATION_JSON_VALUE}) public Result preOrderMessage(@RequestBody OrderSwapBatteryPre osbp); - + @PostMapping(value = "/gzh/msg/send/order", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result orderMessage(@ParameterObject OrderSwapBattery osb, @RequestParam Integer templateType); - + public Result orderMessage(@ParameterObject Order osb, @RequestParam Integer templateType); + @PostMapping(value = "/gzh/msg/send/order2", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result orderMessage2(@RequestParam Integer id, @RequestParam Integer templateType); - + @PostMapping(value = "/gzh/msg/send/recharge", consumes = {MediaType.APPLICATION_JSON_VALUE}) public Result rechargeMessage(@RequestBody TradeDetail trade, @RequestParam Integer money); - + @PostMapping(value = "/wechatpay/native/prepay", consumes = {MediaType.APPLICATION_JSON_VALUE}) - public Result wechatNativePay(@RequestBody NativePayVO prePay); - + public com.evotech.hd.common.core.Dto.Result wechatNativePay(@RequestBody NativePayVO prePay); + @GetMapping(value = "/wechatpay/native/order/query", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result orderQuery(@RequestParam Integer type, @RequestParam String outTradeNo); @@ -61,4 +62,32 @@ public interface WechatService { @PostMapping(value = "/gzh/msg/send/service", consumes = {MediaType.APPLICATION_JSON_VALUE}) public com.evotech.hd.common.core.Dto.Result serviceStopMessageSend(@RequestBody StopServerTemplateDto stopServerTemplateDto); + /*** + * 服务器发送消息到客户端 + * @param wechatId + * @param message + * @return + */ + @PostMapping(value = "/send/client/message", consumes = {MediaType.APPLICATION_JSON_VALUE}) + public void sendClientMessage(@RequestParam String wechatId, @RequestParam String message); + + /*** + * 服务器发送换电完成到公众号 + * 取消异步,发送完换电完成后, 才发送待结算订单 + * @param order + * @return + */ + @PostMapping(value = "/send/gzh/order/swap_success", consumes = {MediaType.APPLICATION_JSON_VALUE}) + //@Async("taskExecutor") + public void sendGzhSwapOrderSuccessMessage(@RequestBody Order order); + + /*** + * 服务器发送待结算订单到公众号 + * @param order + * @return + */ + @PostMapping(value = "/send/gzh/order/to_be_settled", consumes = {MediaType.APPLICATION_JSON_VALUE}) + @Async("taskExecutor") + public void sendGzhToBeSettledOrderMessage(@RequestBody Order order); + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/HomeDataOrderSwapTask.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/HomeDataOrderSwapTask.java index 95914a0..343679c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/HomeDataOrderSwapTask.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/HomeDataOrderSwapTask.java @@ -1,20 +1,18 @@ package com.evotech.hd.cloud.task; -import java.util.Date; -import java.util.List; - -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.service.HomeDataManualCollateService; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.cloud.service.HomeDataManualCollateService; +import com.evotech.hd.common.core.dao.cloud.OrderDao; +import com.evotech.hd.common.core.entity.order.Order; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; @Component @Slf4j @@ -23,14 +21,14 @@ public class HomeDataOrderSwapTask { @Resource private HomeDataManualCollateService homeDataManualCollateService; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; + private OrderDao orderDao; @Scheduled(cron ="0 0 2 * * ?") public void orderSwapCollate() { log.info("\r\n===>>>开始整理订单数据"); Date d = new Date(); - List list = orderSwapBatteryDao.selectList(new QueryWrapper() + List list = orderDao.selectList(new QueryWrapper() .or(i -> i.and(j -> j.ge("order_time", DateUtil.beginOfDay(d)).le("order_time", DateUtil.endOfDay(d))) .or(j -> j.ge("uptime", DateUtil.beginOfDay(d)).le("uptime", DateUtil.endOfDay(d))))); List dayStringList = list.stream().map(i -> DateUtil.format(i.getOrderTime(), DatePattern.PURE_DATE_PATTERN)).distinct().toList(); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java index b4673b5..0c5b715 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java @@ -1,12 +1,11 @@ package com.evotech.hd.cloud.task; import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.cloud.service.OrderService; import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.enums.CodeMsg; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -22,9 +21,7 @@ import java.util.List; public class OrderCostCalculateTask { @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - @Resource - private OrderSwapBatteryService orderSwapBatteryService; + private OrderService orderService; @Resource private GZHTemplateMessageService gzhTemplateMessageService; @@ -37,9 +34,9 @@ public class OrderCostCalculateTask { Boolean flag = true; int n = 0; while (flag) { - List list = orderSwapBatteryDao.selectList(new QueryWrapper() - .eq("status", 5).ne("del_flag", 1) - .ge("order_time", DateUtil.beginOfYear(new Date())) + List list = orderService.list(new LambdaQueryWrapper() + .eq(Order::getStatus, 5).ne(Order::getDelFlag, 1) + .ge(Order::getOrderTime, DateUtil.beginOfYear(new Date())) .last("limit 20")); if (!list.isEmpty()) { n = orderCalculate(n, list); @@ -48,16 +45,14 @@ public class OrderCostCalculateTask { flag = false; } } - log.info("\r\n===>>>订单计算费用完成:{} 条数据", n); } - - private int orderCalculate(int n, List list) { + private int orderCalculate(int n, List list) { for (int i = 0; i < list.size(); i++) { - Result res = orderSwapBatteryService.calculateCost(list.get(i)); + Result res = orderService.calculateCost(list.get(i)); if ( CodeMsg.SUCCESS.getCode().equals(res.getCode())) { n += 1; // 发送微信消息 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/CloudTemplateMessageUtils.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/CloudTemplateMessageUtils.java new file mode 100644 index 0000000..738e308 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/CloudTemplateMessageUtils.java @@ -0,0 +1,36 @@ +package com.evotech.hd.cloud.utils; + +import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 类 + * + * @ClassName:CloudTemplateMessageUtils + * @date: 2025年06月18日 11:11 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Service +@Slf4j +public class CloudTemplateMessageUtils { + + private static GZHTemplateMessageService templateMessageService; + + @Autowired + public CloudTemplateMessageUtils(GZHTemplateMessageService templateMessageService){ + this.templateMessageService = templateMessageService; + } + + + public static void sendPreOrderMessage(OrderSwapBatteryPre orderSwapBatteryPre){ + templateMessageService.preOrderMessageSend(orderSwapBatteryPre); + } + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/GeoUtils.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/GeoUtils.java new file mode 100644 index 0000000..decfa4b --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/GeoUtils.java @@ -0,0 +1,94 @@ +package com.evotech.hd.cloud.utils; + +import com.evotech.hd.common.core.utils.Collections; + +import java.util.Map; + +/** + * 类 + * + * @ClassName:GeoUtils + * @date: 2025年07月02日 11:03 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public class GeoUtils { + + + private static final double EARTH_RADIUS = 6371.0; // 地球半径,单位为公里 + /*** + * 石家庄的位置-- 北纬 38.042225 东经 -- 114.514793 + * @param longitude 经度 + * @param latitude 纬度 + * @param distance 距离(千米) + * @return + */ + public static Map findNeighDrugstore(double longitude, double latitude, double distance) { + double minlat = 0; + double maxlat = 0; + double minlng = 0; + double maxlng = 0; + + // 先计算查询点的经纬度范围 + double dis = distance;// 距离(单位:千米) + double dlng = 2 * Math.asin(Math.sin(dis / (2 * EARTH_RADIUS)) + / Math.cos(longitude * Math.PI / 180)); + dlng = dlng * 180 / Math.PI;// 角度转为弧度 + double dlat = dis / EARTH_RADIUS; + dlat = dlat * 180 / Math.PI; + if (dlng < 0) { + minlng = longitude + dlng; + maxlng = longitude - dlng; + } else { + minlng = longitude - dlng; + maxlng = longitude + dlng; + } + if (dlat < 0) { + minlat = latitude + dlat; + maxlat = latitude - dlat; + } else { + minlat = latitude - dlat; + maxlat = latitude + dlat; + } + + return Collections.asMap("minlat",minlat, "maxlat", maxlat, "minlng", minlng, "maxlng", maxlng); +// System.out.println("dlng------------------>" + dlng); +// System.out.println("dlat------------------>" + dlat); +// System.out.println("minlat------------------>" + minlat); +// System.out.println("maxlat------------------>" + maxlat); +// System.out.println("minlng------------------>" + minlng); +// System.out.println("maxlng------------------>" + maxlng); +// +// Lm_user lm_user = new Lm_user(); +// +// lm_user.setSelectedFields("uid"); +// +// List ulist = new ArrayList(); +// +// // 降序排序 +// lm_user.dec_upd("utype='1' AND addr_x BETWEEN " + minlng + " AND " +// + maxlng + " AND addr_y BETWEEN " + minlat + " AND " + maxlat +// + " ORDER BY weight DESC"); +// while (lm_user.fet_upd()) { +// ulist.add(lm_user.get_uid()); +// } +// return ulist; + } + + +// public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) { +// lat1 = Math.toRadians(lat1); +// lon1 = Math.toRadians(lon1); +// lat2 = Math.toRadians(lat2); +// lon2 = Math.toRadians(lon2); +// +// double dLat = lat2 - lat1; +// double dLon = lon2 - lon1; +// +// double a = Math.pow(Math.sin(dLat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dLon / 2), 2); +// double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); +// return EARTH_RADIUS * c; +// } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/ParamServiceUtils.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/ParamServiceUtils.java new file mode 100644 index 0000000..c3f2842 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/ParamServiceUtils.java @@ -0,0 +1,66 @@ +package com.evotech.hd.cloud.utils; + +import com.evotech.hd.cloud.service.SysParamService; +import com.evotech.hd.common.core.entity.system.SysParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 类 + * + * @ClassName:ParamServiceUtils + * @date: 2025年07月02日 14:23 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +@Slf4j +public class ParamServiceUtils { + + private static SysParamService sysParamService; + + + @Autowired + public ParamServiceUtils(SysParamService sysParamService) { + this.sysParamService = sysParamService; + } + + /*** + * 获取用户的默认半径范围 + * @return + */ + public static Double getStationDistance(){ + SysParam param= sysParamService.getSysParam("用户中心方圆距离充电站的距离", "user_distance","50","用户中心方圆距离充电站的距离, 单位是 KM/千米"); + return Double.valueOf(param.getParamValue()); + } + + /*** + * 检查是否允许赠送金额结算 + * @return + */ + public static Boolean getGiftAmountSettlementOpen(){ + SysParam param= sysParamService.getSysParam("是否允许积分结算", "gift_amount_settlement_open","false","是否允许积分结算, true 或者 false"); + return Boolean.valueOf(param.getParamValue()); + } + /*** + * 查询充值金额和赠送金额的结算占比 + * 0.7:0.3 + * @return + */ + public static String[] getSettlementProportion(){ + SysParam param= sysParamService.getSysParam("充值金额和赠送金额的结算占比", "settlement_proportion","0.7:0.3","充值金额和赠送金额的结算占比: 充值金额:结算金额 两个比例相加=1"); + return param.getParamValue().split(":"); + } + + /*** + * 获取结算方式 + * 0.7:0.3 + * @return + */ + public static Integer getSettlementType(){ + SysParam param= sysParamService.getSysParam("获取结算方式", "settlement_type","2","获取结算方式: 计费方式-ODO--1; 计费方式SOC---2; 计费方式电量---3"); + return Integer.valueOf(param.getParamValue()); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/HDStepDictComponent.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/HDStepDictComponent.java index 0d2f5a9..aae6e28 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/HDStepDictComponent.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/HDStepDictComponent.java @@ -1,17 +1,15 @@ package com.evotech.hd.cloud.utils.components; -import java.util.List; - -import org.springframework.stereotype.Component; - +import cn.hutool.json.JSONUtil; import com.evotech.hd.cloud.service.rpc.ResourceService; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.dict.Dict; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.redis.utils.RedisUtil; - -import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.List; @Component public class HDStepDictComponent { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java index b648c11..939286c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java @@ -3,18 +3,30 @@ package com.evotech.hd.cloud.utils.components; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.evotech.hd.cloud.dao.BatteryStationHdFeeStandardDao; +import com.evotech.hd.cloud.entity.MessageMqtt; +import com.evotech.hd.cloud.entity.vo.MqttMessageParam; +import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.service.MessageMqttService; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.dao.cloud.OrderDetailDao; +import com.evotech.hd.common.core.entity.IdEntity; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +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 jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.time.LocalTime; -import java.util.ArrayList; import java.util.List; +import java.util.Map; @Slf4j @Component @@ -22,6 +34,11 @@ public class SwapOrderBasicFeeComponent { @Resource private BatteryStationHdFeeStandardDao batteryStationHdFeeStandardDao; + @Resource + private OrderDetailDao orderDetailDao; + @Resource + private MessageMqttService messageMqttService; + /** * 计算订单的基本费用和服务费用 @@ -30,26 +47,26 @@ public class SwapOrderBasicFeeComponent { * @param osb 订单对象,包含站点代码和订单时间 * @return 更新后的订单对象,包含计算后的基本费用和服务费用 */ - public OrderSwapBattery orderBasicFee(OrderSwapBattery osb) { + public OrderDetail orderBasicFee(Order order, OrderDetail orderDetail) { // 根据换电站编码和订单时间查询费用标准列表 - List list = batteryStationHdFeeStandardDao.listFeeStandard(osb.getStationCode(), DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); + List list = batteryStationHdFeeStandardDao.listFeeStandard(order.getStationCode(), DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); if(CollectionUtils.isEmpty(list)){ - list = batteryStationHdFeeStandardDao.orderCreateBeforeFeeEndStandard(osb.getStationCode(), DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); + list = batteryStationHdFeeStandardDao.orderCreateBeforeFeeEndStandard(order.getStationCode(), DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); } if(CollectionUtils.isEmpty(list)){ - list = batteryStationHdFeeStandardDao.orderCreateAfterFeeBeginStandard(osb.getStationCode(), DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); + list = batteryStationHdFeeStandardDao.orderCreateAfterFeeBeginStandard(order.getStationCode(), DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); } - - log.info("换电站编码{}时间{}订单费用计算参数========>:{}, 费用标准信息:{}", DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER),osb.getStationCode(),JSONUtil.toJsonStr(osb),JSONUtil.toJsonStr(list)); + log.info("换电站编码{}时间{}订单费用计算参数========>:{}, 费用标准信息:{}", DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER),order.getStationCode(),JSONUtil.toJsonStr(order),JSONUtil.toJsonStr(list)); // 如果费用标准列表不为空,说明找到了相关的费用标准 if (!list.isEmpty()) { // 获取第一个费用标准 BatteryStationHdFeeStandard standard = list.get(0); + Integer serviceFee = standard.getCommonRemainFee().intValue(); + Integer unitPrice = getUnitFee(orderDetail.getFeeType(), standard); + String feeStandard = JSONUtil.toJsonStr(standard); // 获取该标准下的详细费用列表 List detailList = standard.getDetailList(); - List battery = new ArrayList<>(); - battery.add(standard); // 如果详细费用列表不为空,进行时间范围过滤 if (!detailList.isEmpty()) { // 过滤出当前时间在有效时间范围内的费用详情 @@ -58,28 +75,124 @@ public class SwapOrderBasicFeeComponent { // 如果过滤后的详细费用列表不为空,使用第一个有效的费用详情 if (!detailList.isEmpty()) { BatteryStationHdFeeStandardDetail detail = detailList.get(0); - log.info("当前时间在费用详情有效时间范围内=====>:{}", JSONUtil.toJsonStr(detail)); - // 设置基本费用和服务费用 - osb.setFeeStandardJson(JSONUtil.toJsonStr(detail)); - osb.setBasicFee(detail.getEachSocFee()); - osb.setServiceFee(detail.getTimeServiceFee()); - } else { - // 如果没有有效的详细费用,使用标准费用 - osb.setFeeStandardJson(JSONUtil.toJsonStr(standard)); - osb.setBasicFee(standard.getEachSocFee()); - osb.setServiceFee(standard.getCommonRemainFee()); + serviceFee = detail.getServiceFee().intValue(); + unitPrice = getUnitFee(orderDetail.getFeeType(), detail); + feeStandard = JSONUtil.toJsonStr(detail); + } + } + try { + orderDetail.setServiceFee(serviceFee); + orderDetail.setUnitPrice(unitPrice); + orderDetail.setFeeStandard(feeStandard); + //直接更新数据 + orderDetailDao.updateById(orderDetail); + } catch (Exception e) { + log.error("更新费用信息出现错误"+e.getMessage()); + } + } + log.info("订单费用计算结果========>:{}", JSONUtil.toJsonStr(orderDetail)); + return orderDetail; + } + + + public OrderDetail calculateElectricityQuantity(Order order, OrderDetail orderDetail) { + Double electricityQuantity = 200d; + switch (orderDetail.getFeeType()){ + case HDConstant.OrderConstant.FEE_TYPE_ODO: + break; + case HDConstant.OrderConstant.FEE_TYPE_SOC: + //如果租借/归还soc不存在参数, 则需要到mqtt消息中去抓取消息进行反向解析 + if(orderDetail.getRentBatSoc() == null || orderDetail.getRentBatSoc() == null){ + Map valMap = getMqttValue(MqttMessageTypeEnum.EVENT, EventFunctionTypesEnum.FUN_ORDEREVENT.getFunction(), order, "rentBatSoc", "returnBatSoc"); + if(orderDetail.getRentBatSoc() == null && valMap.containsKey("rentBatSoc") && ObjectUtils.isNotEmpty(valMap.get("rentBatSoc"))){ + orderDetail.setRentBatSoc(Double.valueOf(String.valueOf(valMap.get("rentBatSoc")))); + } + if(orderDetail.getRentBatSoc() == null && valMap.containsKey("returnBatSoc") && ObjectUtils.isNotEmpty(valMap.get("returnBatSoc"))){ + orderDetail.setReturnBatSoc(Double.valueOf(String.valueOf(valMap.get("returnBatSoc")))); + } + } + electricityQuantity = orderDetail.getRentBatSoc() - orderDetail.getReturnBatSoc(); + break; + case HDConstant.OrderConstant.FEE_TYPE_DL: + //如果按照电量结算不存在参数, 则需要到mqtt消息中去抓取消息进行反向解析 + if(orderDetail.getElectEnd() == null || orderDetail.getElectStart() == null){ + Map valMap = getMqttValue(MqttMessageTypeEnum.EVENT, "chargingEvent", order, "electStart", "electEnd"); + if(orderDetail.getRentBatSoc() == null && valMap.containsKey("electStart") && ObjectUtils.isNotEmpty(valMap.get("electStart"))){ + orderDetail.setElectStart(Double.valueOf(String.valueOf(valMap.get("electStart")))); + } + if(orderDetail.getRentBatSoc() == null && valMap.containsKey("electEnd") && ObjectUtils.isNotEmpty(valMap.get("electEnd"))){ + orderDetail.setElectEnd(Double.valueOf(String.valueOf(valMap.get("electEnd")))); + } + } + electricityQuantity = orderDetail.getElectEnd() - orderDetail.getElectStart(); + default: + break; + } + try { + orderDetail.setElectricityQuantity(electricityQuantity); + //直接更新数据 + orderDetailDao.updateById(orderDetail); + } catch (Exception e) { + log.error("更新消费统计信息出现错误"+e.getMessage()); + } + return orderDetail; + } + + public Integer getUnitFee(Integer feeType, T c) { + switch (feeType){ + case HDConstant.OrderConstant.FEE_TYPE_ODO: + if(c instanceof BatteryStationHdFeeStandard){ + //元转分 + return ((BatteryStationHdFeeStandard)c).getEachKmFee().intValue(); + } + if(c instanceof BatteryStationHdFeeStandardDetail){ + //元转分 + return ((BatteryStationHdFeeStandardDetail)c).getEachKmFee().intValue(); + } + case HDConstant.OrderConstant.FEE_TYPE_SOC: + if(c instanceof BatteryStationHdFeeStandard){ + //元转分 + return ((BatteryStationHdFeeStandard)c).getEachSocFee().intValue(); + } + if(c instanceof BatteryStationHdFeeStandardDetail){ + //元转分 + return ((BatteryStationHdFeeStandardDetail)c).getEachSocFee().intValue(); + } + case HDConstant.OrderConstant.FEE_TYPE_DL: + if(c instanceof BatteryStationHdFeeStandard){ + //元转分 + return ((BatteryStationHdFeeStandard)c).getEachKwhFee().intValue(); + } + if(c instanceof BatteryStationHdFeeStandardDetail){ + //元转分 + return ((BatteryStationHdFeeStandardDetail)c).getEachKwhFee().intValue(); + } + default: + //默认返回每次2元 + return 200; + } + } + + + private Map getMqttValue(MqttMessageTypeEnum typeEnum, String messageFunction, Order order,String... orgs){ + Map valMap = Collections.emptyMap(); + MessageMqtt mqtt = messageMqttService.getOne(new MqttMessageParam(order.getOrderNo(), order.getStationCode(), "S2M", typeEnum.getType(), messageFunction, order.getOrderTime())); + if(mqtt != null){ + if(org.apache.commons.lang3.StringUtils.isNotEmpty(mqtt.getContent())){ + JSONObject content = JSONObject.parseObject(mqtt.getContent()); + JSONObject dataBody = content.getJSONObject("dataBody"); + if(dataBody != null){ + JSONObject statusData = dataBody.getJSONObject("statusData"); + if(statusData != null){ + for (int i = 0; i < orgs.length; i++) { + String key = orgs[i]; + valMap.put(key, statusData.get(key)); + } + } } - } else { - osb.setFeeStandardJson(JSONUtil.toJsonStr(standard)); - // 如果没有详细费用,直接使用标准费用 - log.info("没有详细费用,直接使用标准费用=====>:{}", JSONUtil.toJsonStr(standard)); - osb.setBasicFee(standard.getEachSocFee()); - osb.setServiceFee(standard.getCommonRemainFee()); } } - // 返回更新后的订单对象 - log.info("订单费用计算结果========>:{}", JSONUtil.toJsonStr(osb)); - return osb; + return valMap; } } diff --git a/cloud-manage-server/src/main/resources/mapper/BatteryStationDcMapper.xml b/cloud-manage-server/src/main/resources/mapper/BatteryStationDcMapper.xml index cad3413..e318832 100644 --- a/cloud-manage-server/src/main/resources/mapper/BatteryStationDcMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/BatteryStationDcMapper.xml @@ -30,12 +30,9 @@ diff --git a/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardDetailMapper.xml b/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardDetailMapper.xml index c7c4348..5226217 100644 --- a/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardDetailMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardDetailMapper.xml @@ -11,7 +11,7 @@ - + diff --git a/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml new file mode 100644 index 0000000..b745e50 --- /dev/null +++ b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml b/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml index bbbeb7f..6c584b8 100644 --- a/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml @@ -3,26 +3,26 @@ - + - + - + - + @@ -30,7 +30,7 @@ - + diff --git a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java index 3e65671..4012a00 100644 --- a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java +++ b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java @@ -1,152 +1,144 @@ -package com.evotech.hd.cloud; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.crypto.Mode; -import cn.hutool.crypto.Padding; -import cn.hutool.crypto.symmetric.AES; -import cn.hutool.crypto.symmetric.SymmetricCrypto; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.evotech.hd.cloud.controller.test.service.MqttConfigService; -import com.evotech.hd.cloud.controller.test.service.MqttTestUtil; -import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.BatteryStationSecretKey; -import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.MyMqttMessage; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep; -import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; -import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; -import com.evotech.hd.cloud.service.BatteryStationDcService; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; -import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; -import com.evotech.hd.common.core.dao.resource.CarTypeDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.*; -import com.evotech.hd.common.core.entity.resource.BatteryType; -import com.evotech.hd.common.core.entity.resource.CarType; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.common.core.enums.OrderStatusEnums; -import com.evotech.hd.common.core.enums.TradeTypeEnums; -import com.evotech.hd.common.core.utils.CommonUtil; -import com.evotech.hd.common.redis.utils.RedisUtil; -import jakarta.annotation.Resource; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -@SpringBootTest(classes = CloudManageServerApplication.class) -public class AddTestData { - - @Resource - private BatteryStationDao batteryStationDao; - @Resource - private BatteryTypeDao batteryTypeDao; - @Resource - private BatteryStationDcService batteryStationDcService; - @Resource - private CompanyDao companyDao; - @Resource - private CarTypeDao carTypeDao; - @Resource - private VehicleInfoDao vehicleInfoDao; - @Resource - private WechatUserDao wechatUserDao; - @Resource - private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; - @Resource - private OrderSwapBatteryPreDao orderSwapBatteryPreDao; - @Resource - private OrderSwapBatteryService orderSwapBatteryService; - @Resource - private SwapOrderBasicFeeComponent orderBasicFeeComponent; - @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - @Resource - private MqttTestUtil mqttTestUtil; - @Resource - private MqttConfigService mqttService; - @Resource - private RedisUtil redisUtil; - @Resource - private BatteryStationSecretKeyDao batteryStationSecretKeyDao; - @Resource - private MessageUtilService messageUtilService; - @Resource - private BatteryStationDcDao batteryStationDcDao; - @Resource - private WalletAccountService walletAccountService; - @Resource - private WalletAccountDao walletAccountDao; - @Resource - private WalletAccountDetailDao walletAccountDetailDao; - @Resource - private TradeDetailDao tradeDetailDao; - @Resource - private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao; - - - - - - private MqttClient testClient; - - - @Resource - private BatteryStationCdStrategyService batteryStationCdStrategyService; - -// @Test - void strategyFind(){ - System.out.println(batteryStationCdStrategyService.chargeStationFindList("123456")); - } - - - -// @Test - void testStrategyAndMqttM2S() throws MqttException { - testClient = mqttService.connect(); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new LambdaUpdateWrapper().eq(BatteryStation::getPkId, 4)); - BatteryStation station = stationList.get(0); - sendStrategyInfo(station.getCode()); - testClient.disconnect(); - - - } - - private void sendStrategyInfo(String stationCode) { - JSONObject jo = JSONUtil.parseObj("{stationCode:"+stationCode+"}"); - String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.REQUEST.getType()); - MqttMessageHeader header = mqttTestUtil.getHeader(RequestFunctionTypesEnum.FUN_STRATEGY_INFO.getFunction()); - publishMessage(stationCode, jo, topic, header); - - } - +//package com.evotech.hd.cloud; +// +//import cn.hutool.core.date.DatePattern; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.ObjectUtil; +//import cn.hutool.core.util.RandomUtil; +//import cn.hutool.crypto.Mode; +//import cn.hutool.crypto.Padding; +//import cn.hutool.crypto.symmetric.AES; +//import cn.hutool.crypto.symmetric.SymmetricCrypto; +//import cn.hutool.json.JSONObject; +//import cn.hutool.json.JSONUtil; +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +//import com.evotech.hd.cloud.controller.test.service.MqttConfigService; +//import com.evotech.hd.cloud.controller.test.service.MqttTestUtil; +//import com.evotech.hd.cloud.dao.*; +//import com.evotech.hd.cloud.entity.BatteryStationSecretKey; +//import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +//import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +//import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; +//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +//import com.evotech.hd.cloud.mqtt.message.MyMqttMessage; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep; +//import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +//import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; +//import com.evotech.hd.cloud.service.BatteryStationDcService; +//import com.evotech.hd.cloud.service.OrderSwapBatteryService; +//import com.evotech.hd.cloud.service.WalletAccountService; +//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +//import com.evotech.hd.common.core.constant.HDConstant; +//import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +//import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; +//import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; +//import com.evotech.hd.common.core.dao.resource.CarTypeDao; +//import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.*; +//import com.evotech.hd.common.core.entity.resource.BatteryType; +//import com.evotech.hd.common.core.entity.resource.CarType; +//import com.evotech.hd.common.core.entity.wechat.WechatUser; +//import com.evotech.hd.common.core.enums.CodeMsg; +//import com.evotech.hd.common.core.enums.OrderStatusEnums; +//import com.evotech.hd.common.core.enums.TradeTypeEnums; +//import com.evotech.hd.common.core.utils.CommonUtil; +//import com.evotech.hd.common.redis.utils.RedisUtil; +//import jakarta.annotation.Resource; +//import org.eclipse.paho.client.mqttv3.MqttClient; +//import org.eclipse.paho.client.mqttv3.MqttException; +//import org.junit.jupiter.api.Test; +//import org.springframework.boot.test.context.SpringBootTest; +// +//import java.math.BigDecimal; +//import java.util.ArrayList; +//import java.util.Date; +//import java.util.LinkedList; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@SpringBootTest(classes = CloudManageServerApplication.class) +//public class AddTestData { +// +// @Resource +// private BatteryStationDao batteryStationDao; +// @Resource +// private BatteryTypeDao batteryTypeDao; +// @Resource +// private BatteryStationDcService batteryStationDcService; +// @Resource +// private CompanyDao companyDao; +// @Resource +// private CarTypeDao carTypeDao; +// @Resource +// private VehicleInfoDao vehicleInfoDao; +// @Resource +// private WechatUserDao wechatUserDao; +// @Resource +// private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; +// @Resource +// private OrderSwapBatteryPreDao orderSwapBatteryPreDao; +// @Resource +// private OrderSwapBatteryService orderSwapBatteryService; +// @Resource +// private SwapOrderBasicFeeComponent orderBasicFeeComponent; +// @Resource +// private OrderSwapBatteryDao orderSwapBatteryDao; +// @Resource +// private MqttTestUtil mqttTestUtil; +// @Resource +// private MqttConfigService mqttService; +// @Resource +// private RedisUtil redisUtil; +// @Resource +// private BatteryStationSecretKeyDao batteryStationSecretKeyDao; +// @Resource +// private MessageUtilService messageUtilService; +// @Resource +// private BatteryStationDcDao batteryStationDcDao; +// @Resource +// private WalletAccountService walletAccountService; +// @Resource +// private WalletAccountDao walletAccountDao; +// @Resource +// private WalletAccountDetailDao walletAccountDetailDao; +// @Resource +// private TradeDetailDao tradeDetailDao; +// @Resource +// private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao; +// +// +// +// +// +// private MqttClient testClient; +// +// +// @Resource +// private BatteryStationCdStrategyService batteryStationCdStrategyService; +// +//// @Test +// void strategyFind(){ +// System.out.println(batteryStationCdStrategyService.chargeStationFindList("123456")); +// } +// +// +// +//// @Test +// void testStrategyAndMqttM2S() throws MqttException { +// testClient = mqttService.connect(); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new LambdaUpdateWrapper().eq(BatteryStation::getPkId, 4)); +// BatteryStation station = stationList.get(0); +// sendStrategyInfo(station.getCode()); +// testClient.disconnect(); +// +// +// } +// // private void sendStrategyInfo(String stationCode) { // JSONObject jo = JSONUtil.parseObj("{stationCode:"+stationCode+"}"); // String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.REQUEST.getType()); @@ -154,960 +146,968 @@ public class AddTestData { // publishMessage(stationCode, jo, topic, header); // // } - - -// @Test - void addDC() { - System.out.println("======>>开始......"); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper()); - // 2. 按站添加 - List btList = batteryTypeDao.selectList(new QueryWrapper()); - System.out.println("======222>>" + btList.size()); - for (int i = 0; i < stationList.size(); i++) { - BatteryStation station = stationList.get(i); - Date d = new Date(); - String f1 = DateUtil.format(d, DatePattern.PURE_DATE_PATTERN); - for (int j = 0; j < 60; j++) { - BatteryStationDc dc = new BatteryStationDc(); - int random = RandomUtil.randomInt(0, btList.size()); - BatteryType bt = btList.get(random); - dc.setBatCode("YTDC" + bt.getTypeCode() + f1 + RandomUtil.randomStringUpper(14)); - dc.setCreater("TEST"); - dc.setProductionDate(DateUtil.format(DateUtil.offsetDay(d, -RandomUtil.randomInt(1, 100)), DatePattern.PURE_DATE_PATTERN)); - dc.setRegistrationDate(f1); - dc.setSoc(150); - dc.setStatus(3); - dc.setSourceCode(station.getCode()); - dc.setSourceFrom(1); - dc.setPointType(1); - dc.setPointCode(station.getCode()); - dc.setPointName(station.getName()); - dc.setTypeCode(bt.getTypeCode()); - dc.setTypeName(bt.getTypeName()); - - batteryStationDcService.add(dc); - } - - - } - - } - -// @Test - void addCars1() { - System.out.println("======>>开始c......"); - // 查询公司 - List companyList = companyDao.selectList(new QueryWrapper()); - // 车辆类型 - List carTypeList = carTypeDao.selectList(new QueryWrapper()); - // 电池类型 - List btList = batteryTypeDao.selectList(new QueryWrapper()); - // 添加车辆 - String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; - for (int i = 0; i < companyList.size(); i++) { - Company company = companyList.get(i); - Date d = new Date(); - Date d1 = DateUtil.offsetYear(d, -3); - for (int j = 1; j <= 40; j++) { - VehicleInfo vi = new VehicleInfo(); - int random = RandomUtil.randomInt(0, carTypeList.size()); - CarType ct = carTypeList.get(random); - vi.setTypeCode(ct.getTypeCode()); - vi.setVinNo(RandomUtil.randomStringUpper(16)); - vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); - vi.setOwnerType(2); - vi.setCcode(company.getCcode()); - vi.setCname(company.getCname()); - vi.setOwnerId(vi.getCcode()); - vi.setOwnerName(vi.getCname()); - vi.setPlateNum(carNo(company, j)); - vi.setEngineNo(RandomUtil.randomStringUpper(20)); - vi.setSeatsCount(RandomUtil.randomInt(2, 6)); - vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); - vi.setCarArea(company.getAddressCity()); - vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); - vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); - vi.setBoardDate(vi.getPurchaseDate()); - vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); - vi.setDelFlag(0); - vehicleInfoDao.insert(vi); - // 添加对应车辆的电池 - BatteryStationDc dc = new BatteryStationDc(); - int randomBtType = RandomUtil.randomInt(0, btList.size()); - BatteryType bt = btList.get(randomBtType); - dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); - dc.setCreater("TEST"); - dc.setProductionDate(vi.getProductionDate()); - dc.setRegistrationDate(vi.getRegistrationDate()); - dc.setSoc(150); - dc.setStatus(1); - dc.setSourceCode(vi.getPlateNum()); - dc.setSourceFrom(2); - dc.setTypeCode(bt.getTypeCode()); - dc.setTypeName(bt.getTypeName()); - - batteryStationDcService.add(dc); - } - - } - - - } - - private String carNo(Company c, Integer i) { - String divisionNo = c.getDivisionNo(); - String prefix = "冀"; - if ("130100".equals(divisionNo)) { - prefix += "AD1"; - } - if ("130200".equals(divisionNo)) { - prefix += "BD2"; - } - if ("130300".equals(divisionNo)) { - prefix += "CD3"; - } - if ("130400".equals(divisionNo)) { - prefix += "DD4"; - } - if ("130500".equals(divisionNo)) { - prefix += "ED5"; - } - if ("130600".equals(divisionNo)) { - prefix += "FD6"; - } - - String suffix = String.format("%04d", i); - return prefix + suffix; - } - -// @Test - void companyRelation() { - // 查询公司 - List companyList = companyDao.selectList(new QueryWrapper()); - - for (int i = 0; i < companyList.size(); i++) { - Company company = companyList.get(i); +// +//// private void sendStrategyInfo(String stationCode) { +//// JSONObject jo = JSONUtil.parseObj("{stationCode:"+stationCode+"}"); +//// String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.REQUEST.getType()); +//// MqttMessageHeader header = mqttTestUtil.getHeader(RequestFunctionTypesEnum.FUN_STRATEGY_INFO.getFunction()); +//// publishMessage(stationCode, jo, topic, header); +//// +//// } +// +// +//// @Test +// void addDC() { +// System.out.println("======>>开始......"); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper()); +// // 2. 按站添加 +// List btList = batteryTypeDao.selectList(new QueryWrapper()); +// System.out.println("======222>>" + btList.size()); +// for (int i = 0; i < stationList.size(); i++) { +// BatteryStation station = stationList.get(i); // Date d = new Date(); - List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", company.getCcode())); - for (int j = 0; j < vehicleList.size(); j++) { - VehicleInfo vi = vehicleList.get(j); - // 人车关联 -// int randomInt = RandomUtil.randomInt(4000 - (i+1)*(j+1)); - Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); - int randomInt = RandomUtil.randomInt(1, count.intValue()); - WechatUser user = wechatUserDao.selectOne(new QueryWrapper().isNull("pcode").last("limit " + randomInt + ", 1")); - VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); - relation.setUcode(user.getWuid()); - relation.setUname(user.getName()); - relation.setOpenid(user.getOpenid()); - relation.setPlateNum(vi.getPlateNum()); - relation.setPhone(user.getPhoneNumber()); - relation.setOwnerType(1); - relation.setCreater("TEST"); - relation.setCtime(new Date()); - vehicleWechatUserRelationDao.insert(relation); - // 公司绑人 - user.setPcode(company.getCcode()); - user.setPname(company.getCname()); - user.setType(2); - user.setUptime(null); - wechatUserDao.updateById(user); - } - - } - } - - +// String f1 = DateUtil.format(d, DatePattern.PURE_DATE_PATTERN); +// for (int j = 0; j < 60; j++) { +// BatteryStationDc dc = new BatteryStationDc(); +// int random = RandomUtil.randomInt(0, btList.size()); +// BatteryType bt = btList.get(random); +// dc.setBatCode("YTDC" + bt.getTypeCode() + f1 + RandomUtil.randomStringUpper(14)); +// dc.setCreater("TEST"); +// dc.setProductionDate(DateUtil.format(DateUtil.offsetDay(d, -RandomUtil.randomInt(1, 100)), DatePattern.PURE_DATE_PATTERN)); +// dc.setRegistrationDate(f1); +// dc.setSoc(150); +// dc.setStatus(3); +// dc.setSourceCode(station.getCode()); +// dc.setSourceFrom(1); +// dc.setPointType(1); +// dc.setPointCode(station.getCode()); +// dc.setPointName(station.getName()); +// dc.setTypeCode(bt.getTypeCode()); +// dc.setTypeName(bt.getTypeName()); +// +// batteryStationDcService.add(dc); +// } +// +// +// } +// +// } +// +//// @Test +// void addCars1() { +// System.out.println("======>>开始c......"); +// // 查询公司 +// List companyList = companyDao.selectList(new QueryWrapper()); +// // 车辆类型 +// List carTypeList = carTypeDao.selectList(new QueryWrapper()); +// // 电池类型 +// List btList = batteryTypeDao.selectList(new QueryWrapper()); +// // 添加车辆 +// String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; +// for (int i = 0; i < companyList.size(); i++) { +// Company company = companyList.get(i); +// Date d = new Date(); +// Date d1 = DateUtil.offsetYear(d, -3); +// for (int j = 1; j <= 40; j++) { +// VehicleInfo vi = new VehicleInfo(); +// int random = RandomUtil.randomInt(0, carTypeList.size()); +// CarType ct = carTypeList.get(random); +// vi.setTypeCode(ct.getTypeCode()); +// vi.setVinNo(RandomUtil.randomStringUpper(16)); +// vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); +// vi.setOwnerType(2); +// vi.setCcode(company.getCcode()); +// vi.setCname(company.getCname()); +// vi.setOwnerId(vi.getCcode()); +// vi.setOwnerName(vi.getCname()); +// vi.setPlateNum(carNo(company, j)); +// vi.setEngineNo(RandomUtil.randomStringUpper(20)); +// vi.setSeatsCount(RandomUtil.randomInt(2, 6)); +// vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); +// vi.setCarArea(company.getAddressCity()); +// vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); +// vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); +// vi.setBoardDate(vi.getPurchaseDate()); +// vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); +// vi.setDelFlag(0); +// vehicleInfoDao.insert(vi); +// // 添加对应车辆的电池 +// BatteryStationDc dc = new BatteryStationDc(); +// int randomBtType = RandomUtil.randomInt(0, btList.size()); +// BatteryType bt = btList.get(randomBtType); +// dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); +// dc.setCreater("TEST"); +// dc.setProductionDate(vi.getProductionDate()); +// dc.setRegistrationDate(vi.getRegistrationDate()); +// dc.setSoc(150); +// dc.setStatus(1); +// dc.setSourceCode(vi.getPlateNum()); +// dc.setSourceFrom(2); +// dc.setTypeCode(bt.getTypeCode()); +// dc.setTypeName(bt.getTypeName()); +// +// batteryStationDcService.add(dc); +// } +// +// } +// +// +// } +// +// private String carNo(Company c, Integer i) { +// String divisionNo = c.getDivisionNo(); +// String prefix = "冀"; +// if ("130100".equals(divisionNo)) { +// prefix += "AD1"; +// } +// if ("130200".equals(divisionNo)) { +// prefix += "BD2"; +// } +// if ("130300".equals(divisionNo)) { +// prefix += "CD3"; +// } +// if ("130400".equals(divisionNo)) { +// prefix += "DD4"; +// } +// if ("130500".equals(divisionNo)) { +// prefix += "ED5"; +// } +// if ("130600".equals(divisionNo)) { +// prefix += "FD6"; +// } +// +// String suffix = String.format("%04d", i); +// return prefix + suffix; +// } +// +//// @Test +// void companyRelation() { +// // 查询公司 +// List companyList = companyDao.selectList(new QueryWrapper()); +// +// for (int i = 0; i < companyList.size(); i++) { +// Company company = companyList.get(i); +//// Date d = new Date(); +// List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", company.getCcode())); +// for (int j = 0; j < vehicleList.size(); j++) { +// VehicleInfo vi = vehicleList.get(j); +// // 人车关联 +//// int randomInt = RandomUtil.randomInt(4000 - (i+1)*(j+1)); +// Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); +// int randomInt = RandomUtil.randomInt(1, count.intValue()); +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper().isNull("pcode").last("limit " + randomInt + ", 1")); +// VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); +// relation.setUcode(user.getWuid()); +// relation.setUname(user.getName()); +// relation.setOpenid(user.getOpenid()); +// relation.setPlateNum(vi.getPlateNum()); +// relation.setPhone(user.getPhoneNumber()); +// relation.setOwnerType(1); +// relation.setCreater("TEST"); +// relation.setCtime(new Date()); +// vehicleWechatUserRelationDao.insert(relation); +// // 公司绑人 +// user.setPcode(company.getCcode()); +// user.setPname(company.getCname()); +// user.setType(2); +// user.setUptime(null); +// wechatUserDao.updateById(user); +// } +// +// } +// } +// +// +//// @Test +// void addCars2() { +// // 车辆类型 +// List carTypeList = carTypeDao.selectList(new QueryWrapper()); +// // 电池类型 +// List btList = batteryTypeDao.selectList(new QueryWrapper()); +// // 添加车辆 +// String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; +// Date d = new Date(); +// Date d1 = DateUtil.offsetYear(d, -3); +// for (int i = 1761; i < 3009; i++) { +// VehicleInfo vi = new VehicleInfo(); +// int random = RandomUtil.randomInt(0, carTypeList.size()); +// CarType ct = carTypeList.get(random); +// vi.setTypeCode(ct.getTypeCode()); +// vi.setVinNo(RandomUtil.randomStringUpper(16)); +// vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); +// vi.setOwnerType(1); +// List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper()); +// List ucodeList = relationList.stream().map(item -> item.getUcode()).distinct().toList(); +// Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); +// int randomInt = RandomUtil.randomInt(1, count.intValue() - ucodeList.size()); +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper() +// .isNull("pcode") +// .notIn("wuid", ucodeList) +// .last("limit " + randomInt + ", 1")); +// vi.setOwnerId(user.getWuid()); +// vi.setOwnerName(user.getName()); +// vi.setPhone(user.getPhoneNumber()); +// vi.setPlateNum("冀AD9" + String.format("%04d", i)); +// vi.setEngineNo(RandomUtil.randomStringUpper(20)); +// vi.setSeatsCount(RandomUtil.randomInt(2, 6)); +// vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); +// vi.setCarArea("石家庄市"); +// vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); +// vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); +// vi.setBoardDate(vi.getPurchaseDate()); +// vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); +// vi.setDelFlag(0); +// vi.setCreater("TEST"); +// vi.setCtime(new Date()); +// vehicleInfoDao.insert(vi); +// // 添加人车关联关系 +// VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); +// relation.setUcode(user.getWuid()); +// relation.setUname(user.getName()); +// relation.setOpenid(user.getOpenid()); +// relation.setPlateNum(vi.getPlateNum()); +// relation.setPhone(user.getPhoneNumber()); +// relation.setOwnerType(1); +// relation.setCreater("TEST"); +// relation.setCtime(new Date()); +// vehicleWechatUserRelationDao.insert(relation); +// +// // 添加对应车辆的电池 +// BatteryStationDc dc = new BatteryStationDc(); +// int randomBtType = RandomUtil.randomInt(0, btList.size()); +// BatteryType bt = btList.get(randomBtType); +// dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); +// dc.setCreater("TEST"); +// dc.setProductionDate(vi.getProductionDate()); +// dc.setRegistrationDate(vi.getRegistrationDate()); +// dc.setSoc(150); +// dc.setStatus(1); +// dc.setSourceCode(vi.getPlateNum()); +// dc.setSourceFrom(2); +// dc.setTypeCode(bt.getTypeCode()); +// dc.setTypeName(bt.getTypeName()); +// dc.setCtime(new Date()); +// +// batteryStationDcService.add(dc); +// } +// } +// +// +//// @Test +// void addPreOrders() { +// System.out.println("======>>开始......"); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper()); +// // 2. 按时间、站添加 +// Date d = new Date(); +// Date d1 = DateUtil.offsetYear(d, -4); +// long count = DateUtil.betweenDay(d1, d, true); +// int n = 1; +// for (int i = 0; i < count; i++) { +// Date day = DateUtil.offsetDay(d1, i); +// for (int j = 0; j < stationList.size(); j++) { +// BatteryStation station = stationList.get(j); +// for (int k = 0; k < 84; k++) { +// OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); +// osbp.setSource(2); +// osbp.setSourceId(station.getCode()); +// // 车 +// VehicleInfo vehicle = vehicleInfoDao.selectOne(new QueryWrapper().last("limit " + n + ", 1")); +// // 人 +// VehicleWechatUserRelation relation = vehicleWechatUserRelationDao.selectOne(new QueryWrapper() +// .eq("plate_num", vehicle.getPlateNum()).last("limit 1")); +// osbp.setUcode(relation.getUcode()); +// osbp.setUname(relation.getUname()); +// osbp.setPlateNum(vehicle.getPlateNum()); +// osbp.setPhone(relation.getPhone()); +// osbp.setStationCode(station.getCode()); +// osbp.setStationName(station.getName()); +// osbp.setReservationTime(new Date()); +// +// orderSwapBatteryPreDao.insert(osbp); +// n++; +// if (n == 3250) { +// n = 1; +// } +// } +// +// } +// +// } +// +// } +// +// +//// @Test +// void addOrders() { +// System.out.println("======>>开始......"); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); +// // 2. 按时间、站添加 +// Date d1 = new Date(); +// Date d2 = DateUtil.offsetYear(d1, -4); +// long count = DateUtil.betweenDay(d2, d1, true); +// for (int i = 0; i < count; i++) { +// Date day = DateUtil.offsetDay(DateUtil.offsetYear(new Date(), -4), i); +// String dayString = DateUtil.format(day, DatePattern.PURE_DATE_PATTERN); +// for (int j = 0; j < stationList.size(); j++) { +// BatteryStation station = stationList.get(j); +// // 查这天,这个站的预约 +// List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper() +// .eq("station_code", station.getCode()) +// .eq("swap_day", dayString) +// .eq("status", 1)); +// // 根据预约生成订单 +// if (orderPreList.isEmpty()) { +// continue; +// } +// Date orderTime = DateUtil.offsetMinute(DateUtil.offsetHour(DateUtil.beginOfDay(day), 6), RandomUtil.randomInt(1, 60)); +// for (int k = 0; k < orderPreList.size(); k++) { +// OrderSwapBatteryPre orderPre = orderPreList.get(k); +// OrderSwapBattery order = new OrderSwapBattery(); +// order.setOrderType(1); +// order.setCtime(new Date()); +// order.setCreater("TEST"); +// order.setOrderPreId(orderPre.getPkId()); +// order.setOrderPreUid(orderPre.getUcode()); +// order.setOrderPreUname(orderPre.getUname()); +// order.setOrderPrePhone(orderPre.getPhone()); +// order.setOrderNo(orderNo(station.getCode(), orderTime)); +// order.setPlateNum(orderPre.getPlateNum()); +// order.setOrderTime(orderTime); +// order.setStationCode(orderPre.getStationCode()); +// order.setStationName(orderPre.getStationName()); +// order.setStatus(1); +// order.setFeeType(3); +// order.setDelFlag(0); +// order.setRemark("测试用的"); +// order.setChangeMode(1); +// order.setChangeLane(1); +// +// // 加上费用标准 +// order = orderBasicFeeComponent.orderBasicFee(order); +// orderSwapBatteryDao.insert(order); +// +// orderTime = DateUtil.offsetMinute(orderTime, 10); +// } +// +// } +// +// } +// +// } +// +// +// 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; +// } +// +//// @Test +// void orderHandle1() { +// // 挑 1000条订单,取消 +// for (int i = 0; i < 2000; i++) { +// int randomInt = RandomUtil.randomInt(100, 730000); +// OrderSwapBattery one = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("status", 1).last("limit " + randomInt + ", 1")); +// OrderSwapBattery order = new OrderSwapBattery(); +// order.setPkId(one.getPkId()); +// order.setStatus(OrderStatusEnums.CANCLE.getCode()); +// orderSwapBatteryDao.updateById(order); +// } +// +// +// } +// +//// @Test +// void orderHandle2() { +// testClient = mqttService.connect(); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); +// Date d1 = new Date(); +// Date d2 = DateUtil.offsetYear(DateUtil.offsetDay(d1, -2), -4); +// long count = DateUtil.betweenDay(d2, d1, true); +// for (int i = 0; i < count; i++) { +// Date day = DateUtil.offsetDay(d2, i); +// for (int j = 0; j < stationList.size(); j++) { +// BatteryStation station = stationList.get(j); +// // 查这天,这个站的订单 +// List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() +// .eq("station_code", station.getCode()) +// .eq("status", 1) +// .ge("order_time", DateUtil.beginOfDay(day)) +// .le("order_time", DateUtil.endOfDay(day))); +// if (orderList.isEmpty()) { +// continue; +// } +// // 这个站的电池 +// List selectList = batteryStationDcDao.selectList(new QueryWrapper() +// .eq("status", 3) +// .eq("point_code", station.getCode()) +// .eq("del_flag", 0)); +// LinkedList dcList = new LinkedList(selectList); +// for (int k = 0; k < orderList.size(); k++) { +// OrderSwapBattery order = orderList.get(k); +// // 反馈订单状态 +// // 状态2 +// OrderStatus orderStatus = new OrderStatus(); +// orderStatus.setOrderNo(order.getOrderNo()); +// orderStatus.setStatus(2); +// orderStatus.setStatusTime(DateUtil.offsetSecond(order.getOrderTime(), RandomUtil.randomInt(10, 15))); +// orderStatusHandle(orderStatus, null, order.getStationCode()); +// // 步骤2 - 车辆到达指定位置 +// SwapStep swapStep = new SwapStep(); +// swapStep.setOrderNo(order.getOrderNo()); +// swapStep.setStep(2); +// swapStep.setStepTime(DateUtil.offsetSecond(orderStatus.getStatusTime(), RandomUtil.randomInt(30, 35))); +// swapStep(swapStep, order.getStationCode()); +// // 步骤3 - 启动对中机构 +// swapStep.setStep(3); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); +// swapStep(swapStep, order.getStationCode()); +// // 步骤4 - 取新电池 +// swapStep.setStep(4); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); +// swapStep(swapStep, order.getStationCode()); +// // 步骤5 - 拆旧电池 +// swapStep.setStep(5); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(50, 65))); +// swapStep(swapStep, order.getStationCode()); +// // 步骤6 - 装新电池 +// swapStep.setStep(6); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(30, 40))); +// swapStep(swapStep, order.getStationCode()); +// // 步骤7 - 放旧电池 +// swapStep.setStep(7); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(60, 70))); +// swapStep(swapStep, order.getStationCode()); +// // 状态3 - 换电完成 +// try { +// Thread.sleep(500L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// orderStatus.setStatus(3); +// orderStatus.setStatusTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(5, 10))); +// // 电池信息 +// // 原电池 +// VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", order.getPlateNum())); +// BatteryStationDc dc1 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); +// // 新电池 +// BatteryStationDc dc2 = dcList.removeFirst(); +// OrderStatusData statusData = new OrderStatusData(); +// statusData.setRentBatNo(dc2.getDccNo()); +// statusData.setRentBatCode(dc2.getBatCode()); +// statusData.setRentBatSoc(dc2.getSoc()); +// statusData.setReturnBatCode(dc1.getBatCode()); +// statusData.setReturnBatNo(dc2.getDccNo()); +// statusData.setReturnBatSoc(10); +// statusData.setReturnBatRentSoc(vi.getBatSoc()); +// orderStatusHandle(orderStatus, statusData, order.getStationCode()); +// // 状态4 - 开始充电 +// try { +// Thread.sleep(1000L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// orderStatus.setStatus(4); +// orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(4, 7))); +// orderStatusHandle(orderStatus, null, order.getStationCode()); +// // 状态5 - 充电完成 +// try { +// Thread.sleep(1000L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// orderStatus.setStatus(5); +// orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(90, 100))); +// OrderStatusData statusData5 = new OrderStatusData(); +// statusData5.setBatCode(dc1.getBatCode()); +// statusData5.setElectAmount(new BigDecimal(RandomUtil.randomInt(100, 140))); +// statusData5.setSoc(100); +// orderStatusHandle(orderStatus, statusData5, order.getStationCode()); +// +// +// try { +// Thread.sleep(500L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// BatteryStationDc dc3 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); +// dcList.addLast(dc3); +// } +// +// } +// +// } +// +// +// } +// +// /** +// * 反馈订单状态 +// */ +// private void orderStatusHandle(OrderStatus orderStatus, OrderStatusData statusData, String stationCode) { +// orderStatus.setStatusData(statusData); +// JSONObject jo = JSONUtil.parseObj(orderStatus); +// String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); +// MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction()); +// +//// mqttTestUtil.publishMessage(stationCode, jo, topic, header); +// publishMessage(stationCode, jo, topic, header); +// +// } +// +// private void publishMessage(String stationCode, JSONObject jo, String topic, MqttMessageHeader header) { +// // 1. 获取AES +// JSONObject aesJo = getAESKey(stationCode); +// SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, aesJo.getStr("aesSecretKey").getBytes(), aesJo.getStr("aesIv").getBytes()); +// // 2. 数据 +// MyMqttMessage message = new MyMqttMessage(); +// message.setHeader(header); +// message.setDataBody(jo); +// String encrypt = aes.encryptBase64(JSONUtil.toJsonStr(message)); +// // 3. 发送MQTT消息 +// mqttService.publish(testClient, encrypt, topic); +// } +// +// /** +// * 获取AES秘钥和IV +// * @param stationCode +// * @return +// */ +// public JSONObject getAESKey(String stationCode) { +// JSONObject jo = new JSONObject(); +// Object o1 = null; +// try { +// o1 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key"); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// Object o2 = null; +// try { +// o2 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv"); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// if (!ObjectUtil.isEmpty(o1) && !ObjectUtil.isEmpty(o2)) { +// jo.set("aesSecretKey", o1.toString()); +// jo.set("aesIv", o2.toString()); +//// jo.set("encryptKey", o1.toString()); +//// jo.set("encryptVector", o2.toString()); +// return jo; +// } +// BatteryStationSecretKey bssk = batteryStationSecretKeyDao.selectOne(new QueryWrapper().eq("type", 2).eq("station_code", stationCode)); +// if (bssk == null) { +// throw new RuntimeException("AES秘钥未获取到,请站端重新登陆!"); +//// return setAesKey(stationCode); +// } +// redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key", bssk.getPublicKey()); +// redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv", bssk.getPrivateKey()); +// jo.set("aesSecretKey", o1.toString()); +// jo.set("aesIv", o2.toString()); +//// jo.set("encryptKey", o1.toString()); +//// jo.set("encryptVector", o2.toString()); +// return jo; +// } +// +// /** +// * 反馈换电步骤 +// */ +// private void swapStep(SwapStep swapStep, String stationCode) { +// JSONObject jo = JSONUtil.parseObj(swapStep); +// +// String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); +// MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_SWAPSTEP.getFunction()); +// +// publishMessage(stationCode, jo, topic, header); +// } +// +// +// /** +// * 添加钱包 +// */ +//// @Test +// void addWallet1() { +// System.out.println("======>>开始c......"); +// // 1. 公司账户钱包 +// // 查询公司 +// List companyList = companyDao.selectList(new QueryWrapper()); +// for (int i = 0; i < companyList.size(); i++) { +// Company c = companyList.get(i); +// WalletAccount wa = new WalletAccount(); +// wa.setOwnerType(2); +// wa.setOwnerId(c.getCcode()); +// wa.setStatus(1); +// walletAccountService.add(wa); +// // 假装充值 +// // 交易 +// wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(c.getCname()); +// td.setTraderCode(c.getCcode()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// td.setDescription("TEST-假装公司充值交易"); +// td.setOutTradeNo(CommonUtil.payTradeNo(1)); +// td.setTradeType(1); +// td.setTradeAmount(RandomUtil.randomInt(100000000, 950000000)); +// td.setPayType(4); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 +// wad.setTradeRechargeAmount(td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); +// +// wad.setTradeGiftAmount(0); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// } +// +// } +// +// +// /** +// * 添加钱包 +// */ +//// @Test +// void addWallet2() { +// System.out.println("======>>开始c......"); +// // 1. 个人账户钱包 +// // 查询人 +// Long count = wechatUserDao.selectCount(new QueryWrapper()); +// for (int i = 0; i < count; i++) { +// int offset = 1 + i; +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper().last("limit " + offset + ", 1")); +// boolean exists = walletAccountDao.exists(new QueryWrapper().eq("owner_id", user.getWuid())); +// if (exists) { +// continue; +// } +// WalletAccount wa = new WalletAccount(); +// wa.setOwnerType(1); +// wa.setOwnerId(user.getWuid()); +// wa.setStatus(1); +// walletAccountService.add(wa); +// // 假装充值 +// // 交易 +// wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", user.getWuid())); +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(user.getName()); +// td.setTraderCode(user.getWuid()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// td.setDescription("TEST-假装个人充值交易"); +// td.setOutTradeNo(CommonUtil.payTradeNo(1)); +// td.setTradeType(1); +// td.setTradeAmount(RandomUtil.randomInt(20000000, 150000000)); +// td.setPayType(4); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 +// wad.setTradeRechargeAmount(td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); +// +// wad.setTradeGiftAmount(0); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// } +// +// } +// +// // @Test - void addCars2() { - // 车辆类型 - List carTypeList = carTypeDao.selectList(new QueryWrapper()); - // 电池类型 - List btList = batteryTypeDao.selectList(new QueryWrapper()); - // 添加车辆 - String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; - Date d = new Date(); - Date d1 = DateUtil.offsetYear(d, -3); - for (int i = 1761; i < 3009; i++) { - VehicleInfo vi = new VehicleInfo(); - int random = RandomUtil.randomInt(0, carTypeList.size()); - CarType ct = carTypeList.get(random); - vi.setTypeCode(ct.getTypeCode()); - vi.setVinNo(RandomUtil.randomStringUpper(16)); - vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); - vi.setOwnerType(1); - List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper()); - List ucodeList = relationList.stream().map(item -> item.getUcode()).distinct().toList(); - Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); - int randomInt = RandomUtil.randomInt(1, count.intValue() - ucodeList.size()); - WechatUser user = wechatUserDao.selectOne(new QueryWrapper() - .isNull("pcode") - .notIn("wuid", ucodeList) - .last("limit " + randomInt + ", 1")); - vi.setOwnerId(user.getWuid()); - vi.setOwnerName(user.getName()); - vi.setPhone(user.getPhoneNumber()); - vi.setPlateNum("冀AD9" + String.format("%04d", i)); - vi.setEngineNo(RandomUtil.randomStringUpper(20)); - vi.setSeatsCount(RandomUtil.randomInt(2, 6)); - vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); - vi.setCarArea("石家庄市"); - vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); - vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); - vi.setBoardDate(vi.getPurchaseDate()); - vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); - vi.setDelFlag(0); - vi.setCreater("TEST"); - vi.setCtime(new Date()); - vehicleInfoDao.insert(vi); - // 添加人车关联关系 - VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); - relation.setUcode(user.getWuid()); - relation.setUname(user.getName()); - relation.setOpenid(user.getOpenid()); - relation.setPlateNum(vi.getPlateNum()); - relation.setPhone(user.getPhoneNumber()); - relation.setOwnerType(1); - relation.setCreater("TEST"); - relation.setCtime(new Date()); - vehicleWechatUserRelationDao.insert(relation); - - // 添加对应车辆的电池 - BatteryStationDc dc = new BatteryStationDc(); - int randomBtType = RandomUtil.randomInt(0, btList.size()); - BatteryType bt = btList.get(randomBtType); - dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); - dc.setCreater("TEST"); - dc.setProductionDate(vi.getProductionDate()); - dc.setRegistrationDate(vi.getRegistrationDate()); - dc.setSoc(150); - dc.setStatus(1); - dc.setSourceCode(vi.getPlateNum()); - dc.setSourceFrom(2); - dc.setTypeCode(bt.getTypeCode()); - dc.setTypeName(bt.getTypeName()); - dc.setCtime(new Date()); - - batteryStationDcService.add(dc); - } - } - - -// @Test - void addPreOrders() { - System.out.println("======>>开始......"); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper()); - // 2. 按时间、站添加 - Date d = new Date(); - Date d1 = DateUtil.offsetYear(d, -4); - long count = DateUtil.betweenDay(d1, d, true); - int n = 1; - for (int i = 0; i < count; i++) { - Date day = DateUtil.offsetDay(d1, i); - for (int j = 0; j < stationList.size(); j++) { - BatteryStation station = stationList.get(j); - for (int k = 0; k < 84; k++) { - OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); - osbp.setSource(2); - osbp.setSourceId(station.getCode()); - // 车 - VehicleInfo vehicle = vehicleInfoDao.selectOne(new QueryWrapper().last("limit " + n + ", 1")); - // 人 - VehicleWechatUserRelation relation = vehicleWechatUserRelationDao.selectOne(new QueryWrapper() - .eq("plate_num", vehicle.getPlateNum()).last("limit 1")); - osbp.setUcode(relation.getUcode()); - osbp.setUname(relation.getUname()); - osbp.setPlateNum(vehicle.getPlateNum()); - osbp.setPhone(relation.getPhone()); - osbp.setStationCode(station.getCode()); - osbp.setStationName(station.getName()); - osbp.setReservationTime(new Date()); - - orderSwapBatteryPreDao.insert(osbp); - n++; - if (n == 3250) { - n = 1; - } - } - - } - - } - - } - - -// @Test - void addOrders() { - System.out.println("======>>开始......"); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); - // 2. 按时间、站添加 - Date d1 = new Date(); - Date d2 = DateUtil.offsetYear(d1, -4); - long count = DateUtil.betweenDay(d2, d1, true); - for (int i = 0; i < count; i++) { - Date day = DateUtil.offsetDay(DateUtil.offsetYear(new Date(), -4), i); - String dayString = DateUtil.format(day, DatePattern.PURE_DATE_PATTERN); - for (int j = 0; j < stationList.size(); j++) { - BatteryStation station = stationList.get(j); - // 查这天,这个站的预约 - List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper() - .eq("station_code", station.getCode()) - .eq("swap_day", dayString) - .eq("status", 1)); - // 根据预约生成订单 - if (orderPreList.isEmpty()) { - continue; - } - Date orderTime = DateUtil.offsetMinute(DateUtil.offsetHour(DateUtil.beginOfDay(day), 6), RandomUtil.randomInt(1, 60)); - for (int k = 0; k < orderPreList.size(); k++) { - OrderSwapBatteryPre orderPre = orderPreList.get(k); - OrderSwapBattery order = new OrderSwapBattery(); - order.setOrderType(1); - order.setCtime(new Date()); - order.setCreater("TEST"); - order.setOrderPreId(orderPre.getPkId()); - order.setOrderPreUid(orderPre.getUcode()); - order.setOrderPreUname(orderPre.getUname()); - order.setOrderPrePhone(orderPre.getPhone()); - order.setOrderNo(orderNo(station.getCode(), orderTime)); - order.setPlateNum(orderPre.getPlateNum()); - order.setOrderTime(orderTime); - order.setStationCode(orderPre.getStationCode()); - order.setStationName(orderPre.getStationName()); - order.setStatus(1); - order.setFeeType(3); - order.setDelFlag(0); - order.setRemark("测试用的"); - order.setChangeMode(1); - order.setChangeLane(1); - - // 加上费用标准 - order = orderBasicFeeComponent.orderBasicFee(order); - orderSwapBatteryDao.insert(order); - - orderTime = DateUtil.offsetMinute(orderTime, 10); - } - - } - - } - - } - - - 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; - } - -// @Test - void orderHandle1() { - // 挑 1000条订单,取消 - for (int i = 0; i < 2000; i++) { - int randomInt = RandomUtil.randomInt(100, 730000); - OrderSwapBattery one = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("status", 1).last("limit " + randomInt + ", 1")); - OrderSwapBattery order = new OrderSwapBattery(); - order.setPkId(one.getPkId()); - order.setStatus(OrderStatusEnums.CANCLE.getCode()); - orderSwapBatteryDao.updateById(order); - } - - - } - -// @Test - void orderHandle2() { - testClient = mqttService.connect(); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); - Date d1 = new Date(); - Date d2 = DateUtil.offsetYear(DateUtil.offsetDay(d1, -2), -4); - long count = DateUtil.betweenDay(d2, d1, true); - for (int i = 0; i < count; i++) { - Date day = DateUtil.offsetDay(d2, i); - for (int j = 0; j < stationList.size(); j++) { - BatteryStation station = stationList.get(j); - // 查这天,这个站的订单 - List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() - .eq("station_code", station.getCode()) - .eq("status", 1) - .ge("order_time", DateUtil.beginOfDay(day)) - .le("order_time", DateUtil.endOfDay(day))); - if (orderList.isEmpty()) { - continue; - } - // 这个站的电池 - List selectList = batteryStationDcDao.selectList(new QueryWrapper() - .eq("status", 3) - .eq("point_code", station.getCode()) - .eq("del_flag", 0)); - LinkedList dcList = new LinkedList(selectList); - for (int k = 0; k < orderList.size(); k++) { - OrderSwapBattery order = orderList.get(k); - // 反馈订单状态 - // 状态2 - OrderStatus orderStatus = new OrderStatus(); - orderStatus.setOrderNo(order.getOrderNo()); - orderStatus.setStatus(2); - orderStatus.setStatusTime(DateUtil.offsetSecond(order.getOrderTime(), RandomUtil.randomInt(10, 15))); - orderStatusHandle(orderStatus, null, order.getStationCode()); - // 步骤2 - 车辆到达指定位置 - SwapStep swapStep = new SwapStep(); - swapStep.setOrderNo(order.getOrderNo()); - swapStep.setStep(2); - swapStep.setStepTime(DateUtil.offsetSecond(orderStatus.getStatusTime(), RandomUtil.randomInt(30, 35))); - swapStep(swapStep, order.getStationCode()); - // 步骤3 - 启动对中机构 - swapStep.setStep(3); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); - swapStep(swapStep, order.getStationCode()); - // 步骤4 - 取新电池 - swapStep.setStep(4); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); - swapStep(swapStep, order.getStationCode()); - // 步骤5 - 拆旧电池 - swapStep.setStep(5); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(50, 65))); - swapStep(swapStep, order.getStationCode()); - // 步骤6 - 装新电池 - swapStep.setStep(6); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(30, 40))); - swapStep(swapStep, order.getStationCode()); - // 步骤7 - 放旧电池 - swapStep.setStep(7); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(60, 70))); - swapStep(swapStep, order.getStationCode()); - // 状态3 - 换电完成 - try { - Thread.sleep(500L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - orderStatus.setStatus(3); - orderStatus.setStatusTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(5, 10))); - // 电池信息 - // 原电池 - VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", order.getPlateNum())); - BatteryStationDc dc1 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); - // 新电池 - BatteryStationDc dc2 = dcList.removeFirst(); - OrderStatusData statusData = new OrderStatusData(); - statusData.setRentBatNo(dc2.getDccNo()); - statusData.setRentBatCode(dc2.getBatCode()); - statusData.setRentBatSoc(dc2.getSoc()); - statusData.setReturnBatCode(dc1.getBatCode()); - statusData.setReturnBatNo(dc2.getDccNo()); - statusData.setReturnBatSoc(10); - statusData.setReturnBatRentSoc(vi.getBatSoc()); - orderStatusHandle(orderStatus, statusData, order.getStationCode()); - // 状态4 - 开始充电 - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - orderStatus.setStatus(4); - orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(4, 7))); - orderStatusHandle(orderStatus, null, order.getStationCode()); - // 状态5 - 充电完成 - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - orderStatus.setStatus(5); - orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(90, 100))); - OrderStatusData statusData5 = new OrderStatusData(); - statusData5.setBatCode(dc1.getBatCode()); - statusData5.setElectAmount(new BigDecimal(RandomUtil.randomInt(100, 140))); - statusData5.setSoc(100); - orderStatusHandle(orderStatus, statusData5, order.getStationCode()); - - - try { - Thread.sleep(500L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - BatteryStationDc dc3 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); - dcList.addLast(dc3); - } - - } - - } - - - } - - /** - * 反馈订单状态 - */ - private void orderStatusHandle(OrderStatus orderStatus, OrderStatusData statusData, String stationCode) { - orderStatus.setStatusData(statusData); - JSONObject jo = JSONUtil.parseObj(orderStatus); - String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); - MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction()); - -// mqttTestUtil.publishMessage(stationCode, jo, topic, header); - publishMessage(stationCode, jo, topic, header); - - } - - private void publishMessage(String stationCode, JSONObject jo, String topic, MqttMessageHeader header) { - // 1. 获取AES - JSONObject aesJo = getAESKey(stationCode); - SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, aesJo.getStr("aesSecretKey").getBytes(), aesJo.getStr("aesIv").getBytes()); - // 2. 数据 - MyMqttMessage message = new MyMqttMessage(); - message.setHeader(header); - message.setDataBody(jo); - String encrypt = aes.encryptBase64(JSONUtil.toJsonStr(message)); - // 3. 发送MQTT消息 - mqttService.publish(testClient, encrypt, topic); - } - - /** - * 获取AES秘钥和IV - * @param stationCode - * @return - */ - public JSONObject getAESKey(String stationCode) { - JSONObject jo = new JSONObject(); - Object o1 = null; - try { - o1 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key"); - } catch (Exception e) { - e.printStackTrace(); - } - Object o2 = null; - try { - o2 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv"); - } catch (Exception e) { - e.printStackTrace(); - } - if (!ObjectUtil.isEmpty(o1) && !ObjectUtil.isEmpty(o2)) { - jo.set("aesSecretKey", o1.toString()); - jo.set("aesIv", o2.toString()); -// jo.set("encryptKey", o1.toString()); -// jo.set("encryptVector", o2.toString()); - return jo; - } - BatteryStationSecretKey bssk = batteryStationSecretKeyDao.selectOne(new QueryWrapper().eq("type", 2).eq("station_code", stationCode)); - if (bssk == null) { - throw new RuntimeException("AES秘钥未获取到,请站端重新登陆!"); -// return setAesKey(stationCode); - } - redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key", bssk.getPublicKey()); - redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv", bssk.getPrivateKey()); - jo.set("aesSecretKey", o1.toString()); - jo.set("aesIv", o2.toString()); -// jo.set("encryptKey", o1.toString()); -// jo.set("encryptVector", o2.toString()); - return jo; - } - - /** - * 反馈换电步骤 - */ - private void swapStep(SwapStep swapStep, String stationCode) { - JSONObject jo = JSONUtil.parseObj(swapStep); - - String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); - MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_SWAPSTEP.getFunction()); - - publishMessage(stationCode, jo, topic, header); - } - - - /** - * 添加钱包 - */ -// @Test - void addWallet1() { - System.out.println("======>>开始c......"); - // 1. 公司账户钱包 - // 查询公司 - List companyList = companyDao.selectList(new QueryWrapper()); - for (int i = 0; i < companyList.size(); i++) { - Company c = companyList.get(i); - WalletAccount wa = new WalletAccount(); - wa.setOwnerType(2); - wa.setOwnerId(c.getCcode()); - wa.setStatus(1); - walletAccountService.add(wa); - // 假装充值 - // 交易 - wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(c.getCname()); - td.setTraderCode(c.getCcode()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - td.setDescription("TEST-假装公司充值交易"); - td.setOutTradeNo(CommonUtil.payTradeNo(1)); - td.setTradeType(1); - td.setTradeAmount(RandomUtil.randomInt(100000000, 950000000)); - td.setPayType(4); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); - - wad.setTradeGiftAmount(0); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - } - - } - - - /** - * 添加钱包 - */ -// @Test - void addWallet2() { - System.out.println("======>>开始c......"); - // 1. 个人账户钱包 - // 查询人 - Long count = wechatUserDao.selectCount(new QueryWrapper()); - for (int i = 0; i < count; i++) { - int offset = 1 + i; - WechatUser user = wechatUserDao.selectOne(new QueryWrapper().last("limit " + offset + ", 1")); - boolean exists = walletAccountDao.exists(new QueryWrapper().eq("owner_id", user.getWuid())); - if (exists) { - continue; - } - WalletAccount wa = new WalletAccount(); - wa.setOwnerType(1); - wa.setOwnerId(user.getWuid()); - wa.setStatus(1); - walletAccountService.add(wa); - // 假装充值 - // 交易 - wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", user.getWuid())); - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(user.getName()); - td.setTraderCode(user.getWuid()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - td.setDescription("TEST-假装个人充值交易"); - td.setOutTradeNo(CommonUtil.payTradeNo(1)); - td.setTradeType(1); - td.setTradeAmount(RandomUtil.randomInt(20000000, 150000000)); - td.setPayType(4); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); - - wad.setTradeGiftAmount(0); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - } - - } - - - @Test - void calFee() { - // 计算订单费用 - System.out.println("\r\n===>>>开始查找订单计算费用"); - // 查询状态为5的订单 - Boolean flag = true; - int n = 0; - while (flag) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() - .eq("status", 5).ne("del_flag", 1) - .ge("order_time", "2024-10-01 00:00:00") - .le("order_time", "2025-01-01 00:00:00") - .last("limit 1")); - if (order == null) { - flag = false; - } else { - System.out.println("\r\n===>>>订单号:" + order.getOrderNo()); - Result res = orderSwapBatteryService.calculateCost(order); - if ( CodeMsg.SUCCESS.getCode().equals(res.getCode())) { - n += 1; - } - } - } - - System.out.println("\r\n===>>>订单计算费用完成:" + n + " 条数据"); - } - - - -// @Test - void payOrder() { - // 支付订单 - System.out.println("\r\n===>>>开始查找订单计算费用"); - Boolean flag = true; - while (flag) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() - .eq("status", 6).ne("del_flag", 1) - .ge("order_time", "2024-01-01 00:00:00") - .le("order_time", "2024-07-01 00:00:00") - .last("limit 1")); - if (order == null) { - flag = false; - return; - } - if (order.getAmount() <= 0) { - return; - } - String plateNum = order.getPlateNum(); - VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", plateNum)); - if (vi.getOwnerType() == 1) { - System.out.println("---111---"); - // 1. 个人订单 - wallatPayOrder(order); - } else if (vi.getOwnerType() == 2) { - System.out.println("---222---"); - // 公司订单 - Company c = companyDao.selectOne(new QueryWrapper().eq("ccode", vi.getCcode())); - if (c == null) { - return; - } - wallatPayOrderCompany(order, c); - } - } - } - - private void wallatPayOrderCompany(OrderSwapBattery order, Company c) { - // 公司车辆 - List viList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", c.getCcode())); - List plateNumList = viList.stream().map(item -> item.getPlateNum()).toList(); - // 找该公司今天的订单 一块支付 - Date begin = DateUtil.beginOfDay(order.getOrderTime()); - Date end = DateUtil.offsetDay(begin, 1); - List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() - .eq("status", 6).ne("del_flag", 1) - .ge("order_time", begin) - .le("order_time", end) - .in("plate_num", plateNumList)); - - // 公司钱包 - WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); - if (wa == null) { - return; - } - // 假装余额支付 - // 交易 - Integer amount = orderList.stream().collect(Collectors.summingInt(OrderSwapBattery::getAmount)); - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(c.getCname()); - td.setTraderCode(c.getCcode()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - String ddd = DateUtil.format(begin, DatePattern.PURE_DATE_PATTERN); - td.setDescription("TEST-假装余额支付公司车辆 " + ddd + " 订单"); - td.setOutTradeNo(CommonUtil.payTradeNo(2)); - td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); - td.setTradeAmount(amount); - td.setPayType(1); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setTradeRechargeAmount(-td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); - - wad.setCreater("TEST"); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - - // 交易订单关系 - List list = new ArrayList(); - for (int i = 0; i < orderList.size(); i++) { - PreOrderRelationSwapOrder relationOrder = new PreOrderRelationSwapOrder(); - relationOrder.setPayApiType(null); - relationOrder.setOrderNo(orderList.get(i).getOrderNo()); - relationOrder.setCtime(d); - relationOrder.setDescription(td.getDescription()); - relationOrder.setOutTradeNo(td.getOutTradeNo()); - list.add(relationOrder); - } - preOrderRelationSwapOrderDao.insert(list); - - // 修改订单 - List idList = orderList.stream().map(i -> i.getPkId()).toList(); - orderSwapBatteryDao.update(new UpdateWrapper().in("pk_id", idList) - .set("status", OrderStatusEnums.FINISH.getCode()) - .set("trade_no", td.getOutTradeNo())); - } - - - - - private void wallatPayOrder(OrderSwapBattery order) { - // 付款人 - String wuid = order.getOrderPreUid(); - WechatUser user = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wuid)); - // 付款人钱包 - WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", wuid)); - if (wa == null) { - return; - } - // 假装余额支付 - // 交易 - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(user.getName()); - td.setTraderCode(user.getWuid()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - td.setDescription("TEST-假装余额支付订单"); - td.setOutTradeNo(CommonUtil.payTradeNo(2)); - td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); - td.setTradeAmount(order.getAmount()); - td.setPayType(1); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setOrderNo(order.getOrderNo()); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setTradeRechargeAmount(-td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); - - wad.setCreater("TEST"); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - - // 修改订单 - afterPayAlterOrder(td, order); - } - - private void afterPayAlterOrder(TradeDetail tradeDetail, OrderSwapBattery one) { - OrderSwapBattery osb = new OrderSwapBattery(); - osb.setPkId(one.getPkId()); - osb.setStatus(OrderStatusEnums.FINISH.getCode()); - osb.setTradeNo(tradeDetail.getOutTradeNo()); - orderSwapBatteryDao.updateById(osb); - } - - -} +// void calFee() { +// // 计算订单费用 +// System.out.println("\r\n===>>>开始查找订单计算费用"); +// // 查询状态为5的订单 +// Boolean flag = true; +// int n = 0; +// while (flag) { +// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() +// .eq("status", 5).ne("del_flag", 1) +// .ge("order_time", "2024-10-01 00:00:00") +// .le("order_time", "2025-01-01 00:00:00") +// .last("limit 1")); +// if (order == null) { +// flag = false; +// } else { +// System.out.println("\r\n===>>>订单号:" + order.getOrderNo()); +// Result res = orderSwapBatteryService.calculateCost(order); +// if ( CodeMsg.SUCCESS.getCode().equals(res.getCode())) { +// n += 1; +// } +// } +// } +// +// System.out.println("\r\n===>>>订单计算费用完成:" + n + " 条数据"); +// } +// +// +// +//// @Test +// void payOrder() { +// // 支付订单 +// System.out.println("\r\n===>>>开始查找订单计算费用"); +// Boolean flag = true; +// while (flag) { +// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() +// .eq("status", 6).ne("del_flag", 1) +// .ge("order_time", "2024-01-01 00:00:00") +// .le("order_time", "2024-07-01 00:00:00") +// .last("limit 1")); +// if (order == null) { +// flag = false; +// return; +// } +// if (order.getAmount() <= 0) { +// return; +// } +// String plateNum = order.getPlateNum(); +// VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", plateNum)); +// if (vi.getOwnerType() == 1) { +// System.out.println("---111---"); +// // 1. 个人订单 +// wallatPayOrder(order); +// } else if (vi.getOwnerType() == 2) { +// System.out.println("---222---"); +// // 公司订单 +// Company c = companyDao.selectOne(new QueryWrapper().eq("ccode", vi.getCcode())); +// if (c == null) { +// return; +// } +// wallatPayOrderCompany(order, c); +// } +// } +// } +// +// private void wallatPayOrderCompany(OrderSwapBattery order, Company c) { +// // 公司车辆 +// List viList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", c.getCcode())); +// List plateNumList = viList.stream().map(item -> item.getPlateNum()).toList(); +// // 找该公司今天的订单 一块支付 +// Date begin = DateUtil.beginOfDay(order.getOrderTime()); +// Date end = DateUtil.offsetDay(begin, 1); +// List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() +// .eq("status", 6).ne("del_flag", 1) +// .ge("order_time", begin) +// .le("order_time", end) +// .in("plate_num", plateNumList)); +// +// // 公司钱包 +// WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); +// if (wa == null) { +// return; +// } +// // 假装余额支付 +// // 交易 +// Integer amount = orderList.stream().collect(Collectors.summingInt(OrderSwapBattery::getAmount)); +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(c.getCname()); +// td.setTraderCode(c.getCcode()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// String ddd = DateUtil.format(begin, DatePattern.PURE_DATE_PATTERN); +// td.setDescription("TEST-假装余额支付公司车辆 " + ddd + " 订单"); +// td.setOutTradeNo(CommonUtil.payTradeNo(2)); +// td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); +// td.setTradeAmount(amount); +// td.setPayType(1); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setTradeRechargeAmount(-td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); +// +// wad.setCreater("TEST"); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// +// // 交易订单关系 +// List list = new ArrayList(); +// for (int i = 0; i < orderList.size(); i++) { +// PreOrderRelationSwapOrder relationOrder = new PreOrderRelationSwapOrder(); +// relationOrder.setPayApiType(null); +// relationOrder.setOrderNo(orderList.get(i).getOrderNo()); +// relationOrder.setCtime(d); +// relationOrder.setDescription(td.getDescription()); +// relationOrder.setOutTradeNo(td.getOutTradeNo()); +// list.add(relationOrder); +// } +// preOrderRelationSwapOrderDao.insert(list); +// +// // 修改订单 +// List idList = orderList.stream().map(i -> i.getPkId()).toList(); +// orderSwapBatteryDao.update(new UpdateWrapper().in("pk_id", idList) +// .set("status", OrderStatusEnums.FINISH.getCode()) +// .set("trade_no", td.getOutTradeNo())); +// } +// +// +// +// +// private void wallatPayOrder(OrderSwapBattery order) { +// // 付款人 +// String wuid = order.getOrderPreUid(); +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wuid)); +// // 付款人钱包 +// WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", wuid)); +// if (wa == null) { +// return; +// } +// // 假装余额支付 +// // 交易 +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(user.getName()); +// td.setTraderCode(user.getWuid()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// td.setDescription("TEST-假装余额支付订单"); +// td.setOutTradeNo(CommonUtil.payTradeNo(2)); +// td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); +// td.setTradeAmount(order.getAmount()); +// td.setPayType(1); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setOrderNo(order.getOrderNo()); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setTradeRechargeAmount(-td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); +// +// wad.setCreater("TEST"); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// +// // 修改订单 +// afterPayAlterOrder(td, order); +// } +// +// private void afterPayAlterOrder(TradeDetail tradeDetail, OrderSwapBattery one) { +// OrderSwapBattery osb = new OrderSwapBattery(); +// osb.setPkId(one.getPkId()); +// osb.setStatus(OrderStatusEnums.FINISH.getCode()); +// osb.setTradeNo(tradeDetail.getOutTradeNo()); +// orderSwapBatteryDao.updateById(osb); +// } +// +// +//} diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java index 6f8c05a..a98973c 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java @@ -1,7 +1,8 @@ package com.evotech.hd.gateway.oauth2; -import java.nio.charset.Charset; - +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.enums.CodeMsg; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -11,13 +12,10 @@ import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.server.authorization.ServerAccessDeniedHandler; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; - -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.enums.CodeMsg; - -import cn.hutool.json.JSONUtil; import reactor.core.publisher.Mono; +import java.nio.charset.Charset; + /** * 自定义 oauth2默认权限校验 异常时的处理, @@ -43,7 +41,7 @@ public class MyAccessDeniedHandler implements ServerAccessDeniedHandler { response.getHeaders().add("Access-Control-Allow-Credentials", "true"); response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); response.getHeaders().add("Access-Control-Allow-Headers", HttpHeaders.AUTHORIZATION); - String body= JSONUtil.toJsonStr(new Result().bussinessException(CodeMsg.ACCESS_DENY.getCode(), CodeMsg.ACCESS_DENY.getMsg(), e.getMessage())); + String body= JSONUtil.toJsonStr(new Result().businessException(CodeMsg.ACCESS_DENY.getCode(), CodeMsg.ACCESS_DENY.getMsg(), e.getMessage())); DataBuffer buffer = response.bufferFactory().wrap(body.getBytes(Charset.forName("UTF-8"))); return response.writeWith(Mono.just(buffer)); } diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java index 2049a50..eab45bd 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java @@ -1,6 +1,11 @@ package com.evotech.hd.gateway.oauth2; -import java.nio.charset.Charset; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.gateway.utils.TokenUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -13,16 +18,10 @@ import org.springframework.security.oauth2.jwt.JwtValidationException; import org.springframework.security.oauth2.server.resource.InvalidBearerTokenException; import org.springframework.security.web.server.ServerAuthenticationEntryPoint; import org.springframework.web.server.ServerWebExchange; - -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.gateway.utils.TokenUtil; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.json.JSONUtil; -import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Mono; +import java.nio.charset.Charset; + /** * 自定义Token异常,主要处理token验证过程中的异常,因token验证是oauth2的,所以要改它的异常处理响应 * 这个主要处理身份认证(authentication)的异常 @@ -30,7 +29,7 @@ import reactor.core.publisher.Mono; * 参考{@link org.springframework.security.oauth2.server.resource.web.server.BearerTokenServerAuthenticationEntryPoint} * 重写了返回结果中的response内容: * 1. response的HttpStatus改成ok - * 2. response返回内容改成{@link com.jdyl.medical.common.entity.Result} + * 2. response返回内容改成{@link com.evotech.hd.common.core.Dto.Result} * @author zrb * @date 2024年9月4日10:21:02 */ @@ -51,25 +50,25 @@ public class MyAuthenticationEntryPoint implements ServerAuthenticationEntryPoin if (cause.getMessage().contains("Jwt expired at")) { String token = exchange.getRequest().getHeaders().getFirst("Authorization").substring(7); String dateTime = DateUtil.formatDateTime(TokenUtil.getExp(token)); - res = new Result().bussinessException(CodeMsg.TOKEN_EXPIRED.getCode(), CodeMsg.TOKEN_EXPIRED.getMsg(), "Jwt expired at " + dateTime); + res = new Result().businessException(CodeMsg.TOKEN_EXPIRED.getCode(), CodeMsg.TOKEN_EXPIRED.getMsg(), "Jwt expired at " + dateTime); } else { - res = new Result().error(CodeMsg.TOKEN_INVALID.getCode(), CodeMsg.TOKEN_INVALID.getMsg(), cause.getMessage()); + res = new Result().error(CodeMsg.TOKEN_INVALID, cause.getMessage()); } } else if (cause instanceof BadJwtException || cause instanceof JwtEncodingException) { // System.out.println("22"); - res = new Result().error(CodeMsg.TOKEN_INVALID.getCode(), CodeMsg.TOKEN_INVALID.getMsg(), cause.getMessage()); + res = new Result().error(CodeMsg.TOKEN_INVALID,cause.getMessage()); } else if (cause instanceof InvalidBearerTokenException) { // System.out.println("33"); String token = exchange.getRequest().getHeaders().getFirst("Authorization").substring(7); String dateTime = DateUtil.formatDateTime(TokenUtil.getExp(token)); - res = new Result().bussinessException(CodeMsg.TOKEN_EXPIRED.getCode(), CodeMsg.TOKEN_EXPIRED.getMsg(), "Jwt expired at " + dateTime); + res = new Result().businessException(CodeMsg.TOKEN_EXPIRED.getCode(), CodeMsg.TOKEN_EXPIRED.getMsg(), "Jwt expired at " + dateTime); } else { - res = new Result().error(CodeMsg.AUTHENTICATION_FAILED.getCode(), CodeMsg.AUTHENTICATION_FAILED.getMsg(), e.getMessage()); + res = new Result().error(CodeMsg.AUTHENTICATION_FAILED, e.getMessage()); } } catch (Exception e1) { // System.out.println("99"); log.info(e1.toString()); - res = new Result().error(CodeMsg.AUTHENTICATION_FAILED.getCode(), CodeMsg.AUTHENTICATION_FAILED.getMsg(), e.getMessage()); + res = new Result().error(CodeMsg.AUTHENTICATION_FAILED, e.getMessage()); } // System.out.println("100"); response.setStatusCode(HttpStatus.OK); diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java index b16f98f..ea6760f 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java @@ -1,14 +1,12 @@ package com.evotech.hd.gateway.oauth2.exception; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; import org.springframework.security.oauth2.core.OAuth2AuthorizationException; import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.ExceptionHandler; -import com.evotech.hd.common.core.entity.Result; - -import cn.hutool.json.JSONUtil; - /** * 统一异常 @@ -33,7 +31,7 @@ public class GlobalExceptionType { public Result oAuth2AuthorizationHandle(OAuth2AuthorizationException e) { e.printStackTrace(); OAuth2Error error = e.getError(); - return new Result().bussinessException(error.getErrorCode(), error.getDescription(), JSONUtil.isTypeJSON(error.getUri())?JSONUtil.parseObj(error.getUri()):error.getUri()); + return new Result().businessException(error.getErrorCode(), error.getDescription(), JSONUtil.isTypeJSON(error.getUri())?JSONUtil.parseObj(error.getUri()).toString():error.getUri()); } diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/utils/ResponseUtils.java b/gateway-server/src/main/java/com/evotech/hd/gateway/utils/ResponseUtils.java index e8c7bdb..fdfe85c 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/utils/ResponseUtils.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/utils/ResponseUtils.java @@ -1,19 +1,16 @@ package com.evotech.hd.gateway.utils; import cn.hutool.json.JSONUtil; - -import java.nio.charset.StandardCharsets; - +import com.evotech.hd.common.core.Dto.Result; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpResponse; - -import com.evotech.hd.common.core.entity.Result; - import reactor.core.publisher.Mono; +import java.nio.charset.StandardCharsets; + public class ResponseUtils { diff --git a/pom.xml b/pom.xml index 0f408a6..cb8065e 100644 --- a/pom.xml +++ b/pom.xml @@ -164,5 +164,5 @@ resource-server wechat-server admin-server - + \ No newline at end of file diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/AdmdvsInfoController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/AdmdvsInfoController.java index 51506f5..3b43b1d 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/AdmdvsInfoController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/AdmdvsInfoController.java @@ -1,21 +1,19 @@ package com.evotech.hd.resource.controller; -import java.util.List; - +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.resource.dict.AdmdvsInfo; +import com.evotech.hd.resource.entity.request.ListAdmdvsRequest; +import com.evotech.hd.resource.service.AdmdvsInfoService; +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.common.core.entity.Result; -import com.evotech.hd.common.core.entity.resource.dict.AdmdvsInfo; -import com.evotech.hd.resource.entity.request.ListAdmdvsRequest; -import com.evotech.hd.resource.service.AdmdvsInfoService; -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 java.util.List; @Tag(name = "行政区划") @RestController diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java index 88b58aa..1658c9e 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/AuthUserController.java @@ -1,5 +1,6 @@ package com.evotech.hd.resource.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthUser; import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole; @@ -31,35 +32,35 @@ public class AuthUserController { @GetMapping("/userbyname") @Operation(summary = "登陆用查询接口", hidden = true) - public com.evotech.hd.common.core.entity.Result userByName(@RequestParam("uname") String uname) { + public Result userByName(@RequestParam("uname") String uname) { return authUserService.userByName(uname); } @Operation(summary = "增加") @PostMapping("/add") @ApiOperationSupport(order = 1) - public com.evotech.hd.common.core.entity.Result add(@Valid @ParameterObject AuthUser user) { + public Result add(@Valid @ParameterObject AuthUser user) { return authUserService.add(user); } @Operation(summary = "删除") @PostMapping("/del") @ApiOperationSupport(order = 2) - public com.evotech.hd.common.core.entity.Result delete(@NotNull String uid) { + public Result delete(@NotNull String uid) { return authUserService.delete(uid); } @Operation(summary = "修改") @PostMapping({"/update"}) @ApiOperationSupport(order = 3) - public com.evotech.hd.common.core.entity.Result update(@ParameterObject AuthUser u) { + public Result update(@ParameterObject AuthUser u) { return authUserService.update(u); } @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 4) - public com.evotech.hd.common.core.entity.Result> list(@ParameterObject ListUserRequest lur) { + public Result> list(@ParameterObject ListUserRequest lur) { return authUserService.list(lur); } @@ -67,21 +68,21 @@ public class AuthUserController { @Operation(summary = "用户分配角色") @PostMapping("/adduserrole") @ApiOperationSupport(order = 5) - public com.evotech.hd.common.core.entity.Result addUserRole(@Valid @ParameterObject AuthUserRole aur) { + public Result addUserRole(@Valid @ParameterObject AuthUserRole aur) { return authUserService.addUserRole(aur); } @Operation(summary = "用户删除角色") @PostMapping("/deluserrole") @ApiOperationSupport(order = 6) - public com.evotech.hd.common.core.entity.Result deleteUserRole(@RequestParam @NotBlank String uid, @RequestParam String rid) { + public Result deleteUserRole(@RequestParam @NotBlank String uid, @RequestParam String rid) { return authUserService.deleteUserRole(uid, rid); } @Operation(summary = "用户分配站") @PostMapping("/adduserstation") @ApiOperationSupport(order = 5) - public com.evotech.hd.common.core.entity.Result addUserRole(@RequestParam @NotBlank String uid, @RequestParam String stationIds) { + public Result addUserRole(@RequestParam @NotBlank String uid, @RequestParam String stationIds) { return authUserService.addUserStation(stationIds, uid); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/BatteryTypeController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/BatteryTypeController.java index 318d4dd..4125981 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/BatteryTypeController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/BatteryTypeController.java @@ -1,25 +1,22 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.BatteryType; import com.evotech.hd.resource.service.BatteryTypeService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "电池型号") @RestController @@ -55,7 +52,7 @@ public class BatteryTypeController { @Operation(summary = "查询类型") @GetMapping("/list") @ApiOperationSupport(order = 4) - public Result> list(@Valid @ParameterObject BasePageRequest bpr) { + public Result> list(@Valid @ParameterObject BasePageRequest bpr) { return batteryTypeService.list(bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/CarTypeController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/CarTypeController.java index 9237ec2..e3f5e8a 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/CarTypeController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/CarTypeController.java @@ -1,25 +1,22 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.CarType; import com.evotech.hd.resource.service.CarTypeService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "车辆类型") @RestController @@ -56,7 +53,7 @@ public class CarTypeController { @Operation(summary = "查询类型") @GetMapping("/list") @ApiOperationSupport(order = 4) - public Result> list(@Valid @ParameterObject BasePageRequest bpr) { + public Result> list(@Valid @ParameterObject BasePageRequest bpr) { return carTypeService.list(bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/DictController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/DictController.java index 09a31d6..d036516 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/DictController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/DictController.java @@ -1,15 +1,7 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.request.ListDictRequest; import com.evotech.hd.common.core.entity.resource.dict.Dict; import com.evotech.hd.common.core.entity.resource.dict.DictType; @@ -18,12 +10,15 @@ import com.evotech.hd.resource.entity.request.ListDictTypeRequest; import com.evotech.hd.resource.service.DictService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @Tag(name = "字典管理") @ApiSupport(order = 100) @@ -59,7 +54,7 @@ public class DictController { @Operation(summary = "查询类型") @GetMapping("/listtype") @ApiOperationSupport(order = 4) - public Result> listType(@ParameterObject ListDictTypeRequest ldtr) { + public Result> listType(@ParameterObject ListDictTypeRequest ldtr) { return dictService.listType(ldtr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/FileUpLoadController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/FileUpLoadController.java index f316090..42ad42f 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/FileUpLoadController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/FileUpLoadController.java @@ -1,29 +1,21 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; - -import com.evotech.hd.common.core.entity.Result; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.LogUpload; import com.evotech.hd.common.core.entity.resource.UploadFile; import com.evotech.hd.resource.entity.request.ListFileRequest; import com.evotech.hd.resource.service.FileUpLoadService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "上传接口") @ApiSupport(order = 150) @@ -38,7 +30,7 @@ public class FileUpLoadController { @Operation(summary = "文件查询") @GetMapping("/pagelistfile") @ApiOperationSupport(order = 3) - public Result> listFile(@Valid @ParameterObject ListFileRequest lfr) { + public Result> listFile(@Valid @ParameterObject ListFileRequest lfr) { return fileUpLoadService.listFile(lfr); } @@ -52,7 +44,7 @@ public class FileUpLoadController { @Operation(summary = "上传历史查询") @GetMapping("/uploadslog") @ApiOperationSupport(order = 1) - public Result> list(@ParameterObject ListFileRequest lfr) { + public Result> list(@ParameterObject ListFileRequest lfr) { return fileUpLoadService.list(lfr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/LogLoginController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/LogLoginController.java index 201c390..35b57d8 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/LogLoginController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/LogLoginController.java @@ -1,24 +1,17 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.LogLogin; import com.evotech.hd.resource.service.LogLoginService; 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.springframework.web.bind.annotation.*; @Tag(name = "登录日志") @ApiSupport(order = 106) @@ -41,7 +34,7 @@ public class LogLoginController { @Operation(summary = "查询") @GetMapping("/list") - public Result> list(@Valid BasePageRequest bpr) { + public Result> list(@Valid BasePageRequest bpr) { return logLoginService.list(bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/LoginInfoController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/LoginInfoController.java index a2219ad..f038f92 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/LoginInfoController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/LoginInfoController.java @@ -1,17 +1,15 @@ package com.evotech.hd.resource.controller; -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.common.core.Dto.Result; import com.evotech.hd.common.core.entity.LoginCacheInfo; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.resource.service.LoginInfoService; - 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 org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "登陆所需记录信息") @RestController diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/MenuController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/MenuController.java index 3246c8f..f8aa36e 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/MenuController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/MenuController.java @@ -1,24 +1,22 @@ package com.evotech.hd.resource.controller; -import java.util.List; - +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.resource.auth.AuthMenu; +import com.evotech.hd.resource.service.MenuService; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import org.springdoc.core.annotations.ParameterObject; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.resource.auth.AuthMenu; -import com.evotech.hd.resource.service.MenuService; -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 java.util.List; @Tag(name = "菜单管理") @ApiSupport(order = 103) diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/PermissionController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/PermissionController.java index d9dccb8..2fab865 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/PermissionController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/PermissionController.java @@ -1,24 +1,22 @@ package com.evotech.hd.resource.controller; -import java.util.List; - +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.resource.auth.AuthPermission; +import com.evotech.hd.resource.service.PermissionService; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import org.springdoc.core.annotations.ParameterObject; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.resource.auth.AuthPermission; -import com.evotech.hd.resource.service.PermissionService; -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 java.util.List; @Tag(name = "权限管理") @ApiSupport(order = 104) diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java index d2575fd..071998d 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java @@ -1,5 +1,6 @@ package com.evotech.hd.resource.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.resource.entity.request.PageListProxyOperaterRequest; @@ -28,28 +29,28 @@ public class ProxyOperaterController { @Operation(summary = "增加") @PostMapping("/add") @ApiOperationSupport(order = 1) - public com.evotech.hd.common.core.entity.Result add(@Valid @ParameterObject ProxyOperater po) { + public Result add(@Valid @ParameterObject ProxyOperater po) { return proxyOperaterService.add(po); } @Operation(summary = "删除") @PostMapping("/del") @ApiOperationSupport(order = 2) - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { return proxyOperaterService.delete(id); } @Operation(summary = "修改") @PostMapping({"/update"}) @ApiOperationSupport(order = 3) - public com.evotech.hd.common.core.entity.Result update(@ParameterObject ProxyOperater po) { + public Result update(@ParameterObject ProxyOperater po) { return proxyOperaterService.update(po); } @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 4) - public com.evotech.hd.common.core.entity.Result> list(@ParameterObject PageListProxyOperaterRequest plpor) { + public Result> list(@ParameterObject PageListProxyOperaterRequest plpor) { return proxyOperaterService.list(plpor); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/RoleController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/RoleController.java index a3179a7..b227d78 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/RoleController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/RoleController.java @@ -1,26 +1,20 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthRole; import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; import com.evotech.hd.resource.entity.request.DelAddRoleSourceRequest; import com.evotech.hd.resource.service.RoleService; 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 = "角色管理") @RestController diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/StationTypeController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/StationTypeController.java index e047e00..7fe7930 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/StationTypeController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/StationTypeController.java @@ -1,25 +1,22 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.resource.entity.StationType; import com.evotech.hd.resource.service.StationTypeService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "换电站型号") @RestController @@ -55,7 +52,7 @@ public class StationTypeController { @Operation(summary = "查询类型") @GetMapping("/list") @ApiOperationSupport(order = 4) - public Result> list(@Valid @ParameterObject BasePageRequest bpr) { + public Result> list(@Valid @ParameterObject BasePageRequest bpr) { return stationTypeService.list(bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/SystemManagerController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/SystemManagerController.java index e585e05..3cdbc6c 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/SystemManagerController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/SystemManagerController.java @@ -1,22 +1,20 @@ package com.evotech.hd.resource.controller; -import java.util.List; - +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.resource.entity.SystemManager; +import com.evotech.hd.resource.service.SystemManagerService; +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.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.resource.entity.SystemManager; -import com.evotech.hd.resource.service.SystemManagerService; -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 java.util.List; @Tag(name = "系统管理方") @RestController diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/UtilController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/UtilController.java index 6ff11d9..f885e1c 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/UtilController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/UtilController.java @@ -1,21 +1,19 @@ package com.evotech.hd.resource.controller; -import java.util.ArrayList; -import java.util.List; - +import cn.hutool.http.HttpUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.utils.SnowflakeUtil; +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 org.springframework.beans.factory.annotation.Value; 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.common.core.entity.Result; -import com.evotech.hd.common.core.utils.SnowflakeUtil; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import com.github.xiaoymin.knife4j.annotations.ApiSupport; - -import cn.hutool.http.HttpUtil; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.ArrayList; +import java.util.List; @Tag(name = "工具类") @ApiSupport(order = 199) @@ -45,7 +43,7 @@ public class UtilController { @ApiOperationSupport(order = 2) public Result getIp() { String res = HttpUtil.get(ipUrl); - return new Result().success("OK", res.trim()); + return new Result().success(res.trim()); } } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatAgreementController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatAgreementController.java index 296d249..8c95bbe 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatAgreementController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatAgreementController.java @@ -1,25 +1,19 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatAgreement; import com.evotech.hd.resource.service.WechatAgreementService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @Tag(name = "微信协议") @RestController diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatSwiperController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatSwiperController.java index 266b73d..90bc210 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatSwiperController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/WechatSwiperController.java @@ -1,25 +1,19 @@ package com.evotech.hd.resource.controller; -import java.util.List; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatSwiper; import com.evotech.hd.resource.service.WechatSwiperService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @Tag(name = "微信轮播图") @RestController diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/AdmdvsInfoService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/AdmdvsInfoService.java index 9186dc7..3bb8444 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/AdmdvsInfoService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/AdmdvsInfoService.java @@ -1,11 +1,11 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.dict.AdmdvsInfo; import com.evotech.hd.resource.entity.request.ListAdmdvsRequest; +import java.util.List; + public interface AdmdvsInfoService { public Result> treeListAdmdvs(ListAdmdvsRequest lar); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java index ada55a5..cc340aa 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/AuthUserService.java @@ -1,5 +1,6 @@ package com.evotech.hd.resource.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthUser; import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole; @@ -10,21 +11,21 @@ import java.util.List; public interface AuthUserService { - public com.evotech.hd.common.core.entity.Result userByName(String uname); + public Result userByName(String uname); - public com.evotech.hd.common.core.entity.Result add(AuthUser u); + public Result add(AuthUser u); - public com.evotech.hd.common.core.entity.Result delete(String uid); + public Result delete(String uid); - public com.evotech.hd.common.core.entity.Result update(AuthUser u); + public Result update(AuthUser u); - public com.evotech.hd.common.core.entity.Result> list(ListUserRequest lur); + public Result> list(ListUserRequest lur); - public com.evotech.hd.common.core.entity.Result addUserRole(AuthUserRole aur); + public Result addUserRole(AuthUserRole aur); - public com.evotech.hd.common.core.entity.Result deleteUserRole(String uid, String rid); + public Result deleteUserRole(String uid, String rid); - public com.evotech.hd.common.core.entity.Result addUserStation(String stationIds, String uid); + public Result addUserStation(String stationIds, String uid); public Result> loadUserStation(String uid); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/BatteryTypeService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/BatteryTypeService.java index 506e138..34757e7 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/BatteryTypeService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/BatteryTypeService.java @@ -1,9 +1,8 @@ package com.evotech.hd.resource.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.BatteryType; public interface BatteryTypeService { @@ -14,6 +13,6 @@ public interface BatteryTypeService { public Result update(BatteryType bt); - public Result> list(BasePageRequest bpr); + public Result> list(BasePageRequest bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/CarTypeService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/CarTypeService.java index 7b6caaf..6bafe4f 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/CarTypeService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/CarTypeService.java @@ -1,9 +1,8 @@ package com.evotech.hd.resource.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.CarType; public interface CarTypeService { @@ -14,6 +13,6 @@ public interface CarTypeService { public Result update(CarType ct); - public Result> list(BasePageRequest bpr); + public Result> list(BasePageRequest bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java index 5398bf0..e134aad 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/DictService.java @@ -1,6 +1,7 @@ package com.evotech.hd.resource.service; -import com.evotech.hd.common.core.entity.Result; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.request.ListDictRequest; import com.evotech.hd.common.core.entity.resource.dict.Dict; import com.evotech.hd.common.core.entity.resource.dict.DictType; @@ -17,7 +18,7 @@ public interface DictService { public Result updateType(DictType dt); - public Result> listType(ListDictTypeRequest ldtr); + public Result> listType(ListDictTypeRequest ldtr); public Result addDict(Dict d); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/FileUpLoadService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/FileUpLoadService.java index f995fd6..71c6007 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/FileUpLoadService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/FileUpLoadService.java @@ -1,21 +1,19 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import org.springframework.web.multipart.MultipartFile; - -import com.evotech.hd.common.core.entity.Result; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.LogUpload; import com.evotech.hd.common.core.entity.resource.UploadFile; import com.evotech.hd.resource.entity.request.ListFileRequest; +import org.springframework.web.multipart.MultipartFile; public interface FileUpLoadService { - public Result> listFile(ListFileRequest lfr); + public Result> listFile(ListFileRequest lfr); public Result filesUpLoad(MultipartFile[] fileArr, String ccode, String pocode, String type, String user, Boolean isAlterRandomName); - public Result> list(ListFileRequest lfr); + public Result> list(ListFileRequest lfr); public Result delete(String filePath, Integer fileId, String logId); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/LogLoginService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/LogLoginService.java index 4358301..eb88721 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/LogLoginService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/LogLoginService.java @@ -1,15 +1,14 @@ package com.evotech.hd.resource.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.LogLogin; public interface LogLoginService { public Result add(LogLogin log); - public Result> list(BasePageRequest bpr); + public Result> list(BasePageRequest bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/LoginInfoService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/LoginInfoService.java index 484aaa8..a1cc3af 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/LoginInfoService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/LoginInfoService.java @@ -1,26 +1,24 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import org.springframework.stereotype.Service; - +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.resource.auth.AuthPermissionDao; import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao; import com.evotech.hd.common.core.dao.resource.auth.AuthUserDao; import com.evotech.hd.common.core.entity.LoginCacheInfo; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthPermission; import com.evotech.hd.common.core.entity.resource.auth.AuthRole; import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; import com.evotech.hd.common.core.entity.resource.auth.AuthUser; import com.evotech.hd.common.core.enums.CodeMsg; - -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; @Service public class LoginInfoService { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/MenuService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/MenuService.java index bb95386..1e7541a 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/MenuService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/MenuService.java @@ -1,10 +1,10 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthMenu; +import java.util.List; + public interface MenuService { public Result add(AuthMenu menu); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/PermissionService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/PermissionService.java index 278b1ee..8e21c1b 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/PermissionService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/PermissionService.java @@ -1,10 +1,10 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthPermission; +import java.util.List; + public interface PermissionService { public Result add(AuthPermission perm); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java index 0eb6140..a15104b 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java @@ -1,5 +1,6 @@ package com.evotech.hd.resource.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.resource.entity.request.PageListProxyOperaterRequest; @@ -8,13 +9,13 @@ import java.util.List; public interface ProxyOperaterService { - public com.evotech.hd.common.core.entity.Result add(ProxyOperater po); + public Result add(ProxyOperater po); - public com.evotech.hd.common.core.entity.Result delete(Integer id); + public Result delete(Integer id); - public com.evotech.hd.common.core.entity.Result update(ProxyOperater po); + public Result update(ProxyOperater po); - public com.evotech.hd.common.core.entity.Result> list(PageListProxyOperaterRequest plpor); + public Result> list(PageListProxyOperaterRequest plpor); public Result> deviceList(); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/RoleService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/RoleService.java index 6ccd232..f285d34 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/RoleService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/RoleService.java @@ -1,12 +1,12 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthRole; import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; import com.evotech.hd.resource.entity.request.DelAddRoleSourceRequest; +import java.util.List; + public interface RoleService { public Result add(AuthRole r); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/StationTypeService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/StationTypeService.java index ae1c4c6..e8ee076 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/StationTypeService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/StationTypeService.java @@ -1,9 +1,8 @@ package com.evotech.hd.resource.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.resource.entity.StationType; public interface StationTypeService { @@ -14,7 +13,7 @@ public interface StationTypeService { public Result update(StationType st); - public Result> list(BasePageRequest bpr); + public Result> list(BasePageRequest bpr); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/SystemManagerService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/SystemManagerService.java index bb1433a..f31237d 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/SystemManagerService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/SystemManagerService.java @@ -1,10 +1,10 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.resource.entity.SystemManager; +import java.util.List; + public interface SystemManagerService { public Result> listSystemManager(); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/WechatAgreementService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/WechatAgreementService.java index 58dc59d..79eee1f 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/WechatAgreementService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/WechatAgreementService.java @@ -1,10 +1,10 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatAgreement; +import java.util.List; + public interface WechatAgreementService { public Result add(WechatAgreement wa); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/WechatSwiperService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/WechatSwiperService.java index a5f118a..bc33756 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/WechatSwiperService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/WechatSwiperService.java @@ -1,10 +1,10 @@ package com.evotech.hd.resource.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatSwiper; +import java.util.List; + public interface WechatSwiperService { public Result add(WechatSwiper ws); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AdmdvsInfoServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AdmdvsInfoServiceImpl.java index a41ed80..0e31d99 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AdmdvsInfoServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AdmdvsInfoServiceImpl.java @@ -1,21 +1,20 @@ package com.evotech.hd.resource.service.impl; -import java.util.List; - -import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.common.core.dao.resource.dict.AdmdvsInfoDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.resource.dict.AdmdvsInfo; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.resource.entity.request.ListAdmdvsRequest; -import com.evotech.hd.resource.service.AdmdvsInfoService; -import com.evotech.hd.resource.utils.AdmdvsUtil; - import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.resource.dict.AdmdvsInfoDao; +import com.evotech.hd.common.core.entity.resource.dict.AdmdvsInfo; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.utils.Collections; +import com.evotech.hd.resource.entity.request.ListAdmdvsRequest; +import com.evotech.hd.resource.service.AdmdvsInfoService; +import com.evotech.hd.resource.utils.AdmdvsUtil; import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; @Service public class AdmdvsInfoServiceImpl implements AdmdvsInfoService { @@ -36,7 +35,7 @@ public class AdmdvsInfoServiceImpl implements AdmdvsInfoService { new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } rootAdmdvs.setSubAdmdvsInfoList(list); - return new Result>().success(rootAdmdvs); + return new Result>().success(Collections.asList(rootAdmdvs)); } list = AdmdvsUtil.treeAdmdvsList(list, "0"); return new Result>().success(list); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java index 2178941..9fde18f 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java @@ -50,22 +50,22 @@ public class AuthUserServiceImpl implements AuthUserService { @Override - public com.evotech.hd.common.core.entity.Result userByName(String userName) { + public Result userByName(String userName) { AuthUser user = userDao.selectOne(new QueryWrapper().eq("uname", userName)); if (user == null) { - return new com.evotech.hd.common.core.entity.Result().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result().error(CodeMsg.DATABASE_RESULT_NULL); } List roleList = authUserRoleDao.selectList(new QueryWrapper().eq("uid", user.getUid())); String rcodes = roleList.stream().map(i -> i.getRcode()).collect(Collectors.joining(",")); user.setRcodes(rcodes); - return new com.evotech.hd.common.core.entity.Result().success(user); + return new Result().success(user); } @Override - public com.evotech.hd.common.core.entity.Result add(AuthUser u) { + public Result add(AuthUser u) { boolean exists = userDao.exists(new QueryWrapper().eq("uname", u.getUname())); if (exists) { - return new com.evotech.hd.common.core.entity.Result().error("账号已存在!"); + return new Result().error("账号已存在!"); } u.setUid(SnowflakeUtil.getIdStr()); // 密码加密 @@ -86,36 +86,36 @@ public class AuthUserServiceImpl implements AuthUserService { int n = userDao.insert(u); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加账号出错!"); + return new Result().error("添加账号出错!"); } @Override @Transactional - public com.evotech.hd.common.core.entity.Result delete(String uid) { + public Result delete(String uid) { AuthUser u = new AuthUser(); u.setUid(uid); int n = userDao.deleteById(u); if (n == 1) { // 删除账号关联角色信息 deleteUserRole(uid, ""); - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("删除账号出错!"); + return new Result().error("删除账号出错!"); } @Override - public com.evotech.hd.common.core.entity.Result update(AuthUser u) { + public Result update(AuthUser u) { int n = userDao.updateById(u); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("更新账号失败!"); + return new Result().error("更新账号失败!"); } @Override - public com.evotech.hd.common.core.entity.Result> list(ListUserRequest lur) { + public Result> list(ListUserRequest lur) { Page page = new Page<>(lur.getPageNo(), lur.getPageSize()); page = userDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(lur.getUid()), "uid", lur.getUid()) @@ -125,7 +125,7 @@ public class AuthUserServiceImpl implements AuthUserService { .eq(StringUtils.hasText(lur.getPhone()), "phone", lur.getPhone()) ); if (page.getRecords().isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } Map businessNames = proxyOperaterDao.selectList(new LambdaQueryWrapper().select(ProxyOperater::getPocode, ProxyOperater::getPoname)).stream().collect(Collectors.toMap(ProxyOperater::getPocode, ProxyOperater::getPoname, (k1, k2)->k1)); @@ -148,7 +148,7 @@ public class AuthUserServiceImpl implements AuthUserService { }); - return new com.evotech.hd.common.core.entity.Result>().success(page); + return new Result>().success(page); } @@ -182,33 +182,33 @@ public class AuthUserServiceImpl implements AuthUserService { @Override - public com.evotech.hd.common.core.entity.Result addUserRole(AuthUserRole aur) { + public Result addUserRole(AuthUserRole aur) { authUserRoleDao.delete(new QueryWrapper() .eq("uid", aur.getUid()));//先删除该用户的所有角色 boolean exists = authUserRoleDao.exists(new QueryWrapper() .eq("uid", aur.getUid()).eq("rcode", aur.getRcode())); if (exists) { - return new com.evotech.hd.common.core.entity.Result().error("该用户已有此角色"); + return new Result().error("该用户已有此角色"); } aur.setCtime(new Date()); int n = authUserRoleDao.insert(aur); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加用户角色失败!"); + return new Result().error("添加用户角色失败!"); } @Override - public com.evotech.hd.common.core.entity.Result deleteUserRole(String uid, String rid) { + public Result deleteUserRole(String uid, String rid) { int n = authUserRoleDao.delete(new QueryWrapper() .eq("uid", uid).eq(StringUtils.hasText(rid), "rid", rid)); - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } @Override - public com.evotech.hd.common.core.entity.Result addUserStation(String stationIds, String uid) { + public Result addUserStation(String stationIds, String uid) { List stationlist = ResultUtil.getValue(cloudService.resourceList(stationIds)); if(Collections.isNotEmpty(stationlist)){ if(!CollectionUtils.isEmpty(stationlist)){ @@ -221,10 +221,10 @@ public class AuthUserServiceImpl implements AuthUserService { list.add(u); } authUserStationDao.insert(list); - return new com.evotech.hd.common.core.entity.Result().success(list.size()); + return new Result().success(list.size()); } } - return new com.evotech.hd.common.core.entity.Result().error("添加用户站信息失败!"); + return new Result().error("添加用户站信息失败!"); } @Override diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/BatteryTypeServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/BatteryTypeServiceImpl.java index 372165b..6c52aac 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/BatteryTypeServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/BatteryTypeServiceImpl.java @@ -1,20 +1,18 @@ package com.evotech.hd.resource.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.BatteryType; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.service.BatteryTypeService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; @Service public class BatteryTypeServiceImpl implements BatteryTypeService { @@ -52,13 +50,13 @@ public class BatteryTypeServiceImpl implements BatteryTypeService { } @Override - public Result> list(BasePageRequest bpr) { + public Result> list(BasePageRequest bpr) { Page page = new Page(bpr.getPageNo(), bpr.getPageSize()); page = batteryTypeDao.selectPage(page, new QueryWrapper()); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/CarTypeServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/CarTypeServiceImpl.java index dde0dbb..66fe0ed 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/CarTypeServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/CarTypeServiceImpl.java @@ -1,20 +1,18 @@ package com.evotech.hd.resource.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.dao.resource.CarTypeDao; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.CarType; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.service.CarTypeService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; @Service public class CarTypeServiceImpl implements CarTypeService { @@ -51,13 +49,13 @@ public class CarTypeServiceImpl implements CarTypeService { } @Override - public Result> list(BasePageRequest bpr) { + public Result> list(BasePageRequest bpr) { Page page = new Page(bpr.getPageNo(), bpr.getPageSize()); page = carTypeDao.selectPage(page, new QueryWrapper()); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java index 0eafc51..a9c6915 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/DictServiceImpl.java @@ -3,9 +3,9 @@ package com.evotech.hd.resource.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.dao.resource.dict.DictDao; import com.evotech.hd.common.core.dao.resource.dict.DictTypeDao; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.request.ListDictRequest; import com.evotech.hd.common.core.entity.resource.dict.Dict; import com.evotech.hd.common.core.entity.resource.dict.DictType; @@ -66,15 +66,15 @@ public class DictServiceImpl implements DictService { } @Override - public Result> listType(ListDictTypeRequest ltr) { + public Result> listType(ListDictTypeRequest ltr) { Page page = new Page<>(ltr.getPageNo(), ltr.getPageSize()); page = dictTypeDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(ltr.getTypeName()), "type_name", ltr.getTypeName()) .eq(StringUtils.hasText(ltr.getTypeCode()), "type_code", ltr.getTypeCode())); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } @Override diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/FileUpLoadServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/FileUpLoadServiceImpl.java index 82ac469..a63cc28 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/FileUpLoadServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/FileUpLoadServiceImpl.java @@ -1,19 +1,14 @@ package com.evotech.hd.resource.service.impl; -import java.io.File; -import java.io.InputStream; -import java.net.URL; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.LogUpload; import com.evotech.hd.common.core.entity.resource.UploadFile; import com.evotech.hd.common.core.enums.CodeMsg; @@ -23,17 +18,19 @@ import com.evotech.hd.resource.dao.LogUploadDao; import com.evotech.hd.resource.dao.UploadFileDao; import com.evotech.hd.resource.entity.request.ListFileRequest; import com.evotech.hd.resource.service.FileUpLoadService; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.URLUtil; import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.RemoveObjectArgs; import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.Arrays; +import java.util.Date; @Service public class FileUpLoadServiceImpl implements FileUpLoadService { @@ -58,9 +55,9 @@ public class FileUpLoadServiceImpl implements FileUpLoadService { @Override - public Result> listFile(ListFileRequest lfr) { + public Result> listFile(ListFileRequest lfr) { if (StrUtil.isBlank(lfr.getPocode()) || StrUtil.isBlank(lfr.getCcode())) { - return new Result>().error(CodeMsg.BUSSINESS_ERROR); + return new Result>().error(CodeMsg.BUSSINESS_ERROR); } Page page = new Page(lfr.getPageNo(), lfr.getPageSize()); QueryWrapper qw = new QueryWrapper(); @@ -74,9 +71,9 @@ public class FileUpLoadServiceImpl implements FileUpLoadService { qw.orderByDesc("pk_id"); page = uploadFileDao.selectPage(page, qw); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } @Override @@ -110,7 +107,7 @@ public class FileUpLoadServiceImpl implements FileUpLoadService { } addUploadLog(fileArr.length, ccode, pocode, type, user, d, id, 1, path); - return new Result().success(id, fileArr.length); + return new Result().success(id+":"+fileArr.length); } private void addUploadLog(Integer size, String ccode, String pocode, String type, String user, Date d, String id, Integer status, String filePath) { @@ -165,9 +162,9 @@ public class FileUpLoadServiceImpl implements FileUpLoadService { } @Override - public Result> list(ListFileRequest lfr) { + public Result> list(ListFileRequest lfr) { if (StrUtil.isBlank(lfr.getPocode()) || StrUtil.isBlank(lfr.getCcode())) { - return new Result>().error(CodeMsg.BUSSINESS_ERROR); + return new Result>().error(CodeMsg.BUSSINESS_ERROR); } Page page = new Page(lfr.getPageNo(), lfr.getPageSize()); page = uploadLogDao.selectPage(page, new QueryWrapper() @@ -175,9 +172,9 @@ public class FileUpLoadServiceImpl implements FileUpLoadService { .eq(StrUtil.isNotBlank(lfr.getPocode()), "pocode", lfr.getPocode()) .orderByDesc("pk_id")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } @Override @@ -243,7 +240,7 @@ public class FileUpLoadServiceImpl implements FileUpLoadService { .build(); try { minioClient.removeObject(removeObjectArgs); - return new Result().success("OK"); + return new Result().success(); } catch (Exception e) { e.printStackTrace(); return new Result().error("删除失败:" + e.getMessage()); diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/LogLoginServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/LogLoginServiceImpl.java index cca84e0..f24b156 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/LogLoginServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/LogLoginServiceImpl.java @@ -1,19 +1,17 @@ package com.evotech.hd.resource.service.impl; -import java.util.List; - -import org.springframework.stereotype.Service; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.LogLogin; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.dao.LogLoginDao; import com.evotech.hd.resource.service.LogLoginService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; @Service public class LogLoginServiceImpl implements LogLoginService { @@ -28,13 +26,13 @@ public class LogLoginServiceImpl implements LogLoginService { } @Override - public Result> list(BasePageRequest bpr) { + public Result> list(BasePageRequest bpr) { Page page = new Page(bpr.getPageNo(), bpr.getPageSize()); page = logLoginDao.selectPage(page, new QueryWrapper().orderByDesc("ctime")); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/MenuServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/MenuServiceImpl.java index 95e23b7..27082e0 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/MenuServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/MenuServiceImpl.java @@ -2,11 +2,11 @@ package com.evotech.hd.resource.service.impl; import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.resource.auth.AuthMenuDao; import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao; import com.evotech.hd.common.core.dao.resource.auth.AuthUserRoleDao; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.auth.AuthMenu; import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; import com.evotech.hd.common.core.enums.CodeMsg; diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/PermissionServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/PermissionServiceImpl.java index 9a2b4bd..d65efdb 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/PermissionServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/PermissionServiceImpl.java @@ -1,24 +1,23 @@ package com.evotech.hd.resource.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.dao.resource.auth.AuthPermissionDao; +import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao; +import com.evotech.hd.common.core.entity.resource.auth.AuthPermission; +import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.resource.service.PermissionService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.dao.resource.auth.AuthPermissionDao; -import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.resource.auth.AuthPermission; -import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.resource.service.PermissionService; - -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; @Service public class PermissionServiceImpl implements PermissionService { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java index d7b3e3a..faf8154 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java @@ -24,39 +24,39 @@ public class ProxyOperaterServiceImpl implements ProxyOperaterService { private ProxyOperaterDao proxyOperaterDao; @Override - public com.evotech.hd.common.core.entity.Result add(ProxyOperater po) { + public Result add(ProxyOperater po) { po.setCtime(new Date()); int n = proxyOperaterDao.insert(po); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("添加运营商出错!"); + return new Result().error("添加运营商出错!"); } @Override @Transactional - public com.evotech.hd.common.core.entity.Result delete(Integer id) { + public Result delete(Integer id) { ProxyOperater po = new ProxyOperater(); po.setPkId(id); po.setDelFlag(1); int n = proxyOperaterDao.updateById(po); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } throw new RuntimeException("删除运营商出错!"); } @Override - public com.evotech.hd.common.core.entity.Result update(ProxyOperater po) { + public Result update(ProxyOperater po) { int n = proxyOperaterDao.updateById(po); if (n == 1) { - return new com.evotech.hd.common.core.entity.Result().success(n); + return new Result().success(n); } - return new com.evotech.hd.common.core.entity.Result().error("更新运营商失败!"); + return new Result().error("更新运营商失败!"); } @Override - public com.evotech.hd.common.core.entity.Result> list(PageListProxyOperaterRequest plpor) { + public Result> list(PageListProxyOperaterRequest plpor) { Page page = new Page(plpor.getPageNo(), plpor.getPageSize()); page = proxyOperaterDao.selectPage(page, new QueryWrapper() .eq(StringUtils.hasText(plpor.getDivisionNo()), "division_no", plpor.getDivisionNo()) @@ -65,9 +65,9 @@ public class ProxyOperaterServiceImpl implements ProxyOperaterService { .eq(plpor.getStatus() != null, "status", plpor.getStatus()) .ne("del_flag", 1)); if (page.getRecords().isEmpty()) { - return new com.evotech.hd.common.core.entity.Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new com.evotech.hd.common.core.entity.Result>().success(page); + return new Result>().success(page); } @Override diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java index 0fe5c4c..0964205 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java @@ -5,13 +5,13 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao; import com.evotech.hd.common.core.dao.resource.auth.AuthRoleDao; import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao; import com.evotech.hd.common.core.dao.resource.auth.AuthUserRoleDao; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.Company; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.common.core.entity.resource.auth.AuthRole; diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/StationTypeServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/StationTypeServiceImpl.java index 230d54a..34846af 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/StationTypeServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/StationTypeServiceImpl.java @@ -1,20 +1,18 @@ package com.evotech.hd.resource.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.dao.StationTypeDao; import com.evotech.hd.resource.entity.StationType; import com.evotech.hd.resource.service.StationTypeService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; @Service public class StationTypeServiceImpl implements StationTypeService { @@ -51,13 +49,13 @@ public class StationTypeServiceImpl implements StationTypeService { } @Override - public Result> list(BasePageRequest bpr) { + public Result> list(BasePageRequest bpr) { Page page = new Page(bpr.getPageNo(), bpr.getPageSize()); page = stationTypeDao.selectPage(page, new QueryWrapper()); if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/SystemManagerServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/SystemManagerServiceImpl.java index c7e0f3a..9d89c42 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/SystemManagerServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/SystemManagerServiceImpl.java @@ -1,17 +1,15 @@ package com.evotech.hd.resource.service.impl; -import java.util.List; - -import org.springframework.stereotype.Service; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.dao.SystemManagerDao; import com.evotech.hd.resource.entity.SystemManager; import com.evotech.hd.resource.service.SystemManagerService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; @Service public class SystemManagerServiceImpl implements SystemManagerService { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatAgreementServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatAgreementServiceImpl.java index 48a8fae..9e18e7e 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatAgreementServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatAgreementServiceImpl.java @@ -1,19 +1,17 @@ package com.evotech.hd.resource.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatAgreement; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.dao.WechatAgreementDao; import com.evotech.hd.resource.service.WechatAgreementService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service public class WechatAgreementServiceImpl implements WechatAgreementService { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatSwiperServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatSwiperServiceImpl.java index 94e74e9..55df722 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatSwiperServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/WechatSwiperServiceImpl.java @@ -1,19 +1,17 @@ package com.evotech.hd.resource.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatSwiper; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.resource.dao.WechatSwiperDao; import com.evotech.hd.resource.service.WechatSwiperService; - import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service public class WechatSwiperServiceImpl implements WechatSwiperService { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java index e5db4f3..d8c5c97 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/rpc/CloudService.java @@ -15,7 +15,7 @@ import java.util.List; public interface CloudService { - @PostMapping(value = "/batterystation/resource/list", + @PostMapping(value = "/battery/station/resource/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result> resourceList(@RequestParam String pkIds); diff --git a/wechat-server/pom.xml b/wechat-server/pom.xml index 735b6b4..9f351d0 100644 --- a/wechat-server/pom.xml +++ b/wechat-server/pom.xml @@ -26,6 +26,11 @@ + + + org.springframework.boot + spring-boot-starter-websocket + com.evotech.hd common-redis diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java b/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java index ebf5453..7198377 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java @@ -39,4 +39,6 @@ public class GZHProperties { private String alarmTemplateId; //暂停服务, 通知预约单客户通知 private String stopServerTemplateId; + //充电结算订单 + private String chargingIsCompletedTemplateId; } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java index f41628d..ac537dc 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java @@ -1,25 +1,23 @@ package com.evotech.hd.wechat.controller; -import java.util.List; -import java.util.Map; - +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.cloud.VehicleInfo; +import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; import com.evotech.hd.common.core.entity.wechat.WechatPayAttach; +import com.evotech.hd.wechat.service.rpc.CloudService; +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.constraints.NotBlank; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.VehicleInfo; -import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; -import com.evotech.hd.wechat.service.rpc.CloudService; -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.constraints.NotBlank; +import java.util.List; +import java.util.Map; @Tag(name = "云平台API") @ApiSupport(order = 13) @@ -29,17 +27,17 @@ public class CloudServeController { @Resource private CloudService cloudService; - - - - + @Operation(summary = "查询换电站") @GetMapping("/station/list") @ApiOperationSupport(order = 9) - public Result> listStation(@RequestParam(required = false) String plateNum) { - return cloudService.listStation(plateNum); + public Result> listStation(@RequestParam(required = false) String longitudeAndLatitude,@RequestParam(required = false) String plateNum) { + return cloudService.listStation(longitudeAndLatitude, plateNum); } - + + + + @Operation(summary = "公司编码查询公司") @GetMapping("/company/companyByCode") @ApiOperationSupport(order = 10) diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/LoginController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/LoginController.java index 113a6b4..ed0326b 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/LoginController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/LoginController.java @@ -1,19 +1,17 @@ package com.evotech.hd.wechat.controller; -import java.util.Map; - -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.wechat.service.LoginService; import com.github.xiaoymin.knife4j.annotations.ApiSupport; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; 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.RestController; + +import java.util.Map; @Tag(name = "登陆") @RestController diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/PayController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/PayController.java new file mode 100644 index 0000000..70717c4 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/PayController.java @@ -0,0 +1,81 @@ +package com.evotech.hd.wechat.controller; + +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.wechat.entity.PrePayVO; +import com.evotech.hd.wechat.entity.RefundVO; +import com.evotech.hd.wechat.service.OrderService; +import com.evotech.hd.wechat.service.WechatPayService; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +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.servlet.http.HttpServletRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 支付接口 + * + * @ClassName:PayController + * @date: 2025年06月25日 17:11 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Tag(name = "支付接口") +@RestController +@RequestMapping("/pay") +@ApiSupport(order = 12) +public class PayController { + + @Resource + private WechatPayService wechatPayService; + @Resource + private OrderService orderService; + + + @Operation(summary = "个人账户支付") + @PostMapping({"/account/pay"}) + @ApiOperationSupport(order = 6) + public com.evotech.hd.common.core.Dto.Result accountPay(@RequestParam String orderNo, String wuid, String uname) { + return orderService.walletPay(orderNo, wuid, uname); + } + + + @Operation(summary = "小程序预支付订单") + @PostMapping("/wechatpay/applet") + @ApiOperationSupport(order = 1) + public Result xcxPrepay(@RequestBody PrePayVO prePay) { + return wechatPayService.xcxPrepay(prePay); + } + + @Operation(summary = "支付回调地址") + @PostMapping("/wechatpay/notify") + @ApiOperationSupport(order = 2) + @Hidden + public ResponseEntity notifyBack(HttpServletRequest request) { + return wechatPayService.notifyBack(request); + } + + @Operation(summary = "退款") + @PostMapping("/wechatpay/refunds") + @ApiOperationSupport(order = 4) + public Result refunds(@Validated @RequestBody RefundVO refundVO) { + return wechatPayService.refunds(refundVO); + } + + + @Operation(summary = "退款回调地址") + @PostMapping("/wechatpay/refunds/notify") + @ApiOperationSupport(order = 5) + @Hidden + public ResponseEntity refundsNotifyBack(HttpServletRequest request) { + return wechatPayService.refundsBack(request); + } + + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/ResourceServerController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/ResourceServerController.java index 50fea52..ad4596e 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/ResourceServerController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/ResourceServerController.java @@ -1,24 +1,22 @@ package com.evotech.hd.wechat.controller; -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatAgreement; import com.evotech.hd.common.core.entity.resource.WechatSwiper; import com.evotech.hd.wechat.service.rpc.ResourceService; 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.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; @Tag(name = "资源服务API") @ApiSupport(order = 14) diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendClientController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendClientController.java new file mode 100644 index 0000000..35e08b7 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendClientController.java @@ -0,0 +1,26 @@ +package com.evotech.hd.wechat.controller; + +import com.evotech.hd.wechat.websocket.controller.WebSocketUtils; +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:Send + * @date: 2025年06月24日 10:50 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@RestController +@RequestMapping("/send/client") +public class SendClientController { + + @PostMapping({"/message"}) + public void sendClientMessage(@RequestParam String wechatId, @RequestParam String message) { + WebSocketUtils.sendMessage(wechatId, message); + } +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java new file mode 100644 index 0000000..8e8fbea --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java @@ -0,0 +1,44 @@ +package com.evotech.hd.wechat.controller; + +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.wechat.service.gzh.GZHMessageTemplateService; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类 + * + * @ClassName:SendGzhController + * @date: 2025年06月24日 16:15 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@RestController +@RequestMapping("/send/gzh") +public class SendGzhController { + + @Resource + private GZHMessageTemplateService gzhMessageTemplateService; + + @Operation(summary = "推送公众号换单完成订单消息") + @PostMapping("/order/swap_success") + @ApiOperationSupport(order = 2) + public Result sendOrderSwapSuccess(@RequestBody Order order) { + return gzhMessageTemplateService.sendOrderSwapSuccess(order); + } + + @Operation(summary = "推送公众号待结算订单消息") + @PostMapping("/order/to_be_settled") + @ApiOperationSupport(order = 2) + public Result sendOrderToBeSettled(@RequestBody Order order) { + return gzhMessageTemplateService.sendOrderToBeSettled(order); + } +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SwapOrderController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SwapOrderController.java index 7eee735..b24b56e 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SwapOrderController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SwapOrderController.java @@ -1,7 +1,8 @@ package com.evotech.hd.wechat.controller; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; @@ -34,7 +35,7 @@ public class SwapOrderController { @Operation(summary = "增加预约") @PostMapping("/pre/add") @ApiOperationSupport(order = 1) - public Result addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) { + public Result addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) { return orderService.addPre(osbp); } @@ -48,14 +49,14 @@ public class SwapOrderController { @Operation(summary = "查询预约") @GetMapping("/pre/list") @ApiOperationSupport(order = 3) - public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) { + public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) { return orderService.listPre(plsopr); } @Operation(summary = "查询订单") @GetMapping("/list") @ApiOperationSupport(order = 4) - public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { + public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { return orderService.list(plsor); } @@ -67,12 +68,12 @@ public class SwapOrderController { } - @Operation(summary = "个人账户余额支付") - @PostMapping({"/wallet/pay"}) - @ApiOperationSupport(order = 6) - public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { - return orderService.walletPay(orderNo, wuid, uname); - } +// @Operation(summary = "个人账户余额支付") +// @PostMapping({"/wallet/pay"}) +// @ApiOperationSupport(order = 6) +// public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { +// return orderService.walletPay(orderNo, wuid, uname); +// } @Operation(summary = "开始换电") @PostMapping("/startSwap") diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatNativePayController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatNativePayController.java index eb386cc..8ed5986 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatNativePayController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatNativePayController.java @@ -1,14 +1,6 @@ package com.evotech.hd.wechat.controller; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.wechat.entity.NativePayVO; import com.evotech.hd.wechat.service.WechatNativePayService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; @@ -18,6 +10,8 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; @Tag(name = "微信Native支付") @RestController diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatPayController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatPayController.java index 2d6083a..7779163 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatPayController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatPayController.java @@ -1,32 +1,16 @@ package com.evotech.hd.wechat.controller; -import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.request.PrePayRequest; -import com.evotech.hd.wechat.service.rpc.CloudService; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.wechat.entity.PrePayVO; import com.evotech.hd.wechat.service.WechatPayService; +import com.evotech.hd.wechat.service.rpc.CloudService; 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.servlet.http.HttpServletRequest; import jakarta.validation.constraints.NotBlank; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import org.springframework.web.bind.annotation.*; @Tag(name = "微信支付") @RestController @@ -41,22 +25,22 @@ public class WechatPayController { private CloudService cloudService; - @Operation(summary = "小程序预支付订单") - @PostMapping("/xcx/prepay") - @ApiOperationSupport(order = 1) - public Result xcxPrepay(@RequestBody PrePayVO prePay) { - return wechatPayService.xcxPrepay(prePay); - } - - - @Operation(summary = "支付回调地址") - @PostMapping("/prepayback/msg") - @ApiOperationSupport(order = 2) - @Hidden - public ResponseEntity prepayBack(HttpServletRequest request) { - return wechatPayService.PrepayBack(request); - } - +// @Operation(summary = "小程序预支付订单") +// @PostMapping("/xcx/prepay") +// @ApiOperationSupport(order = 1) +// public com.evotech.hd.common.core.Dto.Result xcxPrepay(@RequestBody PrePayVO prePay) { +// return wechatPayService.xcxPrepay(prePay); +// } +// +// +// @Operation(summary = "支付回调地址") +// @PostMapping("/prepayback/msg") +// @ApiOperationSupport(order = 2) +// @Hidden +// public ResponseEntity prepayBack(HttpServletRequest request) { +// return wechatPayService.notifyBack(request); +// } +// @Operation(summary = "支付订单查询状态") @GetMapping("/order/query") @@ -66,27 +50,27 @@ public class WechatPayController { } - @Operation(summary = "退款") - @PostMapping("/xcx/refunds") - @ApiOperationSupport(order = 4) - public Result refunds(@RequestBody PrePayVO prePay) { - String outTradeNo = prePay.getOutTradeNo(); - String transactionId = prePay.getTransactionId(); - String reason = prePay.getReason(); - Integer money = prePay.getMoney(); - Integer total = prePay.getTotal(); - return wechatPayService.refunds(outTradeNo, transactionId, reason, money, total); - } - - - @Operation(summary = "退款回调地址") - @PostMapping("/refundsback/msg") - @ApiOperationSupport(order = 5) - @Hidden - public ResponseEntity refundsBack(HttpServletRequest request) { - return wechatPayService.refundsBack(request); - - } +// @Operation(summary = "退款") +// @PostMapping("/xcx/refunds") +// @ApiOperationSupport(order = 4) +// public Result refunds(@RequestBody PrePayVO prePay) { +// String outTradeNo = prePay.getOutTradeNo(); +// String transactionId = prePay.getTransactionId(); +// String reason = prePay.getReason(); +// Integer money = prePay.getMoney(); +// Integer total = prePay.getTotal(); +// return wechatPayService.refunds(outTradeNo, transactionId, reason, money, total); +// } +// +// +// @Operation(summary = "退款回调地址") +// @PostMapping("/refundsback/msg") +// @ApiOperationSupport(order = 5) +// @Hidden +// public ResponseEntity refundsBack(HttpServletRequest request) { +// return wechatPayService.refundsBack(request); +// +// } @Operation(summary = "单笔退款查询") @@ -114,33 +98,33 @@ public class WechatPayController { * 2、按订单支付金额和总金额比较 */ //交易类型:1-充值,2-订单消费,9-提现 - prePay.setTradeType(1); - //支付方式:1-账户余额,2-微信 - prePay.setPayType(2); - List listTradeDetail = cloudService.tradeList(prePay); - - //退款总金额 - int totals = prePay.getTotal(); - // 遍历集合 - for (TradeDetail tradeDetail : listTradeDetail) { - int tradeAmount = tradeDetail.getTradeAmount();//订单交易金额 - totals = totals - tradeAmount; - //如果总价大于订单单价,则退款 - if (totals >= 0) { - String outTradeNo = tradeDetail.getOutTradeNo(); - String transactionId = tradeDetail.getTransactionId(); - String reason = "多笔余额申请退款"; - Integer total = tradeAmount; - return wechatPayService.refunds(outTradeNo, transactionId, reason, tradeAmount, tradeAmount); - }else{//部分退款 - String outTradeNo = tradeDetail.getOutTradeNo(); - String transactionId = tradeDetail.getTransactionId(); - String reason = "余额申请退款"; - Integer total = tradeAmount; - return wechatPayService.refunds(outTradeNo, transactionId, reason, total, tradeAmount); - } - - } +// prePay.setTradeType(1); +// //支付方式:1-账户余额,2-微信 +// prePay.setPayType(2); +// List listTradeDetail = cloudService.tradeList(prePay); +// +// //退款总金额 +// int totals = prePay.getTotal(); +// // 遍历集合 +// for (TradeDetail tradeDetail : listTradeDetail) { +// int tradeAmount = tradeDetail.getTradeAmount();//订单交易金额 +// totals = totals - tradeAmount; +// //如果总价大于订单单价,则退款 +// if (totals >= 0) { +//// String outTradeNo = tradeDetail.getOutTradeNo(); +// String transactionId = tradeDetail.getTransactionId(); +// String reason = "多笔余额申请退款"; +// Integer total = tradeAmount; +// return wechatPayService.refunds(outTradeNo, transactionId, reason, tradeAmount, tradeAmount); +// }else{//部分退款 +// String outTradeNo = tradeDetail.getOutTradeNo(); +// String transactionId = tradeDetail.getTransactionId(); +// String reason = "余额申请退款"; +// Integer total = tradeAmount; +// return wechatPayService.refunds(outTradeNo, transactionId, reason, total, tradeAmount); +// } +// +// } return new Result().success("ok"); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java index 434b1e0..6406917 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java @@ -1,7 +1,9 @@ package com.evotech.hd.wechat.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.Company; import com.evotech.hd.common.core.entity.cloud.WalletAccount; import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail; @@ -14,11 +16,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.ObjectUtils; import org.springdoc.core.annotations.ParameterObject; import org.springframework.web.bind.annotation.*; -import java.util.List; - @Tag(name = "微信用户") @RestController @RequestMapping("/wechat/user") @@ -29,22 +30,35 @@ public class WechatUserController { private WechatUserService wechatUserService; @Resource private CloudService cloudService; - - - @Operation(summary = "修改") - @PostMapping("/update") - @ApiOperationSupport(order = 1) - public Result update(@ParameterObject WechatUser wuser) { - return wechatUserService.update(wuser); + + + @Operation(summary = "查询钱包账户") + @PostMapping("/wallet/one") + @ApiOperationSupport(order = 5) + public com.evotech.hd.common.core.Dto.Result walletOne(@RequestParam(name = "wuid") String wuid, HttpServletRequest request) { + WalletAccount walletAccount = ResultUtil.getValue(wechatUserService.walletOne(wuid, request)); + if(ObjectUtils.isEmpty(walletAccount)){ + return com.evotech.hd.common.core.Dto.Result.getInstance().build(WalletAccount.class).error("未找到账户信息"); + } + walletAccount.setTotalAmount(walletAccount.getRechargeAmount()+walletAccount.getGiftAmount()); + return com.evotech.hd.common.core.Dto.Result.getInstance().build(WalletAccount.class).success(walletAccount); } - - - @Operation(summary = "查询") + + @Operation(summary = "查询用户信息") @PostMapping("/userbyuid") @ApiOperationSupport(order = 2) - public Result userByUid(String wuid) { + public com.evotech.hd.common.core.Dto.Result userByUid(String wuid) { return wechatUserService.userByUid(wuid); } + + @Operation(summary = "修改用户信息") + @PostMapping("/update") + @ApiOperationSupport(order = 1) + public Result updateWechatUser(@ParameterObject WechatUser wechatUser) { + return wechatUserService.updateWechatUser(wechatUser); + } + + @Operation(summary = "小程序端-绑定公司") @PostMapping("/bindcompany") @@ -62,18 +76,18 @@ public class WechatUserController { } - @Operation(summary = "查询钱包账户") - @PostMapping("/wallet/list") - @ApiOperationSupport(order = 5) - public Result> listWallet(@RequestParam(name = "wuid") String wuid, HttpServletRequest request) { - return wechatUserService.listWallet(wuid, request); - } +// @Operation(summary = "查询钱包账户") +// @PostMapping("/wallet/list") +// @ApiOperationSupport(order = 5) +// public Result> listWallet(@RequestParam(name = "wuid") String wuid, HttpServletRequest request) { +// return wechatUserService.listWallet(wuid, request); +// } @Operation(summary = "查询钱包明细") @PostMapping("/wallet/detail/list") @ApiOperationSupport(order = 6) - public Result> listWalletDetail(String walletCode, @ParameterObject BasePageRequest basePage) { + public Result> listWalletDetail(String walletCode, @ParameterObject BasePageRequest basePage) { return wechatUserService.listWalletDetail(walletCode, basePage); } @Operation(summary = "查询用户是否开通钱包") @@ -87,8 +101,8 @@ public class WechatUserController { @Operation(summary = "小程序端-查询公司列表") @GetMapping("/companylist") @ApiOperationSupport(order = 8) - public Result> companylist( @ParameterObject BasePageRequest bpr) { - return cloudService.companylist(bpr); + public Result> companyList( @ParameterObject BasePageRequest bpr) { + return cloudService.companyList(bpr); } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/gzh/GZHMessageSendController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/gzh/GZHMessageSendController.java index 39df4d9..eaa9989 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/gzh/GZHMessageSendController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/gzh/GZHMessageSendController.java @@ -1,11 +1,11 @@ package com.evotech.hd.wechat.controller.gzh; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto; import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.wechat.service.gzh.GZHMessageTemplateService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; @@ -25,22 +25,30 @@ public class GZHMessageSendController { @Resource private GZHMessageTemplateService gzhMessageTemplateService; - - @Operation(summary = "预约发送公众号消息") - @PostMapping("/preorder") - @ApiOperationSupport(order = 1) - public Result preOrderMessage(@ParameterObject OrderSwapBatteryPre osbp) { +// +// @Operation(summary = "预约发送公众号消息") +// @PostMapping("/preorder") +// @ApiOperationSupport(order = 1) +// public com.evotech.hd.common.core.Dto.Result preOrderMessage(@ParameterObject OrderSwapBatteryPre osbp) { +// return gzhMessageTemplateService.sendTemplateMessageOrderPre(osbp); +// } + + @Operation(summary = "换电订单预约成功发送公众号消息") + @PostMapping("/preorder2") + @ApiOperationSupport(order = 3) + @Hidden + public com.evotech.hd.common.core.Dto.Result preOrderMessage2(@RequestBody OrderSwapBatteryPre osbp) { return gzhMessageTemplateService.sendTemplateMessageOrderPre(osbp); } - - + + @Operation(summary = "推送公众号订单消息") @PostMapping("/order") @ApiOperationSupport(order = 2) - public Result orderMessage(@ParameterObject OrderSwapBattery osb, @RequestParam Integer templateType) { - return gzhMessageTemplateService.sendTemplateMessageOrder(osb, templateType); + public Result orderMessage(@ParameterObject Order order, @RequestParam Integer templateType) { + return gzhMessageTemplateService.sendTemplateMessageOrder(order, templateType); } - + @Operation(summary = "推送公众号订单消息2") @PostMapping("/order2") @Hidden @@ -49,13 +57,7 @@ public class GZHMessageSendController { } - @Operation(summary = "预约发送公众号消息2") - @PostMapping("/preorder2") - @ApiOperationSupport(order = 3) - @Hidden - public Result preOrderMessage2(@RequestBody OrderSwapBatteryPre osbp) { - return gzhMessageTemplateService.sendTemplateMessageOrderPre(osbp); - } + @Operation(summary = "充值成功推送公众号消息") @PostMapping("/recharge") diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/RefundVO.java b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/RefundVO.java new file mode 100644 index 0000000..6e648f8 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/RefundVO.java @@ -0,0 +1,25 @@ +package com.evotech.hd.wechat.entity; + +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +@Schema(name = "预下单参数") +public class RefundVO { + + @Schema(description = "用户编码", requiredMode = RequiredMode.REQUIRED) + @NotBlank(message = "用户的微信id不存在") + private String wuid; + + @Schema(description = "提现金额,单位:分", requiredMode = RequiredMode.REQUIRED) + @NotNull + @Min(value = 1, message = "提现金额最小为1分") + @Max(value = 100000000, message = "提现金额最大为100万") + private Integer total; + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData.java b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData.java index a4a0d03..adb89ac 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData.java @@ -1,12 +1,14 @@ package com.evotech.hd.wechat.entity.gzh.templatemessage; import cn.hutool.json.JSONObject; +import lombok.Data; import lombok.Getter; /** * 充电完成 模板消息 关键词 */ @Getter +@Data public class ChargeTemplateData { private JSONObject character_string14; @@ -20,34 +22,34 @@ public class ChargeTemplateData { private JSONObject amount28; - public void setCharacter_string14(String value1) { - JSONObject jo = new JSONObject(); - jo.set("value", value1); - this.character_string14 = jo; - } - - public void setCharacter_string31(String value2) { - JSONObject jo = new JSONObject(); - jo.set("value", value2); - this.character_string31 = jo; - } - - public void setCharacter_string25(String value3) { - JSONObject jo = new JSONObject(); - jo.set("value", value3); - this.character_string25 = jo; - } - - public void setAmount34(String value4) { - JSONObject jo = new JSONObject(); - jo.set("value", value4); - this.amount34 = jo; - } - - public void setAmount28(String value5) { - JSONObject jo = new JSONObject(); - jo.set("value", value5); - this.amount28 = jo; - } +// public void setCharacter_string14(String value1) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value1); +// this.character_string14 = jo; +// } +// +// public void setCharacter_string31(String value2) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value2); +// this.character_string31 = jo; +// } +// +// public void setCharacter_string25(String value3) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value3); +// this.character_string25 = jo; +// } +// +// public void setAmount34(String value4) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value4); +// this.amount34 = jo; +// } +// +// public void setAmount28(String value5) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value5); +// this.amount28 = jo; +// } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData2.java b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData2.java index 7066fec..1b479b7 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData2.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/ChargeTemplateData2.java @@ -1,28 +1,31 @@ package com.evotech.hd.wechat.entity.gzh.templatemessage; import cn.hutool.json.JSONObject; +import lombok.Data; import lombok.Getter; /** * 充电完成SOC 模板消息 关键词 */ @Getter +@Data public class ChargeTemplateData2 { /* 订单编号 */ private JSONObject character_string2; + /* + 车牌号码 + */ + private JSONObject car_number8; /* 耗电量 */ - private JSONObject number15; - /* - 车牌号码 - */ - private JSONObject car_number8; + private JSONObject character_string50; + /* 充电服务费 */ - private JSONObject thing34; + private JSONObject amount37; /* 消费金额 @@ -30,34 +33,34 @@ public class ChargeTemplateData2 { private JSONObject amount5; - public void setCharacter_string2(String value1) { - JSONObject jo = new JSONObject(); - jo.set("value", value1); - this.character_string2 = jo; - } - - public void setNumber15(String value2) { - JSONObject jo = new JSONObject(); - jo.set("value", value2); - this.number15 = jo; - } - - public void setCar_number8(String value3) { - JSONObject jo = new JSONObject(); - jo.set("value", value3); - this.car_number8 = jo; - } - - public void setThing34(String value4) { - JSONObject jo = new JSONObject(); - jo.set("value", value4); - this.thing34 = jo; - } - - public void setAmount5(String value5) { - JSONObject jo = new JSONObject(); - jo.set("value", value5); - this.amount5 = jo; - } +// public void setCharacter_string2(String value1) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value1); +// this.character_string2 = jo; +// } +// +// public void setNumber15(String value2) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value2); +// this.number15 = jo; +// } +// +// public void setCar_number8(String value3) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value3); +// this.car_number8 = jo; +// } +// +// public void setThing34(String value4) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value4); +// this.thing34 = jo; +// } +// +// public void setAmount5(String value5) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value5); +// this.amount5 = jo; +// } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/SwapTemplateData.java b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/SwapTemplateData.java index 5758fc2..5192e56 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/SwapTemplateData.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/SwapTemplateData.java @@ -1,12 +1,13 @@ package com.evotech.hd.wechat.entity.gzh.templatemessage; import cn.hutool.json.JSONObject; +import lombok.Data; import lombok.Getter; /** * 换电成功 模板消息 关键词 */ -@Getter +@Data public class SwapTemplateData { private JSONObject thing2; @@ -18,28 +19,28 @@ public class SwapTemplateData { private JSONObject time5; - public void setThing2(String value1) { - JSONObject jo = new JSONObject(); - jo.set("value", value1); - this.thing2 = jo; - } - - public void setCharacter_string3(String value2) { - JSONObject jo = new JSONObject(); - jo.set("value", value2); - this.character_string3 = jo; - } - - public void setCharacter_string4(String value3) { - JSONObject jo = new JSONObject(); - jo.set("value", value3); - this.character_string4 = jo; - } - - public void setTime5(String value4) { - JSONObject jo = new JSONObject(); - jo.set("value", value4); - this.time5 = jo; - } +// public void setThing2(String value1) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value1); +// this.thing2 = jo; +// } +// +// public void setCharacter_string3(String value2) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value2); +// this.character_string3 = jo; +// } +// +// public void setCharacter_string4(String value3) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value3); +// this.character_string4 = jo; +// } +// +// public void setTime5(String value4) { +// JSONObject jo = new JSONObject(); +// jo.set("value", value4); +// this.time5 = jo; +// } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/LoginService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/LoginService.java index 51e464b..a4b613c 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/LoginService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/LoginService.java @@ -1,8 +1,9 @@ package com.evotech.hd.wechat.service; +import com.evotech.hd.common.core.Dto.Result; + import java.util.Map; -import com.evotech.hd.common.core.entity.Result; public interface LoginService { diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/OrderService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/OrderService.java index 17634ca..c6fd32f 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/OrderService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/OrderService.java @@ -1,31 +1,35 @@ package com.evotech.hd.wechat.service; -import java.util.List; - -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import com.evotech.hd.common.core.entity.order.Order; + +import java.util.List; public interface OrderService { - public Result addPre(OrderSwapBatteryPre osbp); + public Result addPre(OrderSwapBatteryPre osbp); public Result cancelPre(Integer id); - public Result> listPre(PageListSwapOrderPreRequest plsopr); + public Result> listPre(PageListSwapOrderPreRequest plsopr); - public Result> list(PageListSwapOrderRequest plsor); + public Result> list(PageListSwapOrderRequest plsor); public Result> listStep(String orderNo); public Result walletPay(String orderNo, String wuid, String uname); - public Result startSwap(String wuid,String orderId) throws Exception; + public Result startSwap(String wuid,String orderNo) throws Exception; public Result getStartSwap(String wuid, String orderId ); + + Order getOneByOrderNo(String orderNo); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatNativePayService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatNativePayService.java index a24328f..3f515b1 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatNativePayService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatNativePayService.java @@ -1,11 +1,9 @@ package com.evotech.hd.wechat.service; -import org.springframework.http.ResponseEntity; - -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.wechat.entity.NativePayVO; - import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.ResponseEntity; public interface WechatNativePayService { diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatPayService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatPayService.java index 12ab7a6..b7bf1df 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatPayService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatPayService.java @@ -1,22 +1,45 @@ package com.evotech.hd.wechat.service; -import org.springframework.http.ResponseEntity; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.wechat.entity.PrePayVO; +import com.evotech.hd.wechat.entity.RefundVO; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.ResponseEntity; public interface WechatPayService { - - public Result xcxPrepay(PrePayVO prePay); - - public ResponseEntity PrepayBack(HttpServletRequest request); - - public Result orderQuery(Integer type, String transactionId, String outTradeNo); - - public Result refunds(String outTradeNo, String transactionId, String reason, Integer money, Integer total); - + /*** + * 小程序支付 + * @param prePay + * @return + */ + public Result xcxPrepay(PrePayVO prePay); + + /*** + * 小程序支付回调 + * @param request + * @return + */ + public ResponseEntity notifyBack(HttpServletRequest request); + + /*** + * 申请退款接口 + * @return + */ + public Result refunds(RefundVO refundVO); + + /*** + * 退款回调接口 + * @param request + * @return + */ public ResponseEntity refundsBack(HttpServletRequest request); - + + + + + public Result orderQuery(Integer type, String transactionId, String outTradeNo); + public Result refundsQuery(String outRefundNo); public Result dayTradebill(String day); diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java index cb1a33f..c4497f9 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java @@ -1,28 +1,39 @@ package com.evotech.hd.wechat.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.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.wechat.WechatUser; - import jakarta.servlet.http.HttpServletRequest; -public interface WechatUserService { +public interface WechatUserService extends IService { + + public com.evotech.hd.common.core.Dto.Result userByUid(String wuid); + + public com.evotech.hd.common.core.Dto.Result walletOne(String wuid, HttpServletRequest request); + + public com.evotech.hd.common.core.Dto.Result updateWechatUser(WechatUser wechatUser); + + + + + - public Result update(WechatUser wuser); - - public Result userByUid(String wuid); + public Result bindCompany(String wuid, String pcode, String pname); public Result openWallet(String wuid, HttpServletRequest request); - public Result> listWallet(String wuid, HttpServletRequest request); +// public Result> listWallet(String wuid, HttpServletRequest request); - public Result> listWalletDetail(String walletCode, BasePageRequest basePage); + public Result> listWalletDetail(String walletCode, BasePageRequest basePage); public Result isOpenAccount(String wuid, HttpServletRequest request); + + + } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java index ec73553..5a4f767 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java @@ -6,15 +6,17 @@ 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.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto; import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +import com.evotech.hd.common.core.dao.cloud.OrderDao; +import com.evotech.hd.common.core.dao.cloud.OrderDetailDao; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.common.core.entity.order.OrderDetail; import com.evotech.hd.common.core.entity.wechat.WechatUser; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.utils.Collections; @@ -54,34 +56,19 @@ public class GZHMessageTemplateService { @Resource private WechatUserDao wechatUserDao; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - - - + private OrderDao orderDao; + @Resource + private OrderDetailDao orderDetailDao; + /** * 预约完成推送公众号消息 * @param osbp * @return */ - public Result sendTemplateMessageOrderPre(OrderSwapBatteryPre osbp) { - WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", osbp.getUcode())); - if (wuser == null) { - return null; - } + public com.evotech.hd.common.core.Dto.Result sendTemplateMessageOrderPre(OrderSwapBatteryPre osbp) { + + WechatUser wechatUser = getWechatUser(osbp.getUcode()); - if (!StringUtils.hasText(wuser.getGzhOpenid())) { - return new Result().error("未关注公众号!"); - } - MessageTemplateSendData sendData = new MessageTemplateSendData(); - sendData.setTouser(wuser.getGzhOpenid()); - - sendData.setTemplate_id(gzhProperties.getPreOrderTemplateId()); - - Miniprogram miniprogram = new Miniprogram(); - miniprogram.setAppid(xcxProperties.getAppid()); - miniprogram.setPath(preOrderPage); - sendData.setMiniprogram(miniprogram); - PreOrderTemplateData data = new PreOrderTemplateData(); data.setCar_number1(osbp.getPlateNum()); data.setThing2(osbp.getStationName()); @@ -89,35 +76,76 @@ public class GZHMessageTemplateService { log.info("预约完成推送公众号消息时间=======>:{}", DateUtil.format(osbp.getReservationTime(), DatePattern.NORM_DATETIME_FORMATTER)); data.setThing5(osbp.getUname()); data.setPhone_number4(osbp.getPhone()); - sendData.setData(JSONUtil.parseObj(data)); - String res = TemplateMessageUtil.templateMessageSend(gzhAccessTokenService.gzhAccessToken(), sendData); - JSONObject jo = JSONUtil.parseObj(res); - if (jo.getInt("errcode") == 0) { - return new Result().success(jo); - } else { - System.out.println(jo); - } - return new Result().error(CodeMsg.WECHAT_API_ERROR, jo); + return sendTemplateMessage(wechatUser.getGzhOpenid(), gzhProperties.getPreOrderTemplateId(),JSONUtil.parseObj(data), true); + } - + + + /** + * 推送公众号订单消息 + * @param order 订单信息 + * @return + */ + public com.evotech.hd.common.core.Dto.Result sendOrderSwapSuccess(Order order) { + WechatUser wechatUser = getWechatUser(order.getPreWechatId()); + //查询详情 + OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId())); + SwapTemplateData data = new SwapTemplateData(); + data.setThing2(JSONUtil.parseObj(Collections.asMap("value", order.getStationName()))); + data.setCharacter_string3(JSONUtil.parseObj(Collections.asMap("value", orderDetail.getReturnBatCode())));//动态跟换车牌号 + data.setCharacter_string4(JSONUtil.parseObj(Collections.asMap("value", orderDetail.getRentBatCode())));//动态跟换车牌号 + data.setTime5(JSONUtil.parseObj(Collections.asMap("value", DateUtil.format(order.getOrderTime(), DatePattern.NORM_DATETIME_FORMATTER))));//动态跟换车牌号 + + return sendTemplateMessage(wechatUser.getGzhOpenid(), gzhProperties.getOrderSwapEndTemplateId(),JSONUtil.parseObj(data), true); + } + + /*** + * 待结算订单推送 + * @param order + * @return + */ + public com.evotech.hd.common.core.Dto.Result sendOrderToBeSettled(Order order){ + WechatUser wechatUser = getWechatUser(order.getPreWechatId()); + //查询详情 + OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId())); + ChargeTemplateData2 chargeData = new ChargeTemplateData2(); + chargeData.setCharacter_string2(JSONUtil.parseObj(Collections.asMap("value", order.getOrderNo()))); + chargeData.setCar_number8(JSONUtil.parseObj(Collections.asMap("value", order.getPlateNum()))); + chargeData.setCharacter_string50(JSONUtil.parseObj(Collections.asMap("value", String.valueOf(orderDetail.getRentBatSoc()- orderDetail.getReturnBatSoc())+"% "))); + chargeData.setAmount37(JSONUtil.parseObj(Collections.asMap("value", (orderDetail.getServiceFee() != null ? new BigDecimal(orderDetail.getServiceFee()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_DOWN).setScale(2, RoundingMode.HALF_EVEN).toString() : "")))); + chargeData.setAmount5(JSONUtil.parseObj(Collections.asMap("value", (order.getOrderAmount() != null ? new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_DOWN).setScale(2, RoundingMode.HALF_EVEN).toString(): "")))); + return sendTemplateMessage(wechatUser.getGzhOpenid(), gzhProperties.getChargingIsCompletedTemplateId(),JSONUtil.parseObj(chargeData), true); + + } + + + + + + + + + /** * 推送公众号订单消息 - * @param osb * @param templateType * @return */ - public Result sendTemplateMessageOrder(OrderSwapBattery osb, Integer templateType) { - if (!StringUtils.hasText(osb.getOrderPreUid())) { + public Result sendTemplateMessageOrder(Order order, Integer templateType) { + if (org.apache.commons.lang3.StringUtils.isEmpty(order.getPreWechatId())) { return null; } - WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", osb.getOrderPreUid())); + WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", order.getPreWechatId())); if (wuser == null) { return null; } if (!StringUtils.hasText(wuser.getGzhOpenid())) { return new Result().error("未关注公众号!"); } + + OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId())); + MessageTemplateSendData sendData = new MessageTemplateSendData(); sendData.setTouser(wuser.getGzhOpenid()); String templateId = ""; @@ -125,17 +153,17 @@ public class GZHMessageTemplateService { miniprogram.setAppid(xcxProperties.getAppid()); switch (templateType) { // 换电完成 - case 1: - templateId = gzhProperties.getOrderSwapEndTemplateId(); - miniprogram.setPath(orderPage); - SwapTemplateData data = new SwapTemplateData(); - data.setThing2(osb.getStationName()); - data.setCharacter_string3(osb.getReturnBatCode()); - data.setCharacter_string4(osb.getRentBatCode()); - data.setTime5(DateUtil.format(osb.getOrderTime(), DatePattern.NORM_DATETIME_FORMATTER)); - log.info("付款完成推送公众号消息=======>:{}", JSONUtil.parseObj(data)); - sendData.setData(JSONUtil.parseObj(data)); - break; +// case 1: +// templateId = gzhProperties.getOrderSwapEndTemplateId(); +// miniprogram.setPath(orderPage); +// SwapTemplateData data = new SwapTemplateData(); +//// data.setThing2(order.getStationName()); +//// data.setCharacter_string3(orderDetail.getReturnBatCode()); +//// data.setCharacter_string4(orderDetail.getRentBatCode()); +//// data.setTime5(DateUtil.format(order.getOrderTime(), DatePattern.NORM_DATETIME_FORMATTER)); +//// log.info("付款完成推送公众号消息=======>:{}", JSONUtil.parseObj(data)); +// sendData.setData(JSONUtil.parseObj(data)); +// break; /* // 充电完成,待结算 case 2: templateId = gzhProperties.getOrderToPayTemplateId(); @@ -150,28 +178,28 @@ public class GZHMessageTemplateService { sendData.setData(JSONUtil.parseObj(chargeData)); break;*/ // 充电完成,待结算(新模版SOC) - case 2: - templateId = gzhProperties.getOrderToPayTemplateId2(); - miniprogram.setPath(orderPage); - ChargeTemplateData2 chargeData2 = new ChargeTemplateData2(); - chargeData2.setCharacter_string2(osb.getOrderNo()); - String soc = String.valueOf(osb.getRentBatSoc()- osb.getReturnBatSoc()); - chargeData2.setNumber15(soc); - chargeData2.setCar_number8(osb.getPlateNum()); - chargeData2.setThing34(osb.getStationName()); - chargeData2.setAmount5(osb.getAmount() != null ? new BigDecimal(osb.getAmount()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_DOWN).setScale(2, RoundingMode.HALF_EVEN).toString(): ""); - log.info("付款完成推送公众号消息=======>:{}", JSONUtil.parseObj(chargeData2)); - sendData.setData(JSONUtil.parseObj(chargeData2)); - break; +// case 2: +// templateId = gzhProperties.getOrderToPayTemplateId2(); +// miniprogram.setPath(orderPage); +// ChargeTemplateData2 chargeData2 = new ChargeTemplateData2(); +// chargeData2.setCharacter_string2(order.getOrderNo()); +// String soc = String.valueOf(orderDetail.getRentBatSoc()- orderDetail.getReturnBatSoc()); +// chargeData2.setNumber15(soc); +// chargeData2.setCar_number8(order.getPlateNum()); +// chargeData2.setThing34(order.getStationName()); +// chargeData2.setAmount5(order.getOrderAmount() != null ? new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_DOWN).setScale(2, RoundingMode.HALF_EVEN).toString(): ""); +// log.info("付款完成推送公众号消息=======>:{}", JSONUtil.parseObj(chargeData2)); +// sendData.setData(JSONUtil.parseObj(chargeData2)); +// break; // 付款完成 case 3: templateId = gzhProperties.getOrderEndTemplateId(); miniprogram.setPath(orderDetailPage); PayTemplateData payData = new PayTemplateData(); - payData.setThing2(osb.getStationName()); - payData.setCharacter_string1(osb.getOrderNo()); - payData.setCar_number10(osb.getPlateNum()); - payData.setAmount6(osb.getAmount() + ""); + payData.setThing2(order.getStationName()); + payData.setCharacter_string1(order.getOrderNo()); + payData.setCar_number10(order.getPlateNum()); + payData.setAmount6(order.getOrderAmount() + ""); payData.setTime9(""); log.info("付款完成推送公众号消息=======>:{}", JSONUtil.parseObj(payData)); sendData.setData(JSONUtil.parseObj(payData)); @@ -190,14 +218,14 @@ public class GZHMessageTemplateService { String res = TemplateMessageUtil.templateMessageSend(gzhAccessTokenService.gzhAccessToken(), sendData); JSONObject jo = JSONUtil.parseObj(res); if (jo.getInt("errcode") == 0) { - return new Result().success(jo); + return new Result().success(jo.toString()); } - return new Result().error(CodeMsg.WECHAT_API_ERROR, jo); + return new Result().error(CodeMsg.WECHAT_API_ERROR, jo.toString()); } public Result sendTemplateMessageOrder2(Integer id, Integer templateType) { - OrderSwapBattery order = orderSwapBatteryDao.selectById(id); + Order order = orderDao.selectById(id); return sendTemplateMessageOrder(order, templateType); } @@ -235,9 +263,9 @@ public class GZHMessageTemplateService { String res = TemplateMessageUtil.templateMessageSend(gzhAccessTokenService.gzhAccessToken(), sendData); JSONObject jo = JSONUtil.parseObj(res); if (jo.getInt("errcode") == 0) { - return new Result().success(jo); + return new Result().success(jo.toString()); } - return new Result().error(CodeMsg.WECHAT_API_ERROR, jo); + return new Result().error(CodeMsg.WECHAT_API_ERROR, jo.toString()); } /** @@ -274,9 +302,9 @@ public class GZHMessageTemplateService { String res = TemplateMessageUtil.templateMessageSend(gzhAccessTokenService.gzhAccessToken(), sendData); JSONObject jo = JSONUtil.parseObj(res); if (jo.getInt("errcode") == 0) { - return new Result().success(jo); + return new Result().success(jo.toString()); } - return new Result().error(CodeMsg.WECHAT_API_ERROR, jo); + return new Result().error(CodeMsg.WECHAT_API_ERROR, jo.toString()); } @@ -424,6 +452,18 @@ public class GZHMessageTemplateService { + + private WechatUser getWechatUser(String wechatId){ + if (org.apache.commons.lang3.StringUtils.isEmpty(wechatId)) { + return null; + } + WechatUser wechatUser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wechatId)); + if (wechatUser == null || org.apache.commons.lang3.StringUtils.isEmpty(wechatUser.getGzhOpenid())) { + throw new RuntimeException("未关注公众号"); + } + return wechatUser; + } + private com.evotech.hd.common.core.Dto.Result sendTemplateMessage(String gzhOpenId, String templateId, JSONObject templateData, Boolean isJumpApplet){ return sendTemplateMessage(true, gzhOpenId, templateId, templateData, isJumpApplet); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/LoginServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/LoginServiceImpl.java index f000b5f..7c54200 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/LoginServiceImpl.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/LoginServiceImpl.java @@ -1,19 +1,16 @@ package com.evotech.hd.wechat.service.impl; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; - +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.crypto.digest.DigestUtil; +import cn.hutool.crypto.digest.HMac; +import cn.hutool.crypto.digest.HmacAlgorithm; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.wechat.WechatUser; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.utils.XCXUtil; @@ -23,15 +20,16 @@ import com.evotech.hd.wechat.service.AccessTokenService; import com.evotech.hd.wechat.service.LoginService; import com.evotech.hd.wechat.utils.xcx.LoginUtil; import com.evotech.hd.wechat.utils.xcx.PhoneNumberUtil; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.crypto.digest.DigestUtil; -import cn.hutool.crypto.digest.HMac; -import cn.hutool.crypto.digest.HmacAlgorithm; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; @Slf4j @Service @@ -60,7 +58,7 @@ public class LoginServiceImpl implements LoginService { JSONObject jo = JSONUtil.parseObj(res); if (StringUtils.hasText(jo.getStr("errcode"))) { log.error("微信登陆失败=================>:{}", jo); - return new Result>().error(CodeMsg.WECHAT_LOGIN_ERROR, jo); + return new Result>().error(CodeMsg.WECHAT_LOGIN_ERROR, jo.toString()); } String openid = jo.getStr("openid"); String unionid = jo.getStr("unionid"); @@ -78,9 +76,9 @@ public class LoginServiceImpl implements LoginService { wechatUserDao.insert(wuser); } // 缓存数据 - redisUtil.set(HDConstant.openidPrefix + wuser.getWuid(), openid); - redisUtil.set(HDConstant.unionidPrefix + wuser.getWuid(), unionid); - redisUtil.set(HDConstant.sessionKeyPrefix + wuser.getWuid(), sessionKey); + redisUtil.set(HDConstant.openidPrefix + wuser.getWuid(), openid, 0); + redisUtil.set(HDConstant.unionidPrefix + wuser.getWuid(), unionid, 0); + redisUtil.set(HDConstant.sessionKeyPrefix + wuser.getWuid(), sessionKey, 0); // token Map m = tokenBuilder(wuser.getWuid()); return new Result>().success(m); @@ -105,7 +103,7 @@ public class LoginServiceImpl implements LoginService { Map m = tokenBuilder(wuid); return new Result>().success(m); } - return new Result>().error(CodeMsg.WECHAT_SERRION_ERROR, jo); + return new Result>().error(CodeMsg.WECHAT_SERRION_ERROR, jo.toString()); } @@ -114,7 +112,7 @@ public class LoginServiceImpl implements LoginService { public Result phoneNumber(String wuid, String code) { WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wuid)); if (StringUtils.hasText(wuser.getPhoneNumber())) { - return new Result().success("ok", wuser.getPhoneNumber()); + return new Result().success(wuser.getPhoneNumber()); } if (!redisUtil.hasKey(HDConstant.openidPrefix + wuid)) { return new Result().error(CodeMsg.WECHAT_SERRION_ERROR); @@ -129,7 +127,7 @@ public class LoginServiceImpl implements LoginService { wechatUserDao.update(wu, new QueryWrapper().eq("wuid", wuid)); return new Result().success(phoneNumber); } - return new Result().error(CodeMsg.WECHAT_API_ERROR, jo); + return new Result().error(CodeMsg.WECHAT_API_ERROR, jo.toString()); } @@ -140,11 +138,11 @@ public class LoginServiceImpl implements LoginService { if(StringUtils.isEmpty(wxToken)) { String randomStr = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_FORMATTER); wxToken = XCXUtil.wechatToken(wuid, randomStr); - redisUtil.set(HDConstant.tokenRandomStr + wuid, randomStr); + redisUtil.set(HDConstant.tokenRandomStr + wuid, randomStr, 0); + // 缓存数据 } //刷新token - redisUtil.set(HDConstant.wxToken + wuid, wxToken, tokenExpHour * 3600L); - + redisUtil.set(HDConstant.wxToken + wuid, wxToken, 0); Map m = new HashMap(); m.put("wuid", wuid); m.put("wxToken", wxToken); diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/OrderServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/OrderServiceImpl.java index 99bf7e1..fcb38f0 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/OrderServiceImpl.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/OrderServiceImpl.java @@ -1,13 +1,16 @@ package com.evotech.hd.wechat.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.ResultUtil; +import com.evotech.hd.common.core.Dto.order.OrderListVo; import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +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.OrderSwapBatteryStep; import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.wechat.service.OrderService; import com.evotech.hd.wechat.service.rpc.CloudService; import jakarta.annotation.Resource; @@ -31,7 +34,7 @@ public class OrderServiceImpl implements OrderService { @Override - public Result addPre(OrderSwapBatteryPre osbp) { + public Result addPre(OrderSwapBatteryPre osbp) { return cloudService.addPre(osbp); } @@ -41,16 +44,16 @@ public class OrderServiceImpl implements OrderService { } @Override - public Result> listPre(PageListSwapOrderPreRequest plsopr) { + public Result> listPre(PageListSwapOrderPreRequest plsopr) { if (Optional.ofNullable(plsopr.getUcode()).isPresent()) { return cloudService.listPre(plsopr); } else { - return new Result>().error("用户编码不能为空!"); + return new Result>().error("用户编码不能为空!"); } } @Override - public Result> list(PageListSwapOrderRequest plsor) { + public Result> list(PageListSwapOrderRequest plsor) { if (!StringUtils.hasText(plsor.getUserId())) { return null; } @@ -73,15 +76,20 @@ public class OrderServiceImpl implements OrderService { } @Override - public Result startSwap(String wuid ,String orderId ) throws Exception { + public Result startSwap(String wuid ,String orderNo ) throws Exception { /*if (!wuid.equals(request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY))) { throw new Exception("账号错误"); }*/ - return cloudService.startSwap(wuid,orderId); + return cloudService.startSwap(wuid,orderNo); } @Override public Result getStartSwap(String wuid, String orderId) { return cloudService.getStartSwap(wuid,orderId); } + + @Override + public Order getOneByOrderNo(String orderNo) { + return ResultUtil.getValue(cloudService.selectOneByOrderNo(orderNo)); + } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatNativePayServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatNativePayServiceImpl.java index d5a9631..7e010b4 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatNativePayServiceImpl.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatNativePayServiceImpl.java @@ -1,48 +1,39 @@ package com.evotech.hd.wechat.service.impl; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.springframework.beans.BeanUtils; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder; -import com.evotech.hd.common.core.entity.wechat.WechatPayPreOrder; -import com.evotech.hd.common.core.utils.XCXUtil; -import com.evotech.hd.wechat.config.XcxProperties; -import com.evotech.hd.wechat.entity.NativePayVO; -import com.evotech.hd.wechat.service.WechatNativePayService; -import com.evotech.hd.wechat.utils.wechatpay.WechatPayComponent; -import com.evotech.hd.wechat.utils.wechatpay.NativePayUtil; -import com.evotech.hd.wechat.utils.wechatpay.WechatPayUtil; -import com.wechat.pay.java.core.RSAPublicKeyConfig; -import com.wechat.pay.java.core.notification.RSAPublicKeyNotificationConfig; -import com.wechat.pay.java.service.payments.nativepay.NativePayService; -import com.wechat.pay.java.service.payments.model.Transaction; -import com.wechat.pay.java.service.payments.nativepay.model.Amount; -import com.wechat.pay.java.service.payments.nativepay.model.Detail; -import com.wechat.pay.java.service.payments.nativepay.model.GoodsDetail; -import com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest; -import com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse; -import com.wechat.pay.java.service.payments.nativepay.model.QueryOrderByIdRequest; -import com.wechat.pay.java.service.payments.nativepay.model.QueryOrderByOutTradeNoRequest; -import com.wechat.pay.java.service.payments.nativepay.model.SceneInfo; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; +import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder; +import com.evotech.hd.common.core.entity.wechat.WechatPayPreOrder; +import com.evotech.hd.common.core.utils.XCXUtil; +import com.evotech.hd.wechat.config.XcxProperties; +import com.evotech.hd.wechat.entity.NativePayVO; +import com.evotech.hd.wechat.service.WechatNativePayService; +import com.evotech.hd.wechat.utils.wechatpay.NativePayUtil; +import com.evotech.hd.wechat.utils.wechatpay.WechatPayComponent; +import com.evotech.hd.wechat.utils.wechatpay.WechatPayUtil; +import com.wechat.pay.java.core.RSAPublicKeyConfig; +import com.wechat.pay.java.core.notification.RSAPublicKeyNotificationConfig; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.payments.nativepay.NativePayService; +import com.wechat.pay.java.service.payments.nativepay.model.*; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.BeanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; @Service public class WechatNativePayServiceImpl implements WechatNativePayService { @@ -141,7 +132,7 @@ public class WechatNativePayServiceImpl implements WechatNativePayService { jo1.set("codeUrl", qrAsBase64String); jo1.set("OutTradeNo", outTradeNo); - return new Result().success(jo1); + return new Result().success(jo1.toString()); } @@ -180,7 +171,7 @@ public class WechatNativePayServiceImpl implements WechatNativePayService { request.setOutTradeNo(outTradeNo); transaction = nativeService.queryOrderByOutTradeNo(request); } - return new Result().success(transaction); + return new Result().success(JSONUtil.toJsonStr(transaction)); } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatPayServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatPayServiceImpl.java index 7376860..046f1c1 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatPayServiceImpl.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatPayServiceImpl.java @@ -1,31 +1,20 @@ package com.evotech.hd.wechat.service.impl; -import java.io.IOException; -import java.util.Date; -import java.util.List; - -import ch.qos.logback.classic.spi.EventArgUtil; -import cn.hutool.json.JSON; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.entity.cloud.WalletAccount; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.wechat.service.WechatUserService; -import com.evotech.hd.wechat.service.rpc.CloudService; -import org.springframework.beans.BeanUtils; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.common.core.dao.wechat.WechatPayPreOrderDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.wechat.WechatPayPreOrder; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.utils.XCXUtil; +import com.evotech.hd.common.core.entity.order.OrderRecharge; +import com.evotech.hd.common.core.entity.order.OrderRefund; +import com.evotech.hd.common.core.utils.Collections; +import com.evotech.hd.common.core.utils.CommonUtil; import com.evotech.hd.wechat.config.XcxProperties; import com.evotech.hd.wechat.entity.PrePayVO; +import com.evotech.hd.wechat.entity.RefundVO; import com.evotech.hd.wechat.service.WechatPayService; +import com.evotech.hd.wechat.service.processor.PayExchangeProcessor; +import com.evotech.hd.wechat.service.rpc.CloudService; import com.evotech.hd.wechat.utils.wechatpay.WechatPayComponent; import com.evotech.hd.wechat.utils.wechatpay.WechatPayUtil; import com.wechat.pay.java.core.RSAPublicKeyConfig; @@ -37,31 +26,30 @@ import com.wechat.pay.java.service.billdownload.BillDownloadService; import com.wechat.pay.java.service.billdownload.model.GetTradeBillRequest; import com.wechat.pay.java.service.billdownload.model.QueryBillEntity; import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; -import com.wechat.pay.java.service.payments.jsapi.model.Amount; -import com.wechat.pay.java.service.payments.jsapi.model.Detail; -import com.wechat.pay.java.service.payments.jsapi.model.GoodsDetail; -import com.wechat.pay.java.service.payments.jsapi.model.Payer; -import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest; import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; import com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByIdRequest; import com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByOutTradeNoRequest; -import com.wechat.pay.java.service.payments.jsapi.model.SceneInfo; import com.wechat.pay.java.service.payments.model.Transaction; import com.wechat.pay.java.service.refund.RefundService; -import com.wechat.pay.java.service.refund.model.AmountReq; -import com.wechat.pay.java.service.refund.model.CreateRequest; -import com.wechat.pay.java.service.refund.model.QueryByOutRefundNoRequest; -import com.wechat.pay.java.service.refund.model.Refund; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; +import com.wechat.pay.java.service.refund.model.*; import jakarta.annotation.Resource; import jakarta.servlet.ServletInputStream; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; @Service @Slf4j @@ -74,120 +62,186 @@ public class WechatPayServiceImpl implements WechatPayService { @Resource private XcxProperties xcxProperties; @Resource - private WechatUserDao wechatUserDao; - @Resource - private WechatPayPreOrderDao preOrderDao; - @Resource private WechatPayComponent wechatPayComponent; @Resource private CloudService cloudService; + @Autowired + private ApplicationContext applicationContext; + @Override - public Result xcxPrepay(PrePayVO prePay) { - // 校验用户 - WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", prePay.getWuid())); - if (wuser == null || !StringUtils.hasText(wuser.getOpenid())) { - return new Result().error("用户信息错误"); - } - - //检查账户是否存在 + public com.evotech.hd.common.core.Dto.Result xcxPrepay(PrePayVO prePay) { + //首选检查支付类型 JSONObject entries = JSONUtil.parseObj(prePay.getAttach()); - if (!StringUtils.hasText(entries.getStr("walletCode"))) { - Result walleCode = cloudService.getWalleCode(prePay.getWuid()); - if (!walleCode.getCode().equals(CodeMsg.SUCCESS.getCode())) { - return new Result().error("钱包账户创建失败"); - } - String[] split = String.valueOf(walleCode.getData()).split("_"); - if (!StringUtils.hasText(entries.getStr("trader"))) { - prePay.setAttach(JSONUtil.toJsonStr(entries.set("trader", split[0]))); - } - prePay.setAttach(JSONUtil.toJsonStr(entries.set("walletCode", split[1]))); - - } //判断是充值订单还是订单支付 - if (!StringUtils.hasText(entries.getStr("type"))){ - String type = entries.getStr("type"); - if (StringUtils.hasText(type) && type.equals("1")) { - // 充值订单 + String payType = entries.getStr("type"); + if (StringUtils.isEmpty(payType)){ + return new com.evotech.hd.common.core.Dto.Result().error("请在正确途径支付"); + } + Map mqttRequestExchangeProcessorMap = applicationContext.getBeansOfType(PayExchangeProcessor.class); + for (PayExchangeProcessor processor : mqttRequestExchangeProcessorMap.values()) { + if(processor.accept(entries)){ + return processor.exchange(prePay); } } - WechatPayPreOrder preOrder = new WechatPayPreOrder(); - // 组装数据 - PrepayRequest request = new PrepayRequest(); - // 基础信息 - request.setTimeExpire(prePay.getTimeExp() == null?DateUtil.format(DateUtil.offsetMinute(new Date(), 30), DatePattern.UTC_PATTERN): DateUtil.format(prePay.getTimeExp(), DatePattern.UTC_PATTERN)); - request.setAttach(prePay.getAttach()); - request.setAppid(xcxProperties.getAppid()); - request.setMchid(xcxProperties.getMchid()); - request.setDescription(prePay.getDescription()); - request.setNotifyUrl(xcxProperties.getNotifyUrl()); - request.setOutTradeNo(XCXUtil.payOutTradeNo(21)); - // 金额 - Amount amount = new Amount(); -// amount.setTotal(prePay.getMoney()); - amount.setTotal(1); - request.setAmount(amount); - preOrder.setTotal(amount.getTotal()); - // 付款人 - Payer payer = new Payer(); - payer.setOpenid(wuser.getOpenid()); - request.setPayer(payer); - // 商品信息 - Detail detail = new Detail(); - detail.setCostPrice(prePay.getCostPrice()); - detail.setInvoiceId(prePay.getInvoiceId()); - List goodsDetail = prePay.getGoodsDetail(); - if (goodsDetail != null && !goodsDetail.isEmpty()) { - detail.setGoodsDetail(goodsDetail); - preOrder.setGoodsDetail(JSONUtil.toJsonStr(goodsDetail)); - request.setDetail(detail); - } - - // 场景信息 - if (StringUtils.hasText(prePay.getPayerClientIp())) { - SceneInfo si = new SceneInfo(); - si.setPayerClientIp(prePay.getPayerClientIp()); - si.setDeviceId(prePay.getDeviceId()); - request.setSceneInfo(si); - preOrder.setPayerClientIp(prePay.getPayerClientIp()); - preOrder.setDeviceId(prePay.getDeviceId()); - } - PrepayWithRequestPaymentResponse response = WechatPayUtil.jsapiPrepay(config, request); - - - // 写表 - BeanUtils.copyProperties(request, preOrder); - wechatPayComponent.wechatPrePayLog(prePay.getWuid(), prePay.getCcode(), prePay.getCostPrice(), preOrder, JSONUtil.toJsonStr(response)); - - return new Result().success(response); + return new com.evotech.hd.common.core.Dto.Result().error("请在正确途径支付"); } /** * 用SDK中封装的NotificationParser解析器进行验签和解密 */ @Override - public ResponseEntity PrepayBack(HttpServletRequest request) { + public ResponseEntity notifyBack(HttpServletRequest request) { // 1. 验签解密 Transaction transaction; try { transaction = WechatPayUtil.decryptWechatPayNotify(request, notificationConfig); - log.info("请求时间{} 验签解密验签解密验签transaction>>>>>{}" ,new Date() ,JSONUtil.toJsonStr(transaction)); } catch (Exception e) { - JSONObject jo = new JSONObject(); - jo.set("code", "FAIL"); - jo.set("message", "解析body异常"); - return new ResponseEntity(jo.toJSONString(0), HttpStatus.FAILED_DEPENDENCY); + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code","FAIL","message","解析body异常")), HttpStatus.FAILED_DEPENDENCY); } - // 2. 业务处理逻辑 - wechatPayComponent.wechatPayBussinessHandle(transaction); - - // 3. 回复微信 - return new ResponseEntity("", HttpStatus.OK); + JSONObject entries = JSONUtil.parseObj(transaction.getAttach()); + Map mqttRequestExchangeProcessorMap = applicationContext.getBeansOfType(PayExchangeProcessor.class); + for (PayExchangeProcessor processor : mqttRequestExchangeProcessorMap.values()) { + if(processor.accept(entries)){ + return processor.notifyMsg(transaction); + } + } +// // 3. 回复微信 + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code","FAIL","message","附加参数信息解析失败")), HttpStatus.FAILED_DEPENDENCY); } + @Override + public com.evotech.hd.common.core.Dto.Result refunds(RefundVO refundVO) { + try { + /*** + * 1. 首先查询退款金额和账户余额对比, 是否在余额范围内 + * 2. 查询当前时间近1年的充值成功的订单 按照支付时间倒序 优先退最近付款的订单(自支付成功时间+365天) + * 3. 循环所有支付成功的订单, 进行轮询退款, 直到退款完成 + */ + WalletAccount walletAccount = ResultUtil.getValue(cloudService.getWalletAccountByWechatId(refundVO.getWuid())); + //账户为空, 或者账户充值金额 小于 退款金额 + if(ObjectUtils.isEmpty(walletAccount) || walletAccount.getRechargeAmount().compareTo(refundVO.getTotal()) < 0){ + return new com.evotech.hd.common.core.Dto.Result().error((ObjectUtils.isEmpty(walletAccount) ? "账户不存在" : "退款金额超出了充值金额")); + } + + //查询所有充值成功的订单 + List refundList = ResultUtil.getValue(cloudService.refundList(refundVO.getWuid())); + if(Collections.isEmpty(refundList)){ + return new com.evotech.hd.common.core.Dto.Result().error("未找到充值订单"); + } + List list = Collections.emptyList(); + //循环对比充值订单 生成待退款订单, 并记录信息, 退款成功后, 更改充值订单状态为退款订单 + Integer refundTotal = 0; + for (OrderRecharge recharge : refundList){ + if(refundTotal >= refundVO.getTotal()){ + break; + } + //全额退款 + OrderRefund refund = new OrderRefund(); + refund.setTransactionId(recharge.getNotifyOrderNo()); + refund.setRefundOrderNo("YT"+CommonUtil.payTradeNo(9)); + refund.setOutTradeNo(recharge.getOrderNo()); + refund.setReason("用户申请退款"); + refund.setOrderAmount(recharge.getOrderAmount()); + refund.setRefundWechatId(refundVO.getWuid()); + refund.setCtime(new Date()); + //判断是否部分退款 + if(recharge.getOrderAmount() + refundTotal <= refundVO.getTotal()){ + refund.setRefundAmount(recharge.getOrderAmount()); + }else if(refundTotal < refundVO.getTotal() && (recharge.getOrderAmount() + refundTotal) > refundVO.getTotal()){ + //部分退款 + refund.setRefundAmount((recharge.getOrderAmount() - refundTotal )); + } + //记录退款金额 + refundTotal += refund.getRefundAmount(); + list.add(refund); + } + + RefundService refundService = new RefundService.Builder().config(config).build(); + CreateRequest request = new CreateRequest(); + request.setNotifyUrl(xcxProperties.getRefundNotifyUrl()); + for (OrderRefund refund : list){ + BeanUtils.copyProperties(refund, request); + request.setOutRefundNo(refund.getRefundOrderNo()); + AmountReq amount = new AmountReq(); + amount.setRefund(Long.valueOf(refund.getRefundAmount())); + amount.setCurrency("CNY"); + amount.setTotal(Long.valueOf(refund.getOrderAmount())); + request.setAmount(amount); + //发起退款请求 + Refund refundResult = refundService.create(request); + refund.setRefundId(refundResult.getRefundId()); + refund.setRefundStatus(refundResult.getStatus().name()); + refund.setRefundRequestInfo(JSONUtil.toJsonStr(refundResult)); + } + //保存退款 + cloudService.addOrderRefundList(JSONUtil.toJsonStr(list)); + + String msg = ""; + if(refundTotal < refundVO.getTotal()) { + msg = "订单时长超过一年, 仅支持退款"+CommonUtil.fenToYuan(new BigDecimal(refundTotal))+"元"; + } + return new com.evotech.hd.common.core.Dto.Result().success(msg); + } catch (Exception e) { + e.printStackTrace(); + return new com.evotech.hd.common.core.Dto.Result().error("剩余金额请联系客服人员进行继续退款!"); + } + } + + /*** + * 退款回调通知 + * @param request + * @return + */ + @Override + public ResponseEntity refundsBack(HttpServletRequest request) { + String body = ""; + try { + ServletInputStream inputStream = request.getInputStream(); + body = IOUtil.toString(inputStream); + } catch (IOException e) { + e.printStackTrace(); + } + // 1. 初始化解析器 + NotificationParser parser = new NotificationParser(notificationConfig); + // 2. 构造解析器所需参数 + RequestParam param = new RequestParam.Builder() + // 序列号 + .serialNumber(request.getHeader("Wechatpay-Serial")) + // 随机数 + .nonce(request.getHeader("Wechatpay-Nonce")) + // 签名 + .signature(request.getHeader("Wechatpay-Signature")) + // 时间戳 + .timestamp(request.getHeader("Wechatpay-Timestamp")) + .body(body) + .build(); + + // 3. 验签、解密,parse方法中包含2个方法,一个验签,一个解密 + Refund refund; + try { + refund = parser.parse(param, Refund.class); + } catch (Exception e) { + e.printStackTrace(); + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", e.getMessage())), HttpStatus.FAILED_DEPENDENCY); + } + + //查询退款状态, + RefundService refundService = new RefundService.Builder().config(config).build(); + QueryByOutRefundNoRequest queryByOutRefundNoRequest = new QueryByOutRefundNoRequest(); + queryByOutRefundNoRequest.setOutRefundNo(refund.getOutRefundNo()); + refund = refundService.queryByOutRefundNo(queryByOutRefundNoRequest); + if(refund.getStatus() == null || Status.PROCESSING.name().equals(refund.getStatus().name())){ + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", "等待微信商户退款处理完成")), HttpStatus.FAILED_DEPENDENCY); + } + // 4. 业务处理逻辑 + System.out.println("\r\n=====>>>>>" + JSONUtil.toJsonPrettyStr(refund)); + return wechatPayComponent.wechatBackBussinessHandle(refund); + } + @Override @@ -205,78 +259,10 @@ public class WechatPayServiceImpl implements WechatPayService { request.setOutTradeNo(outTradeNo); transaction = jsapiService.queryOrderByOutTradeNo(request); } - return new Result().success(transaction); + return new Result().success(JSONUtil.toJsonStr(transaction)); } - @Override - public Result refunds(String outTradeNo, String transactionId, String reason, Integer money, Integer total) { - try { - RefundService refundService = new RefundService.Builder().config(config).build(); - // - CreateRequest request = new CreateRequest(); - request.setOutTradeNo(outTradeNo); - request.setTransactionId(transactionId); - request.setReason(reason); - request.setOutRefundNo("HD1001REFUND" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_FORMATTER) + RandomUtil.randomInt(1000, 10000)); - request.setNotifyUrl(xcxProperties.getRefundNotifyUrl()); -// request.setNotifyUrl("https://www.famhub.cn/gateway/wechat/wechatpay/refundsback/msg"); - AmountReq amount = new AmountReq(); - amount.setRefund(Long.valueOf(money)); - amount.setCurrency("CNY"); - amount.setTotal(Long.valueOf(total)); - request.setAmount(amount); - Refund refund = refundService.create(request); - return new Result().success(refund); - - } catch (Exception e) { - e.printStackTrace(); - return new Result().error("剩余金额请联系客服人员进行继续退款!"); - } - - } - - @Override - public ResponseEntity refundsBack(HttpServletRequest request) { - String body = ""; - try { - ServletInputStream inputStream = request.getInputStream(); - body = IOUtil.toString(inputStream); - } catch (IOException e) { - e.printStackTrace(); - } - // 1. 初始化解析器 - NotificationParser parser = new NotificationParser(notificationConfig); - // 2. 构造解析器所需参数 - RequestParam param = new RequestParam.Builder() - // 序列号 - .serialNumber(request.getHeader("Wechatpay-Serial")) - // 随机数 - .nonce(request.getHeader("Wechatpay-Nonce")) - // 签名 - .signature(request.getHeader("Wechatpay-Signature")) - // 时间戳 - .timestamp(request.getHeader("Wechatpay-Timestamp")) - .body(body) - .build(); - - // 3. 验签、解密,parse方法中包含2个方法,一个验签,一个解密 - Refund refund; - try { - refund = parser.parse(param, Refund.class); - } catch (Exception e) { - e.printStackTrace(); - JSONObject jo = new JSONObject(); - jo.set("code", "FAIL"); - jo.set("message", e.getMessage()); - return new ResponseEntity(jo.toJSONString(0), HttpStatus.FAILED_DEPENDENCY); - } - // 4. 业务处理逻辑 - System.out.println("\r\n=====>>>>>" + JSONUtil.toJsonPrettyStr(refund)); - wechatPayComponent.wechatBackBussinessHandle(refund); - - return new ResponseEntity("", HttpStatus.OK); - } @Override public Result refundsQuery(String outRefundNo) { @@ -286,7 +272,7 @@ public class WechatPayServiceImpl implements WechatPayService { request.setOutRefundNo(outRefundNo); Refund refund = refundService.queryByOutRefundNo(request); - return new Result().success(refund); + return new Result().success(JSONUtil.toJsonStr(refund)); } @Override diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java index 5cd5c70..20ed0e9 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java @@ -2,10 +2,12 @@ package com.evotech.hd.wechat.service.impl; import cn.hutool.core.util.DesensitizedUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.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; @@ -18,12 +20,10 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.List; - @Service @Slf4j -public class WechatUserServiceImpl implements WechatUserService { +public class WechatUserServiceImpl extends ServiceImpl implements WechatUserService { @Resource private WechatUserDao wechatUserDao; @@ -31,39 +31,49 @@ public class WechatUserServiceImpl implements WechatUserService { private CloudService cloudService; - - @Override - public Result update(WechatUser wuser) { - WechatUser user = new WechatUser(); - user.setName(wuser.getName()); - user.setGender(wuser.getGender()); - user.setNickName(wuser.getNickName()); - user.setPhoneNumber(wuser.getPhoneNumber()); - user.setAvatarUrl(wuser.getAvatarUrl()); - - WalletAccount walletAccount = new WalletAccount(); - walletAccount.setOwnerId(wuser.getWuid()); - walletAccount.setAccName(wuser.getName()); - cloudService.updateName(walletAccount); - - int n = wechatUserDao.update(user, new QueryWrapper().eq("wuid", wuser.getWuid())); - if (n == 1) { - return new Result().success(1); - } - return new Result().error("修改微信用户信息出错!"); - } - @Override public Result userByUid(String wuid) { WechatUser user = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wuid)); if (user == null) { - return new Result().error(CodeMsg.DATABASE_RESULT_NULL); + return Result.getInstance().build(WechatUser.class).error(CodeMsg.DATABASE_RESULT_NULL); } user.setOpenid(DesensitizedUtil.idCardNum(user.getOpenid(), 5, 6)); -// user.setPhoneNumber(DesensitizedUtil.mobilePhone(user.getPhoneNumber())); - return new Result().success(user); + return Result.getInstance().build(WechatUser.class).success(user); } + @Override + public Result walletOne(String wuid, HttpServletRequest request) { + if (wuid == null || !wuid.equals(request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY))) { + log.error("walletOne: 当前参数的wuid:{}=== 请求中的wuid:{}", wuid, request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY)); + return Result.getInstance().build(WalletAccount.class).error("账号错误"); + } + return cloudService.getWalletAccountByWechatId(wuid); + } + + + @Override + public Result updateWechatUser(WechatUser wechatUser) { + WechatUser user = new WechatUser(); + user.setName(wechatUser.getName()); + user.setGender(wechatUser.getGender()); + user.setNickName(wechatUser.getNickName()); + user.setPhoneNumber(wechatUser.getPhoneNumber()); + user.setAvatarUrl(wechatUser.getAvatarUrl()); + + WalletAccount walletAccount = new WalletAccount(); + walletAccount.setOwnerId(wechatUser.getWuid()); + walletAccount.setAccName(wechatUser.getName()); + cloudService.updateWechat(walletAccount); + + int n = wechatUserDao.update(user, new QueryWrapper().eq("wuid", wechatUser.getWuid())); + if (n == 1) { + return new Result().success("1"); + } + return new Result().error("修改微信用户信息出错!"); + } + + + @Override public Result bindCompany(String wuid, String pcode, String pname) { WechatUser user = new WechatUser(); @@ -90,18 +100,18 @@ public class WechatUserServiceImpl implements WechatUserService { return res; } - @Override - public Result> listWallet(String wuid, HttpServletRequest request) { - if (wuid == null || !wuid.equals(request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY))) { - log.error("listWallet: 当前参数的wuid:{}=== 请求中的wuid:{}", wuid, request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY)); - return new Result>().error("账号错误"); - } - - return cloudService.listWallet(wuid); - } +// @Override +// public Result> listWallet(String wuid, HttpServletRequest request) { +// if (wuid == null || !wuid.equals(request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY))) { +// log.error("listWallet: 当前参数的wuid:{}=== 请求中的wuid:{}", wuid, request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY)); +// return new Result>().error("账号错误"); +// } +// +// return cloudService.listWallet(wuid); +// } @Override - public Result> listWalletDetail(String walletCode, BasePageRequest basePage) { + public Result> listWalletDetail(String walletCode, BasePageRequest basePage) { PageListWalletRequest plwr = new PageListWalletRequest(); plwr.setCode(walletCode); plwr.setPageSize(basePage.getPageSize()); @@ -125,4 +135,5 @@ public class WechatUserServiceImpl implements WechatUserService { return cloudService.isOpenAccount(wuid); } + } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/PayExchangeProcessor.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/PayExchangeProcessor.java new file mode 100644 index 0000000..925fb87 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/PayExchangeProcessor.java @@ -0,0 +1,169 @@ +package com.evotech.hd.wechat.service.processor; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.cloud.TradeDetail; +import com.evotech.hd.common.core.entity.wechat.WechatPayPreOrder; +import com.evotech.hd.common.core.entity.wechat.WechatUser; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.enums.PayTypeEnums; +import com.evotech.hd.common.core.utils.Collections; +import com.evotech.hd.wechat.config.XcxProperties; +import com.evotech.hd.wechat.entity.PrePayVO; +import com.evotech.hd.wechat.service.WechatUserService; +import com.evotech.hd.wechat.service.rpc.CloudService; +import com.evotech.hd.wechat.utils.wechatpay.WechatPayComponent; +import com.evotech.hd.wechat.utils.wechatpay.WechatPayUtil; +import com.wechat.pay.java.core.RSAPublicKeyConfig; +import com.wechat.pay.java.service.payments.jsapi.model.*; +import com.wechat.pay.java.service.payments.model.Transaction; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import java.util.Date; +import java.util.List; + +/** + * 接口 + * + * @ClassName:PayExchangeProcessor + * @date: 2025年06月25日 15:15 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface PayExchangeProcessor { + + Logger logger = LoggerFactory.getLogger(PayExchangeProcessor.class); + //微信参数 + XcxProperties xcxProperties = SpringUtil.getBean(XcxProperties.class); + RSAPublicKeyConfig config = SpringUtil.getBean(RSAPublicKeyConfig.class); + + JSONObject getAttach(); + + //验证 + boolean accept(JSONObject entries); + /*** + * 支付接口 + * @param prePay + * @return + */ + Result exchange(PrePayVO prePay); + /*** + * 支付回调 + * @param transaction + * @return + */ + ResponseEntity notifyMsg(Transaction transaction); + + + + default WechatUser getWechatUser(PrePayVO prePay) throws Exception { + // 校验用户 + WechatUser wechatUser = SpringUtil.getBean(WechatUserService.class).getOne(new LambdaQueryWrapper().eq(WechatUser::getWuid, prePay.getWuid())); + if (wechatUser == null || StringUtils.isEmpty(wechatUser.getOpenid())) { + throw new Exception("用户信息错误"); + } + return wechatUser; + } + + default Result pay(PrePayVO prePay, String orderNo, Integer orderAmount){ + WechatUser wechatUser; + try { + wechatUser = getWechatUser(prePay); + } catch (Exception e) { + return new Result().error(e.getMessage()); + } + // 组装数据 + PrepayRequest request = new PrepayRequest(); + BeanUtils.copyProperties(xcxProperties, request); + // 基础信息 + request.setTimeExpire(prePay.getTimeExp() == null? DateUtil.format(DateUtil.offsetMinute(new Date(), 30), DatePattern.UTC_PATTERN): DateUtil.format(prePay.getTimeExp(), DatePattern.UTC_PATTERN)); + request.setAttach(prePay.getAttach()); + request.setDescription(prePay.getDescription()); + request.setOutTradeNo(orderNo); + + // 金额 + Amount amount = new Amount(); + amount.setTotal(orderAmount); + request.setAmount(amount); + // 付款人 + Payer payer = new Payer(); + payer.setOpenid(wechatUser.getOpenid()); + request.setPayer(payer); + // 优惠功能 + Detail detail = new Detail(); + detail.setCostPrice(prePay.getCostPrice()); + detail.setInvoiceId(prePay.getInvoiceId()); + List goodsDetail = prePay.getGoodsDetail(); + if (goodsDetail != null && !goodsDetail.isEmpty()) { + detail.setGoodsDetail(goodsDetail); + request.setDetail(detail); + } + // 场景信息 + if (StringUtils.isNotEmpty(prePay.getPayerClientIp())) { + SceneInfo si = new SceneInfo(); + si.setPayerClientIp(prePay.getPayerClientIp()); + si.setDeviceId(prePay.getDeviceId()); + request.setSceneInfo(si); + } + logger.info("发起支付信息: 订单编号:{}, 请求参数:{}", orderNo, JSONUtil.toJsonStr(request)); + PrepayWithRequestPaymentResponse response = WechatPayUtil.jsapiPrepay(config, request); + + WechatPayPreOrder preOrder = new WechatPayPreOrder(); + preOrder.setTotal(amount.getTotal()); + preOrder.setGoodsDetail(JSONUtil.toJsonStr(goodsDetail)); + preOrder.setPayerClientIp(prePay.getPayerClientIp()); + preOrder.setDeviceId(prePay.getDeviceId()); + BeanUtils.copyProperties(request, preOrder); + SpringUtil.getBean(WechatPayComponent.class).wechatPrePayLog(prePay.getWuid(), prePay.getCcode(), prePay.getCostPrice(), preOrder, JSONUtil.toJsonStr(response)); + + return new Result().success(response); + } + + + default WechatUser getWechatUser(Transaction transaction){ + // 校验用户 + return SpringUtil.getBean(WechatUserService.class).getOne(new LambdaQueryWrapper().eq(WechatUser::getOpenid, transaction.getPayer().getOpenid())); + } + + default ResponseEntity notify(Transaction transaction){ + TradeDetail tradeDetail = new TradeDetail(); + BeanUtils.copyProperties(transaction, tradeDetail); + + WechatUser wechatUser = getWechatUser(transaction); + tradeDetail.setPayWechatId(wechatUser.getWuid()); + tradeDetail.setTrader(wechatUser.getName()); + tradeDetail.setTraderCode(wechatUser.getWuid()); + //交易类型 + tradeDetail.setTradeType(getAttach().getInt("type")); + tradeDetail.setOrderNo(getAttach().getStr("orderNo")); + tradeDetail.setOrderCount(tradeDetail.getOrderNo().split(",").length); + tradeDetail.setTradeAmount(transaction.getAmount().getPayerTotal()); + tradeDetail.setPayType(PayTypeEnums.WECHAT.getCode()); + tradeDetail.setWechatPayApiType(transaction.getTradeType().name()); + tradeDetail.setPayResult(transaction.getTradeState().name()); + tradeDetail.setPayTime(DateUtil.parseISO8601(transaction.getSuccessTime())); + //记录交易信息结果 + tradeDetail.setTradeMessage(JSONUtil.toJsonStr(transaction)); + logger.info("请求时间{} 处理订单开始{}" ,new Date() ,JSONUtil.toJsonStr(tradeDetail)); + // 处理订单信息 + Result result = SpringUtil.getBean(CloudService.class).wechatPayNotifyHandle(tradeDetail); + //解析处理结果 + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + return new ResponseEntity(HttpStatus.OK); + }else{ + logger.error("微信支付回调, 数据处理出现错误: {}", result.getMsg()); + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", "订单信息处理出现错误: "+result.getMsg())), HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/impl/RechargePayExchangeProcessor.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/impl/RechargePayExchangeProcessor.java new file mode 100644 index 0000000..b916920 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/impl/RechargePayExchangeProcessor.java @@ -0,0 +1,55 @@ +package com.evotech.hd.wechat.service.processor.impl; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.utils.Collections; +import com.evotech.hd.common.core.utils.XCXUtil; +import com.evotech.hd.wechat.entity.PrePayVO; +import com.evotech.hd.wechat.service.processor.PayExchangeProcessor; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.model.Transaction; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +/** + * 充值支付类 + * + * @ClassName:RechargePayExchangeProcessor + * @date: 2025年06月25日 15:18 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class RechargePayExchangeProcessor implements PayExchangeProcessor { + JSONObject entries; + + @Override + public JSONObject getAttach() { + return entries; + } + + @Override + public boolean accept(JSONObject entries) { + this.entries = entries; + return entries.getStr("type").equals("1"); + } + + @Override + public Result exchange(PrePayVO prePay) { + System.out.println(JSONUtil.toJsonStr(prePay)); + + //充值订单特殊处理, 先支付, 在生成订单, 多少有点业务逻辑, 但是也能做 + //更新扩展参数 + this.entries = JSONUtil.parseObj(Collections.asMap("type",entries.getInt("type"), "wechatUserId", entries.getInt("traderCode"), "orderNo", XCXUtil.payOutTradeNo(1))); + prePay.setAttach(entries.toString()); + logger.info("发起 充值 订单支付: 支付请求参数:{}, 订单编号:{}, 订单金额:{}", JSONUtil.toJsonStr(prePay), entries.getStr("orderNo"), String.valueOf(prePay.getTotal())); + return pay(prePay, entries.getStr("orderNo"), prePay.getTotal()); + } + + @Override + public ResponseEntity notifyMsg(Transaction transaction) { + return notify(transaction); + } +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/impl/SwapPayExchangeProcessor.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/impl/SwapPayExchangeProcessor.java new file mode 100644 index 0000000..1431d45 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/processor/impl/SwapPayExchangeProcessor.java @@ -0,0 +1,69 @@ +package com.evotech.hd.wechat.service.processor.impl; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.wechat.entity.PrePayVO; +import com.evotech.hd.wechat.service.OrderService; +import com.evotech.hd.wechat.service.processor.PayExchangeProcessor; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.model.Transaction; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +/** + * 订单支付类 + * + * @ClassName:SwapPayExchangeProcessor + * @date: 2025年06月25日 15:18 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class SwapPayExchangeProcessor implements PayExchangeProcessor { + + @Resource + OrderService orderService; + + JSONObject entries; + + @Override + public JSONObject getAttach() { + return entries; + } + + @Override + public boolean accept(JSONObject entries) { + this.entries = entries; + return entries.getStr("type").equals("2"); + } + + @Override + public Result exchange(PrePayVO prePay) { + String orderNo = entries.getStr("orderNo"); + if(StringUtils.isEmpty(orderNo)){ + new Result().error(CodeMsg.PARAM_ERROR,"没找到订单编号"); + } + //查询订单 + Order order = orderService.getOneByOrderNo(orderNo); + if(ObjectUtils.isEmpty(orderNo)){ + new Result().error(CodeMsg.PARAM_ERROR,"没找到订单信息"); + } + logger.info("发起 换电 订单支付: 支付请求参数:{}, 订单编号:{}, 订单金额:{}", JSONUtil.toJsonStr(prePay), order.getOrderNo(), String.valueOf(order.getOrderAmount())); + return pay(prePay, order.getOrderNo(), order.getOrderAmount()); + } + + + @Override + public ResponseEntity notifyMsg(Transaction transaction) { + return notify(transaction); + } + + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java index a3043a9..a05deb4 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java @@ -1,12 +1,16 @@ package com.evotech.hd.wechat.service.rpc; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.order.OrderListVo; import com.evotech.hd.common.core.entity.BasePageRequest; -import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.*; import com.evotech.hd.common.core.entity.cloud.request.*; import com.evotech.hd.common.core.entity.cloud.vo.BatteryStationVO; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.common.core.entity.order.OrderRecharge; +import com.evotech.hd.common.core.entity.order.OrderRefund; import com.evotech.hd.common.core.entity.wechat.WechatPayAttach; -import com.evotech.hd.wechat.entity.PrePayVO; import jakarta.validation.constraints.NotBlank; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -21,29 +25,60 @@ import java.util.Map; @FeignClient(name = "${CLOUD-SERVER-API-NAME}", path = "${CLOUD-SERVER-API-PATH}") public interface CloudService { - @PostMapping(value = "/order/swap/pre/add", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result addPre(OrderSwapBatteryPre osbp); - - @PostMapping(value = "/order/swap/pre/cancel", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + @PostMapping(value = "/order/per/add", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result addPre(OrderSwapBatteryPre osbp); + + @GetMapping(value = "/order/per/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result> listPre(@SpringQueryMap PageListSwapOrderPreRequest plsopr); + + @PostMapping(value = "/order/per/cancel", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result cancelPre(@RequestParam Integer id, @RequestParam Integer status); + + @GetMapping(value = "/order/swap/list",consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result> list(@SpringQueryMap PageListSwapOrderRequest plsor); - @GetMapping(value = "/order/swap/pre/list", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> listPre(@SpringQueryMap PageListSwapOrderPreRequest plsopr); - - @GetMapping(value = "/order/swap/list", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> list(@SpringQueryMap PageListSwapOrderRequest plsor); - - @GetMapping(value = "/order/swap/step/list", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + @GetMapping(value = "/order/swap/step/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result> listStep(@RequestParam String orderNo); - - @GetMapping(value = "/batterystation/liststation", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> listStation(@RequestParam String plateNum); + + @PostMapping(value = "/order/swap/one", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result selectOneByOrderNo(@RequestParam String orderNo); + + @PostMapping(value = "/order/swap/wallet/pay", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result walletPay(@RequestParam String orderNo, @RequestParam String wuid, @RequestParam String uname); + + @PostMapping(value = "/trade/wechatpay/notify", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result wechatPayNotifyHandle(TradeDetail tradeDetail); + + @GetMapping(value = "/order/recharge/refund/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result> refundList(@RequestParam String wechatId); + + @PostMapping(value = "/order/refund/addAll", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result addOrderRefundList(@RequestParam String listJson); + + @PostMapping(value = "/order/refund/orderNo", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result getOrderRefundByOrderNo(@RequestParam String orderNo); + + + @PostMapping(value = "/wallet/wechatId", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result getWalletAccountByWechatId(@RequestParam String wechatId); + + @GetMapping(value = "/battery/station/list/station",consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result> listStation(@RequestParam String longitudeAndLatitude, @RequestParam String plateNum); + + @PostMapping(value = "/wallet/update/wechat", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result updateWechat(@NotBlank WalletAccount wa); + + +// @PostMapping(value = "/trade/wechatpay/backnotify", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) +// public Result wechatBackNotifyHandle(TradeDetail tradeDetail); + + + + + + + + // public Result> listStation(@SpringQueryMap BasePageRequest bpr); @GetMapping(value = "/company/companyByCode", @@ -58,21 +93,13 @@ public interface CloudService { consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result addWallet(WalletAccount wa); - @GetMapping(value = "/wallet/list", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> listWallet(@RequestParam String ownerId); + @GetMapping(value = "/wallet/detail/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> listWalletDetail(@SpringQueryMap PageListWalletRequest plwr); + public Result> listWalletDetail(@SpringQueryMap PageListWalletRequest plwr); - @PostMapping(value = "/trade/wechatpay/notify", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public void wechatPayNotifyHandle(TradeDetail tradeDetail); - - @PostMapping(value = "/order/swap/wallet/pay", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result walletPay(@RequestParam String orderNo, @RequestParam String wuid, @RequestParam String uname); + @PostMapping(value = "/wallet/isOpenAccount", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) @@ -80,7 +107,7 @@ public interface CloudService { @PostMapping(value = "/order/swap/startSwap", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result startSwap( @RequestParam String wuid,String orderId); + public Result startSwap( @RequestParam String wuid, @RequestParam String orderNo); @PostMapping(value = "/order/swap/getStartSwap", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) @@ -93,21 +120,22 @@ public interface CloudService { @PostMapping(value = "/wallet/getPayAttach", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result getPayAttach(@NotBlank String wuid); - @PostMapping(value = "/wallet/updateName", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result updateName(@NotBlank WalletAccount wa); @GetMapping(value = "/company/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> companylist(@RequestParam BasePageRequest bpr); + public Result> companyList(@RequestParam BasePageRequest bpr); @GetMapping(value = "/trade/tradeList", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public List tradeList(@SpringQueryMap PrePayRequest prePay); + + @GetMapping(value = "/wallet/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result> listWallet(@RequestParam String ownerId); + + @PostMapping(value = "/wallet/getDetailById", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public WalletAccount getDetailById(@RequestParam String outTradeNo); - @PostMapping(value = "/trade/wechatpay/backnotify", - consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public void wechatBackNotifyHandle(TradeDetail tradeDetail); + } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/ResourceService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/ResourceService.java index ce1948f..606fa67 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/ResourceService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/ResourceService.java @@ -1,6 +1,6 @@ package com.evotech.hd.wechat.service.rpc; -import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.resource.WechatAgreement; import com.evotech.hd.common.core.entity.resource.WechatSwiper; import org.springframework.cloud.openfeign.FeignClient; diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java b/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java index 41524fc..a69b818 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java @@ -3,27 +3,32 @@ package com.evotech.hd.wechat.utils.wechatpay; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; 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.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.dao.wechat.WechatPayPreOrderDao; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -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.WalletAccount; -import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail; +import com.evotech.hd.common.core.entity.order.OrderRefund; import com.evotech.hd.common.core.entity.wechat.WechatPayAttach; import com.evotech.hd.common.core.entity.wechat.WechatPayPreOrder; import com.evotech.hd.common.core.entity.wechat.WechatUser; +import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.enums.PayTypeEnums; import com.evotech.hd.common.core.enums.TradeTypeEnums; -import com.evotech.hd.common.core.enums.WechatPayApiTypeEnums; +import com.evotech.hd.common.core.utils.Collections; import com.evotech.hd.wechat.service.rpc.CloudService; import com.wechat.pay.java.service.payments.model.Transaction; -import com.wechat.pay.java.service.payments.model.Transaction.TradeTypeEnum; import com.wechat.pay.java.service.refund.model.Refund; import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.util.Date; @@ -56,7 +61,7 @@ public class WechatPayComponent { // 检查钱包账户是否存在 Result accountResult = cloudService.isOpenAccount(wuid); // 如果账户不存在,创建新账户 - if (accountResult.getObj()) { + if (accountResult.getData()) { // 创建钱包账户 WalletAccount walletAccount = new WalletAccount(); walletAccount.setOwnerId(wuid); @@ -108,30 +113,30 @@ public class WechatPayComponent { WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("openid", transaction.getPayer().getOpenid())); if (wuser != null) { - tradeDetail.setPayer(wuser.getWuid()); + tradeDetail.setPayWechatId(wuser.getWuid()); } else { - tradeDetail.setPayer(transaction.getPayer().getOpenid()); + tradeDetail.setPayWechatId(transaction.getPayer().getOpenid()); } // 附加信息处理 WechatPayAttach payAttach = JSONUtil.toBean(transaction.getAttach(), WechatPayAttach.class); - if (wuser != null) { - Result payAttach1 = cloudService.getPayAttach(wuser.getWuid()); - if (payAttach1 != null && payAttach1.getObj() != null) { - payAttach.setTrader(payAttach1.getObj().getTrader()); - payAttach.setTraderCode(payAttach1.getObj().getTraderCode()); - payAttach.setWalletCode(payAttach1.getObj().getWalletCode()); - } - } - +// if (wuser != null) { +// Result payAttach1 = cloudService.getPayAttach(wuser.getWuid()); +// if (payAttach1 != null && payAttach1.getObj() != null) { +// payAttach.setTrader(payAttach1.getObj().getTrader()); +// payAttach.setTraderCode(payAttach1.getObj().getTraderCode()); +// payAttach.setWalletCode(payAttach1.getObj().getWalletCode()); +// } +// } + //交易类型 tradeDetail.setTradeType(payAttach.getType()); - //交易人 - tradeDetail.setTrader(payAttach.getTrader()); - //交易人编码 - tradeDetail.setTraderCode(payAttach.getTraderCode()); - //变动金额的钱包账户 - tradeDetail.setWallet(payAttach.getWalletCode()); - - tradeDetail.setDescription(payAttach.getDescription()); +// //交易人 +// tradeDetail.setTrader(payAttach.getTrader()); +// //交易人编码 +// tradeDetail.setTraderCode(payAttach.getTraderCode()); +// //变动金额的钱包账户 +// tradeDetail.setWallet(payAttach.getWalletCode()); +// +// tradeDetail.setDescription(payAttach.getDescription()); if (payAttach.getType() == TradeTypeEnums.PAYORDER.getCode() && Transaction.TradeTypeEnum.JSAPI.equals(transaction.getTradeType())) { tradeDetail.setOrderNo(payAttach.getOrderNo()); @@ -140,18 +145,12 @@ public class WechatPayComponent { tradeDetail.setTradeAmount(transaction.getAmount().getPayerTotal()); tradeDetail.setPayType(PayTypeEnums.WECHAT.getCode()); - - TradeTypeEnum tradePayType = transaction.getTradeType(); - if (tradePayType.equals(Transaction.TradeTypeEnum.JSAPI)) { - tradeDetail.setWechatPayApiType(WechatPayApiTypeEnums.JSAPI.getCode()); - } - if (tradePayType.equals(Transaction.TradeTypeEnum.NATIVE)) { - tradeDetail.setWechatPayApiType(WechatPayApiTypeEnums.NATIVE.getCode()); - } - + tradeDetail.setWechatPayApiType(transaction.getTradeType().name()); tradeDetail.setPayResult(transaction.getTradeState().name()); - tradeDetail.setPayMsg(transaction.getTradeStateDesc()); - tradeDetail.setPayTime(DateUtil.parseISO8601(transaction.getSuccessTime())); + tradeDetail.setPayTime(DateUtil.parseISO8601(transaction.getSuccessTime())); + //记录交易信息结果 + tradeDetail.setTradeMessage(JSONUtil.toJsonStr(transaction)); + // 2. 处理订单,看要不要异步 log.info("请求时间{} 处理订单开始{}" ,new Date() ,JSONUtil.toJsonStr(tradeDetail)); @@ -163,43 +162,53 @@ public class WechatPayComponent { * 微信退款申请回调业务处理 * @param refund */ - public void wechatBackBussinessHandle(Refund refund) { + public ResponseEntity wechatBackBussinessHandle(Refund refund) { + + //获取退款订单信息 + OrderRefund orderRefund = ResultUtil.getValue(cloudService.getOrderRefundByOrderNo(refund.getOutRefundNo())); + if(ObjectUtils.isEmpty(orderRefund)){ + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", "未找到商户订单信息")), HttpStatus.FAILED_DEPENDENCY); + } + //查询账户信息 + WalletAccount walletAccount = ResultUtil.getValue(cloudService.getWalletAccountByWechatId(orderRefund.getRefundWechatId())); + if(ObjectUtils.isEmpty(walletAccount)){ + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", "未找到用户的账户信息")), HttpStatus.FAILED_DEPENDENCY); + } + //查询微信用户细腻 + WechatUser wechatUser = wechatUserDao.selectOne(new LambdaQueryWrapper().eq(WechatUser::getWuid, walletAccount.getOwnerId())); + if (ObjectUtils.isEmpty(wechatUser)) { + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", "未找到用户信息")), HttpStatus.FAILED_DEPENDENCY); + } + // 1. 生成交易信息 TradeDetail tradeDetail = new TradeDetail(); BeanUtils.copyProperties(refund, tradeDetail);//transactionId - WalletAccount walletAccount = cloudService.getDetailById(refund.getOutTradeNo()); - - WechatUser wuser = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", walletAccount.getOwnerId())); - if (wuser != null) { - tradeDetail.setPayer(wuser.getWuid()); - } - - tradeDetail.setAppid(wuser.getAppid()); - tradeDetail.setWechatPayApiType("JSAPI"); + tradeDetail.setPayWechatId(wechatUser.getWuid()); + tradeDetail.setAppid(wechatUser.getAppid()); + tradeDetail.setWechatPayApiType(Transaction.TradeTypeEnum.JSAPI.name()); tradeDetail.setTradeType(9); - //交易人 - tradeDetail.setTrader(wuser.getName()); - //交易人编码 - tradeDetail.setTraderCode(wuser.getWuid()); - tradeDetail.setOutTradeNo(refund.getOutTradeNo());//OutRefundNo - //变动金额的钱包账户 - tradeDetail.setWallet(walletAccount.getCode()); + tradeDetail.setTrader(wechatUser.getName()); + tradeDetail.setTraderCode(wechatUser.getWuid()); + tradeDetail.setOutTradeNo(refund.getRefundId());//OutRefundNo - tradeDetail.setDescription(refund.getUserReceivedAccount()); - - tradeDetail.setOrderNo(refund.getRefundId());//refundId + tradeDetail.setOrderNo(refund.getOutRefundNo());//refundId tradeDetail.setOrderCount(1); - tradeDetail.setTradeAmount(Integer.valueOf(refund.getAmount().getTotal().toString())); tradeDetail.setPayType(PayTypeEnums.WECHAT.getCode()); - tradeDetail.setPayResult(refund.getUserReceivedAccount()); - tradeDetail.setPayMsg("余额退款"); + tradeDetail.setPayResult(refund.getStatus().name()); tradeDetail.setPayTime(DateUtil.parseISO8601(refund.getSuccessTime())); + tradeDetail.setTradeMessage(JSONUtil.toJsonStr(refund)); // 2. 处理订单,看要不要异步 - log.info("请求时间{} 处理订单开始{}" ,new Date() ,JSONUtil.toJsonStr(tradeDetail)); - cloudService.wechatBackNotifyHandle(tradeDetail); + com.evotech.hd.common.core.Dto.Result result = cloudService.wechatPayNotifyHandle(tradeDetail); + //解析处理结果 + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + return new ResponseEntity(HttpStatus.OK); + }else{ + log.error("微信支付回调, 数据处理出现错误: {}", result.getMsg()); + return new ResponseEntity(JSONUtil.toJsonStr(Collections.asMap("code", "FAIL", "message", "退款商户出现异常: "+result.getMsg())), HttpStatus.INTERNAL_SERVER_ERROR); + } } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/config/WebSocketConfig.java b/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/config/WebSocketConfig.java new file mode 100644 index 0000000..3fb6f9f --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/config/WebSocketConfig.java @@ -0,0 +1,22 @@ +package com.evotech.hd.wechat.websocket.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +/** + * 类 + * + * @ClassName:WebSocketConfig + * @date: 2025年06月24日 9:58 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Component +public class WebSocketConfig { + @Bean + public ServerEndpointExporter serverEndpointExporter(){ + return new ServerEndpointExporter(); + } +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/controller/WebSocketService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/controller/WebSocketService.java new file mode 100644 index 0000000..c32b0d9 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/controller/WebSocketService.java @@ -0,0 +1,66 @@ +package com.evotech.hd.wechat.websocket.controller; + +import jakarta.websocket.OnClose; +import jakarta.websocket.OnError; +import jakarta.websocket.OnOpen; +import jakarta.websocket.Session; +import jakarta.websocket.server.PathParam; +import jakarta.websocket.server.ServerEndpoint; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + + +/** + * websocket服务类 + * + * @ClassName:WebSocketService + * @date: 2025年06月24日 9:59 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + * + * * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端, + * * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端 + */ +@Component +@ServerEndpoint("/websocket/{wechatId}") +@Slf4j +public class WebSocketService { + + + /** + * 建立连接 + * + * @param session 当前会话 + * @param wechatId 用户id + */ + @OnOpen + public void openConnection(Session session, @PathParam(value = "wechatId") String wechatId) { + WebSocketUtils.SESSION_POOLS.put(wechatId, session); + WebSocketUtils.onlineNum.incrementAndGet(); + log.info(wechatId + "建立连接! 当前连接数为: {}", WebSocketUtils.onlineNum); + } + + /** + * 关闭连接 + * + * @param wechatId 用户id + */ + @OnClose + public void closeConnection(@PathParam(value = "wechatId") String wechatId) { + WebSocketUtils.SESSION_POOLS.remove(wechatId); + int cnt = WebSocketUtils.onlineNum.decrementAndGet(); + log.info(wechatId + "断开连接, 当前连接数为:{}", cnt); + } + + /** + * 发生错误 + * + * @param wechatId 用户id + * @param throwable 错误信息 + */ + @OnError + public void errorConnection(@PathParam(value = "wechatId") String wechatId, Throwable throwable) { + log.error("用户: " + wechatId + " 发生错误", throwable); + } +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/controller/WebSocketUtils.java b/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/controller/WebSocketUtils.java new file mode 100644 index 0000000..7f603bc --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/websocket/controller/WebSocketUtils.java @@ -0,0 +1,80 @@ +package com.evotech.hd.wechat.websocket.controller; + +import jakarta.websocket.Session; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * websocket工具类 + * + * @ClassName:WebSocketUtils + * @date: 2025年06月24日 10:26 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Slf4j +public class WebSocketUtils { + + /** + * 当前在线连接数 + */ + public static final AtomicInteger onlineNum = new AtomicInteger(0); + /** + * 存放每个客户端对应的Session + */ + public static final Map SESSION_POOLS = new ConcurrentHashMap<>(); + + /** + * 消息发送 + * + * @param session 当前会话 + * @param message 消息内容 + * @throws IOException IO异常 + */ + public static void sendMessage(Session session, String message) throws IOException { + if (session != null && session.isOpen()) { + synchronized (session) { + session.getBasicRemote().sendText(message); + } + } + } + + /** + * 消息发送 + * + * @param wechatId 用户ID + * @param message 消息内容 + * @throws IOException IO异常 + */ + public static void sendMessage(String wechatId , String message){ + try { + sendMessage(WebSocketUtils.SESSION_POOLS.get(wechatId), message); + } catch (IOException e) { + log.error("信息推送失败, 用户的微信ID: {}, 推送消息是: {}, 异常原因是:{}", wechatId, message, e.getMessage()); + } + } + + /** + * 消息广播 + * + * @param message 消息内容 + */ + public static void broadCastMessage(String message) { + WebSocketUtils.SESSION_POOLS.forEach((k, v) -> { + if (v.isOpen()) { + try { + sendMessage(v, message); + } catch (IOException e) { + log.error("消息广播推送失败, 推送消息是: {}, 异常原因是:{}", message, e.getMessage()); + throw new RuntimeException(e); + } + } + }); + } +} diff --git a/wechat-server/src/main/resources/application.yml b/wechat-server/src/main/resources/application.yml index 80da29b..1943f52 100644 --- a/wechat-server/src/main/resources/application.yml +++ b/wechat-server/src/main/resources/application.yml @@ -105,11 +105,11 @@ hbyt: FwIDAQAB -----END PUBLIC KEY----- # 支付回调地址 - notify_url: https://api.evo-techina.com/wechat/wechatpay/prepayback/msg + notify_url: http://api.evo-techina.com/wechat/pay/wechatpay/notify # Native支付回调地址 native_notify_url: https://api.evo-techina.com/wechat/wechatpay/native/nativeback/msg # 退款回调地址 - refund_notify_url: https://api.evo-techina.com/wechat/wechatpay/refundsback/msg + refund_notify_url: http://api.evo-techina.com/wechat/pay/wechatpay/refunds/notify # token缓存时效:小时 token_exp_hour: 2 # 公众号 @@ -118,13 +118,26 @@ hbyt: app-secret: 84a6065165ec82862c5e03a010a6dc6c token: r7YASMj3S9vCeeyJPpKeFPR9drhFaSDt encodingAESKey: W3zDuKYFMUlYUXpT4AhRSPkqMS7CgcmnEVQ3enVcTtf + #车辆换电预约成功通知 pre_order_template_id: xmymFQ7DgEHh-rz-6i77-RIcgSzv2RDlEy0E8s0vwFA + #充电开始通知 order_start_template_id: L_AsG7s7DOyyz4dXLb8gIi7h4Sy__ifEAL1Mo8gAw4E - order_swap_end_template_id: wGll5W3NSHXkHjcEprjUbd1shigGOqywGX7A0BVnzUs - order_to_pay_template_id: IE0_RGuN5ufU4GFrCgM9JeUfvlWfbneEuUMDsn0RBQs - order_end_template_id: C5-AGh67aFXChQONqSwxaRrJgFrn_Z25VTlTk0jHSUY - wallet_recharge_template_id: 8JXsn_VkI0S0YZSbT2EKmV_zOxyudo4IsBLeU7V-SFk + #充电结束通知 order_to_pay_template_id2: K6cdaBOkxGJpah0vsz5rq5UBID04mk-eEWp2XM0KyA0 + #换电成功提醒 + order_swap_end_template_id: wGll5W3NSHXkHjcEprjUbd1shigGOqywGX7A0BVnzUs + #充电待结算通知 + order_to_pay_template_id: IE0_RGuN5ufU4GFrCgM9JeUfvlWfbneEuUMDsn0RBQs + #支付成功通知 + order_end_template_id: C5-AGh67aFXChQONqSwxaRrJgFrn_Z25VTlTk0jHSUY + + #账户充值到账提醒 + wallet_recharge_template_id: 8JXsn_VkI0S0YZSbT2EKmV_zOxyudo4IsBLeU7V-SFk + #退款到帐通知 wallet_back_template_id: aO9GDhgIcYnCDCpsVSMB-CeXG3J4JzHlOUV2bhOAvVI + #站端告警模版 alarm_template_id: 8vW_gOzoOMzlJqvtSOF0fLeNm8Z6pttJG63oeFe1gq4 + #车辆换电预约已取消通知 (异常取消, 主动取消不发送) stop_server_template_id: RVrVqa9Y8-AjOCHxp9LWAnYejjphZhLoHJr0pU2nReo + #充电结束待结算 + charging_is_completed_template_id: K6cdaBOkxGJpah0vsz5rqxP8JQq-QyWCCTQkadL5G7g