|
|
@@ -172,9 +172,10 @@ public class CallbackController {
|
|
|
private void handleOnlineStatus(Map<String, Object> params) {
|
|
|
try {
|
|
|
String deviceId = (String) params.get("device_id");
|
|
|
- Integer isOnline = (Integer) params.get("is_online");
|
|
|
+ Integer isOnline = parseInteger(params.get("is_online"));
|
|
|
|
|
|
- log.info("设备在线状态通知 - 设备: {}, 在线状态: {}", deviceId, isOnline == 1 ? "在线" : "离线");
|
|
|
+ log.info("设备在线状态通知 - 设备: {}, 在线状态: {}",
|
|
|
+ deviceId, isOnline != null && isOnline == 1 ? "在线" : "离线");
|
|
|
|
|
|
// 可以在这里更新设备在线状态到数据库
|
|
|
|
|
|
@@ -191,7 +192,7 @@ public class CallbackController {
|
|
|
private void handleVoiceResult(Map<String, Object> params) {
|
|
|
try {
|
|
|
String deviceId = (String) params.get("device_id");
|
|
|
- Integer voice = (Integer) params.get("voice");
|
|
|
+ Integer voice = parseInteger(params.get("voice"));
|
|
|
|
|
|
log.info("音量调节结果通知 - 设备: {}, 音量值: {}", deviceId, voice);
|
|
|
|
|
|
@@ -213,14 +214,14 @@ public class CallbackController {
|
|
|
private void handleNewProductAudit(Map<String, Object> params) {
|
|
|
try {
|
|
|
String id = (String) params.get("id");
|
|
|
- Integer status = (Integer) params.get("status");
|
|
|
+ Integer status = parseInteger(params.get("status"));
|
|
|
String name = (String) params.get("name");
|
|
|
String code = (String) params.get("code");
|
|
|
String rejectReason = (String) params.get("reject_reason");
|
|
|
|
|
|
log.info("新品审核结果 - ID: {}, 商品名: {}, 状态: {}, code: {}", id, name, status, code);
|
|
|
|
|
|
- if (status == 2) {
|
|
|
+ if (status != null && status == 2) {
|
|
|
log.warn("新品 {} 被拒绝,原因: {}", name, rejectReason);
|
|
|
}
|
|
|
|
|
|
@@ -269,7 +270,9 @@ public class CallbackController {
|
|
|
String activityId = (String) params.get("activity_id");
|
|
|
String deviceId = (String) params.get("device_id");
|
|
|
String outUserId = (String) params.get("out_user_id");
|
|
|
- Integer nobuy = (Integer) params.get("nobuy");
|
|
|
+
|
|
|
+ // 安全转换 nobuy 字段(兼容字符串和整型)
|
|
|
+ Integer nobuy = parseInteger(params.get("nobuy"));
|
|
|
|
|
|
// 解析识别结果
|
|
|
String resultStr = (String) params.get("result");
|
|
|
@@ -277,31 +280,39 @@ public class CallbackController {
|
|
|
String resourceInfoStr = (String) params.get("resource_info");
|
|
|
|
|
|
log.info("AI识别结果通知 - 设备: {}, 活动: {}, 是否消费: {}",
|
|
|
- deviceId, activityId, nobuy == 1 ? "无消费" : "有消费");
|
|
|
+ deviceId, activityId, nobuy != null && nobuy == 1 ? "无消费" : "有消费");
|
|
|
|
|
|
- if (nobuy == 1) {
|
|
|
+ if (nobuy != null && nobuy == 1) {
|
|
|
log.info("用户打开柜门但未消费,无需处理");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 解析result字段
|
|
|
- JSONObject result = JSON.parseObject(resultStr);
|
|
|
- String type = result.getString("type"); // IN或OUT
|
|
|
- JSONObject data = result.getJSONObject("data");
|
|
|
- JSONArray excepts = result.getJSONArray("excepts");
|
|
|
+ if (resultStr != null && !resultStr.isEmpty()) {
|
|
|
+ JSONObject result = JSON.parseObject(resultStr);
|
|
|
+ String type = result.getString("type"); // IN或OUT
|
|
|
+ JSONArray data = result.getJSONArray("data");
|
|
|
+ JSONArray excepts = result.getJSONArray("excepts");
|
|
|
+
|
|
|
+ log.info("识别类型: {}, 数据: {}", type, data != null ? data.size() : 0);
|
|
|
+
|
|
|
+ // 检查是否有异常
|
|
|
+ if (excepts != null && !excepts.isEmpty()) {
|
|
|
+ log.warn("识别结果包含异常: {}", excepts.toJSONString());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 解析sku_list
|
|
|
- JSONArray skuList = JSON.parseArray(skuListStr);
|
|
|
+ if (skuListStr != null && !skuListStr.isEmpty()) {
|
|
|
+ JSONArray skuList = JSON.parseArray(skuListStr);
|
|
|
+ log.info("商品数量: {}", skuList != null ? skuList.size() : 0);
|
|
|
+ }
|
|
|
|
|
|
// 解析resource_info获取视频URL
|
|
|
- JSONObject resourceInfo = JSON.parseObject(resourceInfoStr);
|
|
|
- String videoUrl = resourceInfo.getString("video_url");
|
|
|
-
|
|
|
- log.info("识别类型: {}, 商品数量: {}, 视频: {}", type, skuList.size(), videoUrl);
|
|
|
-
|
|
|
- // 检查是否有异常
|
|
|
- if (excepts != null && !excepts.isEmpty()) {
|
|
|
- log.warn("识别结果包含异常: {}", excepts.toJSONString());
|
|
|
+ if (resourceInfoStr != null && !resourceInfoStr.isEmpty()) {
|
|
|
+ JSONObject resourceInfo = JSON.parseObject(resourceInfoStr);
|
|
|
+ String videoUrl = resourceInfo.getString("video_url");
|
|
|
+ log.info("视频URL: {}", videoUrl);
|
|
|
}
|
|
|
|
|
|
// TODO: 根据识别结果进行后续处理
|
|
|
@@ -446,6 +457,36 @@ public class CallbackController {
|
|
|
return params;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 安全转换为整型,兼容字符串和整型
|
|
|
+ *
|
|
|
+ * @param value 原始值
|
|
|
+ * @return 整型值,如果转换失败返回null
|
|
|
+ */
|
|
|
+ private Integer parseInteger(Object value) {
|
|
|
+ if (value == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ if (value instanceof Integer) {
|
|
|
+ return (Integer) value;
|
|
|
+ } else if (value instanceof String) {
|
|
|
+ String str = (String) value;
|
|
|
+ if (str.trim().isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return Integer.parseInt(str);
|
|
|
+ } else if (value instanceof Number) {
|
|
|
+ return ((Number) value).intValue();
|
|
|
+ }
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("无法转换为整型: {}", value);
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 验证签名
|
|
|
*
|