skyline 2 ani în urmă
părinte
comite
5a18d6429d

+ 4 - 0
entity/src/main/java/com/kym/entity/admin/vo/CustomOrderVo.java

@@ -2,6 +2,7 @@ package com.kym.entity.admin.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.time.LocalDateTime;
 
@@ -11,12 +12,15 @@ import java.time.LocalDateTime;
  * @date 2023-08-30 18:55
  */
 @Data
+@Accessors(chain = true)
 public class CustomOrderVo {
     private Long userId;
     private String mobilePhone;
     private String startChargeSeq;
     private String stationId;
+    private String stationName;
     private String connectorId;
+    private String shortId;
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime startTime;
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

+ 74 - 1
miniapp/src/main/resources/application-dev.yml

@@ -13,4 +13,77 @@ en-plus:
   # 最小充电余额(分)
   chargeMinAmount: 200
   # 接口地址
-  apiDomain: https://dev.en-plus.cn/Charge/evcs/v1/MA5HJNDG1/
+  apiDomain: https://dev.en-plus.cn/Charge/evcs/v1/MA5HJNDG1/
+
+# 微信支付
+wechat:
+  payment:
+    appid: wx369fcff95d387bde
+    # 微信商户号
+    mchid: 1635831469
+    mchsn: 6A45EEB068369430B2FFD45EA29F641A8E18165F
+    v3Key: iTRovdvaTUQq0b9Jr91D7Tx66JnIes5U
+    notifyUrl: https://dev.kuaiyuman.cn/api/payment/notify
+    certPath: cert/apiclient_cert.pem
+    keyPath: cert/apiclient_key.pem
+
+  miniapp:
+    appid: wx369fcff95d387bde
+    secret: e36560b99afd5f744754cd09e8f6cc2a
+    # 以下需要先开通消息推送
+    token: #微信小程序消息服务器配置的token
+    aesKey: #微信小程序消息服务器配置的EncodingAESKey
+    msgDataFormat: JSON
+
+spring:
+  datasource:
+    druid: #以下是全局默认值,可以全局更改
+      #监控统计拦截的filters
+      filters: stat,slf4j
+      #配置初始化大小/最小/最大
+      initial-size: 2
+      min-idle: 2
+      max-active: 20
+      #获取连接等待超时时间
+      max-wait: 60000
+      #间隔多久进行一次检测,检测需要关闭的空闲连接
+      time-between-eviction-runs-millis: 60000
+      #一个连接在池中最小生存的时间
+      min-evictable-idle-time-millis: 300000
+      validation-query: SELECT 'x'
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+      #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
+      pool-prepared-statements: false
+      max-pool-prepared-statement-per-connection-size: 20
+    dynamic:
+      primary: db-miniapp
+      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
+      datasource:
+        db-admin:
+          url: jdbc:mysql://121.40.98.15:3307/charge_admin?tinyInt1isBit=false&serverTimezone=Asia/Shanghai
+          username: root
+          password: 123456
+          driver-class-name: com.mysql.cj.jdbc.Driver
+        db-miniapp:
+          url: jdbc:mysql://121.40.98.15:3307/charge_app
+          username: root
+          password: 123456
+          driver-class-name: com.mysql.cj.jdbc.Driver
+  data:
+    redis:
+      port: 6380
+      host: 121.40.98.15
+      password: 123456
+      database: 10
+      lettuce:
+        cluster:
+          refresh:
+            adaptive: true
+            period: 20
+  cache:
+    type: redis
+    redis:
+      # 缓存过期时间:7天
+      time-to-live: 604800

+ 74 - 1
miniapp/src/main/resources/application-prod.yml

@@ -13,4 +13,77 @@ en-plus:
   # 最小充电余额(分)
   chargeMinAmount: 200
   # 接口地址
-  apiDomain: https://api.en-plus.cn:8080/Charge/evcs/v1//MA5HJNDG1/
+  apiDomain: https://api.en-plus.cn:8080/Charge/evcs/v1//MA5HJNDG1/
+
+# 微信支付
+wechat:
+  payment:
+    appid: wx369fcff95d387bde
+    # 微信商户号
+    mchid: 1635831469
+    mchsn: 6A45EEB068369430B2FFD45EA29F641A8E18165F
+    v3Key: iTRovdvaTUQq0b9Jr91D7Tx66JnIes5U
+    notifyUrl: https://www.kuaiyuman.cn/api/payment/notify
+    certPath: cert/apiclient_cert.pem
+    keyPath: cert/apiclient_key.pem
+
+  miniapp:
+    appid: wx369fcff95d387bde
+    secret: e36560b99afd5f744754cd09e8f6cc2a
+    # 以下需要先开通消息推送
+    token: #微信小程序消息服务器配置的token
+    aesKey: #微信小程序消息服务器配置的EncodingAESKey
+    msgDataFormat: JSON
+
+spring:
+  datasource:
+    druid: #以下是全局默认值,可以全局更改
+      #监控统计拦截的filters
+      filters: stat,slf4j
+      #配置初始化大小/最小/最大
+      initial-size: 2
+      min-idle: 2
+      max-active: 20
+      #获取连接等待超时时间
+      max-wait: 60000
+      #间隔多久进行一次检测,检测需要关闭的空闲连接
+      time-between-eviction-runs-millis: 60000
+      #一个连接在池中最小生存的时间
+      min-evictable-idle-time-millis: 300000
+      validation-query: SELECT 'x'
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+      #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
+      pool-prepared-statements: false
+      max-pool-prepared-statement-per-connection-size: 20
+    dynamic:
+      primary: db-miniapp
+      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
+      datasource:
+        db-admin:
+          url: jdbc:mysql://121.40.98.15:3307/charge_admin?tinyInt1isBit=false&serverTimezone=Asia/Shanghai
+          username: root
+          password: 123456
+          driver-class-name: com.mysql.cj.jdbc.Driver
+        db-miniapp:
+          url: jdbc:mysql://121.40.98.15:3307/charge_app
+          username: root
+          password: 123456
+          driver-class-name: com.mysql.cj.jdbc.Driver
+  data:
+    redis:
+      port: 6380
+      host: 121.40.98.15
+      password: 123456
+      database: 10
+      lettuce:
+        cluster:
+          refresh:
+            adaptive: true
+            period: 20
+  cache:
+    type: redis
+    redis:
+      # 缓存过期时间:7天
+      time-to-live: 604800

+ 1 - 91
miniapp/src/main/resources/application.yml

@@ -3,67 +3,15 @@ spring:
     active: dev
   application:
     name: miniapp
-  datasource:
-    druid: #以下是全局默认值,可以全局更改
-      #监控统计拦截的filters
-      filters: stat,slf4j
-      #配置初始化大小/最小/最大
-      initial-size: 2
-      min-idle: 2
-      max-active: 20
-      #获取连接等待超时时间
-      max-wait: 60000
-      #间隔多久进行一次检测,检测需要关闭的空闲连接
-      time-between-eviction-runs-millis: 60000
-      #一个连接在池中最小生存的时间
-      min-evictable-idle-time-millis: 300000
-      validation-query: SELECT 'x'
-      test-while-idle: true
-      test-on-borrow: false
-      test-on-return: false
-      #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
-      pool-prepared-statements: false
-      max-pool-prepared-statement-per-connection-size: 20
-    dynamic:
-      primary: db-miniapp
-      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
-      datasource:
-        db-admin:
-          url: jdbc:mysql://121.40.98.15:3307/charge_admin?tinyInt1isBit=false&serverTimezone=Asia/Shanghai
-          username: root
-          password: 123456
-          driver-class-name: com.mysql.cj.jdbc.Driver
-        db-miniapp:
-          url: jdbc:mysql://121.40.98.15:3307/charge_app
-          username: root
-          password: 123456
-          driver-class-name: com.mysql.cj.jdbc.Driver
-  data:
-    redis:
-      port: 6380
-      host: 121.40.98.15
-      password: 123456
-      database: 10
-      lettuce:
-        cluster:
-          refresh:
-            adaptive: true
-            period: 20
-  cache:
-    type: redis
-    redis:
-      # 缓存过期时间:7天
-      time-to-live: 604800
+
 mybatis-plus:
   mapper-locations: classpath:mappers/**/*.xml
-  type-handlers-package: com.kym.mapper.typehandle
   main:
     allow-circular-references: true
   configuration:
     map-underscore-to-camel-case: true
 
 
-
 server:
   port: 8088
   servlet:
@@ -92,44 +40,6 @@ sa-token:
   # 是否输出操作日志
   is-log: true
 
-# 微信支付
-wechat:
-  payment:
-    appid: wx369fcff95d387bde
-    # 微信商户号
-    mchid: 1635831469
-    mchsn: 6A45EEB068369430B2FFD45EA29F641A8E18165F
-    v3Key: iTRovdvaTUQq0b9Jr91D7Tx66JnIes5U
-    notifyUrl: https://www.kuaiyuman.cn/api/payment/notify
-#    certPath: /data/wwwroot/charge/config/cert/apiclient_cert.pem
-#    keyPath: /data/wwwroot/charge/config/cert/apiclient_key.pem
-    certPath: cert/apiclient_cert.pem
-    keyPath: cert/apiclient_key.pem
-
-  miniapp:
-    appid: wx369fcff95d387bde
-    secret: e36560b99afd5f744754cd09e8f6cc2a
-    # 以下需要先开通消息推送
-    token: #微信小程序消息服务器配置的token
-    aesKey: #微信小程序消息服务器配置的EncodingAESKey
-    msgDataFormat: JSON
-
-
-
-# EN+充电配置
-en-plus:
-  # 运营商ID
-  operator-id: MA5HJNDG1
-  # 运营商密钥
-  operator-secret: c7fd9b753a9f434e
-  # 消息密钥
-  data-secret: 5cb7e12da198420a
-  # 消息密钥初始化向量
-  data-secret-iv: 8a6ac88326bc4d3f
-  # 签名密钥
-  sig-secret: 2365b20f69e44817
-  # 最小充电余额(分)
-  charge-min-amount: 200
 
 #文件上传配置
 upload:

+ 12 - 5
service/src/main/java/com/kym/service/miniapp/impl/ChargeOrderServiceImpl.java

@@ -3,15 +3,17 @@ package com.kym.service.miniapp.impl;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
 import com.kym.entity.admin.queryParams.CustomChargeOrdersQueryParam;
 import com.kym.entity.admin.vo.CustomOrderVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.mapper.miniapp.ChargeOrderMapper;
 import com.kym.service.miniapp.ChargeOrderService;
+import com.kym.service.utils.KymCache;
 import org.springframework.stereotype.Service;
 
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 充电订单表 服务实现类
@@ -23,6 +25,13 @@ import org.springframework.stereotype.Service;
 @Service
 @DS("db-miniapp")
 public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, ChargeOrder> implements ChargeOrderService {
+
+    private final KymCache kymCache;
+
+    public ChargeOrderServiceImpl(KymCache kymCache) {
+        this.kymCache = kymCache;
+    }
+
     @Override
     public ChargeOrder getChargingOrderByUserId(Long userId) {
         return lambdaQuery().eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getChargeStatus, 2).one();
@@ -37,15 +46,13 @@ public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, Charg
     public PageBean<CustomOrderVo> customChargeOrders(CustomChargeOrdersQueryParam params, Integer pageNum, Integer pageSize) {
         PageHelper.startPage(pageNum, pageSize);
         // 查询订单列表(订单编号,手机号,充电站,充电桩SN/短码,订单状态,建单时间,结算时间,充电电量,实付金额,付款状态)
-        var result = baseMapper.listChargeOrders(params);
-        // stationName处理
-
+        var result = baseMapper.listChargeOrders(params).stream().map(item -> item.setShortId(kymCache.getShortId(item.getConnectorId().substring(0,15))).setStationName(kymCache.getStationName(item.getConnectorId()))).collect(Collectors.toList());
         return new PageBean<>(result);
     }
 
     @Override
     public Object orderDetail(String startChargeSeq) {
-        // TODO: 2023-08-22 订单详情(基本信息、收费信息)
+        // TODO: 2023-08-22 订单详情(基本信息、收费信息) 上面接口貌似已经实现了
         /*
          * 基本信息:订单编号,订单状态,所属用户,所属电站,充电桩序列号,建单时间,结算时间,桩启动充电时间,桩停止充电时间
          * 收费详情:充电电量,充电电费,服务费,总费用,支付状态

+ 2 - 2
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -223,12 +223,12 @@ public class WxPayServiceImpl implements WxPayService {
                 payLogService.save(payLog);
                 LOGGER.info("微信支付回调{}:业务处理结束", no);
             } else {
-                LOGGER.error("微信支付通知处理异常,资金流水为空,回调信息:{}", transaction);
+                LOGGER.error("微信支付通知处理异常资金流水为空,回调信息:{}", transaction);
                 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR);
             }
         } catch (ValidationException e) {
             // 签名验证失败,返回 401 UNAUTHORIZED 状态码
-            LOGGER.error("微信支付通知眼前失败", e);
+            LOGGER.error("微信支付通知验签失败", e);
             return ResponseEntity.status(HttpStatus.UNAUTHORIZED);
         }