|
|
@@ -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;
|