package controller import ( "github.com/gin-gonic/gin" "hepa-calc-admin-api/api/dao" "hepa-calc-admin-api/api/dto" "hepa-calc-admin-api/api/requests" "hepa-calc-admin-api/api/responses" "hepa-calc-admin-api/api/service" "hepa-calc-admin-api/global" "hepa-calc-admin-api/utils" "strconv" ) type OrderSingle struct{} // GetOrderSinglePage 获取单项订单列表-分页 func (b *OrderSingle) GetOrderSinglePage(c *gin.Context) { orderSingleRequest := requests.OrderSingleRequest{} req := orderSingleRequest.GetOrderSinglePage if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } if req.Page == 0 { req.Page = 1 } if req.PageSize == 0 { req.PageSize = 20 } userId := c.GetInt64("UserId") req.UserId = userId // 获取数据 orderSingleDao := dao.OrderSingleDao{} orderSingles, total, err := orderSingleDao.GetOrderSinglePageSearch(req, req.Page, req.PageSize) if err != nil { responses.FailWithMessage(err.Error(), c) return } // 处理返回值 g := dto.GetOrderSingleListDto(orderSingles) for _, singleDto := range g { // 计算有效期 if singleDto.IsMember == 1 { singleDto.LoadValidDate(singleDto.MemberExpireDate) } } result := make(map[string]interface{}) result["page"] = req.Page result["page_size"] = req.PageSize result["total"] = total result["data"] = g responses.OkWithData(result, c) } // PutCancelOrderSingle 取消单项订单 func (b *OrderSingle) PutCancelOrderSingle(c *gin.Context) { orderSingleRequest := requests.OrderSingleRequest{} req := orderSingleRequest.CancelOrderSingle if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } id := c.Param("order_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 orderId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 获取订单数据 orderSingleDao := dao.OrderSingleDao{} orderSingle, err := orderSingleDao.GetOrderSingleById(orderId) if err != nil { responses.FailWithMessage("订单异常", c) return } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 取消单项订单 orderSingleService := service.OrderSingleService{} res, err := orderSingleService.CancelOrderSingle(tx, orderSingle, req.RefundAmount, 2) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } if res == false { tx.Rollback() responses.FailWithMessage("取消订单失败", c) return } tx.Commit() responses.Ok(c) } // PutOrderSingleDeleteStatus 操作单项订单删除状态 func (b *OrderSingle) PutOrderSingleDeleteStatus(c *gin.Context) { orderSingleRequest := requests.OrderSingleRequest{} req := orderSingleRequest.PutOrderSingleDeleteStatus if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } if req.IsDelete != 0 && req.IsDelete != 1 { responses.FailWithMessage("参数错误", c) return } id := c.Param("order_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 orderId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 获取订单数据 orderSingleDao := dao.OrderSingleDao{} orderSingle, err := orderSingleDao.GetOrderSingleById(orderId) if err != nil { responses.FailWithMessage("订单异常", c) return } // 检测订单删除状态 if orderSingle.IsDelete == req.IsDelete { responses.Ok(c) return } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() orderSingleData := make(map[string]interface{}) orderSingleData["is_delete"] = req.IsDelete err = orderSingleDao.EditOrderSingleById(tx, orderId, orderSingleData) if err != nil { tx.Rollback() responses.FailWithMessage("删除失败", c) return } tx.Commit() responses.Ok(c) } // GetOrderSingle 获取单项订单详情 func (b *OrderSingle) GetOrderSingle(c *gin.Context) { id := c.Param("order_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 orderId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 获取订单数据 orderSingleDao := dao.OrderSingleDao{} orderSingle, err := orderSingleDao.GetOrderSinglePreloadById(orderId) if err != nil { responses.FailWithMessage("订单异常", c) return } // 计算有效期 if orderSingle.User.IsMember == 1 { orderSingle.ValidDate = orderSingle.User.MemberExpireDate } g := dto.GetOrderSingleDto(orderSingle) // 加载题目数据 g.LoadQuestion(orderSingle.Question) // 加载用户数据 g.LoadUserAttr(orderSingle.User) responses.OkWithData(g, c) }