Explorar o código

主板上传事件

skyline hai 1 ano
pai
achega
348852881b
Modificáronse 35 ficheiros con 374 adicións e 183 borrados
  1. 1 1
      car-wash-entity/pom.xml
  2. 53 30
      car-wash-miniapp/src/main/java/com/kym/miniapp/mq/MnsHandler.java
  3. 7 0
      car-wash-service/pom.xml
  4. 1 1
      car-wash-service/src/main/java/com/kym/service/awoara/AwoaraService.java
  5. 38 11
      car-wash-service/src/main/java/com/kym/service/awoara/entity/Method.java
  6. 0 2
      car-wash-service/src/main/java/com/kym/service/awoara/entity/MethodHelp.java
  7. 11 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/CardEventObject.java
  8. 1 4
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/DeviceState.java
  9. 8 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/DeviceStateObject.java
  10. 41 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/Event.java
  11. 7 3
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/MessageBody.java
  12. 3 1
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/OrderInfo.java
  13. 9 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/OrderInfoObject.java
  14. 4 2
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/Payload.java
  15. 9 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/UserLoginObject.java
  16. 7 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/AwoaraEventHandler.java
  17. 22 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/BootEventHandler.java
  18. 20 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/CardEventHandler.java
  19. 18 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/DeviceStateEventHandler.java
  20. 17 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderCloseEventHandler.java
  21. 28 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderCreateEventHandler.java
  22. 6 5
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderUpdateEventHandler.java
  23. 38 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/ReportTypeHandle.java
  24. 17 0
      car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/UserLoginEventHandler.java
  25. 2 2
      car-wash-service/src/main/java/com/kym/service/awoara/entity/response/State.java
  26. 5 2
      car-wash-service/src/main/java/com/kym/service/awoara/factory/AwoaraEventHandlerFactory.java
  27. 0 8
      car-wash-service/src/main/java/com/kym/service/awoara/handle/AwoaraEventHandler.java
  28. 0 15
      car-wash-service/src/main/java/com/kym/service/awoara/handle/BootEventHandler.java
  29. 0 18
      car-wash-service/src/main/java/com/kym/service/awoara/handle/CardEventHandler.java
  30. 0 17
      car-wash-service/src/main/java/com/kym/service/awoara/handle/DeviceStateEventHandler.java
  31. 0 11
      car-wash-service/src/main/java/com/kym/service/awoara/handle/Event.java
  32. 0 16
      car-wash-service/src/main/java/com/kym/service/awoara/handle/OrderCloseEventHandler.java
  33. 0 18
      car-wash-service/src/main/java/com/kym/service/awoara/handle/OrderCreateEventHandler.java
  34. 0 15
      car-wash-service/src/main/java/com/kym/service/awoara/handle/UserLoginEventHandler.java
  35. 1 1
      car-wash-service/src/main/java/com/kym/service/awoara/impl/AwoaraServiceImpl.java

+ 1 - 1
car-wash-entity/pom.xml

@@ -58,7 +58,7 @@
         <dependency>
             <groupId>com.alibaba.fastjson2</groupId>
             <artifactId>fastjson2</artifactId>
-            <version>2.0.35</version>
+            <version>2.0.52</version>
         </dependency>
 
         <dependency>

+ 53 - 30
car-wash-miniapp/src/main/java/com/kym/miniapp/mq/MnsHandler.java

@@ -2,14 +2,16 @@ package com.kym.miniapp.mq;
 
 import cn.hutool.core.util.CharsetUtil;
 import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.TypeReference;
 import com.aliyun.mns.client.CloudAccount;
 import com.aliyun.mns.client.CloudQueue;
 import com.aliyun.mns.client.MNSClient;
 import com.aliyun.mns.model.Message;
 import com.kym.service.awoara.factory.AwoaraEventHandlerFactory;
