skyline 2 mesi fa
parent
commit
7a0e47877a

+ 4 - 3
haha-admin/src/main/java/com/haha/admin/controller/OrderController.java

@@ -5,6 +5,7 @@ import com.haha.admin.annotation.RequirePermission;
 import com.haha.admin.dto.OrderQueryDTO;
 import com.haha.admin.dto.OrderQueryDTO;
 import com.haha.common.annotation.Log;
 import com.haha.common.annotation.Log;
 import com.haha.common.enums.OperationType;
 import com.haha.common.enums.OperationType;
+import com.haha.common.vo.OrderVO;
 import com.haha.common.vo.PageResult;
 import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
 import com.haha.common.vo.Result;
 import com.haha.entity.Order;
 import com.haha.entity.Order;
@@ -55,14 +56,14 @@ public class OrderController {
     }
     }
 
 
     /**
     /**
-     * 获取订单详情
+     * 获取订单详情(包含商品列表)
      * @param id 订单ID
      * @param id 订单ID
      * @return 订单详情
      * @return 订单详情
      */
      */
     @RequirePermission("order:read")
     @RequirePermission("order:read")
     @GetMapping("/{id}")
     @GetMapping("/{id}")
-    public Result<Order> getById(@PathVariable Long id) {
-        Order order = orderService.getDetailById(id);
+    public Result<OrderVO> getById(@PathVariable Long id) {
+        OrderVO order = orderService.getDetailVOById(id);
         if (order == null) {
         if (order == null) {
             return Result.error(404, "订单不存在");
             return Result.error(404, "订单不存在");
         }
         }

+ 12 - 7
haha-common/src/main/java/com/haha/common/vo/OrderItemVO.java

@@ -1,16 +1,21 @@
 package com.haha.common.vo;
 package com.haha.common.vo;
 
 
 import lombok.Data;
 import lombok.Data;
+import java.math.BigDecimal;
 
 
 /**
 /**
- * 璁㈠崟鍟嗗搧灞曠ず瀵硅薄
+ * 订单商品展示对象
  */
  */
 @Data
 @Data
 public class OrderItemVO {
 public class OrderItemVO {
-    private String id;
-    private String name;
-    private Double price;
-    private Integer quantity;
-    private String image;
-    private Double subtotal;
+    private Long id;
+    private Long productId;
+    private String code;
+    private String barCode;
+    private String productName;
+    private String pic;
+    private Integer productNum;
+    private BigDecimal money;
+    private BigDecimal originPrice;
+    private BigDecimal price;
 }
 }

+ 3 - 1
haha-common/src/main/java/com/haha/common/vo/OrderVO.java

@@ -12,11 +12,13 @@ import java.util.List;
 public class OrderVO {
 public class OrderVO {
     private Long id;
     private Long id;
     private String orderNo;
     private String orderNo;
+    private String orderName;
     private String outTradeNo;
     private String outTradeNo;
-    private String hahaOrderNo;
+    private String activityId;
     private String deviceId;
     private String deviceId;
     private BigDecimal totalAmount;
     private BigDecimal totalAmount;
     private Integer payStatus;
     private Integer payStatus;
+    private String payStatusLabel;
     private Integer status;
     private Integer status;
     private String statusText;
     private String statusText;
     private LocalDateTime createTime;
     private LocalDateTime createTime;

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

@@ -20,6 +20,8 @@ public class Order implements Serializable {
 
 
     private String orderNo;
     private String orderNo;
 
 
+    private String orderName;
+
     private String outTradeNo;
     private String outTradeNo;
 
 
     private String activityId;
     private String activityId;

+ 51 - 0
haha-entity/src/main/java/com/haha/entity/OrderGoods.java

@@ -0,0 +1,51 @@
+package com.haha.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 订单商品明细表
+ */
+@Data
+@TableName("t_order_goods")
+public class OrderGoods implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Long orderId;
+
+    private String orderNo;
+
+    private String activityId;
+
+    private Long productId;
+
+    private String code;
+
+    private String barCode;
+
+    private String productName;
+
+    private String pic;
+
+    private Integer productNum;
+
+    private BigDecimal money;
+
+    private BigDecimal originPrice;
+
+    private BigDecimal price;
+
+    private String deviceId;
+
+    private Long userId;
+
+    private LocalDateTime createTime;
+}

+ 9 - 0
haha-mapper/src/main/java/com/haha/mapper/OrderGoodsMapper.java

@@ -0,0 +1,9 @@
+package com.haha.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.haha.entity.OrderGoods;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
+}

+ 34 - 0
haha-miniapp/src/main/resources/sql/order.sql

@@ -117,3 +117,37 @@ ALTER TABLE t_order ADD INDEX idx_pay_score_state (pay_score_state);
 
 
 ALTER TABLE `t_order`
 ALTER TABLE `t_order`
 ADD UNIQUE INDEX `uk_activity_id` (`activity_id`);
 ADD UNIQUE INDEX `uk_activity_id` (`activity_id`);
+
+-- =============================================
+-- 订单回调增强:添加order_name字段
+-- =============================================
+ALTER TABLE `t_order`
+ADD COLUMN `order_name` VARCHAR(255) DEFAULT NULL COMMENT '订单商品名称摘要' AFTER `order_no`;
+
+-- =============================================
+-- 订单商品明细表(从t_order_item重命名并调整结构)
+-- =============================================
+CREATE TABLE IF NOT EXISTS `t_order_goods` (
+  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `order_id` BIGINT NOT NULL COMMENT '订单ID',
+  `order_no` VARCHAR(64) DEFAULT NULL COMMENT '订单号',
+  `activity_id` VARCHAR(64) DEFAULT NULL COMMENT '活动ID',
+  `product_id` BIGINT DEFAULT NULL COMMENT '商品ID',
+  `code` VARCHAR(64) DEFAULT NULL COMMENT '商品编码',
+  `bar_code` VARCHAR(64) DEFAULT NULL COMMENT '商品条码',
+  `product_name` VARCHAR(255) DEFAULT NULL COMMENT '商品名称',
+  `pic` VARCHAR(500) DEFAULT NULL COMMENT '商品图片',
+  `product_num` INT DEFAULT 1 COMMENT '商品数量',
+  `money` DECIMAL(10,2) DEFAULT NULL COMMENT '商品金额',
+  `origin_price` DECIMAL(10,2) DEFAULT NULL COMMENT '商品原价',
+  `price` DECIMAL(10,2) DEFAULT NULL COMMENT '商品售价',
+  `device_id` VARCHAR(64) DEFAULT NULL COMMENT '设备ID',
+  `user_id` BIGINT DEFAULT NULL COMMENT '用户ID',
+  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_order_id` (`order_id`),
+  KEY `idx_order_no` (`order_no`),
+  KEY `idx_activity_id` (`activity_id`),
+  KEY `idx_product_id` (`product_id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单商品明细表';

+ 45 - 0
haha-service/src/main/java/com/haha/service/OrderGoodsService.java

@@ -0,0 +1,45 @@
+package com.haha.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.common.vo.OrderItemVO;
+import com.haha.entity.OrderGoods;
+
+import java.util.List;
+
+/**
+ * 订单商品服务接口
+ */
+public interface OrderGoodsService extends IService<OrderGoods> {
+
+    /**
+     * 根据订单ID查询商品列表
+     *
+     * @param orderId 订单ID
+     * @return 商品列表
+     */
+    List<OrderGoods> getByOrderId(Long orderId);
+
+    /**
+     * 根据订单号查询商品列表
+     *
+     * @param orderNo 订单号
+     * @return 商品列表
+     */
+    List<OrderGoods> getByOrderNo(String orderNo);
+
+    /**
+     * 根据活动ID查询商品列表
+     *
+     * @param activityId 活动ID
+     * @return 商品列表
+     */
+    List<OrderGoods> getByActivityId(String activityId);
+
+    /**
+     * 根据订单ID查询商品VO列表
+     *
+     * @param orderId 订单ID
+     * @return 商品VO列表
+     */
+    List<OrderItemVO> getVOByOrderId(Long orderId);
+}

+ 9 - 0
haha-service/src/main/java/com/haha/service/OrderService.java

@@ -2,6 +2,7 @@ package com.haha.service;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.haha.common.vo.OrderVO;
 import com.haha.entity.Order;
 import com.haha.entity.Order;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -34,6 +35,14 @@ public interface OrderService extends IService<Order> {
      */
      */
     Order getDetailById(Long id);
     Order getDetailById(Long id);
     
     
+    /**
+     * 获取订单详情VO(包含商品列表)
+     *
+     * @param id 订单ID
+     * @return 订单详情VO
+     */
+    OrderVO getDetailVOById(Long id);
+    
     /**
     /**
      * 获取订单统计数据
      * 获取订单统计数据
      *
      *

+ 92 - 20
haha-service/src/main/java/com/haha/service/impl/HahaCallbackServiceImpl.java

@@ -6,7 +6,9 @@ import com.alibaba.fastjson2.JSONObject;
 import com.haha.common.enums.DeviceDoorStatus;
 import com.haha.common.enums.DeviceDoorStatus;
 import com.haha.common.enums.RecognizeConsumeType;
 import com.haha.common.enums.RecognizeConsumeType;
 import com.haha.entity.Order;
 import com.haha.entity.Order;
+import com.haha.entity.OrderGoods;
 import com.haha.mapper.DeviceMapper;
 import com.haha.mapper.DeviceMapper;
+import com.haha.mapper.OrderGoodsMapper;
 import com.haha.sdk.HahaClient;
 import com.haha.sdk.HahaClient;
 import com.haha.service.HahaCallbackService;
 import com.haha.service.HahaCallbackService;
 import com.haha.service.OrderService;
 import com.haha.service.OrderService;
@@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
@@ -33,6 +36,9 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
     @Autowired
     @Autowired
     private DeviceMapper deviceMapper;
     private DeviceMapper deviceMapper;
 
 
+    @Autowired
+    private OrderGoodsMapper orderGoodsMapper;
+
     @Autowired
     @Autowired
     private StringRedisTemplate stringRedisTemplate;
     private StringRedisTemplate stringRedisTemplate;
 
 
@@ -234,19 +240,9 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
 
 
             Order existingOrder = orderService.getOrderByActivityId(activityId);
             Order existingOrder = orderService.getOrderByActivityId(activityId);
             if (existingOrder != null) {
             if (existingOrder != null) {
-                log.info("订单已存在(开门时创建),更新订单信息 - activityId: {}, orderId: {}", activityId, existingOrder.getId());
+                log.info("更新订单信息 - activityId: {}, orderId: {}", activityId, existingOrder.getId());
                 updateOrderFromRecognition(existingOrder, skuListStr, resourceInfoStr, confidence, activityId);
                 updateOrderFromRecognition(existingOrder, skuListStr, resourceInfoStr, confidence, activityId);
-                return;
-            }
-
-            logRecognizeResultDetails(resultStr, skuListStr, resourceInfoStr);
-
-            Order order = orderService.createOrderFromRecognition(
-                activityId, deviceId, userId, skuListStr, resourceInfoStr, confidence);
-
-            if (order != null) {
-                log.info("AI识别订单创建成功 - 订单ID: {}", order.getId());
-                saveOrderInfoToRedis(order, activityId);
+                logRecognizeResultDetails(resultStr, skuListStr, resourceInfoStr);
             }
             }
 
 
         } catch (Exception e) {
         } catch (Exception e) {
@@ -264,9 +260,11 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
             String userId = (String) params.get("user_id");
             String userId = (String) params.get("user_id");
             Object orderMoney = params.get("order_money");
             Object orderMoney = params.get("order_money");
             String orderDetail = (String) params.get("order_detail");
             String orderDetail = (String) params.get("order_detail");
+            String orderName = (String) params.get("order_name");
+            String orderGoodsStr = (String) params.get("order_goods");
 
 
-            log.info("订单信息 - 订单号: {}, 设备: {}, 活动: {}, 用户: {}, 金额: {}",
-                orderId, deviceId, activityId, userId, orderMoney);
+            log.info("订单信息 - 订单号: {}, 设备: {}, 活动: {}, 用户: {}, 金额: {}, 商品: {}",
+                orderId, deviceId, activityId, userId, orderMoney, orderName);
 
 
             Order localOrder = null;
             Order localOrder = null;
             if (activityId != null && !activityId.isEmpty()) {
             if (activityId != null && !activityId.isEmpty()) {
@@ -289,7 +287,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
                 return;
                 return;
             }
             }
 
 
-            updateOrderFromCallback(localOrder, orderId, activityId, orderMoney, orderDetail);
+            updateOrderFromCallback(localOrder, orderId, activityId, orderMoney, orderDetail, orderName, orderGoodsStr);
             saveOrderInfoToRedis(localOrder, activityId, orderId, orderMoney, orderDetail);
             saveOrderInfoToRedis(localOrder, activityId, orderId, orderMoney, orderDetail);
 
 
         } catch (Exception e) {
         } catch (Exception e) {
@@ -349,9 +347,9 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
     private void saveOrderInfoToRedis(Order order, String activityId) {
     private void saveOrderInfoToRedis(Order order, String activityId) {
         try {
         try {
             String orderKey = ORDER_INFO_KEY + activityId;
             String orderKey = ORDER_INFO_KEY + activityId;
-            
+
             stringRedisTemplate.delete(orderKey);
             stringRedisTemplate.delete(orderKey);
-            
+
             Map<String, String> orderData = new HashMap<>();
             Map<String, String> orderData = new HashMap<>();
             orderData.put("orderId", order.getId() != null ? order.getId().toString() : "");
             orderData.put("orderId", order.getId() != null ? order.getId().toString() : "");
             orderData.put("orderNo", order.getOrderNo() != null ? order.getOrderNo() : "");
             orderData.put("orderNo", order.getOrderNo() != null ? order.getOrderNo() : "");
@@ -374,9 +372,9 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
     private void saveOrderInfoToRedis(Order order, String activityId, String orderId, Object orderMoney, String orderDetail) {
     private void saveOrderInfoToRedis(Order order, String activityId, String orderId, Object orderMoney, String orderDetail) {
         try {
         try {
             String orderKey = ORDER_INFO_KEY + activityId;
             String orderKey = ORDER_INFO_KEY + activityId;
-            
+
             stringRedisTemplate.delete(orderKey);
             stringRedisTemplate.delete(orderKey);
-            
+
             Map<String, String> orderData = new HashMap<>();
             Map<String, String> orderData = new HashMap<>();
             orderData.put("orderId", orderId != null ? orderId : "");
             orderData.put("orderId", orderId != null ? orderId : "");
             orderData.put("activityId", activityId != null ? activityId : "");
             orderData.put("activityId", activityId != null ? activityId : "");
@@ -408,6 +406,15 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         }
         }
     }
     }
 
 
+    /**
+     * 根据识别结果更新订单信息
+     *
+     * @param order          订单对象
+     * @param skuListStr     商品列表字符串
+     * @param resourceInfoStr 资源信息字符串
+     * @param confidence     置信度
+     * @param activityId     活动ID
+     */
     private void updateOrderFromRecognition(Order order, String skuListStr, String resourceInfoStr, BigDecimal confidence, String activityId) {
     private void updateOrderFromRecognition(Order order, String skuListStr, String resourceInfoStr, BigDecimal confidence, String activityId) {
         BigDecimal totalAmount = calculateTotalAmount(skuListStr);
         BigDecimal totalAmount = calculateTotalAmount(skuListStr);
         String videoUrl = parseVideoUrl(resourceInfoStr);
         String videoUrl = parseVideoUrl(resourceInfoStr);
@@ -429,10 +436,16 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         saveOrderInfoToRedis(order, activityId);
         saveOrderInfoToRedis(order, activityId);
     }
     }
 
 
-    private void updateOrderFromCallback(Order order, String orderId, String activityId, Object orderMoney, String orderDetail) {
+    private void updateOrderFromCallback(Order order, String orderId, String activityId, 
+                                          Object orderMoney, String orderDetail, 
+                                          String orderName, String orderGoodsStr) {
         order.setOrderNo(orderId);
         order.setOrderNo(orderId);
         order.setActivityId(activityId);
         order.setActivityId(activityId);
 
 
+        if (orderName != null && !orderName.isEmpty()) {
+            order.setOrderName(orderName);
+        }
+
         if (orderDetail != null) {
         if (orderDetail != null) {
             order.setItems(orderDetail);
             order.setItems(orderDetail);
         }
         }
@@ -444,11 +457,63 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         boolean updated = orderService.updateById(order);
         boolean updated = orderService.updateById(order);
         if (updated) {
         if (updated) {
             log.info("订单信息更新成功: {}", orderId);
             log.info("订单信息更新成功: {}", orderId);
+            
+            saveOrderGoods(order.getId(), orderId, activityId, orderGoodsStr, order.getDeviceId(), order.getUserId());
         } else {
         } else {
             log.error("订单信息更新失败: {}", orderId);
             log.error("订单信息更新失败: {}", orderId);
         }
         }
     }
     }
 
 
+    private void saveOrderGoods(Long orderId, String orderNo, String activityId, 
+                                 String orderGoodsStr, String deviceId, Long userId) {
+        if (orderGoodsStr == null || orderGoodsStr.isEmpty()) {
+            log.info("订单商品信息为空,跳过保存");
+            return;
+        }
+
+        try {
+            JSONArray goodsArray = JSON.parseArray(orderGoodsStr);
+            if (goodsArray == null || goodsArray.isEmpty()) {
+                return;
+            }
+
+            for (int i = 0; i < goodsArray.size(); i++) {
+                JSONObject goodsJson = goodsArray.getJSONObject(i);
+                OrderGoods goods = new OrderGoods();
+                goods.setOrderId(orderId);
+                goods.setOrderNo(orderNo);
+                goods.setActivityId(activityId);
+                goods.setDeviceId(deviceId);
+                goods.setUserId(userId);
+                goods.setCreateTime(LocalDateTime.now());
+
+                goods.setProductId(goodsJson.getLong("id"));
+                goods.setCode(goodsJson.getString("code"));
+                goods.setBarCode(goodsJson.getString("bar_code"));
+                goods.setProductName(goodsJson.getString("product_name"));
+                goods.setPic(goodsJson.getString("pic"));
+                goods.setProductNum(goodsJson.getInteger("product_num"));
+                
+                if (goodsJson.get("money") != null) {
+                    goods.setMoney(new BigDecimal(goodsJson.getString("money")));
+                }
+                if (goodsJson.get("origin_price") != null) {
+                    goods.setOriginPrice(goodsJson.getBigDecimal("origin_price"));
+                }
+                if (goodsJson.get("price") != null) {
+                    goods.setPrice(goodsJson.getBigDecimal("price"));
+                }
+
+                orderGoodsMapper.insert(goods);
+            }
+
+            log.info("订单商品保存成功 - orderId: {}, 商品数量: {}", orderId, goodsArray.size());
+
+        } catch (Exception e) {
+            log.error("保存订单商品失败 - orderId: {}", orderId, e);
+        }
+    }
+
     private Order fetchRecognitionAndCreateOrder(String activityId, String deviceId, String userId) {
     private Order fetchRecognitionAndCreateOrder(String activityId, String deviceId, String userId) {
         try {
         try {
             Map<String, Object> recognizeResult = hahaClient.getOrderApi().getRecognizeResult(null, activityId);
             Map<String, Object> recognizeResult = hahaClient.getOrderApi().getRecognizeResult(null, activityId);
@@ -499,6 +564,13 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         return null;
         return null;
     }
     }
 
 
+    /**
+     * 记录识别结果详情
+     *
+     * @param resultStr      识别结果字符串
+     * @param skuListStr     商品列表字符串
+     * @param resourceInfoStr 资源信息字符串
+     */
     private void logRecognizeResultDetails(String resultStr, String skuListStr, String resourceInfoStr) {
     private void logRecognizeResultDetails(String resultStr, String skuListStr, String resourceInfoStr) {
         if (resultStr != null && !resultStr.isEmpty()) {
         if (resultStr != null && !resultStr.isEmpty()) {
             JSONObject result = JSON.parseObject(resultStr);
             JSONObject result = JSON.parseObject(resultStr);

+ 74 - 0
haha-service/src/main/java/com/haha/service/impl/OrderGoodsServiceImpl.java

@@ -0,0 +1,74 @@
+package com.haha.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.haha.common.vo.OrderItemVO;
+import com.haha.entity.OrderGoods;
+import com.haha.mapper.OrderGoodsMapper;
+import com.haha.service.OrderGoodsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 订单商品服务实现
+ */
+@Slf4j
+@Service
+public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGoods> implements OrderGoodsService {
+
+    @Override
+    public List<OrderGoods> getByOrderId(Long orderId) {
+        if (orderId == null) {
+            return new ArrayList<>();
+        }
+        return lambdaQuery()
+                .eq(OrderGoods::getOrderId, orderId)
+                .list();
+    }
+
+    @Override
+    public List<OrderGoods> getByOrderNo(String orderNo) {
+        if (orderNo == null || orderNo.isEmpty()) {
+            return new ArrayList<>();
+        }
+        return lambdaQuery()
+                .eq(OrderGoods::getOrderNo, orderNo)
+                .list();
+    }
+
+    @Override
+    public List<OrderGoods> getByActivityId(String activityId) {
+        if (activityId == null || activityId.isEmpty()) {
+            return new ArrayList<>();
+        }
+        return lambdaQuery()
+                .eq(OrderGoods::getActivityId, activityId)
+                .list();
+    }
+
+    @Override
+    public List<OrderItemVO> getVOByOrderId(Long orderId) {
+        List<OrderGoods> goodsList = getByOrderId(orderId);
+        List<OrderItemVO> voList = new ArrayList<>();
+        
+        for (OrderGoods goods : goodsList) {
+            OrderItemVO vo = new OrderItemVO();
+            vo.setId(goods.getId());
+            vo.setProductId(goods.getProductId());
+            vo.setCode(goods.getCode());
+            vo.setBarCode(goods.getBarCode());
+            vo.setProductName(goods.getProductName());
+            vo.setPic(goods.getPic());
+            vo.setProductNum(goods.getProductNum());
+            vo.setMoney(goods.getMoney());
+            vo.setOriginPrice(goods.getOriginPrice());
+            vo.setPrice(goods.getPrice());
+            voList.add(vo);
+        }
+        
+        return voList;
+    }
+}

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

@@ -11,12 +11,15 @@ import com.haha.common.constant.OrderConstants;
 import com.haha.common.enums.PaymentChannel;
 import com.haha.common.enums.PaymentChannel;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.utils.EntityLabelUtils;
 import com.haha.common.utils.EntityLabelUtils;
+import com.haha.common.vo.OrderItemVO;
+import com.haha.common.vo.OrderVO;
 import com.haha.entity.Device;
 import com.haha.entity.Device;
 import com.haha.entity.Order;
 import com.haha.entity.Order;
 import com.haha.entity.Shop;
 import com.haha.entity.Shop;
 import com.haha.mapper.DeviceMapper;
 import com.haha.mapper.DeviceMapper;
 import com.haha.mapper.OrderMapper;
 import com.haha.mapper.OrderMapper;
 import com.haha.mapper.ShopMapper;
 import com.haha.mapper.ShopMapper;
+import com.haha.service.OrderGoodsService;
 import com.haha.service.OrderService;
 import com.haha.service.OrderService;
 import com.haha.service.payment.PaymentService;
 import com.haha.service.payment.PaymentService;
 import com.haha.service.payment.RefundResult;
 import com.haha.service.payment.RefundResult;
@@ -54,6 +57,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Lazy
     @Lazy
     private PayScoreService payScoreService;
     private PayScoreService payScoreService;
 
 
+    @Autowired
+    @Lazy
+    private OrderGoodsService orderGoodsService;
+
     @Override
     @Override
     public IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId, 
     public IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId, 
                                  String payStatus, Integer status, String startDate, String endDate) {
                                  String payStatus, Integer status, String startDate, String endDate) {
@@ -107,6 +114,70 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return order;
         return order;
     }
     }
 
 
+    @Override
+    public OrderVO getDetailVOById(Long id) {
+        Order order = this.getById(id);
+        if (order == null) {
+            return null;
+        }
+        
+        OrderVO vo = new OrderVO();
+        vo.setId(order.getId());
+        vo.setOrderNo(order.getOrderNo());
+        vo.setOrderName(order.getOrderName());
+        vo.setOutTradeNo(order.getOutTradeNo());
+        vo.setActivityId(order.getActivityId());
+        vo.setDeviceId(order.getDeviceId());
+        vo.setTotalAmount(order.getTotalAmount());
+        vo.setPayStatus(order.getPayStatus() != null ? Integer.valueOf(order.getPayStatus()) : null);
+        vo.setPayStatusLabel(getPayStatusLabel(order.getPayStatus()));
+        vo.setStatus(order.getStatus());
+        vo.setStatusText(getStatusLabel(order.getStatus()));
+        vo.setCreateTime(order.getCreateTime());
+        vo.setPayTime(order.getPayTime());
+        vo.setVideoUrl(order.getVideoUrl());
+        vo.setConfidence(order.getConfidence());
+        
+        List<OrderItemVO> products = orderGoodsService.getVOByOrderId(id);
+        vo.setProducts(products);
+        
+        return vo;
+    }
+
+    private String getPayStatusLabel(String payStatus) {
+        if (payStatus == null) {
+            return "未知";
+        }
+        switch (payStatus) {
+            case OrderConstants.PAY_STATUS_UNPAID:
+                return "未支付";
+            case OrderConstants.PAY_STATUS_PAID:
+                return "已支付";
+            case OrderConstants.PAY_STATUS_REFUND:
+                return "已退款";
+            default:
+                return "未知";
+        }
+    }
+
+    private String getStatusLabel(Integer status) {
+        if (status == null) {
+            return "未知";
+        }
+        switch (status) {
+            case OrderConstants.STATUS_PENDING_PAYMENT:
+                return "待支付";
+            case OrderConstants.STATUS_COMPLETED:
+                return "已完成";
+            case OrderConstants.STATUS_CANCELLED:
+                return "已取消";
+            case OrderConstants.STATUS_CLOSED:
+                return "已关闭";
+            default:
+                return "未知";
+        }
+    }
+
     @Override
     @Override
     public Map<String, Object> getStatistics() {
     public Map<String, Object> getStatistics() {
         Map<String, Object> statistics = new HashMap<>();
         Map<String, Object> statistics = new HashMap<>();