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 d7501ec..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(); @@ -65,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/order/OrderListVo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java index db9c611..17e56ed 100644 --- 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 @@ -35,6 +35,9 @@ public class OrderListVo { @Schema(name = "换电站") private String stationName; + @Schema(name = "订单金额") + private Integer amount; + @Schema(name = "预约人") private String perName; @@ -44,7 +47,7 @@ public class OrderListVo { private Date orderTime; @Schema(name = "订单状态", description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消, -1-退款") - private Integer orderStatus; + private Integer status; @Schema(name = "交易编码", description = "第三方收款返回的唯一标识") private String notifyOrderNo; 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 0e6032d..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 @@ -22,6 +22,31 @@ public interface HDConstant { } + final class DcConstant{ + /** 出租中 */ + public static final Integer STATUS_CZ = 1; + /** 充电中 */ + public static final Integer STATUS_CD = 2; + /** 空闲 */ + public static final Integer STATUS_KX = 3; + /** 故障 */ + public static final Integer STATUS_GZ = 4; + /** 其他 */ + public static final Integer STATUS_QT = 5; + + /** 来源_电站 */ + public static final Integer SOURCE_FROM_STATION = 1; + /** 来源_车 */ + public static final Integer SOURCE_FROM_CAR = 2; + + /** 电站 */ + public static final Integer POINT_TYPE_STATION = 1; + /** 车 */ + public static final Integer POINT_TYPE_CAR = 2; + + + } + /*** * 订单相关参数 */ diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java similarity index 95% rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java index 8a4c058..d46eeac 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java @@ -1,7 +1,7 @@ -package com.evotech.hd.cloud.dao; +package com.evotech.hd.common.core.dao.cloud; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.evotech.hd.cloud.entity.order.Order; +import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.common.core.Dto.home.*; import com.evotech.hd.common.core.Dto.request.HomeRequestDto; import com.evotech.hd.common.core.constant.HDConstant; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDetailDao.java similarity index 75% rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDetailDao.java index f2e380f..b755707 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDetailDao.java @@ -1,7 +1,7 @@ -package com.evotech.hd.cloud.dao; +package com.evotech.hd.common.core.dao.cloud; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.evotech.hd.cloud.entity.order.OrderDetail; +import com.evotech.hd.common.core.entity.order.OrderDetail; /** * 接口 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/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/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/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/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/BaseOrder.java similarity index 96% rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/BaseOrder.java index 483f344..2899da9 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/BaseOrder.java @@ -1,4 +1,4 @@ -package com.evotech.hd.cloud.entity.order; +package com.evotech.hd.common.core.entity.order; import com.evotech.hd.common.core.entity.IdEntity; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/Order.java similarity index 91% rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/Order.java index 01e2d2d..4afc6f5 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/Order.java @@ -1,4 +1,4 @@ -package com.evotech.hd.cloud.entity.order; +package com.evotech.hd.common.core.entity.order; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -19,7 +19,7 @@ import java.util.Date; */ @EqualsAndHashCode(callSuper = true) @Data -@TableName(value = "yt_t_product_order", schema = "hd_cloud_manage") +@TableName(value = "yt_t_order", schema = "hd_cloud_manage") public class Order extends BaseOrder{ private Integer orderPreId; @@ -32,7 +32,7 @@ public class Order extends BaseOrder{ /*** * 预约用户名称 */ - private String preName; + private String orderPreUname; /*** * 订单类型, 具体参考 HDConstant.OrderConstant.ORDER_TYPE_* */ diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderDetail.java similarity index 95% rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderDetail.java index 65f858a..ad71931 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/order/OrderDetail.java @@ -1,4 +1,4 @@ -package com.evotech.hd.cloud.entity.order; +package com.evotech.hd.common.core.entity.order; import com.baomidou.mybatisplus.annotation.TableName; import com.evotech.hd.common.core.entity.IdEntity; @@ -83,7 +83,7 @@ public class OrderDetail extends IdEntity { /*** * 租借电池包SOC */ - private Double rentBatSOC; + private Double rentBatSoc; /*** * 归还电池包仓位 */ @@ -95,7 +95,7 @@ public class OrderDetail extends IdEntity { /*** * 归还电池包SOC */ - private Double returnBatSOC; + private Double returnBatSoc; /*** * 换电模式 HDConstant.OrderConstant.CHANGE_MODE_* */ 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/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 d4ec4cc..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 @@ -20,6 +20,8 @@ public enum OrderStatusEnums implements BaseEnum { REFUND(-1, "订单退款"), + REFUND_PART(-2, "订单不分退款"), + ; 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/CommonUtil.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java index d7f6269..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 @@ -6,6 +6,7 @@ import cn.hutool.core.util.RandomUtil; import org.springframework.util.ObjectUtils; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; public class CommonUtil { @@ -57,4 +58,11 @@ public class CommonUtil { return yuan.multiply(new BigDecimal(100)); } + public static BigDecimal fenToYuan(BigDecimal yuan){ + if(ObjectUtils.isEmpty(yuan)){ + return new BigDecimal(0); + } + return yuan.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + } + } 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/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/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/order/OrderPerController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java index 9ce61d6..d69560e 100644 --- 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 @@ -1,12 +1,15 @@ package com.evotech.hd.cloud.controller.order; -import com.evotech.hd.common.core.entity.Result; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import org.springdoc.core.annotations.ParameterObject; @@ -16,7 +19,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.text.ParseException; -import java.util.List; /** * 预约订单管理类 @@ -32,26 +34,30 @@ import java.util.List; @RequestMapping("/order/per") public class OrderPerController { + @Resource + OrderSwapBatteryPreService orderSwapBatteryPreService; + + @Operation(summary = "查询预约") + @GetMapping("/list") + @ApiOperationSupport(order = 3) + public Result> 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 orderSwapBatteryService.addPre(osbp); + 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 orderSwapBatteryService.cancelPre(id, null); + return orderSwapBatteryPreService.cancelPre(id, 3); } - @Operation(summary = "查询预约") - @GetMapping("/list") - @ApiOperationSupport(order = 3) - public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException { - return orderSwapBatteryService.listPre(plsopr); - } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/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 b369287..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,15 +1,14 @@ package com.evotech.hd.cloud.controller.order; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.entity.order.Order; import com.evotech.hd.cloud.entity.vo.NativePayVO; import com.evotech.hd.cloud.service.OrderService; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.order.OrderListVo; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import com.evotech.hd.common.core.entity.order.Order; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.swagger.v3.oas.annotations.Hidden; @@ -32,9 +31,6 @@ public class OrderSwapBatteryController { @Resource private OrderService orderService; - private OrderSwapBatteryService orderSwapBatteryService; - - @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 7) @@ -42,6 +38,31 @@ public class OrderSwapBatteryController { return orderService.pageList(plsor); } + @Operation(summary = "查询换电步骤") + @GetMapping("/step/list") + @ApiOperationSupport(order = 9) + public Result> 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) @@ -51,12 +72,7 @@ public class OrderSwapBatteryController { return orderService.listByCompany(plsor); } - @Operation(summary = "查询换电步骤") - @GetMapping("/step/list") - @ApiOperationSupport(order = 9) - public Result> listStep(@NotBlank String orderNo) { - return orderService.listStep(orderNo); - } + @Operation(summary = "费用计算") @PostMapping({"/cost"}) @@ -66,12 +82,6 @@ public class OrderSwapBatteryController { } - @Operation(summary = "个人账户余额支付") - @PostMapping({"/wallet/pay"}) - @ApiOperationSupport(order = 11) - public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { - return orderService.walletPay(orderNo, wuid, uname); - } @Operation(summary = "公司订单余额支付") @@ -106,8 +116,8 @@ public class OrderSwapBatteryController { @Operation(summary = "开始换电") @PostMapping("/startSwap") @ApiOperationSupport(order = 16) - public Result startSwap(@RequestParam String wuid,String orderId) { - return orderService.startSwap(wuid,orderId); + public Result startSwap(@RequestParam String wuid,String orderNo) { + return orderService.startSwap(wuid,orderNo); } @Operation(summary = "获取开始换电回复") @PostMapping("/getStartSwap") 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 6ecf7c6..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 @@ -1,96 +1,100 @@ -//package com.evotech.hd.cloud.controller.test; -// -//import cn.hutool.core.date.DatePattern; -//import cn.hutool.core.date.DateUtil; -//import cn.hutool.core.util.RandomUtil; -//import cn.hutool.json.JSONUtil; -//import com.alibaba.fastjson.JSONObject; -//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -//import com.evotech.hd.cloud.dao.BatteryStationDao; -//import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; -//import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; -//import com.evotech.hd.cloud.device.dh.DHRequestUtil; -//import com.evotech.hd.cloud.mqtt.message.MessageTopic; -//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -//import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; -//import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor; -//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -//import com.evotech.hd.common.core.entity.Result; -//import com.evotech.hd.common.core.entity.cloud.BatteryStation; -//import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -//import com.evotech.hd.common.core.utils.Collections; -//import jakarta.annotation.Resource; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.ApplicationContext; -//import org.springframework.web.bind.annotation.*; -// -//import java.util.Date; -//import java.util.List; -//import java.util.Map; -// -///** -// * @desc: -// * @ClassName:TestController -// * @date: 2025年04月18日 14:40 -// * @author: andy.shi -// * @contact: 17330188597 -// * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 -// */ -//@RestController -//@RequestMapping("/test") -//public class TestController { -// +package com.evotech.hd.cloud.controller.test; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.evotech.hd.cloud.dao.BatteryStationDao; +import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; +import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; +import com.evotech.hd.cloud.device.dh.DHRequestUtil; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor; +import com.evotech.hd.cloud.service.TradeService; +import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.utils.Collections; +import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.Map; + +/** + * @desc: + * @ClassName:TestController + * @date: 2025年04月18日 14:40 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@RestController +@RequestMapping("/test") +public class TestController { + + @Resource + private BatteryStationDao batteryStationDao; + private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; + @Resource + private OrderSwapBatteryPreDao orderSwapBatteryPreDao; + @Resource + private SwapOrderBasicFeeComponent orderBasicFeeComponent; + @Resource + MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor; + @Autowired + private ApplicationContext applicationContext; + @Resource + TradeService tradeService; // @Resource -// private BatteryStationDao batteryStationDao; -// private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; -// @Resource -// private OrderSwapBatteryPreDao orderSwapBatteryPreDao; -// @Resource -// private SwapOrderBasicFeeComponent orderBasicFeeComponent; -// @Resource -// MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor; -// @Autowired -// private ApplicationContext applicationContext; -//// @Resource -//// VehicleService vehicleService; -//// @Resource -//// MongoDBService mongoDBService; -// -// @PostMapping("/mongodb/save") -// public Result mongodbSave() { -// mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}")); -// return new Result().success("搞定"); -// } -// -// @PostMapping("/mongodb/list") -// public Result mongoList() { -//// mongoDBService.find("123", ChargingData.class, Collections.asMap(MongoConstant.REGEX+MongoConstant.SEPARATION+"value","\"batCode\":124")) -// return new Result().success(""); -// } -// -// -// @PostMapping("/mqtt/test") -// public Result mqttTest(@RequestBody JSONObject json) { -// MessageTopic topic = new MessageTopic(); -// topic.setDataDirection(json.getString("dataDirection")); -// topic.setMessageType(json.getString("messageType")); -// topic.setStationCode(json.getString("stationCode")); -// MqttMessageHeader header = new MqttMessageHeader(); -// header.setFunction(json.getString("function")); -// cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy")); -// -// Map mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class); -// for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) { -// if(processor.accept(header.getFunction())){ -// processor.exchange(topic, header, dataBody); -// } -// } -// return new Result().success("搞定"); -// } -// -// +// MongoDBService mongoDBService; + + @PostMapping("/mongodb/save") + public Result mongodbSave() { + mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}")); + return new Result().success("搞定"); + } + + @PostMapping("/mongodb/list") + public Result mongoList() { +// mongoDBService.find("123", ChargingData.class, Collections.asMap(MongoConstant.REGEX+MongoConstant.SEPARATION+"value","\"batCode\":124")) + return new Result().success(""); + } + + + @PostMapping("/mqtt/test") + public Result mqttTest(@RequestBody JSONObject json) { + MessageTopic topic = new MessageTopic(); + topic.setDataDirection(json.getString("dataDirection")); + topic.setMessageType(json.getString("messageType")); + topic.setStationCode(json.getString("stationCode")); + MqttMessageHeader header = new MqttMessageHeader(); + header.setFunction(json.getString("function")); + cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy")); + + Map mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class); + for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) { + if(processor.accept(header.getFunction())){ + processor.exchange(topic, header, dataBody); + } + } + return new Result().success("搞定"); + } + + + @GetMapping("/trade/{tradeId}") + public Result trade(@PathVariable(value = "tradeId") String tradeId) { + + return new Result().success(JSONUtil.toJsonStr(tradeService.getById(tradeId))); + } + + + + // // @GetMapping("/station") // public Result list() { @@ -129,44 +133,44 @@ // System.out.println(JSONUtil.toJsonStr(order)); // return new Result().success(order); // } -// -// -// private String orderNo(String stationCode, Date d) { -// String orderNoPrefix = "YTSO"; -// String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8); -// String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER); -// String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF"); -// return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix; -// } -// -// @PostMapping("/device/live") -// public Result deviceLive(@RequestParam String deviceId, @RequestParam String channelId) { -// return new Result().success(DHRequestUtil.live(deviceId, channelId)); -// } -// -// @PostMapping("/device/liveInfo") -// public Result deviceLiveInfo(@RequestParam String deviceId, @RequestParam String channelId) { -// return new Result().success(DHRequestUtil.liveInfo(deviceId, channelId)); -// } -// -// @PostMapping("/device/delLive") -// public Result delLive(@RequestParam String liveToken) { -// return new Result().success(DHRequestUtil.delLive(liveToken)); -// } -// -// @PostMapping("/device/list") -// public Result deviceList(@RequestParam Integer page, @RequestParam Integer pageSize) { -// return new Result().success(DHRequestUtil.deviceList(Collections.asMap("pageNum", page, "pageSize", pageSize))); -// } -// -// @PostMapping("/device/createDeviceStreamUrl") -// public Result createDeviceStreamUrl(@RequestParam String deviceId, @RequestParam String channelId) { -// return new Result().success(DHRequestUtil.createDeviceStreamUrl(deviceId, channelId)); -// } -// -// @PostMapping("/store/list") -// public Result storeList(@RequestParam Integer page, @RequestParam Integer pageSize) { -// return new Result().success(DHRequestUtil.storeList(page, pageSize)); -// } -// -//} + + + private String orderNo(String stationCode, Date d) { + String orderNoPrefix = "YTSO"; + String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8); + String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER); + String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF"); + return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix; + } + + @PostMapping("/device/live") + public Result deviceLive(@RequestParam String deviceId, @RequestParam String channelId) { + return new Result().success(DHRequestUtil.live(deviceId, channelId)); + } + + @PostMapping("/device/liveInfo") + public Result deviceLiveInfo(@RequestParam String deviceId, @RequestParam String channelId) { + return new Result().success(DHRequestUtil.liveInfo(deviceId, channelId)); + } + + @PostMapping("/device/delLive") + public Result delLive(@RequestParam String liveToken) { + return new Result().success(DHRequestUtil.delLive(liveToken)); + } + + @PostMapping("/device/list") + public Result deviceList(@RequestParam Integer page, @RequestParam Integer pageSize) { + return new Result().success(DHRequestUtil.deviceList(Collections.asMap("pageNum", page, "pageSize", pageSize))); + } + + @PostMapping("/device/createDeviceStreamUrl") + public Result createDeviceStreamUrl(@RequestParam String deviceId, @RequestParam String channelId) { + return new Result().success(DHRequestUtil.createDeviceStreamUrl(deviceId, channelId)); + } + + @PostMapping("/store/list") + public Result storeList(@RequestParam Integer page, @RequestParam Integer pageSize) { + return new Result().success(DHRequestUtil.storeList(page, pageSize)); + } + +} 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/order/RechargeOrder.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/RechargeOrder.java deleted file mode 100644 index e07884c..0000000 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/RechargeOrder.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.evotech.hd.cloud.entity.order; - -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 充值订单类 - * @ClassName:RechargeOrder - * @date: 2025年05月16日 11:06 - * @author: andy.shi - * @contact: 17330188597 - * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName(value = "yt_t_recharge_order", schema = "hd_cloud_manage") -public class RechargeOrder extends BaseOrder { - - -} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java index e7a57fa..14998bf 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java @@ -12,14 +12,13 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; -@Component +//@Component @Order(value = 20) @Slf4j public class MqttConnectInit implements ApplicationRunner { 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..1bda461 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 subscribeAdd(String stationCode) { + log.info("\r\n=====>>>MQTT新增站点订阅主题>>>"); + // 订阅主题 + subscribe(MqttConnectInit.mqttClientMap.get("cloudClient"), stationCode); + log.info("\r\n=====>>>MQTT新增站点订阅完成<<<==="); + } + + public void subscribe(MqttClient cloudClient, String stationCode){ + String topicPrefix = "YTHD/" + stationCode + "/S2M/"; + for (int j = 0; j < mqttMessageTypeArr.length; j++) { + String topic = topicPrefix + mqttMessageTypeArr[j]; + try { + cloudClient.subscribe(topic, mpProperties.getQos()); + log.info("\r\n=====>>>MQTT订阅主题 {} 成功...", topic); + } catch (MqttException e) { + e.printStackTrace(); + log.error("\r\n=====>>>MQTT订阅主题 {} 失败。。。", topic); + } + } + } } 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/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 6438477..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 @@ -2,17 +2,9 @@ package com.evotech.hd.cloud.mqtt.message.handle; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.evotech.hd.cloud.dao.BatteryStationDcDao; -import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; -import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; -import com.evotech.hd.cloud.service.WechatUserService; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.redis.utils.RedisUtil; -import jakarta.annotation.Resource; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request.MqttStrategyRequestExchangeProcessor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -21,7 +13,6 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Map; -import java.util.Objects; /** * request消息 处理 @@ -29,318 +20,20 @@ import java.util.Objects; @Service @Slf4j public class RequestMessageService { - @Resource - private WechatUserService wechatUserService; - @Resource - private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; - @Resource - private MessageUtilService messageUtilService; - @Resource - private BatteryStationDcDao batteryStationDcDao; -// @Resource -// private OrderSwapBatteryDao orderSwapBatteryDao; - - @Resource - private OrderSwapBatteryPreDao orderSwapBatteryPreDao; -// @Resource -// private OrderSwapBatteryService orderSwapBatteryService; - @Resource - private RedisUtil redisUtil; @Autowired private ApplicationContext applicationContext; @Async("taskExecutor") public void request(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { - switch (Objects.requireNonNull(RequestFunctionTypesEnum.getFunctionType(header.getFunction()))) { -// case FUN_CARINFO: -// CarInfoReq carInfoReq = JSONUtil.toBean(dataBody, CarInfoReq.class); -// handleCarInfo(topic, header, carInfoReq); -// break; -// case FUN_BATTERYINFO: -// BatteryInfoReq batteryInfoReq = JSONUtil.toBean(dataBody, BatteryInfoReq.class); -// handleBatteryInfo(topic, header, batteryInfoReq); -// break; -// case FUN_PREORDER: -// OrderSwapBatteryPre orderSwapBatteryPre = JSONUtil.toBean(dataBody, OrderSwapBatteryPre.class); -// handlOrderSwapBatteryPre(topic,header,orderSwapBatteryPre); -// break; -// case FUN_ORDERBYPLATENUM: -// OrderByPlateNumReq orderByPlateNumReq = JSONUtil.toBean(dataBody, OrderByPlateNumReq.class); -// handleOrderByPlateNum(topic, header, orderByPlateNumReq); -// break; -// case FUN_CANCELORDER: -// CancelOrderReq cancelOrder = JSONUtil.toBean(dataBody, CancelOrderReq.class); -// handlOrderCancel(topic,header,cancelOrder); -// break; - case FUN_STARTSWAP: //没搞明白干啥用了, 暂时不动 - BatterySwapResponse battery = JSONUtil.toBean(dataBody, BatterySwapResponse.class); - handlStartSwap(topic,header,battery); - break; - default: - Map 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/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java index 0383c7b..344e41c 100644 --- 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 @@ -3,30 +3,31 @@ package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.entity.order.Order; -import com.evotech.hd.cloud.entity.order.OrderDetail; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; import com.evotech.hd.cloud.mqtt.message.dto.newer.confirm.SwapCompleteConfirm; import com.evotech.hd.cloud.mqtt.message.dto.newer.event.SwapComplete; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.cloud.service.BatteryStationDcService; -import com.evotech.hd.cloud.service.OrderDetailService; -import com.evotech.hd.cloud.service.OrderService; +import com.evotech.hd.cloud.service.*; +import com.evotech.hd.cloud.service.rpc.WechatService; +import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; import com.evotech.hd.common.core.entity.cloud.BatteryTrace; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; import com.evotech.hd.common.core.entity.cloud.VehicleInfo; +import com.evotech.hd.common.core.entity.order.Order; +import com.evotech.hd.common.core.entity.order.OrderDetail; +import com.evotech.hd.common.core.enums.SwapBatteryStepEnum; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.Date; /** @@ -46,6 +47,16 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE OrderService orderService; @Resource OrderDetailService orderDetailService; + @Resource + private SwapOrderBasicFeeComponent orderBasicFeeComponent; + @Resource + private OrderSwapBatteryStepService orderSwapBatteryStepService; + @Resource + private VehicleService vehicleService; + @Resource + BatteryStationDcService batteryStationDcService; + @Resource + WechatService wechatService; @Override public boolean accept(String functionName) { @@ -66,6 +77,7 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE swapRecordConfirm.setAckStatus(MqttResponse.PUBLIC_SUCCESS); swapRecordConfirm.setOrderNo(orderStatus.getOrderNo()); } catch (Exception e) { + e.printStackTrace(); log.error("更新订单信息出现错误: {}", e.getMessage()); response.setCode(MqttResponse.PUBLIC_ERROR); response.setMsg(orderStatus.getOrderNo()); @@ -84,174 +96,107 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE * @param statusData */ private void handleOrderStatus(SwapComplete orderStatus, OrderStatusData statusData) { - // 换电步骤添加最后一条 - if (orderStatus.getStatus() == 3){ - Order order = alterOrderStatus(orderStatus, statusData); - OrderSwapBatteryStep step = new OrderSwapBatteryStep(); - step.setOrderNo(orderStatus.getOrderNo()); - step.setStep(8); - step.setStepTime(orderStatus.getStatusTime()); - step.setCtime(new Date()); - step.setCreater("SYS"); - step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep())); - orderSwapBatteryStepDao.insert(step); - // 修改车上电池编码 - VehicleInfo vi = new VehicleInfo(); - vi.setBatCode(statusData.getRentBatCode()); - vi.setBatSoc(statusData.getRentBatSoc()); - vehicleInfoDao.update(vi, new QueryWrapper().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 Order alterOrderStatus(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()); - if (orderStatus.getStatus() == 3 || orderStatus.getStatus() == 5) { + orderService.updateById(order); + //修改订单状态及金额 + alterOrderStatus(order, statusData); + //记录换电步骤 + alterSwapBatteryStep(orderStatus, statusData, order); + } + + + /** + * 修改订单状态方法 + * @param order + * @param statusData + * @return + */ + private void alterOrderStatus(Order order, OrderStatusData statusData) { + if (order.getStatus() == 3 || order.getStatus() == 5) { //如果订单是完成. 查询订单详情 OrderDetail orderDetail = orderDetailService.getOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId())); - - - - - -// /*** -// * 计费类型, 具体参考 HDConstant.OrderConstant.FEE_TYPE_* -// */ -// private Integer feeType; -// /*** -// * 订单金额 (此金额是当前订单的金额, 不包含基础服务费, 所以不是订单总额) -// */ -// private Integer orderFee; -// /*** -// * 服务费 -// */ -// private Integer serviceFee; -// /*** -// * 单价(分) -// */ -// private Integer unitPrice; -// /*** -// * 服务开始时间 -// */ -// private Date serviceTimeBegin; -// /*** -// * 服务结束时间 -// */ -// private Date serviceTimeEnd; -// /*** -// * 订单开始时间 -// */ -// private Date orderTimeBegin; -// /*** -// * 订单结束时间 -// */ -// private Date orderTimeEnd; -// /*** -// * 费用标准详情 -// */ -// private String feeStandard; -// /*** -// * 耗电量; 如果是soc结算 则是soc的差值, ODO则是里程 -// */ -// private Double electricityQuantity; -// -// /*** -// * 开始充电的电量 -// */ -// private Double electStart; -// /*** -// * 结束充电的电量 -// */ -// private Double electEnd; -// /*** -// * 租借电池包仓位 -// */ -// private String rentBatNo; -// /*** -// * 租借电池包编码 -// */ -// private String rentBatCode; -// /*** -// * 租借电池包SOC -// */ -// private Double rentBatSOC; -// /*** -// * 归还电池包仓位 -// */ -// private String returnBatNo; -// /*** -// * 归还电池包编码 -// */ -// private String returnBatCode; -// /*** -// * 归还电池包SOC -// */ -// private Double returnBatSOC; -// /*** -// * 换电模式 HDConstant.OrderConstant.CHANGE_MODE_* -// */ -// private Integer changeMode; -// /*** -// * 换电车道 HDConstant.OrderConstant.CHANGE_LANE_* -// */ -// private Integer changeLane; - - - - - - - - - - - - - - - order.setServiceTimeEnd(orderStatus.getStatusTime()); - BeanUtils.copyProperties(statusData, osb); + orderDetail.setFeeType(HDConstant.OrderConstant.FEE_TYPE_SOC); + orderDetail.setOrderTimeEnd(new Date()); + orderDetail.setServiceTimeEnd(new Date()); + //copy属性 + BeanUtils.copyProperties(statusData, orderDetail); + orderDetail.setRentBatSoc(Double.valueOf(statusData.getRentBatSoc())); + orderDetail.setReturnBatSoc(Double.valueOf(statusData.getReturnBatSoc())); + switch (orderDetail.getFeeType()){ + case HDConstant.OrderConstant.FEE_TYPE_DL: + orderDetail.setElectricityQuantity(statusData.getElectAmount().doubleValue()); + break; + case HDConstant.OrderConstant.FEE_TYPE_ODO: +// orderDetail.setElectricityQuantity(new BigDecimal(statusData.getSoc()).doubleValue()); + break; + case HDConstant.OrderConstant.FEE_TYPE_SOC: + default: + orderDetail.setElectricityQuantity(new BigDecimal(statusData.getRentBatSoc()).subtract(new BigDecimal(statusData.getReturnBatSoc())).doubleValue()); + break; + } + //计算费用方式 + log.info("\r\n=====>>>订单状态更新处理订单状态开始结算:{},{}",order.getOrderNo(),order.getStatus() ); + //计算费用信息 + orderBasicFeeComponent.orderBasicFee(order, orderDetail); + //发送换电完成推送 + wechatService.sendGzhSwapOrderSuccessMessage(order); + orderService.calculateCost(order); } -// order.setUptime(null); - orderService.updateById(order); - return order; } + + + + /** + * 修改订单费用 + * @param order + * @param statusData + * @return + */ + private void alterSwapBatteryStep(SwapComplete orderStatus, OrderStatusData statusData, Order order) { + if (orderStatus.getStatus() == 3 || orderStatus.getStatus() == 5){ + //生成步骤 + orderSwapBatteryStepService.addOrderSwapBatteryStepBySwapComplete(orderStatus.getOrderNo(), SwapBatteryStepEnum.COMPLETED.getKey(), orderStatus.getStatusTime()); + // 修改车上电池编码 + vehicleService.update(new UpdateWrapper() + .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); + + } + } + + + + + + /** * 添加电池轨迹记录 * @@ -259,7 +204,7 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE * @param statusData * @param osb */ - private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, OrderSwapBattery osb) { + private void addBatteryTrace(SwapComplete orderStatus, OrderStatusData statusData, Order osb) { BatteryTrace bt1 = new BatteryTrace(); bt1.setOrderNo(orderStatus.getOrderNo()); bt1.setBatCode(statusData.getRentBatCode()); 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 index 43fcb05..6a826e2 100644 --- 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 @@ -61,6 +61,8 @@ public class MqttRequestBatteryInfoExchangeProcessorImpl implements MqttStrategy }else { response.setMsg("未查询到电池信息"); } + + logger.info("\r\n站端请求电池数据: MqttRequestBatteryInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_BATTERYINFO, response); } 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 index bd197f9..d4b35bf 100644 --- 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 @@ -43,6 +43,8 @@ public class MqttRequestCancelOrderExchangeProcessorImpl implements MqttStrategy }else{ response = new MqttResponse().error(JSONUtil.toJsonStr(Collections.asMap("orderNo", orderNo)),updateResult.getMsg()); } + + logger.info("\r\n取消订单请求类: MqttRequestCancelOrderExchangeProcessorImpl =====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CANCELORDER, response); } 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 index b5b99b5..819217c 100644 --- 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 @@ -57,6 +57,8 @@ public class MqttRequestCarInfoExchangeProcessorImpl implements MqttStrategyRequ response.setMsg("未查询到车辆信息"); } } + + logger.info("\r\n站端请求车辆信息: MqttRequestCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CARINFO, response); } 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 index c7d9890..ba3d63a 100644 --- 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 @@ -7,7 +7,6 @@ import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; -import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; import com.evotech.hd.cloud.service.WechatUserService; import com.evotech.hd.common.core.Dto.Result; @@ -66,6 +65,8 @@ public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyReq } } } + + logger.info("\r\n站端请求创建预约单类: MqttRequestPreOrderExchangeProcessorImpl =====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_PREORDER, response); // 发送 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 886b9c5..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,7 +6,6 @@ import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; -import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; import com.evotech.hd.cloud.service.VehicleService; import jakarta.annotation.Resource; @@ -66,6 +65,8 @@ public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategy }else{ response = new MqttResponse().error("参数不全, 没有车牌号信息"); } + + logger.info("\r\n接收站端推送的车牌照, 创建车辆信息和预约单: MqttRequestPushCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_PUSH_CAR_INFO, response); } } 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 index 1ef612a..e88c404 100644 --- 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 @@ -5,7 +5,6 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.evotech.hd.cloud.entity.order.Order; import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; @@ -14,10 +13,13 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderByPlateNumReq; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderData; import com.evotech.hd.cloud.service.OrderService; import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; +import com.evotech.hd.cloud.service.OrderSwapBatteryStepService; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.enums.OrderStatusEnums; +import com.evotech.hd.common.core.enums.SwapBatteryStepEnum; import com.evotech.hd.common.redis.utils.RedisServiceUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -44,7 +46,8 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR OrderService orderService; @Resource OrderSwapBatteryPreService OrderSwapBatteryPreService; - + @Resource + private OrderSwapBatteryStepService orderSwapBatteryStepService; @Override public boolean accept(String functionName) { return RequestFunctionTypesEnum.FUN_ORDERBYPLATENUM.getFunction().equals(functionName); @@ -70,7 +73,9 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR .eq(Order::getStationCode, orderSwapBatteryPre.getStationCode()) .eq(Order::getOrderPreId, orderSwapBatteryPre.getPkId()) .eq(Order::getStatus, OrderStatusEnums.CREATE.getCode())); - if (order == null) { + if (ObjectUtils.isNotEmpty(order)) { + response.setCode(MqttResponse.PUBLIC_SUCCESS); + }else{ Result result = orderService.addOrderByPre(orderSwapBatteryPre); //如果不等于成功 if(!CodeMsg.SUCCESS.getCode().equals(result.getCode())){ @@ -80,15 +85,20 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR response.setCode(MqttResponse.PUBLIC_SUCCESS); } } - - //走到此处, 证明上面逻辑没有问题, 需要删除预约单过期标识 - RedisServiceUtils.del("preorder:expire:"+orderSwapBatteryPre.getPkId()); + if(MqttResponse.PUBLIC_SUCCESS.equals(response.getCode())){ + //走到此处, 证明上面逻辑没有问题, 需要删除预约单过期标识 + RedisServiceUtils.del("preorder:expire:"+orderSwapBatteryPre.getPkId()); + //更新预约单为到店使用 + orderSwapBatteryPre.setStatus(2); + OrderSwapBatteryPreService.updateById(orderSwapBatteryPre); + orderSwapBatteryStepService.addOrderSwapBatteryStepBySwapComplete(order.getOrderNo(), SwapBatteryStepEnum.VEHICLES_ENTER_STATION.getKey(), new Date()); + } // 返回数据 OrderData od = new OrderData(); BeanUtils.copyProperties(order, od); response.setData(od); - } + logger.info("\r\n站端根据车牌号查询订单: MqttRequestQueryOrderExchangeProcessorImpl=====>>>message:{}", response.getMsg()); sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_ORDERBYPLATENUM, response); } 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 235c21a..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 @@ -47,6 +47,8 @@ public class MqttRequestStrategyExchangeProcessorImpl implements MqttStrategyReq 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/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 3d0bb25..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; 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 ffa4a0b..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,8 +1,9 @@ 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.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; @@ -16,7 +17,7 @@ public interface BatteryStationDcService extends IService { public Result update(BatteryStationDc bsdc); - public Result> list(PageListBatteryStationDcRequest plbsdcr); + public Result> list(PageListBatteryStationDcRequest plbsdcr); public Result> listTrace(String batteryCode); 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 f0e0daa..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.Result; import com.evotech.hd.common.core.Dto.device.DeviceDto; -import com.evotech.hd.common.core.entity.Result; 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/MessageMqttService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java index 378878d..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,15 +1,14 @@ package com.evotech.hd.cloud.service; +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.entity.vo.MqttMessageParam; -import com.evotech.hd.common.core.entity.Result; - -import java.util.List; +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); 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 index f1d8764..c9e215c 100644 --- 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 @@ -1,7 +1,7 @@ package com.evotech.hd.cloud.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.evotech.hd.cloud.entity.order.OrderDetail; +import com.evotech.hd.common.core.entity.order.OrderDetail; /** * 接口 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 index 01e4024..edb8ee9 100644 --- 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 @@ -2,7 +2,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.order.Order; +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; @@ -48,7 +48,7 @@ public interface OrderService extends IService { /*** * 开始换电 */ - public Result startSwap(String wuid, String orderId); + public Result startSwap(String wuid, String orderNo); /*** * 查询公司订单 */ @@ -71,4 +71,6 @@ public interface OrderService extends IService { 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 index 3f61afa..f1bd5b6 100644 --- 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 @@ -1,8 +1,12 @@ 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; /** * 预约单接口 @@ -18,4 +22,12 @@ public interface OrderSwapBatteryPreService extends IService 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 08903ed..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,62 +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.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/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 5c0eae6..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 @@ -7,7 +7,7 @@ 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; @@ -70,16 +70,16 @@ public class BatteryStationDcServiceImpl extends ServiceImpl> 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 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..9bb27bd 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.subscribeAdd(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 870ea5d..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.device.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 e99c770..34fcd92 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 @@ -14,6 +14,7 @@ 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.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.*; 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 64a2960..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 @@ -8,7 +8,7 @@ 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; @@ -28,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()) @@ -37,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 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 index 72eb995..88c9cff 100644 --- 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 @@ -1,8 +1,8 @@ package com.evotech.hd.cloud.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.evotech.hd.cloud.dao.OrderDetailDao; -import com.evotech.hd.cloud.entity.order.OrderDetail; +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; 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 index 1404d0f..781ac5e 100644 --- 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 @@ -2,6 +2,7 @@ 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; @@ -9,46 +10,53 @@ 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.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.order.Order; -import com.evotech.hd.cloud.entity.order.OrderDetail; +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.beans.factory.annotation.Autowired; -import org.springframework.integration.channel.DirectChannel; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; -import java.util.function.Function; +import java.util.stream.Collectors; /** * 订单的业务实现类 @@ -62,13 +70,11 @@ import java.util.function.Function; @Service @Slf4j -public class OrderServiceImpl extends BaseServiceImpl implements OrderService { +public class OrderServiceImpl extends ServiceImpl implements OrderService { @Resource private OrderDetailDao orderDetailDao; @Resource private SwapOrderBasicFeeComponent orderBasicFeeComponent; - @Autowired - private DirectChannel errorChannel; @Resource private VehicleInfoDao vehicleInfoDao; @Resource @@ -87,26 +93,37 @@ public class OrderServiceImpl extends BaseServiceImpl> pageList(PageListSwapOrderRequest plsor) { - return new Result>().success(selectPage(new Page(plsor.getPageNo(), plsor.getPageSize()), new LambdaQueryWrapper() + 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), new Function() { - @Override - public OrderListVo apply(Order order) { - OrderListVo vo = new OrderListVo(); - BeanUtils.copyProperties(order, vo); - return vo; - } - })); + .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 @@ -140,6 +157,8 @@ public class OrderServiceImpl extends BaseServiceImpl().success(""); } @@ -174,60 +193,57 @@ public class OrderServiceImpl extends BaseServiceImpl().success(order) : new Result().error("订单生成异常", null)); } @Override - public Result startSwap(String wuid, String orderId) { - if (StringUtils.isBlank(wuid) || StringUtils.isBlank(orderId)) { - log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId); + 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().selectById(orderId); + Order order = getBaseMapper().selectOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderNo)); if (ObjectUtils.isEmpty(order)) { - log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); + 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("换电开始"); + 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(), ""); - // 设置消息主题和头部信息 - 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("换电开始消息发送成功, 订单编号: {}", order.getOrderNo()); - return new Result().success(true); - - } catch (Exception e) { - log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid, e); - return new Result().error("系统处理换电请求时发生异常"); - } - - return Result < Boolean > ().success(true); + return new Result().success(true); + } catch (Exception e) { + log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid, e); + return new Result().error("系统处理换电请求时发生异常"); + } } @Override @@ -257,7 +273,7 @@ public class OrderServiceImpl extends BaseServiceImpl>().error(CodeMsg.DATABASE_RESULT_NULL); } - return new Result>().success(page); + return new Result>().success(page.getRecords()); } @Override @@ -288,7 +304,7 @@ public class OrderServiceImpl extends BaseServiceImpl 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(0); - wad.setTradeRechargeAmount(-order.getOrderAmount()); - wad.setTradeGiftAmount(0); + 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()); @@ -315,10 +363,11 @@ public class OrderServiceImpl extends BaseServiceImpl().error("参数无效"); } - return new Result().error("参数无效"); -// 获取用户订单 + // 获取用户订单 Order orderSwap = orderDao.selectById(orderId); if (orderSwap == null) { log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); @@ -422,11 +470,11 @@ public class OrderServiceImpl extends BaseServiceImpl().error("未收到换电成功信息"); - }*/ + } // 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象 BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class); if (response == null) { @@ -441,12 +489,15 @@ public class OrderServiceImpl extends BaseServiceImpl().error(response.getMsg()); } } catch (Exception e) { - log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), 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 index f039ff5..71a02ef 100644 --- 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 @@ -3,26 +3,32 @@ 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.OrderDao; import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; import com.evotech.hd.cloud.dao.VehicleInfoDao; -import com.evotech.hd.cloud.entity.order.Order; 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; /** * 类 @@ -97,7 +103,7 @@ public class OrderSwapBatteryPreServiceImpl extends ServiceImpl() .eq(Order::getPreWechatId, orderSwapBatteryPre.getUcode()) .eq(Order::getStatus, 6) - .eq(Order::getPreName, orderSwapBatteryPre.getUname()) + .eq(Order::getOrderPreUname, orderSwapBatteryPre.getUname()) ); log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", orderSwapBatteryPre.getUcode(), unpaidOrderCount); if (unpaidOrderCount >= 3) { @@ -130,4 +136,55 @@ public class OrderSwapBatteryPreServiceImpl extends ServiceImpl().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 a6fdb1d..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,708 +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.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.cloud.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(); - RedisServiceUtils.set(redisKey, expireTime); - // 发送服务号消息,没有消息队列,先用接口吧 - templateMessageService.preOrderMessageSend(osbp); - return new Result().success(); - } - 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) { +//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; // -// // 加上费用标准 -// 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(); +// 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("未找到车辆信息"); // } // -// 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); +// // 2. 检查预约人 +// if (!wechatUserDao.exists(new LambdaQueryWrapper().ne(WechatUser::getPhoneNumber, " ").isNotNull(WechatUser::getPhoneNumber).eq(WechatUser::getWuid, osbp.getUcode()))) { +// return new Result().error("用户认证信息不全!"); // } -// page.getRecords().forEach(osb -> { -// if (StringUtils.hasText(osb.getFeeStandardJson())){ -// String feeStandardJson = osb.getFeeStandardJson(); -// BatteryStationHdFeeStandard bean = JSONUtil.toBean(feeStandardJson, BatteryStationHdFeeStandard.class); -// osb.setFeeStandardDetail(bean); +// //判断换电站是否运营 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笔及以上未支付的订单,请先支付!"); // } -// -// }); -// -// 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("订单费用标准异常!"); +// } catch (Exception e) { +// log.error("检查未支付订单异常,用户编码:{},错误信息:{}", osbp.getUcode(), e.getMessage()); +// 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) { +// // 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 a745068..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,17 +1,16 @@ package com.evotech.hd.cloud.service.rpc; -import com.evotech.hd.cloud.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.request.template.AlarmTemplateDto; import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto; - - 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; @@ -63,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 b7b7acc..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 @@ -2,7 +2,7 @@ package com.evotech.hd.cloud.task; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.evotech.hd.cloud.entity.order.Order; +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.Dto.Result; 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..5c216db --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/ParamServiceUtils.java @@ -0,0 +1,56 @@ +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(":"); + } +} 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 a8353ab..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 @@ -5,20 +5,19 @@ 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.dao.OrderDetailDao; import com.evotech.hd.cloud.entity.MessageMqtt; -import com.evotech.hd.cloud.entity.order.Order; -import com.evotech.hd.cloud.entity.order.OrderDetail; 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.order.Order; +import com.evotech.hd.common.core.entity.order.OrderDetail; import com.evotech.hd.common.core.utils.Collections; -import com.evotech.hd.common.core.utils.CommonUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -63,7 +62,7 @@ public class SwapOrderBasicFeeComponent { if (!list.isEmpty()) { // 获取第一个费用标准 BatteryStationHdFeeStandard standard = list.get(0); - Integer serviceFee = CommonUtil.yuanToFen(standard.getServiceFee()).intValue(); + Integer serviceFee = standard.getCommonRemainFee().intValue(); Integer unitPrice = getUnitFee(orderDetail.getFeeType(), standard); String feeStandard = JSONUtil.toJsonStr(standard); // 获取该标准下的详细费用列表 @@ -76,7 +75,7 @@ public class SwapOrderBasicFeeComponent { // 如果过滤后的详细费用列表不为空,使用第一个有效的费用详情 if (!detailList.isEmpty()) { BatteryStationHdFeeStandardDetail detail = detailList.get(0); - serviceFee = CommonUtil.yuanToFen(detail.getServiceFee()).intValue(); + serviceFee = detail.getServiceFee().intValue(); unitPrice = getUnitFee(orderDetail.getFeeType(), detail); feeStandard = JSONUtil.toJsonStr(detail); } @@ -103,25 +102,25 @@ public class SwapOrderBasicFeeComponent { break; case HDConstant.OrderConstant.FEE_TYPE_SOC: //如果租借/归还soc不存在参数, 则需要到mqtt消息中去抓取消息进行反向解析 - if(orderDetail.getRentBatSOC() == null || orderDetail.getRentBatSOC() == null){ + 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("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")))); + 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(); + 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"))){ + 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"))){ + if(orderDetail.getRentBatSoc() == null && valMap.containsKey("electEnd") && ObjectUtils.isNotEmpty(valMap.get("electEnd"))){ orderDetail.setElectEnd(Double.valueOf(String.valueOf(valMap.get("electEnd")))); } } @@ -144,29 +143,29 @@ public class SwapOrderBasicFeeComponent { case HDConstant.OrderConstant.FEE_TYPE_ODO: if(c instanceof BatteryStationHdFeeStandard){ //元转分 - return CommonUtil.yuanToFen(((BatteryStationHdFeeStandard)c).getEachKmFee()).intValue(); + return ((BatteryStationHdFeeStandard)c).getEachKmFee().intValue(); } if(c instanceof BatteryStationHdFeeStandardDetail){ //元转分 - return CommonUtil.yuanToFen(((BatteryStationHdFeeStandardDetail)c).getEachKmFee()).intValue(); + return ((BatteryStationHdFeeStandardDetail)c).getEachKmFee().intValue(); } case HDConstant.OrderConstant.FEE_TYPE_SOC: if(c instanceof BatteryStationHdFeeStandard){ //元转分 - return CommonUtil.yuanToFen(((BatteryStationHdFeeStandard)c).getEachSocFee()).intValue(); + return ((BatteryStationHdFeeStandard)c).getEachSocFee().intValue(); } if(c instanceof BatteryStationHdFeeStandardDetail){ //元转分 - return CommonUtil.yuanToFen(((BatteryStationHdFeeStandardDetail)c).getEachSocFee()).intValue(); + return ((BatteryStationHdFeeStandardDetail)c).getEachSocFee().intValue(); } case HDConstant.OrderConstant.FEE_TYPE_DL: if(c instanceof BatteryStationHdFeeStandard){ //元转分 - return CommonUtil.yuanToFen(((BatteryStationHdFeeStandard)c).getEachKwhFee()).intValue(); + return ((BatteryStationHdFeeStandard)c).getEachKwhFee().intValue(); } if(c instanceof BatteryStationHdFeeStandardDetail){ //元转分 - return CommonUtil.yuanToFen(((BatteryStationHdFeeStandardDetail)c).getEachKwhFee()).intValue(); + return ((BatteryStationHdFeeStandardDetail)c).getEachKwhFee().intValue(); } default: //默认返回每次2元 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 index eadb799..b745e50 100644 --- a/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml @@ -1,6 +1,6 @@ - + @@ -34,7 +34,7 @@ - + @@ -43,8 +43,8 @@ select order_time, plate_num, order_pre_uname, - amount - from hd_cloud_manage.yt_t_order_swap_battery osb + order_amount + from hd_cloud_manage.yt_t_order osb where del_Flag = 0 and status !=#{status} @@ -57,7 +57,7 @@ bs.code, bs.name from hd_cloud_manage.yt_t_battery_station bs - left join hd_cloud_manage.yt_t_order_swap_battery osb on bs.code = osb.station_code + left join hd_cloud_manage.yt_t_order osb on bs.code = osb.station_code where DATE_FORMAT(osb.order_time,"%Y-%m-%d") >= DATE_FORMAT(#{params.begin},"%Y-%m-%d") and DATE_FORMAT(#{params.end},"%Y-%m-%d") >= DATE_FORMAT(osb.order_time,"%Y-%m-%d") GROUP by bs.code,bs.name @@ -66,12 +66,12 @@ @@ -79,11 +79,11 @@ select DATE_FORMAT(osb.order_time,"%Y-%m") as y_m, count(osb.pk_id) as quantity, - sum(osb.amount) as totalMoney - from hd_cloud_manage.yt_t_order_swap_battery osb + sum(osb.order_amount) as totalMoney + from hd_cloud_manage.yt_t_order osb where DATE_FORMAT(osb.order_time,"%Y-%m-%d") >= DATE_FORMAT(#{params.begin},"%Y-%m-%d") and DATE_FORMAT(#{params.end},"%Y-%m-%d") >= DATE_FORMAT(osb.order_time,"%Y-%m-%d") - and osb.amount is not null + and osb.order_amount is not null and osb.status=7 GROUP by y_m @@ -92,12 +92,12 @@ select DATE_FORMAT(osb.order_time,"%Y-%m") as y_m, ifnull(count(osb.pk_id), 0) as quantity, - sum(ifnull(osb.amount,0)) as totalMoney + sum(ifnull(osb.order_amount,0)) as totalMoney from - hd_cloud_manage.yt_t_order_swap_battery osb + hd_cloud_manage.yt_t_order osb where DATE_FORMAT(osb.order_time,"%Y-%m") >= DATE_FORMAT(#{params.begin},"%Y-%m") and DATE_FORMAT(#{params.end},"%Y-%m") >= DATE_FORMAT(osb.order_time,"%Y-%m") - and osb.amount is not null + and osb.order_amount is not null and osb.status = 7 GROUP by y_m @@ -106,10 +106,10 @@ DATE_FORMAT(osb.order_time,"%Y-%m") as y_m, ifnull(count(osb.pk_id), 0) as quantity from - hd_cloud_manage.yt_t_order_swap_battery osb + hd_cloud_manage.yt_t_order osb where DATE_FORMAT(osb.order_time,"%Y-%m") >= DATE_FORMAT(#{params.begin},"%Y-%m") and DATE_FORMAT(#{params.end},"%Y-%m") >= DATE_FORMAT(osb.order_time,"%Y-%m") - and osb.amount is not null + and osb.order_amount is not null and osb.status = 7 GROUP by y_m @@ -136,17 +136,17 @@ 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/gateway-server/src/main/resources/application.yml b/gateway-server/src/main/resources/application.yml index 0084049..730ccf5 100644 --- a/gateway-server/src/main/resources/application.yml +++ b/gateway-server/src/main/resources/application.yml @@ -26,6 +26,7 @@ spring: import: - nacos:yt-common.properties?refreshEnabled=true - nacos:gateway-server.yaml?refreshEnabled=true + - nacos:yt-redis.yaml?refreshEnabled=true cloud: nacos: serverAddr: 192.168.5.213:8848 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..3923c3d 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 com.evotech.hd.common.core.Dto.Result xcxPrepay(PrePayVO prePay); + + /*** + * 小程序支付回调 + * @param request + * @return + */ + public ResponseEntity notifyBack(HttpServletRequest request); + + /*** + * 申请退款接口 + * @return + */ + public com.evotech.hd.common.core.Dto.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..ef411af --- /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"), 1); + } + + @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); + } + } + }); + } +}