node_info.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. // CreateNodeInfo 创建节点产品
  10. func (s *Server) CreateNodeInfo(ctx *gin.Context) {
  11. c := s.FromContext(ctx)
  12. type Request struct {
  13. NodeName string `json:"nodeName" binding:"required"`
  14. SupportPaymentSymbols string `json:"supportPaymentSymbols"`
  15. UsdPrice decimal.Decimal `json:"usdPrice"`
  16. SoldQuantity decimal.Decimal `json:"soldQuantity"`
  17. UpperQuantityLimit decimal.Decimal `json:"upperQuantityLimit"`
  18. LimitTime int64 `json:"limitTime"`
  19. Sort int `json:"sort"`
  20. Enable bool `json:"enable"`
  21. }
  22. req := new(Request)
  23. if err := c.ShouldBindJSON(&req); err != nil {
  24. c.Fail(constant.ErrorParams)
  25. return
  26. }
  27. nodeInfo := &entity.NodeInfo{
  28. NodeName: req.NodeName,
  29. SupportPaymentSymbols: req.SupportPaymentSymbols,
  30. UsdPrice: req.UsdPrice,
  31. SoldQuantity: req.SoldQuantity,
  32. UpperQuantityLimit: req.UpperQuantityLimit,
  33. LimitTime: req.LimitTime,
  34. Sort: req.Sort,
  35. Enable: req.Enable,
  36. }
  37. if err := s.DB().Create(nodeInfo).Error; err != nil {
  38. c.Fail(err.Error())
  39. return
  40. }
  41. c.Resp(nodeInfo)
  42. }
  43. // UpdateNodeInfo 更新节点产品
  44. func (s *Server) UpdateNodeInfo(ctx *gin.Context) {
  45. c := s.FromContext(ctx)
  46. type Request struct {
  47. Id int64 `json:"id" binding:"required"`
  48. NodeName *string `json:"nodeName"`
  49. SupportPaymentSymbols *string `json:"supportPaymentSymbols"`
  50. UsdPrice *decimal.Decimal `json:"usdPrice"`
  51. SoldQuantity *decimal.Decimal `json:"soldQuantity"`
  52. UpperQuantityLimit *decimal.Decimal `json:"upperQuantityLimit"`
  53. LimitTime *int64 `json:"limitTime"`
  54. Sort *int `json:"sort"`
  55. Enable *bool `json:"enable"`
  56. }
  57. req := new(Request)
  58. if err := c.ShouldBindJSON(&req); err != nil {
  59. c.Fail(constant.ErrorParams)
  60. return
  61. }
  62. nodeInfo := &entity.NodeInfo{}
  63. if err := s.DB().First(nodeInfo, req.Id).Error; err != nil {
  64. c.Fail(constant.ErrorInfo)
  65. return
  66. }
  67. updates := make(map[string]interface{})
  68. if req.NodeName != nil {
  69. updates["node_name"] = *req.NodeName
  70. }
  71. if req.SupportPaymentSymbols != nil {
  72. updates["support_payment_symbols"] = *req.SupportPaymentSymbols
  73. }
  74. if req.UsdPrice != nil {
  75. updates["usd_price"] = *req.UsdPrice
  76. }
  77. if req.SoldQuantity != nil {
  78. updates["sold_quantity"] = *req.SoldQuantity
  79. }
  80. if req.UpperQuantityLimit != nil {
  81. updates["upper_quantity_limit"] = *req.UpperQuantityLimit
  82. }
  83. if req.LimitTime != nil {
  84. updates["limit_time"] = *req.LimitTime
  85. }
  86. if req.Sort != nil {
  87. updates["sort"] = *req.Sort
  88. }
  89. if req.Enable != nil {
  90. updates["enable"] = *req.Enable
  91. }
  92. if err := s.DB().Model(nodeInfo).Updates(updates).Error; err != nil {
  93. c.Fail(err.Error())
  94. return
  95. }
  96. c.Resp(nodeInfo)
  97. }
  98. // DeleteNodeInfo 删除节点产品
  99. func (s *Server) DeleteNodeInfo(ctx *gin.Context) {
  100. c := s.FromContext(ctx)
  101. type Request struct {
  102. Id int64 `json:"id" binding:"required"`
  103. }
  104. req := new(Request)
  105. if err := c.ShouldBindJSON(&req); err != nil {
  106. c.Fail(constant.ErrorParams)
  107. return
  108. }
  109. if err := s.DB().Delete(&entity.NodeInfo{}, req.Id).Error; err != nil {
  110. c.Fail(err.Error())
  111. return
  112. }
  113. c.Resp(nil)
  114. }
  115. // GetNodeInfo 获取节点产品详情
  116. func (s *Server) GetNodeInfo(ctx *gin.Context) {
  117. c := s.FromContext(ctx)
  118. type Request struct {
  119. Id int64 `json:"id" form:"id" binding:"required"`
  120. }
  121. req := new(Request)
  122. if err := c.ShouldBind(&req); err != nil {
  123. c.Fail(constant.ErrorParams)
  124. return
  125. }
  126. nodeInfo := &entity.NodeInfo{}
  127. if err := s.DB().First(nodeInfo, req.Id).Error; err != nil {
  128. c.Fail(constant.ErrorInfo)
  129. return
  130. }
  131. c.Resp(nodeInfo)
  132. }
  133. // FindNodeInfo 分页查询节点产品
  134. func (s *Server) FindNodeInfo(ctx *gin.Context) {
  135. c := s.FromContext(ctx)
  136. type Request struct {
  137. services.Pagination
  138. NodeName string `json:"nodeName" form:"nodeName"`
  139. Enable *bool `json:"enable" form:"enable"`
  140. BeginTime int64 `json:"beginTime" form:"beginTime"`
  141. EndTime int64 `json:"endTime" form:"endTime"`
  142. Order string `json:"order" form:"order"`
  143. IsExport bool `json:"isExport" form:"isExport"`
  144. Fields string `json:"fields" form:"fields"`
  145. }
  146. req := new(Request)
  147. if err := c.ShouldBind(&req); err != nil {
  148. c.Fail(constant.ErrorParams)
  149. return
  150. }
  151. db := s.DB().Model(&entity.NodeInfo{})
  152. // 条件查询
  153. if req.NodeName != "" {
  154. db = db.Where("node_name LIKE ?", "%"+req.NodeName+"%")
  155. }
  156. if req.Enable != nil {
  157. db = db.Where("enable = ?", *req.Enable)
  158. }
  159. if req.BeginTime > 0 {
  160. db = db.Where("created_at >= ?", req.BeginTime)
  161. }
  162. if req.EndTime > 0 {
  163. db = db.Where("created_at <= ?", req.EndTime)
  164. }
  165. // 排序
  166. if req.Order == "" {
  167. req.Order = "id desc"
  168. }
  169. db = db.Order(req.Order)
  170. // 分页查询
  171. list, err := s.PageNodeInfo(db, &req.Pagination)
  172. if err != nil {
  173. c.Fail(err.Error())
  174. return
  175. }
  176. // 返回映射
  177. enableMap := map[bool]string{
  178. true: "开放购买",
  179. false: "未开放",
  180. }
  181. // 可导出字段列表
  182. cols := []map[string]string{
  183. {"field": "id", "label": "ID"},
  184. {"field": "nodeName", "label": "节点名称"},
  185. {"field": "supportPaymentSymbols", "label": "支持支付币种"},
  186. {"field": "usdPrice", "label": "单价(USD)"},
  187. {"field": "soldQuantity", "label": "已售数量"},
  188. {"field": "upperQuantityLimit", "label": "可售上限"},
  189. {"field": "limitTime", "label": "结束时间"},
  190. {"field": "sort", "label": "排序"},
  191. {"field": "enable", "label": "状态"},
  192. {"field": "createdAt", "label": "创建时间"},
  193. }
  194. c.Resp(gin.H{
  195. "list": list,
  196. "pagination": req.Pagination,
  197. "enableMap": enableMap,
  198. "cols": cols,
  199. })
  200. }