From b3bf3ffc39e813adc9aa4f533abb9edc4cee6e50 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期三, 22 七月 2026 16:15:49 +0800
Subject: [PATCH] fix: handle next P2 bug batch

---
 ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java           |   24 ++++++++
 ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImplTest.java |   20 ++++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java     |   18 +++---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java                 |   21 +++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/EnterpriseChargingDetailExport.java             |   18 ++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java               |   24 ++++++++
 6 files changed, 111 insertions(+), 14 deletions(-)

diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index db131f6..a8c3518 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -548,11 +548,13 @@
 				data1.addAll(data);
 			}
 			Set<Integer> siteIds = new HashSet<>(data1);
-			List<Site> data = siteClient.getSiteByIds(siteIds.stream().collect(Collectors.toList())).getData();
-			if (null != data) {
-				List<String> siteNames = data.stream().map(Site::getName).collect(Collectors.toList());
-				sysUser.setSiteNames(siteNames);
-				sysUser.setSiteIds(data.stream().map(Site::getId).collect(Collectors.toList()));
+			if (!applyAllSitePermission(sysUser, siteIds)) {
+				List<Site> data = siteClient.getSiteByIds(new ArrayList<>(siteIds)).getData();
+				if (null != data) {
+					List<String> siteNames = data.stream().map(Site::getName).collect(Collectors.toList());
+					sysUser.setSiteNames(siteNames);
+					sysUser.setSiteIds(data.stream().map(Site::getId).collect(Collectors.toList()));
+				}
 			}
 			List<String> roleNames = new ArrayList<>();
 			for (SysUserRole sysUserRole : list1) {
@@ -565,6 +567,15 @@
 		}
 		return pageInfo.setRecords(list);
 	}
