From 1ee6637e101e539b7e327c779087d81de9d8b129 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 30 四月 2026 17:33:14 +0800
Subject: [PATCH] 开发优惠券发放逻辑

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java |   76 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 72 insertions(+), 4 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
index 6ffb414..1d86103 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -15,8 +15,10 @@
 import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
 import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
 import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
+import com.xiaopeng.api.feignClient.operation.XpWhiteListClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.VehicleMacClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
+import com.xiaopeng.api.model.operation.XpWhitelist;
 import com.xiaopeng.api.model.order.XpOrder;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
@@ -46,6 +48,7 @@
 import com.xiaopeng.order.service.IXpOrderService;
 import com.xiaopeng.order.vo.BluetoothTokenVo;
 import com.xiaopeng.order.vo.OrderDetailVo;
+import com.xiaopeng.order.vo.UpdateOrderStatusVo;
 import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
@@ -71,10 +74,8 @@
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -101,6 +102,8 @@
     @Resource
     private SysGroupMenuClient groupMenuClient;
 
+    @Resource
+    private XpWhiteListClient xpWhiteListClient;
 
 
     /**
@@ -738,6 +741,59 @@
 
 
     /**
+     * 判断用户类型
+     * @param userType
+     * @return 2=老用户,3=新用户,4=流失用户
+     */
+    @PostMapping("/logan/inner/order/getUserTypeIdList")
+    public R<List<Long>> getUserTypeIdList(@RequestParam Integer userType){
+        List<XpWhitelist> data = xpWhiteListClient.getXpWhitelistByName("").getData();
+        //判断流失用户
+        if(4 == userType){
+            Set<Long> collect = data.stream().map(XpWhitelist::getAppUserId).collect(Collectors.toSet());
+            List<XpOrder> one = xpOrderService.list(new QueryWrapper<XpOrder>().in("app_user_id", collect).in("status", Arrays.asList(9, 10)).last(" order by create_time desc limit 1"));
+            if(one.isEmpty()){
+                return R.ok(new ArrayList<>());
+            }
+            List<Long> appUserIds = new ArrayList<>();
+            for (XpOrder order : one) {
+                long time = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) - order.getCreateTime().toEpochSecond(ZoneOffset.of("+8"));
+                if(time >= 60 * 60 * 24 * 5){
+                    appUserIds.add(order.getAppUserId());
+                }
+            }
+            return R.ok(appUserIds);
+        }
+        //新用户
+        if(3 == userType){
+            Set<Long> collect = data.stream().map(XpWhitelist::getAppUserId).collect(Collectors.toSet());
+            List<XpOrder> one = xpOrderService.list(new QueryWrapper<XpOrder>().in("app_user_id", collect).in("status", Arrays.asList(9, 10)).last(" order by create_time desc limit 1"));
+            if(one.isEmpty()){
+                return R.ok(new ArrayList<>(collect));
+            }
+            collect.removeAll(one.stream().map(XpOrder::getAppUserId).collect(Collectors.toList()));
+            return R.ok(new ArrayList<>(collect));
+        }
+
+
+        //老用户
+        if(2 == userType){
+            Set<Long> collect = data.stream().map(XpWhitelist::getAppUserId).collect(Collectors.toSet());
+            List<XpOrder> one = xpOrderService.list(new QueryWrapper<XpOrder>().in("app_user_id", collect).in("status", Arrays.asList(9, 10)).last(" order by create_time desc limit 1"));
+            if(one.isEmpty()){
+                return R.ok(new ArrayList<>());
+            }
+            List<Long> appUserIds = new ArrayList<>();
+            for (XpOrder order : one) {
+                appUserIds.add(order.getAppUserId());
+            }
+            return R.ok(appUserIds);
+        }
+        return R.ok(new ArrayList<>());
+    }
+
+
+    /**
      * 获取用户订单数量
      * @param userId
      * @return
@@ -748,4 +804,16 @@
                 .ne("status", 0).eq("is_deleted", 0));
         return R.ok(count);
     }
+
+
+
+    @PostMapping("/drainage/v1/order/updateOrderStatus")
+    @ApiOperation(value = "更新订单状态", notes = "流量接入-基础信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "token", name = "token", required = true, paramType = "header")
+    })
+    public R<?> officialPartnerUpdateOrderStatus(@RequestBody UpdateOrderStatusVo vo){
+        xpOrderService.officialPartnerUpdateOrderStatus(vo);
+        return R.ok();
+    }
 }
\ No newline at end of file

--
Gitblit v1.7.1