package service import ( "dianshang/internal/model" "fmt" "time" "gorm.io/gorm" ) // AfterSaleService 售后服务 type AfterSaleService struct { db *gorm.DB } // NewAfterSaleService 创建售后服务 func NewAfterSaleService(db *gorm.DB) *AfterSaleService { return &AfterSaleService{ db: db, } } // GetUserAfterSales 获取用户售后列表 func (s *AfterSaleService) GetUserAfterSales(userID uint, page, pageSize int, status int) ([]model.AfterSale, int64, error) { var afterSales []model.AfterSale var total int64 query := s.db.Model(&model.AfterSale{}).Where("user_id = ?", userID) // 如果指定了状态,添加状态过滤 if status > 0 { query = query.Where("status = ?", status) } // 获取总数 if err := query.Count(&total).Error; err != nil { return nil, 0, err } // 分页查询,预加载关联数据 offset := (page - 1) * pageSize if err := query.Preload("Order").Preload("OrderItem").Preload("User"). Order("created_at DESC"). Offset(offset).Limit(pageSize). Find(&afterSales).Error; err != nil { return nil, 0, err } return afterSales, total, nil } // GetAfterSaleDetail 获取售后详情 func (s *AfterSaleService) GetAfterSaleDetail(userID, afterSaleID uint) (*model.AfterSale, error) { var afterSale model.AfterSale if err := s.db.Where("id = ? AND user_id = ?", afterSaleID, userID). Preload("Order").Preload("OrderItem").Preload("User"). First(&afterSale).Error; err != nil { return nil, err } return &afterSale, nil } // CreateAfterSale 创建售后申请 func (s *AfterSaleService) CreateAfterSale(userID uint, req *CreateAfterSaleRequest) (*model.AfterSale, error) { // 验证订单是否存在且属于该用户 var order model.Order if err := s.db.Where("id = ? AND user_id = ?", req.OrderID, userID).First(&order).Error; err != nil { return nil, fmt.Errorf("订单不存在或无权限") } // 验证订单项是否存在 var orderItem model.OrderItem if err := s.db.Where("id = ? AND order_id = ?", req.OrderItemID, req.OrderID).First(&orderItem).Error; err != nil { return nil, fmt.Errorf("订单项不存在") } // 创建售后记录 afterSale := &model.AfterSale{ OrderID: req.OrderID, OrderItemID: req.OrderItemID, UserID: userID, Type: req.Type, Reason: req.Reason, Description: req.Description, Images: req.Images, Status: 1, // 1待审核 CreatedAt: time.Now(), UpdatedAt: time.Now(), } if err := s.db.Create(afterSale).Error; err != nil { return nil, err } // 预加载关联数据 if err := s.db.Preload("Order").Preload("OrderItem").Preload("User"). First(afterSale, afterSale.ID).Error; err != nil { return nil, err } return afterSale, nil } // CreateAfterSaleRequest 创建售后申请请求 type CreateAfterSaleRequest struct { OrderID uint `json:"order_id" binding:"required"` OrderItemID uint `json:"order_item_id" binding:"required"` Type int `json:"type" binding:"required"` // 1退货,2换货,3维修 Reason string `json:"reason" binding:"required"` Description string `json:"description"` Images model.JSONSlice `json:"images"` } // UpdateAfterSaleStatus 更新售后状态 func (s *AfterSaleService) UpdateAfterSaleStatus(afterSaleID uint, status int, adminRemark string) error { return s.db.Model(&model.AfterSale{}). Where("id = ?", afterSaleID). Updates(map[string]interface{}{ "status": status, "admin_remark": adminRemark, "updated_at": time.Now(), }).Error }