From 7858ae894c398f2f9248ac898b2ff200fa36225d Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期三, 29 七月 2026 18:42:15 +0800
Subject: [PATCH] 各类修复

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java |   31 +++++++++++++++++--------------
 1 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
index 266309d..7b7a762 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -36,6 +36,7 @@
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -173,6 +174,7 @@
     @Log(title = "【计费策略】修改计费策略", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "修改计费策略")
     @PostMapping(value = "/update")
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult<String> update(@RequestBody TAccountingStrategyDTO dto) {
         String partnerCheck = fillAndCheckPartner(dto);
         if (partnerCheck != null) {
@@ -191,9 +193,7 @@
         if (Objects.isNull(original)) {
             return AjaxResult.error("计费策略不存在");
         }
-        if(Objects.isNull(dto.getDiscount())){
-            accountingStrategyService.update(Wrappers.<TAccountingStrategy>lambdaUpdate().set(TAccountingStrategy::getDiscount, null).eq(TAccountingStrategy::getId, dto.getId()));
-        }
+        boolean clearDiscount = Objects.isNull(dto.getDiscount());
         // 历史审核通过的策略在替换旧策略后可能仍保留已删除策略的 parentId。
         // 这类正式策略再次编辑会被改为待审核子记录,并被计费策略列表过滤掉,先将其恢复为主策略。
         if (original.getParentId() != null && Objects.equals(original.getAuditStatus(), 3)
@@ -220,12 +220,14 @@
             } else {
                 dto.setId(original.getId());
                 accountingStrategyService.updateById(dto);
+                clearStrategyDiscountIfNeeded(dto.getId(), clearDiscount);
                 replaceStrategyDetails(dto.getId(), dto.getAccountingStrategyDetails());
             }
             return AjaxResult.success();
         }
-        // 判断修改的计费策略是否为已通过或已驳回
-        if(null != dto.getAuditStatus() && (dto.getAuditStatus() == 3 || dto.getAuditStatus() == 4)){
+        // 是否为正式/驳回策略必须以数据库原记录为准,不能信任前端回传的审核状态。
+        // 正式策略修改时仅维护待审核子记录,审核通过前站点仍引用原策略。
+        if (Objects.equals(original.getAuditStatus(), 3) || Objects.equals(original.getAuditStatus(), 4)) {
             // 查询是否有下级审核中的策略
             TAccountingStrategy children = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class)
                     .eq(TAccountingStrategy::getParentId, dto.getId())
@@ -243,6 +245,7 @@
                 dto.setFirstAuditTime(null);
                 dto.setTwoAuditTime(null);
                 accountingStrategyService.updateById(dto);
+                clearStrategyDiscountIfNeeded(dto.getId(), clearDiscount);
                 replaceStrategyDetails(children.getId(), dto.getAccountingStrategyDetails());
             }else {
                 Long userId = SecurityUtils.getLoginUser().getUserid();
@@ -257,20 +260,20 @@
         }else {
             dto.setAuditStatus(1);
             accountingStrategyService.updateById(dto);
+            clearStrategyDiscountIfNeeded(dto.getId(), clearDiscount);
             replaceStrategyDetails(dto.getId(), dto.getAccountingStrategyDetails());
         }
-
-        if(null != dto.getSiteId()){
-            //下发硬件数据
-            List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list();
-            for (TChargingPile tChargingPile : list) {
-                integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails()));
-                chengDuJianGuanClient.notificationStationFee(tChargingPile.getId());
-            }
-        }
         return AjaxResult.success();
     }
 
+    private void clearStrategyDiscountIfNeeded(Integer strategyId, boolean clearDiscount) {
+        if (clearDiscount) {
+            accountingStrategyService.update(Wrappers.<TAccountingStrategy>lambdaUpdate()
+                    .set(TAccountingStrategy::getDiscount, null)
+                    .eq(TAccountingStrategy::getId, strategyId));
+        }
+    }
+
     private void replaceStrategyDetails(Integer strategyId, List<TAccountingStrategyDetail> details) {
         accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
                 .eq(TAccountingStrategyDetail::getAccountingStrategyId, strategyId));

--
Gitblit v1.7.1