-import com.kym.service.awoara.handle.MessageBody;
-import com.kym.service.awoara.handle.Report;
+import com.kym.service.awoara.entity.event.Event;
+import com.kym.service.awoara.entity.event.MessageBody;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.text.StringEscapeUtils;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
@@ -60,25 +62,25 @@ public class MnsHandler {
      */
     @SuppressWarnings("InfiniteLoopStatement")
     private static void longPollingBatchReceive(CloudQueue queue) {
-            executorService.execute(() -> {
-                while (true){
-                    log.info("=============start longPollingBatchReceive=============");
-
-                    // 一次性拉取最多xx条消息
-                    int batchSize = 15;
-                    // 长轮询时间为 xx s
-                    int waitSeconds = 15;
-
-                    List<Message> messages = queue.batchPopMessage(batchSize, waitSeconds);
-                    if (messages != null && !messages.isEmpty()) {
-                        for (Message message : messages) {
-                            printMsgAndDelete(queue, message);
-                        }
+        executorService.execute(() -> {
+            while (true) {
+                log.info("=============start longPollingBatchReceive=============");
+
+                // 一次性拉取最多xx条消息
+                int batchSize = 15;
+                // 长轮询时间为 xx s
+                int waitSeconds = 15;
+
+                List<Message> messages = queue.batchPopMessage(batchSize, waitSeconds);
+                if (messages != null && !messages.isEmpty()) {
+                    for (Message message : messages) {
+                        printMsgAndDelete(queue, message);
                     }
-                    log.info("=============end longPollingBatchReceive=============");
                 }
-            });
-        }
+                log.info("=============end longPollingBatchReceive=============");
+            }
+        });
+    }
 
     /**
      * 获取单条消息
@@ -116,22 +118,43 @@ public class MnsHandler {
         }
     }
 
-    static void handleMessage(String messageBody) {
-        // todo 对messageBody进行base64解码
-        var message = new String(decoder.decode(messageBody), CharsetUtil.CHARSET_UTF_8);
-        log.info("message: {}", message);
-        // 根据event类型组装成对应对象
-        var body = JSONObject.parseObject(message, MessageBody.class);
-        var report = JSONObject.parseObject(new String(decoder.decode(body.getPayload()), CharsetUtil.CHARSET_UTF_8), Report.class);
-        var handler = AwoaraEventHandlerFactory.getEventHandler(report.getEvent());
-        handler.handle(report);
+    static void handleMessage(String base64) {
+        // 对messageBody进行base64解码
+        var messageBodyStr = new String(decoder.decode(base64), CharsetUtil.CHARSET_UTF_8);
+
+        // 对messageBodyStr中的payload进行base64解码后转换成MessageBody对象
+        var json = JSONObject.parseObject(messageBodyStr);
+
+        json.put("payload", JSONObject.parseObject(new String(decoder.decode(json.get("payload").toString()), CharsetUtil.CHARSET_UTF_8)));
+        log.info("消息内容:{}", json.toJSONString());
+        if ("upload".equals(json.getString("messagetype"))) {
+            var event = json.getJSONObject("payload").getString("event");
+            if ("device_state".equals(event)) {
+                var handler = AwoaraEventHandlerFactory.getEventHandler(event);
+                var message = parseMessageBody(json.toJSONString(), Event.getClazz(event));
+                handler.handle(message);
+            }
+
+        } else {
+            log.info("message type is not upload");
+        }
+
+    }
+
+    private static <T> MessageBody<T> parseMessageBody(String jsonStr, Class<T> clazz) {
+        // 去掉json字符串中的转义符
+        var json = StringEscapeUtils.unescapeJava(jsonStr);
+        // 获取到泛型类型
 
+        return JSONObject.parseObject(json, new TypeReference<>(clazz) {
+
+        });
     }
 
+
     @EventListener(classes = {ContextRefreshedEvent.class})
     @Async
-    public void init() throws InterruptedException {
-        // 开启线程处理队列消息
+    public void init() {
         longPollingBatchReceive(queue);
     }
 

+ 7 - 0
car-wash-service/pom.xml

@@ -79,6 +79,13 @@
             <version>0.57.0</version>
         </dependency>
 
+        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+            <version>1.12.0</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 1 - 1
car-wash-service/src/main/java/com/kym/service/awoara/AwoaraService.java

@@ -3,7 +3,7 @@ package com.kym.service.awoara;
 import com.kym.service.awoara.entity.ApiList;
 import com.kym.service.awoara.entity.Config;
 import com.kym.service.awoara.entity.MethodHelp;
-import com.kym.service.awoara.entity.OrderInfo;
+import com.kym.service.awoara.entity.event.OrderInfo;
 import com.kym.service.awoara.entity.response.AwoaraResponse;
 import com.kym.service.awoara.entity.response.CreateOrder;
 import com.kym.service.awoara.entity.response.HardwareInfo;

+ 38 - 11
car-wash-service/src/main/java/com/kym/service/awoara/entity/Method.java

@@ -2,17 +2,44 @@ package com.kym.service.awoara.entity;
 
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
 @Getter
 public enum Method {
-    help,
-    reboot,
-    query_state,
-    query_hardware_info,
-    create_order,
-    close_order,
-    query_order,
-    read_config,
-    write_config,
-    show_msgbox,
-    hide_msgbox;
+    help("help", MethodHelp.class),
+    reboot("help", MethodHelp.class),
+    query_state("help", MethodHelp.class),
+    query_hardware_info("help", MethodHelp.class),
+    create_order("help", MethodHelp.class),
+    close_order("help", MethodHelp.class),
+    query_order("help", MethodHelp.class),
+    read_config("help", MethodHelp.class),
+    write_config("help", MethodHelp.class),
+    show_msgbox("help", MethodHelp.class),
+    hide_msgbox("help", MethodHelp.class);
+
+
+    public String method;
+    public Class<?> clazz;
+
+
+    Method(String method, Class<?> clazz) {
+        this.method = method;
+        this.clazz = clazz;
+    }
+
+    private static List<String> getMethods() {
+        // 获取所有的method
+        return Arrays.stream(values()).map(Method::getMethod).toList();
+    }
+
+    public static Class<?> getClazz(String method) {
+        // 通过对应的方法名获取对应的类
+        if (Objects.isNull(method) || !getMethods().contains(method)) {
+            return null;
+        }
+        return Arrays.stream(values()).filter(m -> m.getMethod().equals(method)).findFirst().get().getClazz();
+    }
 }

+ 0 - 2
car-wash-service/src/main/java/com/kym/service/awoara/entity/MethodHelp.java

@@ -3,8 +3,6 @@ package com.kym.service.awoara.entity;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
-import java.util.List;
-
 @Data
 @Accessors(chain = true)
 public class MethodHelp {

+ 11 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/CardEventObject.java

@@ -0,0 +1,11 @@
+package com.kym.service.awoara.entity.event;
+
+public class CardEventObject {
+    private Integer card_type;
+    private Long card_id;
+    private Long card_sn;
+    private Long card_expired;
+    private Integer card_balance;
+
+
+}

+ 1 - 4
car-wash-service/src/main/java/com/kym/service/awoara/entity/DeviceState.java → car-wash-service/src/main/java/com/kym/service/awoara/entity/event/DeviceState.java

@@ -1,4 +1,4 @@
-package com.kym.service.awoara.entity;
+package com.kym.service.awoara.entity.event;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -55,7 +55,4 @@ public class DeviceState {
     private String temperature_chip;
 
 
-
-
-
 }

+ 8 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/DeviceStateObject.java

@@ -0,0 +1,8 @@
+package com.kym.service.awoara.entity.event;
+
+import lombok.Data;
+
+@Data
+public class DeviceStateObject {
+    private DeviceState device_state;
+}

+ 41 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/Event.java

@@ -0,0 +1,41 @@
+package com.kym.service.awoara.entity.event;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+@Getter
+public enum Event {
+    boot("boot", DeviceState.class), // 设备启动事件,设备上电启动
+    device_state("device_state", DeviceStateObject.class),  // 设备状态更新事件
+    order_create("order_create", OrderInfoObject.class),  // 收到订单时上传,包含订单信息
+    order_update("order_update", OrderInfoObject.class),  // 订单状态更新事件
+    order_close("order_close", OrderInfoObject.class),  // 订单关闭事件
+    user_login("user_login", UserLoginObject.class),  // ⽤户登录事件
+    card_event("card_event", CardEventObject.class); // ⽤户刷卡事件
+
+
+    public String eventName;
+    public Class<?> clazz;
+
+
+    Event(String eventName, Class<?> clazz) {
+        this.eventName = eventName;
+        this.clazz = clazz;
+    }
+
+    private static List<String> getNames() {
+        // 获取所有的method
+        return Arrays.stream(values()).map(Event::getEventName).toList();
+    }
+
+    public static Class<?> getClazz(String eventName) {
+        // 通过对应的方法名获取对应的类
+        if (Objects.isNull(eventName) || !getNames().contains(eventName)) {
+            return null;
+        }
+        return Arrays.stream(values()).filter(m -> m.getEventName().equals(eventName)).findFirst().get().getClazz();
+    }
+}

+ 7 - 3
car-wash-service/src/main/java/com/kym/service/awoara/handle/MessageBody.java → car-wash-service/src/main/java/com/kym/service/awoara/entity/event/MessageBody.java

@@ -1,5 +1,6 @@
-package com.kym.service.awoara.handle;
+package com.kym.service.awoara.entity.event;
 
+import com.kym.service.awoara.entity.event.Payload;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -10,8 +11,9 @@ import lombok.experimental.Accessors;
  */
 @Data
 @Accessors(chain = true)
-public class MessageBody {
-    private String payload;
+public class MessageBody<T> {
+
+    private Payload<T> payload;
     /**
      * 消息类型 report收的的主要是upload
      */
@@ -19,4 +21,6 @@ public class MessageBody {
     private String topic;
     private Long messageid;
     private Long timestamp;
+
+
 }

+ 3 - 1
car-wash-service/src/main/java/com/kym/service/awoara/entity/OrderInfo.java → car-wash-service/src/main/java/com/kym/service/awoara/entity/event/OrderInfo.java

@@ -1,5 +1,6 @@
-package com.kym.service.awoara.entity;
+package com.kym.service.awoara.entity.event;
 
+import com.kym.service.awoara.entity.Detail;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -11,6 +12,7 @@ import java.util.List;
 @Data
 @Accessors(chain = true)
 public class OrderInfo {
+
     /**
      * 开机⽅式。
      * button 表⽰使⽤机器的维护按钮快速开机的订单。

+ 9 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/OrderInfoObject.java

@@ -0,0 +1,9 @@
+package com.kym.service.awoara.entity.event;
+
+import com.kym.service.awoara.entity.event.OrderInfo;
+import lombok.Data;
+
+@Data
+public class OrderInfoObject {
+    private OrderInfo order_info;
+}

+ 4 - 2
car-wash-service/src/main/java/com/kym/service/awoara/handle/Report.java → car-wash-service/src/main/java/com/kym/service/awoara/entity/event/Payload.java

@@ -1,14 +1,16 @@
-package com.kym.service.awoara.handle;
+package com.kym.service.awoara.entity.event;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
 
 /**
  * 石斑鱼主板上报消息到自定义Topic xxx/report
+ *
+ * @author skyline
  */
 @Data
 @Accessors(chain = true)
-public class Report<T> {
+public class Payload<T> {
     private String version;
     private String event;
     private String uptime_ms;

+ 9 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/UserLoginObject.java

@@ -0,0 +1,9 @@
+package com.kym.service.awoara.entity.event;
+
+import lombok.Data;
+
+@Data
+public class UserLoginObject {
+    private String username;
+    private String password;
+}

+ 7 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/AwoaraEventHandler.java

@@ -0,0 +1,7 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.MessageBody;
+
+public interface AwoaraEventHandler<T> {
+    void handle(MessageBody<T> message);
+}

+ 22 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/BootEventHandler.java

@@ -0,0 +1,22 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.DeviceStateObject;
+import com.kym.service.awoara.entity.event.MessageBody;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 设备启动事件处理
+ */
+@Slf4j
+public class BootEventHandler implements AwoaraEventHandler<DeviceStateObject> {
+    @Override
+    public void handle(MessageBody<DeviceStateObject> message) {
+        log.info(message.toString());
+        log.info("DeviceStateEventHandler");
+        // 获取设备信息 todo 要从topic中获取
+        var productKey = "";
+        var deviceName = "";
+
+        // 查询设备下的所有未完成的订单,如果有则将这些订单标记成异常结束
+    }
+}

+ 20 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/CardEventHandler.java

@@ -0,0 +1,20 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.CardEventObject;
+import com.kym.service.awoara.entity.event.MessageBody;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * ⽤户刷卡事件
+ * <p>
+ * 注意:⽆论⽤户刷的是普通卡还是储值卡,都会上传这个事件。 对于储值卡总是可以刷卡开关机,如果设备在
+ * 线则上传,不在线则不上传。各字段的意义请参考订单信息中的解释
+ */
+@Slf4j
+public class CardEventHandler implements AwoaraEventHandler<CardEventObject> {
+    @Override
+    public void handle(MessageBody<CardEventObject> message) {
+        log.info(message.toString());
+        log.info("CardEventHandler");
+    }
+}

+ 18 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/DeviceStateEventHandler.java

@@ -0,0 +1,18 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.DeviceStateObject;
+import com.kym.service.awoara.entity.event.MessageBody;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 设备状态更新事件事件处理
+ */
+@Slf4j
+public class DeviceStateEventHandler implements AwoaraEventHandler<DeviceStateObject> {
+
+    @Override
+    public void handle(MessageBody<DeviceStateObject> message) {
+        log.info(message.toString());
+        log.info("DeviceStateEventHandler");
+    }
+}

+ 17 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderCloseEventHandler.java

@@ -0,0 +1,17 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.MessageBody;
+import com.kym.service.awoara.entity.event.OrderInfoObject;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 关闭订单事件
+ */
+@Slf4j
+public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObject> {
+    @Override
+    public void handle(MessageBody<OrderInfoObject> message) {
+        log.info(message.toString());
+        log.info("OrderCloseEventHandler");
+    }
+}

+ 28 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderCreateEventHandler.java

@@ -0,0 +1,28 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.MessageBody;
+import com.kym.service.awoara.entity.event.OrderInfo;
+import com.kym.service.awoara.entity.event.OrderInfoObject;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 收到订单事件
+ *
+ * @author skyline
+ */
+@Slf4j
+public class OrderCreateEventHandler implements AwoaraEventHandler<OrderInfoObject> {
+    @Override
+    public void handle(MessageBody<OrderInfoObject> message) {
+        log.info(message.toString());
+        log.info("DeviceStateEventHandler");
+        // todo 对象在这里做转换
+        OrderInfo orderInfo = message.getPayload().getData().getOrder_info();
+        // 获取设备信息 todo 要从topic中获取
+        var productKey = "";
+        var productName = "";
+
+        // 查询设备下的所有未完成的订单,如果有则将这些订单标记
+    }
+
+}

+ 6 - 5
car-wash-service/src/main/java/com/kym/service/awoara/handle/OrderUpdateEventHandler.java → car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderUpdateEventHandler.java

@@ -1,6 +1,7 @@
-package com.kym.service.awoara.handle;
+package com.kym.service.awoara.entity.event.handle;
 
-import com.kym.service.awoara.entity.OrderInfo;
+import com.kym.service.awoara.entity.event.MessageBody;
+import com.kym.service.awoara.entity.event.OrderInfoObject;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -11,10 +12,10 @@ import lombok.extern.slf4j.Slf4j;
  * 3、如果⾦额不变,每个3分钟上传⼀次。
  */
 @Slf4j
-public class OrderUpdateEventHandler implements AwoaraEventHandler<OrderInfo> {
+public class OrderUpdateEventHandler implements AwoaraEventHandler<OrderInfoObject> {
     @Override
-    public void handle(Report<OrderInfo> report) {
-        log.info(report.toString());
+    public void handle(MessageBody<OrderInfoObject> message) {
+        log.info(message.toString());
         log.info("DeviceStateEventHandler");
     }
 }

+ 38 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/ReportTypeHandle.java

@@ -0,0 +1,38 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.kym.service.awoara.entity.event.Payload;
+import com.kym.service.awoara.entity.event.Event;
+import com.kym.service.awoara.entity.event.OrderInfo;
+
+import java.io.IOException;
+
+/**
+ * Report 消息解析器
+ */
+public class ReportTypeHandle extends JacksonTypeHandler {
+    public ReportTypeHandle(Class<?> type) {
+        super(type);
+    }
+
+    @Override
+    public Object parse(String json) {
+        try {
+            var jsonObject = JSONObject.parse(json);
+            var event = jsonObject.getString("event");
+            return switch (Event.valueOf(event)) {
+                case boot -> null;
+                case device_state -> null;
+                case order_create -> getObjectMapper().readValue(json, new TypeReference<Payload<OrderInfo>>() {});
+                case order_update -> null;
+                case order_close -> null;
+                case user_login -> null;
+                case card_event -> null;
+            };
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 17 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/UserLoginEventHandler.java

@@ -0,0 +1,17 @@
+package com.kym.service.awoara.entity.event.handle;
+
+import com.kym.service.awoara.entity.event.MessageBody;
+import com.kym.service.awoara.entity.event.UserLoginObject;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 用户登录事件
+ */
+@Slf4j
+public class UserLoginEventHandler implements AwoaraEventHandler<UserLoginObject> {
+    @Override
+    public void handle(MessageBody<UserLoginObject> message) {
+        log.info(message.toString());
+        log.info("UserLoginEventHandler");
+    }
+}

+ 2 - 2
car-wash-service/src/main/java/com/kym/service/awoara/entity/response/State.java

@@ -1,7 +1,7 @@
 package com.kym.service.awoara.entity.response;
 
-import com.kym.service.awoara.entity.DeviceState;
-import com.kym.service.awoara.entity.OrderInfo;
+import com.kym.service.awoara.entity.event.DeviceState;
+import com.kym.service.awoara.entity.event.OrderInfo;
 import lombok.Data;
 import lombok.experimental.Accessors;
 

+ 5 - 2
car-wash-service/src/main/java/com/kym/service/awoara/factory/AwoaraEventHandlerFactory.java

@@ -1,12 +1,14 @@
 package com.kym.service.awoara.factory;
 
-import com.kym.service.awoara.handle.*;
+import com.kym.common.exception.BusinessException;
+import com.kym.service.awoara.entity.event.Event;
+import com.kym.service.awoara.entity.event.handle.*;
 
 /**
  * 事件处理器工厂
  */
 public class AwoaraEventHandlerFactory {
-    public static AwoaraEventHandler<?> getEventHandler(String eventName) {
+    public static AwoaraEventHandler getEventHandler(String eventName) {
         return switch (Event.valueOf(eventName)) {
             case boot -> new BootEventHandler();
             case device_state -> new DeviceStateEventHandler();
@@ -15,6 +17,7 @@ public class AwoaraEventHandlerFactory {
             case order_close -> new OrderCloseEventHandler();
             case user_login -> new UserLoginEventHandler();
             case card_event -> new CardEventHandler();
+            default -> throw new BusinessException("未知事件类型");
         };
     }
 }

+ 0 - 8
car-wash-service/src/main/java/com/kym/service/awoara/handle/AwoaraEventHandler.java

@@ -1,8 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import com.kym.service.awoara.entity.DeviceState;
-
-public interface AwoaraEventHandler<T> {
-    void handle(Report<T> report);
-
-}

+ 0 - 15
car-wash-service/src/main/java/com/kym/service/awoara/handle/BootEventHandler.java

@@ -1,15 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 设备启动事件处理
- */
-@Slf4j
-public class BootEventHandler implements AwoaraEventHandler {
-    @Override
-    public void handle(Report report) {
-        log.info(report.toString());
-        log.info("DeviceStateEventHandler");
-    }
-}

+ 0 - 18
car-wash-service/src/main/java/com/kym/service/awoara/handle/CardEventHandler.java

@@ -1,18 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * ⽤户刷卡事件
- * <p>
- * 注意:⽆论⽤户刷的是普通卡还是储值卡,都会上传这个事件。 对于储值卡总是可以刷卡开关机,如果设备在
- * 线则上传,不在线则不上传。各字段的意义请参考订单信息中的解释
- */
-@Slf4j
-public class CardEventHandler implements AwoaraEventHandler {
-    @Override
-    public void handle(Report report) {
-        log.info(report.toString());
-        log.info("DeviceStateEventHandler");
-    }
-}

+ 0 - 17
car-wash-service/src/main/java/com/kym/service/awoara/handle/DeviceStateEventHandler.java

@@ -1,17 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import com.kym.service.awoara.entity.DeviceState;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 设备状态更新事件事件处理
- */
-@Slf4j
-public class DeviceStateEventHandler implements AwoaraEventHandler<DeviceState> {
-
-    @Override
-    public void handle(Report<DeviceState> report) {
-        log.info(report.toString());
-        log.info("DeviceStateEventHandler");
-    }
-}

+ 0 - 11
car-wash-service/src/main/java/com/kym/service/awoara/handle/Event.java

@@ -1,11 +0,0 @@
-package com.kym.service.awoara.handle;
-
-public enum Event {
-    boot, // 设备启动事件,设备上电启动
-    device_state,  // 设备状态更新事件
-    order_create,  // 收到订单时上传,包含订单信息
-    order_update,  // 订单状态更新事件
-    order_close,  // 订单关闭事件
-    user_login,  // ⽤户登录事件
-    card_event,  // ⽤户刷卡事件
-}

+ 0 - 16
car-wash-service/src/main/java/com/kym/service/awoara/handle/OrderCloseEventHandler.java

@@ -1,16 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import com.kym.service.awoara.entity.OrderInfo;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 关闭订单事件
- */
-@Slf4j
-public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfo> {
-    @Override
-    public void handle(Report<OrderInfo> report) {
-        log.info(report.toString());
-        log.info("OrderCloseEventHandler");
-    }
-}

+ 0 - 18
car-wash-service/src/main/java/com/kym/service/awoara/handle/OrderCreateEventHandler.java

@@ -1,18 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import com.kym.service.awoara.entity.OrderInfo;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 收到订单事件
- *
- * @author skyline
- */
-@Slf4j
-public class OrderCreateEventHandler implements AwoaraEventHandler<OrderInfo> {
-    @Override
-    public void handle(Report<OrderInfo> report) {
-        log.info(report.toString());
-        log.info("DeviceStateEventHandler");
-    }
-}

+ 0 - 15
car-wash-service/src/main/java/com/kym/service/awoara/handle/UserLoginEventHandler.java

@@ -1,15 +0,0 @@
-package com.kym.service.awoara.handle;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 用户登录事件
- */
-@Slf4j
-public class UserLoginEventHandler implements AwoaraEventHandler {
-    @Override
-    public void handle(Report report) {
-        log.info(report.toString());
-        log.info("UserLoginEventHandler");
-    }
-}

+ 1 - 1
car-wash-service/src/main/java/com/kym/service/awoara/impl/AwoaraServiceImpl.java

@@ -7,7 +7,7 @@ import com.kym.service.awoara.AwoaraService;
 import com.kym.service.awoara.entity.ApiList;
 import com.kym.service.awoara.entity.Config;
 import com.kym.service.awoara.entity.MethodHelp;
-import com.kym.service.awoara.entity.OrderInfo;
+import com.kym.service.awoara.entity.event.OrderInfo;
 import com.kym.service.awoara.entity.response.AwoaraResponse;
 import com.kym.service.awoara.entity.response.CreateOrder;
 import com.kym.service.awoara.entity.response.HardwareInfo;