|
|
@@ -100,6 +100,9 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
|
|
|
@Autowired
|
|
|
private DataSyncService dataSyncService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private com.haha.service.ProductService productService;
|
|
|
+
|
|
|
@Override
|
|
|
public void handleMessage(Map<String, Object> params) {
|
|
|
// 签名验证:确保回调来自哈哈平台
|
|
|
@@ -794,9 +797,76 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
|
|
|
log.info("订单识别信息更新成功 - orderId: {}, 等待回调更新金额", order.getId());
|
|
|
}
|
|
|
|
|
|
+ // 解析sku_list并保存到order_goods表,确保运营平台能立即看到商品信息
|
|
|
+ saveOrderGoodsFromSkuList(order, skuListStr);
|
|
|
+
|
|
|
saveOrderInfoToRedis(order, activityId);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 从 AI 识别的 sku_list 解析商品编码,查本地商品库补全信息后写入 order_goods
|
|
|
+ * 确保 ORDER 回调到达前运营平台也能看到订单商品
|
|
|
+ */
|
|
|
+ private void saveOrderGoodsFromSkuList(Order order, String skuListStr) {
|
|
|
+ if (skuListStr == null || skuListStr.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ // 检查是否已有商品记录(ORDER 回调可能已经写入),避免重复
|
|
|
+ Long existingCount = orderGoodsMapper.selectCount(
|
|
|
+ new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<OrderGoods>()
|
|
|
+ .eq(OrderGoods::getOrderId, order.getId()));
|
|
|
+ if (existingCount != null && existingCount > 0) {
|
|
|
+ log.debug("订单商品已存在,跳过 sku_list 写入 - orderId: {}", order.getId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONArray skuList = JSON.parseArray(skuListStr);
|
|
|
+ if (skuList == null || skuList.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < skuList.size(); i++) {
|
|
|
+ JSONObject sku = skuList.getJSONObject(i);
|
|
|
+ String code = sku.getString("code");
|
|
|
+ Integer number = sku.getInteger("number");
|
|
|
+ if (code == null || code.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询本地商品库
|
|
|
+ com.haha.entity.Product product = productService.getProductByCode(code);
|
|
|
+
|
|
|
+ OrderGoods goods = new OrderGoods();
|
|
|
+ goods.setOrderId(order.getId());
|
|
|
+ goods.setOrderNo(order.getOrderNo());
|
|
|
+ goods.setActivityId(order.getActivityId());
|
|
|
+ goods.setDeviceId(order.getDeviceId());
|
|
|
+ goods.setUserId(order.getUserId());
|
|
|
+ goods.setCode(code);
|
|
|
+ goods.setProductNum(number != null ? Math.abs(number) : 1);
|
|
|
+ goods.setCreateTime(LocalDateTime.now());
|
|
|
+
|
|
|
+ if (product != null) {
|
|
|
+ goods.setProductId(product.getId());
|
|
|
+ goods.setBarCode(product.getBarcode());
|
|
|
+ goods.setProductName(product.getName());
|
|
|
+ goods.setPic(product.getPic());
|
|
|
+ if (product.getRetailPrice() != null) {
|
|
|
+ goods.setPrice(BigDecimal.valueOf(product.getRetailPrice()));
|
|
|
+ goods.setMoney(BigDecimal.valueOf(product.getRetailPrice()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ orderGoodsMapper.insert(goods);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("从sku_list保存订单商品成功 - orderId: {}, 商品数: {}", order.getId(), skuList.size());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("从sku_list保存订单商品失败 - orderId: {}", order.getId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void updateOrderFromCallback(Order order, String orderId, String activityId,
|
|
|
Object orderMoney, String orderDetail,
|
|
|
String orderName, String orderGoodsStr) {
|