+
+	static boolean applyAllSitePermission(SysUser sysUser, Set<Integer> siteIds) {
+		if (!siteIds.contains(0)) {
+			return false;
+		}
+		sysUser.setSiteNames(Collections.singletonList("全部"));
+		sysUser.setSiteIds(Collections.singletonList(0));
+		return true;
+	}
 	
 	@Override
 	public PageInfo<SysUser> getAllList(PageInfo<SysUser> pageInfo, List<Integer> collect) {
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
index 3f1b944..cbedc24 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -235,15 +235,7 @@
 				throw new RuntimeException(r.getMsg());
 			}
 		}else{
-			user.setPhonenumber(partner.getPhoneOne());
-			user.setUserName(partner.getAccount());
-			user.setNickName(partner.getName());
-			user.setAvatar(partner.getLogoUrl());
-			if(StringUtils.isNotEmpty(partner.getPassword())){
-				user.setPassword(partner.getPassword());
-				user.setPassWordUpdate(new Date());
-			}
-			user.setRoleId(partner.getRoleId().longValue());
+			prepareExistingUserForUpdate(user, partner);
 			R r = sysUserClient.updateSysUser(user);
 			if(200 != r.getCode()){
 				throw new RuntimeException(r.getMsg());
@@ -256,6 +248,14 @@
 		return AjaxResult.success();
 	}
 
+	void prepareExistingUserForUpdate(SysUser user, Partner partner) {
+		user.setPhonenumber(partner.getPhoneOne());
+		user.setUserName(partner.getAccount());
+		user.setNickName(partner.getName());
+		user.setAvatar(partner.getLogoUrl());
+		user.setRoleId(partner.getRoleId().longValue());
+	}
+
 	void updateShareRatios(Partner partner) {
 		this.update(new UpdateWrapper<Partner>()
 				.eq("id", partner.getId())
diff --git a/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImplTest.java b/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImplTest.java
index f179f0b..f3bb31f 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImplTest.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/test/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImplTest.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.chargingPile.api.model.Partner;
 import com.ruoyi.chargingPile.mapper.PartnerMapper;
+import com.ruoyi.system.api.domain.SysUser;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import org.junit.jupiter.api.Test;
@@ -21,6 +22,25 @@
 class PartnerServiceImplTest {
 
     @Test
+    void editingPartnerDoesNotReplaceExistingLoginPasswordHash() {
+        PartnerServiceImpl service = new PartnerServiceImpl();
+        Partner partner = new Partner();
+        partner.setAccount("partner-user");
+        partner.setName("合作商A");
+        partner.setPhoneOne("13800000000");
+        partner.setLogoUrl("logo.jpg");
+        partner.setRoleId(9);
+        SysUser user = new SysUser();
+        user.setPassword("$2a$10$existing-bcrypt-hash");
+
+        service.prepareExistingUserForUpdate(user, partner);
+
+        assertEquals("$2a$10$existing-bcrypt-hash", user.getPassword());
+        assertEquals("partner-user", user.getUserName());
+        assertEquals(Long.valueOf(9), user.getRoleId());
+    }
+
+    @Test
     void acceptsShareRatioWithoutIcbcSubMerchantConfiguration() {
         Partner partner = new Partner();
         partner.setId(1);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 8970399..702f554 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -282,9 +282,33 @@
         export.setOrderSource(formatOrderSource(dto.getOrderSource()));
         export.setStartTime(dto.getStartTime() == null ? null : DateUtils.localDateTimeToString(dto.getStartTime()));
         export.setEndTime(dto.getEndTime() == null ? null : DateUtils.localDateTimeToString(dto.getEndTime()));
+        export.setLicensePlate(dto.getLicensePlate());
+        export.setChargingCapacity(dto.getChargingCapacity());
+        export.setElectrovalence(dto.getElectrovalence());
+        export.setServiceCharge(dto.getServiceCharge());
+        export.setEndMode(formatChargingEndMode(dto.getEndMode()));
+        export.setPeriodCount(dto.getPeriodCount());
         return export;
     }
 
+    private String formatChargingEndMode(Integer endMode) {
+        if (endMode == null) {
+            return "-";
+        }
+        switch (endMode) {
+            case 0:
+                return "异常终止";
+            case 1:
+                return "主动终止";
+            case 2:
+                return "满电终止";
+            case 3:
+                return "费用不足终止";
+            default:
+                return "-";
+        }
+    }
+
     private String formatEnterpriseOrderType(Integer type) {
         if (type == null) {
             return "-";
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/EnterpriseChargingDetailExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/EnterpriseChargingDetailExport.java
index b3b6401..4297e66 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/EnterpriseChargingDetailExport.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/EnterpriseChargingDetailExport.java
@@ -59,4 +59,22 @@
 
     @Excel(name = "最后时间", width = 30)
     private String endTime;
+
+    @Excel(name = "车牌号", width = 20)
+    private String licensePlate;
+
+    @Excel(name = "累计充电量", width = 20, numFormat = "0.0000")
+    private BigDecimal chargingCapacity;
+
+    @Excel(name = "累计电费", width = 20, numFormat = "0.0000")
+    private BigDecimal electrovalence;
+
+    @Excel(name = "累计服务费", width = 20, numFormat = "0.0000")
+    private BigDecimal serviceCharge;
+
+    @Excel(name = "结束原因", width = 20)
+    private String endMode;
+
+    @Excel(name = "时段数", width = 15)
+    private Integer periodCount;
 }
diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java
index 41c729d..47a58bf 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java
@@ -4,11 +4,14 @@
 import com.ruoyi.order.api.query.ChargingOrderQuery;
 import com.ruoyi.order.api.vo.TCharingOrderVO;
 import com.ruoyi.order.dto.SixChargingDto;
+import com.ruoyi.order.dto.EnterpriseChargingDetailVO;
+import com.ruoyi.order.export.EnterpriseChargingDetailExport;
 import com.ruoyi.order.service.TChargingOrderService;
 import org.junit.jupiter.api.Test;
 import org.springframework.test.util.ReflectionTestUtils;
 
 import java.time.LocalDate;
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
 
@@ -23,6 +26,27 @@
 class TChargingOrderControllerTest {
 
     @Test
+    void enterpriseChargingDetailExportContainsVisibleDetailColumns() {
+        EnterpriseChargingDetailVO detail = new EnterpriseChargingDetailVO();
+        detail.setLicensePlate("川JD20960");
+        detail.setChargingCapacity(new BigDecimal("40.693"));
+        detail.setElectrovalence(new BigDecimal("43.0857"));
+        detail.setServiceCharge(new BigDecimal("16.2772"));
+        detail.setEndMode(0);
+        detail.setPeriodCount(1);
+
+        EnterpriseChargingDetailExport export = ReflectionTestUtils.invokeMethod(
+                new TChargingOrderController(), "buildEnterpriseChargingDetailExport", detail);
+
+        assertEquals("川JD20960", export.getLicensePlate());
+        assertEquals(new BigDecimal("40.693"), export.getChargingCapacity());
+        assertEquals(new BigDecimal("43.0857"), export.getElectrovalence());
+        assertEquals(new BigDecimal("16.2772"), export.getServiceCharge());
+        assertEquals("异常终止", export.getEndMode());
+        assertEquals(1, export.getPeriodCount());
+    }
+
+    @Test
     void latestAdjacentMonthDataMovesTheSixMonthWindowForward() {
         SixChargingDto june = new SixChargingDto();
         june.setMonth("06");

--
Gitblit v1.7.1