init
This commit is contained in:
217
server/internal/handler/aftersale.go
Normal file
217
server/internal/handler/aftersale.go
Normal file
@@ -0,0 +1,217 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"dianshang/internal/model"
|
||||
"dianshang/internal/service"
|
||||
"dianshang/pkg/response"
|
||||
"dianshang/pkg/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// AfterSaleHandler 售后处理器
|
||||
type AfterSaleHandler struct {
|
||||
afterSaleService *service.AfterSaleService
|
||||
}
|
||||
|
||||
// NewAfterSaleHandler 创建售后处理器
|
||||
func NewAfterSaleHandler(afterSaleService *service.AfterSaleService) *AfterSaleHandler {
|
||||
return &AfterSaleHandler{
|
||||
afterSaleService: afterSaleService,
|
||||
}
|
||||
}
|
||||
|
||||
// AfterSaleResponse 售后响应结构
|
||||
type AfterSaleResponse struct {
|
||||
ID uint `json:"id"`
|
||||
OrderID uint `json:"order_id"`
|
||||
OrderItemID uint `json:"order_item_id"`
|
||||
UserID uint `json:"user_id"`
|
||||
Type int `json:"type"`
|
||||
TypeName string `json:"type_name"`
|
||||
Reason string `json:"reason"`
|
||||
Description string `json:"description"`
|
||||
Images []string `json:"images"`
|
||||
Status int `json:"status"`
|
||||
StatusName string `json:"status_name"`
|
||||
AdminRemark string `json:"admin_remark"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
Order *OrderBasicInfo `json:"order,omitempty"`
|
||||
OrderItem *OrderItemBasicInfo `json:"order_item,omitempty"`
|
||||
}
|
||||
|
||||
// OrderBasicInfo 订单基本信息
|
||||
type OrderBasicInfo struct {
|
||||
ID uint `json:"id"`
|
||||
OrderNo string `json:"order_no"`
|
||||
Status int `json:"status"`
|
||||
}
|
||||
|
||||
// OrderItemBasicInfo 订单项基本信息
|
||||
type OrderItemBasicInfo struct {
|
||||
ID uint `json:"id"`
|
||||
ProductName string `json:"product_name"`
|
||||
ProductImage string `json:"product_image"`
|
||||
SpecName string `json:"spec_name"`
|
||||
SpecValue string `json:"spec_value"`
|
||||
Quantity int `json:"quantity"`
|
||||
Price float64 `json:"price"`
|
||||
}
|
||||
|
||||
// GetAfterSaleList 获取售后列表
|
||||
func (h *AfterSaleHandler) GetAfterSaleList(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
|
||||
page := utils.StringToInt(c.DefaultQuery("page", "1"))
|
||||
pageSize := utils.StringToInt(c.DefaultQuery("pageSize", "10"))
|
||||
status := utils.StringToInt(c.Query("status"))
|
||||
|
||||
afterSales, total, err := h.afterSaleService.GetUserAfterSales(userID.(uint), page, pageSize, status)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 转换为响应格式
|
||||
result := make([]AfterSaleResponse, len(afterSales))
|
||||
for i, afterSale := range afterSales {
|
||||
result[i] = h.convertToResponse(afterSale)
|
||||
}
|
||||
|
||||
// 返回分页数据
|
||||
responseData := gin.H{
|
||||
"list": result,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
}
|
||||
|
||||
response.Success(c, responseData)
|
||||
}
|
||||
|
||||
// GetAfterSaleDetail 获取售后详情
|
||||
func (h *AfterSaleHandler) GetAfterSaleDetail(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
|
||||
afterSaleID := utils.StringToUint(c.Param("id"))
|
||||
if afterSaleID == 0 {
|
||||
response.BadRequest(c, "无效的售后ID")
|
||||
return
|
||||
}
|
||||
|
||||
afterSale, err := h.afterSaleService.GetAfterSaleDetail(userID.(uint), afterSaleID)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
result := h.convertToResponse(*afterSale)
|
||||
response.Success(c, result)
|
||||
}
|
||||
|
||||
// CreateAfterSale 创建售后申请
|
||||
func (h *AfterSaleHandler) CreateAfterSale(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
response.Unauthorized(c)
|
||||
return
|
||||
}
|
||||
|
||||
var req service.CreateAfterSaleRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.BadRequest(c, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
afterSale, err := h.afterSaleService.CreateAfterSale(userID.(uint), &req)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
result := h.convertToResponse(*afterSale)
|
||||
response.Success(c, result)
|
||||
}
|
||||
|
||||
// convertToResponse 转换为响应格式
|
||||
func (h *AfterSaleHandler) convertToResponse(afterSale model.AfterSale) AfterSaleResponse {
|
||||
// 类型名称映射
|
||||
typeName := "未知类型"
|
||||
switch afterSale.Type {
|
||||
case 1:
|
||||
typeName = "退货"
|
||||
case 2:
|
||||
typeName = "换货"
|
||||
case 3:
|
||||
typeName = "维修"
|
||||
}
|
||||
|
||||
// 状态名称映射
|
||||
statusName := "未知状态"
|
||||
switch afterSale.Status {
|
||||
case 1:
|
||||
statusName = "待审核"
|
||||
case 2:
|
||||
statusName = "已同意"
|
||||
case 3:
|
||||
statusName = "已拒绝"
|
||||
case 4:
|
||||
statusName = "处理中"
|
||||
case 5:
|
||||
statusName = "已完成"
|
||||
}
|
||||
|
||||
// 转换图片数组
|
||||
images := make([]string, len(afterSale.Images))
|
||||
copy(images, afterSale.Images)
|
||||
|
||||
result := AfterSaleResponse{
|
||||
ID: afterSale.ID,
|
||||
OrderID: afterSale.OrderID,
|
||||
OrderItemID: afterSale.OrderItemID,
|
||||
UserID: afterSale.UserID,
|
||||
Type: afterSale.Type,
|
||||
TypeName: typeName,
|
||||
Reason: afterSale.Reason,
|
||||
Description: afterSale.Description,
|
||||
Images: images,
|
||||
Status: afterSale.Status,
|
||||
StatusName: statusName,
|
||||
AdminRemark: afterSale.AdminRemark,
|
||||
CreatedAt: afterSale.CreatedAt.Format("2006-01-02 15:04:05"),
|
||||
UpdatedAt: afterSale.UpdatedAt.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
// 添加订单信息
|
||||
if afterSale.Order.ID > 0 {
|
||||
result.Order = &OrderBasicInfo{
|
||||
ID: afterSale.Order.ID,
|
||||
OrderNo: afterSale.Order.OrderNo,
|
||||
Status: afterSale.Order.Status,
|
||||
}
|
||||
}
|
||||
|
||||
// 添加订单项信息
|
||||
if afterSale.OrderItem.ID > 0 {
|
||||
result.OrderItem = &OrderItemBasicInfo{
|
||||
ID: afterSale.OrderItem.ID,
|
||||
ProductName: afterSale.OrderItem.ProductName,
|
||||
ProductImage: afterSale.OrderItem.ProductImage,
|
||||
SpecName: afterSale.OrderItem.SpecName,
|
||||
SpecValue: afterSale.OrderItem.SpecValue,
|
||||
Quantity: afterSale.OrderItem.Quantity,
|
||||
Price: afterSale.OrderItem.Price,
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user