longz
2026-08-03 71d53994a877e68173340d6529628a2baf41142a
fix: correct franchisee user tag statistics
2个文件已修改
91 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -15,8 +15,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.AppUserTagClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.account.api.model.TAppUserTag;
import com.ruoyi.chargingPile.api.domain.SiteMenu;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.*;
@@ -71,10 +73,12 @@
import com.ruoyi.order.vo.WatchChargingOrderVo;
import com.ruoyi.other.api.feignClient.RoleSiteClient;
import com.ruoyi.other.api.feignClient.UserSiteClient;
import com.ruoyi.other.api.feignClient.UserTagClient;
import com.ruoyi.other.api.feignClient.VipClient;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.domain.TCompany;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.domain.TUserTag;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.vo.IcbcPaymentResp;
@@ -161,6 +165,10 @@
    private ChargingGunClient chargingGunClient;
    @Resource
    private AppUserCarClient appUserCarClient;
    @Resource
    private AppUserTagClient appUserTagClient;
    @Resource
    private UserTagClient userTagClient;
    @Resource
    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
    
@@ -356,12 +364,38 @@
    }
    private List<Map<String, Object>> franchiseeUserTags(List<TChargingOrder> orders) {
        Map<Long, Long> counts = orders.stream().filter(order -> order.getAppUserId() != null)
                .collect(Collectors.groupingBy(TChargingOrder::getAppUserId, Collectors.counting()));
        long active = counts.values().stream().filter(count -> count >= 5).count();
        long normal = counts.values().stream().filter(count -> count >= 2 && count < 5).count();
        long lowFrequency = counts.values().stream().filter(count -> count == 1).count();
        return namedCounts(new String[]{"活跃用户", "普通用户", "低频用户"}, new long[]{active, normal, lowFrequency});
        Set<Long> userIds = orders.stream()
                .map(TChargingOrder::getAppUserId)
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());
        if (userIds.isEmpty()) {
            return Collections.emptyList();
        }
        R<List<TUserTag>> tagResult = userTagClient.getAllUserTag();
        List<TUserTag> tags = tagResult == null || tagResult.getData() == null
                ? Collections.emptyList() : tagResult.getData();
        Map<String, Long> counts = new LinkedHashMap<>();
        for (TUserTag tag : tags) {
            if (tag == null || tag.getId() == null || StringUtils.isBlank(tag.getName())) {
                continue;
            }
            long count = 0;
            for (Long userId : userIds) {
                TAppUserTag query = new TAppUserTag();
                query.setAppUserId(userId);
                query.setUserTagId(tag.getId());
                R<TAppUserTag> userTagResult = appUserTagClient.getUserTag(query);
                if (userTagResult != null && userTagResult.getData() != null) {
                    count++;
                }
            }
            if (count > 0) {
                counts.put(tag.getName(), count);
            }
        }
        return counts.entrySet().stream()
                .map(entry -> namedCount(entry.getKey(), entry.getValue()))
                .collect(Collectors.toList());
    }
    private List<Map<String, Object>> franchiseeMemberTypes(List<TAppUser> users, Map<Integer, String> vipNames) {
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/controller/TChargingOrderControllerTest.java
@@ -1,13 +1,19 @@
package com.ruoyi.order.controller;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.AppUserTagClient;
import com.ruoyi.account.api.model.TAppUserTag;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.api.model.TChargingOrder;
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 com.ruoyi.other.api.domain.TUserTag;
import com.ruoyi.other.api.feignClient.UserTagClient;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
@@ -134,4 +140,43 @@
        assertEquals(Arrays.asList(-1), result);
    }
    @Test
    void franchiseeUserTagsUsesPersistedUserTagsInsteadOfChargeFrequency() {
        TChargingOrderController controller = new TChargingOrderController();
        AppUserTagClient appUserTagClient = mock(AppUserTagClient.class);
        UserTagClient userTagClient = mock(UserTagClient.class);
        ReflectionTestUtils.setField(controller, "appUserTagClient", appUserTagClient);
        ReflectionTestUtils.setField(controller, "userTagClient", userTagClient);
        TUserTag oldUser = new TUserTag();
        oldUser.setId(1);
        oldUser.setName("老用户");
        TUserTag activeUser = new TUserTag();
        activeUser.setId(2);
        activeUser.setName("活跃用户");
        when(userTagClient.getAllUserTag()).thenReturn(R.ok(Arrays.asList(oldUser, activeUser)));
        TAppUserTag oldUserTag = new TAppUserTag();
        oldUserTag.setAppUserId(101L);
        oldUserTag.setUserTagId(1);
        when(appUserTagClient.getUserTag(org.mockito.ArgumentMatchers.argThat(query ->
                query.getAppUserId().equals(101L) && query.getUserTagId().equals(1))))
                .thenReturn(R.ok(oldUserTag));
        TChargingOrder firstOrder = new TChargingOrder();
        firstOrder.setAppUserId(101L);
        TChargingOrder repeatOrder = new TChargingOrder();
        repeatOrder.setAppUserId(101L);
        TChargingOrder untaggedOrder = new TChargingOrder();
        untaggedOrder.setAppUserId(102L);
        @SuppressWarnings("unchecked")
        List<java.util.Map<String, Object>> result = ReflectionTestUtils.invokeMethod(controller,
                "franchiseeUserTags", Arrays.asList(firstOrder, repeatOrder, untaggedOrder));
        assertEquals(1, result.size());
        assertEquals("老用户", result.get(0).get("name"));
        assertEquals(1L, result.get(0).get("value"));
    }
}