node_order.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package admin
  2. import (
  3. "app/commons/constant"
  4. "app/commons/model/entity"
  5. "app/commons/services"
  6. "github.com/gin-gonic/gin"
  7. "github.com/shopspring/decimal"
  8. )
  9. // CreateNodeOrder 创建节点订单
  10. func (s *Server) CreateNodeOrder(ctx *gin.Context) {
  11. c := s.FromContext(ctx)
  12. type Request struct {
  13. UserId int64 `json:"userId" binding:"required"`
  14. Uid string `json:"uid" binding:"required"`
  15. ProductId int64 `json:"productId" binding:"required"`
  16. ProductName string `json:"productName"`
  17. UsdPrice decimal.Decimal `json:"usdPrice"`
  18. Quantity decimal.Decimal `json:"quantity"`
  19. UsdAmount decimal.Decimal `json:"usdAmount"`
  20. PayState int `json:"payState"`
  21. State int `json:"state"`
  22. Source int `json:"source"`
  23. }
  24. req := new(Request)
  25. if err := c.ShouldBindJSON(&req); err != nil {
  26. c.Fail(constant.ErrorParams)
  27. return
  28. }
  29. order := &entity.NodeOrder{
  30. UserId: req.UserId,
  31. Uid: req.Uid,
  32. ProductId: req.ProductId,
  33. ProductName: req.ProductName,
  34. UsdPrice: req.UsdPrice,
  35. Quantity: req.Quantity,
  36. UsdAmount: req.UsdAmount,
  37. PayState: req.PayState,
  38. State: req.State,
  39. Source: req.Source,
  40. }
  41. if err := s.DB().Create(order).Error; err != nil {
  42. c.Fail(err.Error())
  43. return
  44. }
  45. c.Resp(order)
  46. }
  47. // UpdateNodeOrder 更新节点订单
  48. func (s *Server) UpdateNodeOrder(ctx *gin.Context) {
  49. c := s.FromContext(ctx)
  50. type Request struct {
  51. Id int64 `json:"id" binding:"required"`
  52. UserId *int64 `json:"userId"`
  53. Uid *string `json:"uid"`
  54. ProductId *int64 `json:"productId"`
  55. ProductName *string `json:"productName"`
  56. UsdPrice *decimal.Decimal `json:"usdPrice"`
  57. Quantity *decimal.Decimal `json:"quantity"`
  58. UsdAmount *decimal.Decimal `json:"usdAmount"`
  59. PayState *int `json:"payState"`
  60. State *int `json:"state"`
  61. Source *int `json:"source"`
  62. }
  63. req := new(Request)
  64. if err := c.ShouldBindJSON(&req); err != nil {
  65. c.Fail(constant.ErrorParams)
  66. return
  67. }
  68. order := &entity.NodeOrder{}
  69. if err := s.DB().First(order, req.Id).Error; err != nil {
  70. c.Fail(constant.ErrorInfo)
  71. return
  72. }
  73. updates := make(map[string]interface{})
  74. if req.UserId != nil {
  75. updates["user_id"] = *req.UserId
  76. }
  77. if req.Uid != nil {
  78. updates["uid"] = *req.Uid
  79. }
  80. if req.ProductId != nil {
  81. updates["product_id"] = *req.ProductId
  82. }
  83. if req.ProductName != nil {
  84. updates["product_name"] = *req.ProductName
  85. }
  86. if req.UsdPrice != nil {
  87. updates["usd_price"] = *req.UsdPrice
  88. }
  89. if req.Quantity != nil {
  90. updates["quantity"] = *req.Quantity
  91. }
  92. if req.UsdAmount != nil {
  93. updates["usd_amount"] = *req.UsdAmount
  94. }
  95. if req.PayState != nil {
  96. updates["pay_state"] = *req.PayState
  97. }
  98. if req.State != nil {
  99. updates["state"] = *req.State
  100. }
  101. if req.Source != nil {
  102. updates["source"] = *req.Source
  103. }
  104. if err := s.DB().Model(order).Updates(updates).Error; err != nil {
  105. c.Fail(err.Error())
  106. return
  107. }
  108. c.Resp(order)
  109. }
  110. // DeleteNodeOrder 删除节点订单
  111. func (s *Server) DeleteNodeOrder(ctx *gin.Context) {
  112. c := s.FromContext(ctx)
  113. type Request struct {
  114. Id int64 `json:"id" binding:"required"`
  115. }
  116. req := new(Request)
  117. if err := c.ShouldBindJSON(&req); err != nil {
  118. c.Fail(constant.ErrorParams)
  119. return
  120. }
  121. if err := s.DB().Delete(&entity.NodeOrder{}, req.Id).Error; err != nil {
  122. c.Fail(err.Error())
  123. return
  124. }
  125. c.Resp(nil)
  126. }
  127. // GetNodeOrder 获取节点订单详情
  128. func (s *Server) GetNodeOrder(ctx *gin.Context) {
  129. c := s.FromContext(ctx)
  130. type Request struct {
  131. Id int64 `json:"id" form:"id" binding:"required"`
  132. }
  133. req := new(Request)
  134. if err := c.ShouldBind(&req); err != nil {
  135. c.Fail(constant.ErrorParams)
  136. return
  137. }
  138. order := &entity.NodeOrder{}
  139. if err := s.DB().First(order, req.Id).Error; err != nil {
  140. c.Fail(constant.ErrorInfo)
  141. return
  142. }
  143. c.Resp(order)
  144. }
  145. // FindNodeOrder 分页查询节点订单
  146. func (s *Server) FindNodeOrder(ctx *gin.Context) {
  147. c := s.FromContext(ctx)
  148. type Request struct {
  149. services.Pagination
  150. RecordId string `json:"recordId" form:"recordId"`
  151. UserId int64 `json:"userId" form:"userId"`
  152. Uid string `json:"uid" form:"uid"`
  153. ProductId int64 `json:"productId" form:"productId"`
  154. ProductName string `json:"productName" form:"productName"`
  155. PayState *int `json:"payState" form:"payState"`
  156. State *int `json:"state" form:"state"`
  157. Source *int `json:"source" form:"source"`
  158. BeginTime int64 `json:"beginTime" form:"beginTime"`
  159. EndTime int64 `json:"endTime" form:"endTime"`
  160. Order string `json:"order" form:"order"`
  161. IsExport bool `json:"isExport" form:"isExport"`
  162. Fields string `json:"fields" form:"fields"`
  163. }
  164. req := new(Request)
  165. if err := c.ShouldBind(&req); err != nil {
  166. c.Fail(constant.ErrorParams)
  167. return
  168. }
  169. db := s.DB().Model(&entity.NodeOrder{})
  170. // 条件查询
  171. if req.RecordId != "" {
  172. db = db.Where("record_id = ?", req.RecordId)
  173. }
  174. if req.UserId > 0 {
  175. db = db.Where("user_id = ?", req.UserId)
  176. }
  177. if req.Uid != "" {
  178. db = db.Where("uid = ?", req.Uid)
  179. }
  180. if req.ProductId > 0 {
  181. db = db.Where("product_id = ?", req.ProductId)
  182. }
  183. if req.ProductName != "" {
  184. db = db.Where("product_name LIKE ?", "%"+req.ProductName+"%")
  185. }
  186. if req.PayState != nil {
  187. db = db.Where("pay_state = ?", *req.PayState)
  188. }
  189. if req.State != nil {
  190. db = db.Where("state = ?", *req.State)
  191. }
  192. if req.Source != nil {
  193. db = db.Where("source = ?", *req.Source)
  194. }
  195. if req.BeginTime > 0 {
  196. db = db.Where("created_at >= ?", req.BeginTime)
  197. }
  198. if req.EndTime > 0 {
  199. db = db.Where("created_at <= ?", req.EndTime)
  200. }
  201. // 排序
  202. if req.Order == "" {
  203. req.Order = "id desc"
  204. }
  205. db = db.Order(req.Order)
  206. // 分页查询
  207. list, err := s.PageNodeOrder(db, &req.Pagination)
  208. if err != nil {
  209. c.Fail(err.Error())
  210. return
  211. }
  212. // 状态映射
  213. payStateMap := map[int]string{
  214. entity.NodeOrderPayStateWaiting: "待支付",
  215. entity.NodeOrderPayStateSuccess: "支付成功",
  216. entity.NodeOrderPayStateFail: "支付失败",
  217. }
  218. stateMap := map[int]string{
  219. entity.NodeOrderStateUnknown: "未知",
  220. entity.NodeOrderStateEffective: "有效",
  221. entity.NodeOrderStateExpired: "过期失效",
  222. entity.NodeOrderStateFailInvalid: "主动失效",
  223. }
  224. sourceMap := map[int]string{
  225. entity.NodeOrderSourceFromUser: "用户购买",
  226. entity.NodeOrderSourceFromAdminBuy: "管理后台购买",
  227. }
  228. // 可导出字段列表
  229. cols := []map[string]string{
  230. {"field": "id", "label": "ID"},
  231. {"field": "recordId", "label": "订单ID"},
  232. {"field": "userId", "label": "用户ID"},
  233. {"field": "uid", "label": "用户UID"},
  234. {"field": "productId", "label": "产品ID"},
  235. {"field": "productName", "label": "产品名称"},
  236. {"field": "usdPrice", "label": "单价(USD)"},
  237. {"field": "quantity", "label": "数量"},
  238. {"field": "usdAmount", "label": "总价值(USD)"},
  239. {"field": "payState", "label": "支付状态"},
  240. {"field": "state", "label": "订单状态"},
  241. {"field": "source", "label": "来源"},
  242. {"field": "createdAt", "label": "创建时间"},
  243. }
  244. c.Resp(gin.H{
  245. "list": list,
  246. "pagination": req.Pagination,
  247. "payStateMap": payStateMap,
  248. "stateMap": stateMap,
  249. "sourceMap": sourceMap,
  250. "cols": cols,
  251. })
  252. }