Selaa lähdekoodia

chore(config): 更新配置文件及安全过滤规则,优化充电状态保存逻辑

- 将application.yml的活动配置由dev切换至prod环境
- 修改prod环境数据库连接URL,调整数据源配置
- 在dev与prod配置中添加充电平台接口的安全过滤例外路径
- XssAndSqlInjectionFilter中排除对第三方充电接口的拦截,避免加密数据误判
- ChargingReceptionServiceImpl中注释掉部分订单状态更新代码,改为直接插入充电状态数据
- SwiftpassConfig类中完善配置项注解,支持默认空值,避免配置缺失导致错误
- 充电任务Scheduling注释调整,变更定时表达式注释说明为每10分钟执行一次
SheepHy 2 päivää sitten
vanhempi
commit
ee5e456d1b

+ 1 - 1
src/main/java/com/zsElectric/boot/charging/quartz/ChargingJob.java

@@ -83,7 +83,7 @@ public class ChargingJob {
      * 每10分钟执行一次,查询所有充电桩的价格策略并存储到数据库
      * cron表达式: 0 10 * * * ? 表示每10分钟执行
      */
-//    @Scheduled(cron = "0 */1 * * * ?")
+//    @Scheduled(cron = "0 */10 * * * ?")
     public void syncEquipmentPricePolicy() {
         // 检查任务是否正在执行,防止并发
         if (isPricePolicySyncRunning) {

+ 39 - 33
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -323,34 +323,36 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
      */
     private void saveOrUpdateChargeStatus(JsonNode jsonNode) {
         try {
+            log.info("保存或更新充电状态数据 - StartChargeSeq: {}", jsonNode);
             String startChargeSeq = jsonNode.get("StartChargeSeq").asText();
-            //修改订单状态
-            ChargeOrderInfo chargeOrderInfo = chargeOrderInfoService.getOne(new LambdaQueryWrapper<ChargeOrderInfo>()
-                    .eq(ChargeOrderInfo::getStartChargeSeq, startChargeSeq).last("limit 1"));
-            if(ObjUtil.isNotEmpty(chargeOrderInfo)){
-                Integer connectorStatus = getIntValue(jsonNode, "ConnectorStatus");
-                if (Objects.equals(connectorStatus, SystemConstants.STATUS_THREE) && Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_ZERO)) {
-                    // 充电中
-                    log.info("充电中 - StartChargeSeq: {}", startChargeSeq);
-                    chargeOrderInfo.setStatus(SystemConstants.STATUS_ONE);
-                    chargeOrderInfoService.updateById(chargeOrderInfo);
-                }
-                if (Objects.equals(connectorStatus, SystemConstants.STATUS_FOUR) && Objects.equals(chargeOrderInfo.getStatus(),
-                        SystemConstants.STATUS_ONE)) {
-                    // 结算中
-                    log.info("结算中 - StartChargeSeq: {}", startChargeSeq);
-                    chargeOrderInfo.setStatus(SystemConstants.STATUS_TWO);
-                    chargeOrderInfoService.updateById(chargeOrderInfo);
-                }
-            }
+//            //修改订单状态
+//            ChargeOrderInfo chargeOrderInfo = chargeOrderInfoService.getOne(new LambdaQueryWrapper<ChargeOrderInfo>()
+//                    .eq(ChargeOrderInfo::getStartChargeSeq, startChargeSeq).last("limit 1"));
+//            if(ObjUtil.isNotEmpty(chargeOrderInfo)){
+//                Integer connectorStatus = getIntValue(jsonNode, "ConnectorStatus");
+//                if (Objects.equals(connectorStatus, SystemConstants.STATUS_THREE) && Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_ZERO)) {
+//                    // 充电中
+//                    log.info("充电中 - StartChargeSeq: {}", startChargeSeq);
+//                    chargeOrderInfo.setStatus(SystemConstants.STATUS_ONE);
+//                    chargeOrderInfoService.updateById(chargeOrderInfo);
+//                }
+//                if (Objects.equals(connectorStatus, SystemConstants.STATUS_FOUR) && Objects.equals(chargeOrderInfo.getStatus(),
+//                        SystemConstants.STATUS_ONE)) {
+//                    // 结算中
+//                    log.info("结算中 - StartChargeSeq: {}", startChargeSeq);
+//                    chargeOrderInfo.setStatus(SystemConstants.STATUS_TWO);
+//                    chargeOrderInfoService.updateById(chargeOrderInfo);
+//                }
+//            }
 
             // 查询是否已存在该订单
-            ThirdPartyChargeStatus existing = chargeStatusMapper.selectOne(
-                    Wrappers.<ThirdPartyChargeStatus>lambdaQuery()
-                            .eq(ThirdPartyChargeStatus::getStartChargeSeq, startChargeSeq)
-            );
+//            ThirdPartyChargeStatus existing = chargeStatusMapper.selectOne(
+//                    Wrappers.<ThirdPartyChargeStatus>lambdaQuery()
+//                            .eq(ThirdPartyChargeStatus::getStartChargeSeq, startChargeSeq)
+//            );
 
-            ThirdPartyChargeStatus chargeStatus = (existing != null) ? existing : new ThirdPartyChargeStatus();
+//            ThirdPartyChargeStatus chargeStatus = (existing != null) ? existing : new ThirdPartyChargeStatus();
+            ThirdPartyChargeStatus chargeStatus = new ThirdPartyChargeStatus();
 
             // 设置字段值
             chargeStatus.setStartChargeSeq(startChargeSeq);
@@ -376,15 +378,19 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
                 chargeStatus.setChargeDetails(jsonNode.get("ChargeDetails").toString());
             }
 
-            if (existing != null) {
-                chargeStatus.setUpdateTime(LocalDateTime.now());
-                chargeStatusMapper.updateById(chargeStatus);
-                log.info("更新充电状态成功 - startChargeSeq: {}", startChargeSeq);
-            } else {
-                chargeStatus.setCreateTime(LocalDateTime.now());
-                chargeStatusMapper.insert(chargeStatus);
-                log.info("新增充电状态成功 - startChargeSeq: {}", startChargeSeq);
-            }
+//            if (existing != null) {
+//                chargeStatus.setUpdateTime(LocalDateTime.now());
+//                chargeStatusMapper.updateById(chargeStatus);
+//                log.info("更新充电状态成功 - startChargeSeq: {}", startChargeSeq);
+//            } else {
+//                chargeStatus.setCreateTime(LocalDateTime.now());
+//                chargeStatusMapper.insert(chargeStatus);
+//                log.info("新增充电状态成功 - startChargeSeq: {}", startChargeSeq);
+//            }
+            chargeStatus.setCreateTime(LocalDateTime.now());
+            chargeStatusMapper.insert(chargeStatus);
+            log.info("新增充电状态成功 - startChargeSeq: {}", startChargeSeq);
+
             //熔断保护
             isNeedBreak(chargeStatus);
         } catch (Exception e) {

+ 2 - 1
src/main/java/com/zsElectric/boot/core/filter/XssAndSqlInjectionFilter.java

@@ -45,7 +45,8 @@ public class XssAndSqlInjectionFilter implements Filter {
             "/doc.html",
             "/swagger-ui",
             "/v3/api-docs",
-            "/webjars"
+            "/webjars",
+            "/charge-business/v1/linkData"  // 第三方充电平台接口(加密Base64数据会误判)
     ));
 
     /**

+ 8 - 8
src/main/java/com/zsElectric/boot/core/pay/swiftpass/config/SwiftpassConfig.java

@@ -21,37 +21,37 @@ public class SwiftpassConfig {
     /**
      * 交易密钥
      */
-    @Value("${wx.key}")
+    @Value("${wx.key:}")
     private  String key ;
-    @Value("${wx.mchPrivateKey}")
+    @Value("${wx.mchPrivateKey:}")
     private  String mchPrivateKey;
-    @Value("${wx.platPublicKey}")
+    @Value("${wx.platPublicKey:}")
     private  String platPublicKey;
     /**
      * 商户号
      */
-    @Value("${wx.mch_id}")
+    @Value("${wx.mch_id:}")
     private  String mch_id;
     /**
      * appid
      */
-    @Value("${wx.appid}")
+    @Value("${wx.appid:}")
     private  String appid;
     /**
      * secret
      */
-    @Value("${wx.secret}")
+    @Value("${wx.secret:}")
     private  String secret;
     /**
      * 请求url
      */
-    @Value("${wx.req_url}")
+    @Value("${wx.req_url:}")
     private  String req_url;
 
     /**
      * 通知url
      */
-    @Value("${wx.notify_url}")
+    @Value("${wx.notify_url:}")
     private  String notify_url;
 
 

+ 2 - 0
src/main/resources/application-dev.yml

@@ -105,6 +105,7 @@ security:
     - /api/v1/auth/wx/** # 微信相关所有接口
     - /ws/** # WebSocket接口
     - /applet/v1/homePage/** # 用户端分页查询站点信息
+    - /charge-business/charge-business/v1/linkData/query_token
 
   # 非安全端点路径,完全绕过 Spring Security 的安全控制
   unsecured-urls:
@@ -141,6 +142,7 @@ security:
     # 排除的 URL 路径(不进行安全检查,注意:默认已经排除了 /doc.html、/swagger-ui 等接口文档相关路径)
     exclude-urls:
       - /api/v1/auth/captcha  # 验证码接口
+      - /charge-business/v1/linkData  # 第三方充电平台接口(数据为加密的Base64,会误判)
     # 额外需要检查的请求头(默认已检查 User-Agent、Referer、X-Forwarded-For)
     check-headers:
       - Referer

+ 3 - 1
src/main/resources/application-prod.yml

@@ -5,7 +5,7 @@ spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://rm-2vc2zl1990od9qvg0eo.mysql.cn-chengdu.rds.aliyuncs.com:3306/zs_electric?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+    url: jdbc:mysql://rm-2vc2zl1990od9qvg0eo.mysql.cn-chengdu.rds.aliyuncs.com:3306/z_electric?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
     username: root
     password: 1KQaNI+vPz8^xfYcb%l6
   data:
@@ -105,6 +105,7 @@ security:
     - /api/v1/auth/wx/** # 微信相关所有接口
     - /ws/** # WebSocket接口
     - /applet/v1/homePage/** # 用户端分页查询站点信息
+    - /charge-business/charge-business/v1/linkData/query_token
 
   # 非安全端点路径,完全绕过 Spring Security 的安全控制
   unsecured-urls:
@@ -141,6 +142,7 @@ security:
     # 排除的 URL 路径(不进行安全检查,注意:默认已经排除了 /doc.html、/swagger-ui 等接口文档相关路径)
     exclude-urls:
       - /api/v1/auth/captcha  # 验证码接口
+      - /charge-business/v1/linkData  # 第三方充电平台接口(数据为加密的Base64,会误判)
     # 额外需要检查的请求头(默认已检查 User-Agent、Referer、X-Forwarded-For)
     check-headers:
       - Referer

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

@@ -2,7 +2,7 @@ spring:
   application:
     name: zsElectric-boot
   profiles:
-    active: dev
+    active: prod
   config:
     import: classpath:codegen.yml
   servlet: