瀏覽代碼

用户端不显示放入类型的订单

skyline 1 月之前
父節點
當前提交
32e2f4cc0f

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Order.java

@@ -95,6 +95,9 @@ public class Order implements Serializable {
 
     private Integer status;
 
+    /** 订单类型:OUT-拿出(正常消费),IN-放入(异物放入) */
+    private String orderType;
+
     @TableField(exist = false)
     private String statusLabel;
 

+ 5 - 0
haha-miniapp/src/main/java/com/haha/miniapp/controller/OrderController.java

@@ -140,6 +140,11 @@ public class OrderController {
                 return Result.error(403, "无权访问该订单");
             }
 
+            // IN类型订单(异物放入)不在用户端展示
+            if ("IN".equals(order.getOrderType())) {
+                return Result.error(404, "订单不存在");
+            }
+
             Map<String, Object> orderDetail = new HashMap<>();
             orderDetail.put("id", order.getId());
             orderDetail.put("orderNo", order.getOrderNo());

+ 46 - 2
haha-service/src/main/java/com/haha/service/impl/HahaCallbackServiceImpl.java

@@ -337,7 +337,9 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
 
             // 处理有消费场景
             BigDecimal confidence = parseBigDecimal(params.get("confidence"));
-            handleConsume(activityId, deviceId, userId, skuListStr, resourceInfoStr, resultStr, confidence);
+            // 从识别结果中提取类型:OUT-拿出(正常消费),IN-放入(异物放入)
+            String recognizeType = extractRecognizeType(resultStr);
+            handleConsume(activityId, deviceId, userId, skuListStr, resourceInfoStr, resultStr, confidence, recognizeType);
 
         } catch (Exception e) {
             log.error("处理AI识别结果通知失败 - activityId: {}, deviceId: {}", activityId, deviceId, e);
@@ -376,7 +378,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
      */
     private void handleConsume(String activityId, String deviceId, String userId,
                                 String skuListStr, String resourceInfoStr, String resultStr,
-                                BigDecimal confidence) {
+                                BigDecimal confidence, String recognizeType) {
 
         // 获取或创建订单
         Order order = getOrCreateOrder(activityId, deviceId, userId, skuListStr, resourceInfoStr, confidence);
@@ -385,6 +387,13 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
             return;
         }
 
+        // 设置订单类型(OUT-拿出/IN-放入)
+        if (recognizeType != null && !recognizeType.isEmpty()) {
+            order.setOrderType(recognizeType);
+            orderService.updateById(order);
+            log.info("订单类型设置成功 - orderId: {}, orderType: {}", order.getId(), recognizeType);
+        }
+
         // 更新订单信息
         updateOrderFromRecognition(order, skuListStr, resourceInfoStr, confidence, activityId);
         logRecognizeResultDetails(resultStr, skuListStr, resourceInfoStr);
@@ -663,6 +672,15 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
 
         if (orderName != null && !orderName.isEmpty()) {
             order.setOrderName(orderName);
+            // 根据订单名称判断订单类型:包含"放入"的为IN类型(异物放入),其他为OUT类型(正常消费)
+            if (orderName.contains("放入")) {
+                order.setOrderType("IN");
+            }
+        }
+
+        // 如果订单类型仍为空,默认为OUT(正常消费)
+        if (order.getOrderType() == null || order.getOrderType().isEmpty()) {
+            order.setOrderType("OUT");
         }
 
         if (orderDetail != null) {
@@ -866,6 +884,32 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         return null;
     }
 
+    /**
+     * 从识别结果中提取类型
+     * 识别结果格式:{"type":"OUT","data":{...}} 或 {"type":"IN","data":{...}}
+     * OUT-拿出(正常消费),IN-放入(异物放入)
+     *
+     * @param resultStr 识别结果JSON字符串
+     * @return 类型字符串(OUT/IN),默认返回OUT
+     */
+    private String extractRecognizeType(String resultStr) {
+        if (resultStr == null || resultStr.isEmpty()) {
+            return "OUT";
+        }
+        try {
+            JSONObject result = JSON.parseObject(resultStr);
+            String type = result.getString("type");
+            if ("IN".equalsIgnoreCase(type)) {
+                log.info("识别结果类型为IN(放入) - 非正常消费订单");
+                return "IN";
+            }
+            return "OUT";
+        } catch (Exception e) {
+            log.warn("解析识别结果类型失败,默认为OUT", e);
+            return "OUT";
+        }
+    }
+
     private Integer parseInteger(Object value) {
         if (value == null) {
             return null;

+ 2 - 0
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -260,11 +260,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             return lambdaQuery()
                 .eq(Order::getUserId, userId)
                 .eq(Order::getStatus, status)
+                .ne(Order::getOrderType, "IN")
                 .orderByDesc(Order::getId)
                 .list();
         } else {
             return lambdaQuery()
                 .eq(Order::getUserId, userId)
+                .ne(Order::getOrderType, "IN")
                 .orderByDesc(Order::getId)
                 .list();
         }