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" "time" ) 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 } // 获取单项配置 systemSingleDao := dao.SystemSingleDao{} maps := make(map[string]interface{}) systemSingle, err := systemSingleDao.GetSystemSingle(maps) if err != nil { responses.FailWithMessage("内部错误", c) return } // 处理返回值 g := dto.GetOrderSingleListDto(orderSingles) for _, singleDto := range g { // 有效时间 var validTime *time.Time // 计算有效期 if singleDto.IsMember == 1 { validTime = singleDto.MemberExpireDate } else { if singleDto.PayTime != nil { payTime := singleDto.PayTime.Add(time.Duration(systemSingle.ValidDays) * 24 * time.Hour) validTime = &payTime } } singleDto.LoadValidDate(validTime) } 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) { 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{} maps := make(map[string]interface{}) maps["order_id"] = orderId orderSingle, err := orderSingleDao.GetOrderSingle(maps) 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.UserId, orderId, 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.OrderStatus == 2 { 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"] = 1 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 } // 获取单项配置 systemSingleDao := dao.SystemSingleDao{} maps := make(map[string]interface{}) systemSingle, err := systemSingleDao.GetSystemSingle(maps) if err != nil { responses.FailWithMessage("内部错误", c) return } // 有效时间 var validTime *time.Time // 计算有效期 if orderSingle.User.IsMember == 1 { validTime = orderSingle.User.MemberExpireDate } else { if orderSingle.PayTime != nil { payTime := orderSingle.PayTime.Add(time.Duration(systemSingle.ValidDays) * 24 * time.Hour) validTime = &payTime } } g := dto.GetOrderSingleDto(orderSingle) // 加载题目数据 g.LoadQuestion(orderSingle.Question) // 加载到期时间 g.LoadValidDate(validTime) // 加载用户数据 g.LoadUserAttr(orderSingle.User) responses.OkWithData(g, c) }