order_controller.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package order
  2. import (
  3. "eta/eta_mini_ht_api/common/exception"
  4. "eta/eta_mini_ht_api/common/utils/page"
  5. "eta/eta_mini_ht_api/controllers"
  6. "eta/eta_mini_ht_api/service/facade"
  7. "eta/eta_mini_ht_api/service/order"
  8. "eta/eta_mini_ht_api/service/user"
  9. )
  10. type OrderController struct {
  11. controllers.BaseController
  12. }
  13. type PreviewOrderRequest struct {
  14. ProductId int `json:"productId"`
  15. }
  16. // PreviewProductOrder 预览订单
  17. // @Summary 预览订单
  18. // @Description 预览订单
  19. // @Success 200 {object} controllers.BaseResponse
  20. // @router /previewProductOrder [get]
  21. func (o *OrderController) PreviewProductOrder(productId int) {
  22. controllers.Wrap(&o.BaseController, func() (result *controllers.WrapData, err error) {
  23. result = o.InitWrapData("预览订单创建失败")
  24. var userInfo user.User
  25. userInfo = o.Data["user"].(user.User)
  26. if productId <= 0 {
  27. err = exception.New(exception.IllegalProductId)
  28. o.FailedResult("预览订单失败,产品编号非法", result)
  29. return
  30. }
  31. if code := orderRateLimitFilter(userInfo.Id); code != 200 {
  32. err = exception.New(exception.SubscribeFailed)
  33. o.FailedResult("操作太频繁了,请稍后再试", result)
  34. return
  35. }
  36. //校验是否已经购买并且在有效期内
  37. //是否开户
  38. //未开户
  39. officialUser, err := user.GetUserByTemplateUserId(userInfo.Id)
  40. if err != nil {
  41. if err.Error() == exception.GetMsg(exception.OfficialUserNotFound) {
  42. err = exception.New(exception.OfficialUserNotFound)
  43. result.Ret = AccountNotOpen
  44. o.FailedResult("用户未开通账户", result)
  45. } else {
  46. o.FailedResult("获取用户账户信息失败", result)
  47. }
  48. return
  49. }
  50. switch officialUser.AccountStatus {
  51. case "unopen":
  52. result.Ret = AccountNotOpen
  53. err = exception.New(exception.AccountNotOpen)
  54. o.FailedResult("用户未开通账户", result)
  55. return
  56. case "opening":
  57. result.Ret = AccountOpening
  58. err = exception.New(exception.AccountNotOpen)
  59. o.FailedResult("用户开户中", result)
  60. return
  61. case "opened":
  62. default:
  63. err = exception.New(exception.IllegalAccountStatus)
  64. o.FailedResult(result.Msg, result)
  65. return
  66. }
  67. //证件信息是否过期
  68. if !officialUser.IDValid {
  69. err = exception.New(exception.IDExpired)
  70. result.Ret = IDExpired
  71. o.FailedResult("用户证件有效期过期", result)
  72. return
  73. }
  74. //主动发起查询最新风险测评(获取失败用系统中原有的测评信息)
  75. code, err := facade.CheckUserRiskLevel(userInfo.Id, productId, officialUser)
  76. if err != nil {
  77. result.Ret = code
  78. o.FailedResult("校验用户风险等级失败", result)
  79. return
  80. }
  81. //创单
  82. //返回订单信息、商品信息
  83. orderInfo, err := order.PreViewProductOrder(userInfo, productId)
  84. if err != nil {
  85. o.FailedResult("创建预览订单失败", result)
  86. return
  87. }
  88. o.SuccessResult("预览订单创建成功", orderInfo, result)
  89. return
  90. })
  91. }
  92. // OrderDetail 获取订单详情
  93. // @Summary 获取订单详情
  94. // @Description 获取订单详情
  95. // @Success 200 {object} controllers.BaseResponse
  96. // @router /orderDetail [get]
  97. func (sc *SubscribeController) GetOrderDetail(orderNo string) {
  98. controllers.Wrap(&sc.BaseController, func() (result *controllers.WrapData, err error) {
  99. result = sc.InitWrapData("获取订单号失败")
  100. userInfo := sc.Data["user"].(user.User)
  101. if orderNo == "" {
  102. err = exception.New(exception.IllegalProductOrderId)
  103. sc.FailedResult("获取订单详情失败,产品编号非法", result)
  104. return
  105. }
  106. orderDetail, err := order.GetOrderDetail(orderNo, userInfo.Id)
  107. if err != nil {
  108. sc.FailedResult("获取订单详情失败", result)
  109. err = exception.NewWithException(exception.GetOrderListFailed, err.Error())
  110. return
  111. }
  112. sc.SuccessResult("获取订单详情成功", orderDetail, result)
  113. return
  114. })
  115. }
  116. // GetOrderList 获取用户订单号列表
  117. // @Summary 获取用户订单号列表
  118. // @Description 获取用户订单号列表
  119. // @Success 200 {object} controllers.BaseResponse
  120. // @router /orderList [get]
  121. func (sc *SubscribeController) GetOrderList(orderStatus string) {
  122. controllers.Wrap(&sc.BaseController, func() (result *controllers.WrapData, err error) {
  123. result = sc.InitWrapData("分页查询订单列表失败")
  124. userInfo := sc.Data["user"].(user.User)
  125. pageRes := page.Page{
  126. Current: sc.PageInfo.Current,
  127. PageSize: sc.PageInfo.PageSize,
  128. }
  129. pageRes.Total, pageRes.LatestId = order.GetTotalPageCountByUserId(userInfo.Id, orderStatus)
  130. if sc.PageInfo.LatestId == 0 {
  131. sc.PageInfo.LatestId = pageRes.LatestId
  132. } else {
  133. pageRes.LatestId = sc.PageInfo.LatestId
  134. pageRes.Total = sc.PageInfo.Total
  135. }
  136. pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
  137. list, err := order.GetOrderPage(sc.PageInfo, userInfo.Id, orderStatus)
  138. if err != nil {
  139. sc.FailedResult("分页查询订单列表失败", result)
  140. return
  141. }
  142. orders := new(page.PageResult)
  143. orders.Data = list
  144. orders.Page = pageRes
  145. sc.SuccessResult("查询订单列表成功", orders, result)
  146. return
  147. })
  148. }
  149. type OrderRequest struct {
  150. ProductOrderNo string `json:"productOrderNo"`
  151. }
  152. // CloseOrder 获取用户订单号列表
  153. // @Summary 获取用户订单号列表
  154. // @Description 获取用户订单号列表
  155. // @Success 200 {object} controllers.BaseResponse
  156. // @router /closeOrder [post]
  157. func (sc *SubscribeController) CloseOrder() {
  158. controllers.Wrap(&sc.BaseController, func() (result *controllers.WrapData, err error) {
  159. result = sc.InitWrapData("关闭订单失败")
  160. userInfo := sc.Data["user"].(user.User)
  161. orderReq := new(OrderRequest)
  162. sc.GetPostParams(orderReq)
  163. if orderReq.ProductOrderNo == "" {
  164. sc.FailedResult("关闭订单失败,非法的订单编号", result)
  165. err = exception.New(exception.IllegalOrderNo)
  166. return
  167. }
  168. err = order.CloseProductOrder(userInfo.Id, orderReq.ProductOrderNo)
  169. if err != nil {
  170. sc.FailedResult("关闭订单失败", result)
  171. err = exception.NewWithException(exception.CloseOrderFailed, err.Error())
  172. return
  173. }
  174. closeDTO := map[string]string{
  175. "orderNo": orderReq.ProductOrderNo,
  176. }
  177. sc.SuccessResult("关闭订单成功", closeDTO, result)
  178. return
  179. })
  180. }