Sfoglia il codice sorgente

feat(push): add optional user notification event scene

qmj 1 settimana fa
parent
commit
deb899ba30

+ 14 - 0
ruoyi-admin/src/main/java/com/ruoyi/app/order/dto/OrderPushBodyDto.java

@@ -3,6 +3,7 @@ package com.ruoyi.app.order.dto;
 import cn.hutool.core.lang.TypeReference;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.app.push.UserNotificationScene;
 import lombok.Data;
 
 import java.util.Map;
@@ -16,6 +17,9 @@ public class OrderPushBodyDto {
     //1 外卖订单 2 充值订单  3 闪送订单
     private int pushType=1;
 
+    // 仅用户通知填写;旧工厂留空并省略该字段,商家/骑手协议保持不变。
+    private String eventScene;
+
     private String title;
     private String content;
 
@@ -64,6 +68,16 @@ public class OrderPushBodyDto {
     }
 
 
+    /** 只增加用户场景,保留原有四字段语义;场景由成功业务动作明确指定。 */
+    public static String getUserJson(String ddId, String state, int type, int pushType,
+                                     UserNotificationScene scene) {
+        OrderPushBodyDto body = new OrderPushBodyDto(ddId, state, type, pushType);
+        if (scene != null) {
+            body.setEventScene(scene.name());
+        }
+        return JSONObject.toJSONString(body);
+    }
+
     public static Map<String, Object> getMap(String ddId, String state, int type,int pushType) {
         OrderPushBodyDto orderPushBodyDto = new OrderPushBodyDto(ddId, state, type,pushType);
         return JSON.parseObject(JSON.toJSONString(orderPushBodyDto), new TypeReference<Map<String, Object>>() {

+ 12 - 0
ruoyi-admin/src/main/java/com/ruoyi/app/push/UserNotificationScene.java

@@ -0,0 +1,12 @@
+package com.ruoyi.app.push;
+
+/** 用户通知场景协议:前端根据场景选择前台语音,不复用不同入口的订单状态值。 */
+public enum UserNotificationScene {
+    RIDER_ACCEPTED,
+    ORDER_DELIVERING,
+    ORDER_DELIVERED,
+    MERCHANT_ACCEPTED,
+    MERCHANT_READY,
+    PAYMENT_SUCCEEDED,
+    ORDER_CANCELLED
+}

+ 37 - 0
ruoyi-admin/src/test/java/com/ruoyi/app/order/dto/OrderPushBodyDtoTest.java

@@ -0,0 +1,37 @@
+package com.ruoyi.app.order.dto;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.app.push.UserNotificationScene;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+
+import java.util.Set;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class OrderPushBodyDtoTest {
+    @ParameterizedTest
+    @EnumSource(UserNotificationScene.class)
+    void preservesLegacyFieldsAndAddsOnlyEventScene(UserNotificationScene scene) {
+        JSONObject body = JSON.parseObject(OrderPushBodyDto.getUserJson("ORDER-1", "2", 0, 3, scene));
+        assertEquals(Set.of("ddId", "state", "type", "pushType", "eventScene"), body.keySet());
+        assertEquals("ORDER-1", body.getString("ddId"));
+        assertEquals("2", body.getString("state"));
+        assertEquals(0, body.getIntValue("type"));
+        assertEquals(3, body.getIntValue("pushType"));
+        assertEquals(scene.name(), body.getString("eventScene"));
+    }
+
+    @Test
+    void oldFactoryOmitsEventScene() {
+        Set<String> originalKeys = Set.of("ddId", "state", "type", "pushType");
+        assertEquals(originalKeys, JSON.parseObject(OrderPushBodyDto.getJson("ORDER-1", "2")).keySet());
+        assertEquals(originalKeys, JSON.parseObject(OrderPushBodyDto.getJson("ORDER-1", "2", 0)).keySet());
+        assertEquals(originalKeys, JSON.parseObject(OrderPushBodyDto.getJson("ORDER-1", "2", 0, 3)).keySet());
+        assertEquals(originalKeys, OrderPushBodyDto.getMap("ORDER-1", "2", 0, 3).keySet());
+        assertEquals(originalKeys, JSON.parseObject(OrderPushBodyDto.getUserJson("ORDER-1", "2", 0, 3, null)).keySet());
+        assertEquals(7, UserNotificationScene.values().length);
+    }
+}