浏览代码

fix(scheduling): 修正定时任务的cron表达式及价格策略更新逻辑

- 修正充电站信息同步定时任务的cron表达式,由每小时0分和30分改为每小时0分和3分执行
- 修正设备价格策略同步定时任务的cron表达式,由每天5点30分改为每3分钟执行
- 优化价格策略保存逻辑,新增更新已有记录的功能
- 保存价格策略明细时先删除旧记录,再插入新数据
- 添加更新价格策略记录的方法,提高数据同步准确性
- 增加相关日志,区分新增和更新操作情况
SheepHy 12 小时之前
父节点
当前提交
3adf13e931

+ 29 - 6
src/main/java/com/zsElectric/boot/business/service/impl/ThirdPartyChargingServiceImpl.java

@@ -337,19 +337,29 @@ public class ThirdPartyChargingServiceImpl implements ThirdPartyChargingService
                 return;
             }
 
-            // 数据发生变化,插入新记录
-            Long policyId = insertNewPricePolicy(pricePolicyVO);
+            // 数据发生变化
+            Long policyId;
+            if (latestPolicy != null) {
+                // 已存在记录,执行更新
+                policyId = updatePricePolicy(latestPolicy, pricePolicyVO);
+                log.info("价格策略信息保存成功(更新记录) - equipBizSeq: {}, connectorId: {}, policyId: {}",
+                        pricePolicyVO.getEquipBizSeq(), pricePolicyVO.getConnectorID(), policyId);
+            } else {
+                // 不存在记录,执行新增
+                policyId = insertNewPricePolicy(pricePolicyVO);
+                log.info("价格策略信息保存成功(新增记录) - equipBizSeq: {}, connectorId: {}, policyId: {}",
+                        pricePolicyVO.getEquipBizSeq(), pricePolicyVO.getConnectorID(), policyId);
+            }
 
-            // 保存价格策略明细
+            // 保存价格策略明细(先删除旧的,再插入新的)
+            policyInfoMapper.delete(Wrappers.<ThirdPartyPolicyInfo>lambdaQuery()
+                    .eq(ThirdPartyPolicyInfo::getPricePolicyId, policyId));
             if (!CollectionUtils.isEmpty(pricePolicyVO.getPolicyInfos())) {
                 for (ChargingPricePolicyVO.PolicyInfo policyInfo : pricePolicyVO.getPolicyInfos()) {
                     savePolicyInfoDetail(policyInfo, policyId);
                 }
             }
 
-            log.info("价格策略信息保存成功(新增记录) - equipBizSeq: {}, connectorId: {}, policyId: {}",
-                    pricePolicyVO.getEquipBizSeq(), pricePolicyVO.getConnectorID(), policyId);
-
         } catch (Exception e) {
             log.error("保存价格策略信息失败 - equipBizSeq: {}, connectorId: {}",
                     pricePolicyVO.getEquipBizSeq(), pricePolicyVO.getConnectorID(), e);
@@ -472,6 +482,19 @@ public class ThirdPartyChargingServiceImpl implements ThirdPartyChargingService
         return entity.getId();
     }
 
+    /**
+     * 更新价格策略记录
+     */
+    private Long updatePricePolicy(ThirdPartyEquipmentPricePolicy existingPolicy, ChargingPricePolicyVO pricePolicyVO) {
+        existingPolicy.setSuccStat(pricePolicyVO.getSuccStat());
+        existingPolicy.setFailReason(pricePolicyVO.getFailReason());
+        existingPolicy.setSumPeriod(pricePolicyVO.getSumPeriod());
+
+        pricePolicyMapper.updateById(existingPolicy);
+
+        return existingPolicy.getId();
+    }
+
     /**
      * 保存价格策略明细
      */

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

@@ -74,7 +74,7 @@ public class ChargingJob {
      * 每天凌晨5:30执行,查询所有充电桩的价格策略并存储到数据库
      * cron表达式: 0 30 5 * * ? 表示每天凌晨5点30分执行
      */
-    @Scheduled(cron = "0 30 5 * * ?")
+    @Scheduled(cron = "0 */3 * * * ?")
     public void syncEquipmentPricePolicy() {
         log.info("开始执行设备价格策略同步定时任务");