package logic import ( "context" "healthapi/internal/model" "healthapi/internal/svc" "healthapi/internal/types" "healthapi/pkg/errorx" "github.com/zeromicro/go-zero/core/logx" ) type GetOrdersLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewGetOrdersLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOrdersLogic { return &GetOrdersLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *GetOrdersLogic) GetOrders(req *types.OrderListReq) (resp *types.OrderListResp, err error) { userID, err := GetUserIDFromCtx(l.ctx) if err != nil { return nil, errorx.ErrUnauthorized } query := l.svcCtx.DB.Model(&model.Order{}).Where("user_id = ?", userID) if req.Status != "" { query = query.Where("status = ?", req.Status) } var total int64 query.Count(&total) var orders []model.Order offset := (req.Page - 1) * req.PageSize query.Order("created_at DESC").Offset(offset).Limit(req.PageSize).Find(&orders) resp = &types.OrderListResp{ Orders: make([]types.Order, 0, len(orders)), PageInfo: types.PageInfo{ Total: total, Page: req.Page, PageSize: req.PageSize, }, } for _, order := range orders { // 获取订单商品 var items []model.OrderItem l.svcCtx.DB.Where("order_id = ?", order.ID).Find(&items) orderItems := make([]types.OrderItem, 0, len(items)) for _, item := range items { orderItems = append(orderItems, types.OrderItem{ ID: uint(item.ID), ProductID: item.ProductID, SkuID: item.SkuID, ProductName: item.ProductName, SkuName: item.SkuName, Image: item.Image, Price: item.Price, Quantity: item.Quantity, TotalAmount: item.TotalAmount, }) } payTime, shipTime, receiveTime := "", "", "" if order.PayTime != nil { payTime = order.PayTime.Format("2006-01-02 15:04:05") } if order.ShipTime != nil { shipTime = order.ShipTime.Format("2006-01-02 15:04:05") } if order.ReceiveTime != nil { receiveTime = order.ReceiveTime.Format("2006-01-02 15:04:05") } resp.Orders = append(resp.Orders, types.Order{ ID: uint(order.ID), OrderNo: order.OrderNo, Status: order.Status, TotalAmount: order.TotalAmount, DiscountAmount: order.DiscountAmount, ShippingFee: order.ShippingFee, PayAmount: order.PayAmount, PointsUsed: order.PointsUsed, PointsEarned: order.PointsEarned, PayMethod: order.PayMethod, PayTime: payTime, ShipTime: shipTime, ReceiveTime: receiveTime, ReceiverName: order.ReceiverName, ReceiverPhone: order.ReceiverPhone, ReceiverAddr: order.ReceiverAddr, ShippingCompany: order.ShippingCompany, TrackingNo: order.TrackingNo, Remark: order.Remark, CancelReason: order.CancelReason, Items: orderItems, CreatedAt: order.CreatedAt.Format("2006-01-02 15:04:05"), }) } return resp, nil }