order.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package mysql
  2. import (
  3. orm "duoduo/database"
  4. "github.com/shopspring/decimal"
  5. )
  6. type Order struct {
  7. CreateTime string `gorm:"column:create_time" json:"createTime"`
  8. GoodsName string `gorm:"column:goods_name" json:"goodsName"`
  9. GoodsThumbnailURL string `gorm:"column:goods_thumbnail_url" json:"goodsThumbnailUrl"`
  10. JSONData string `gorm:"column:json_data" json:"jsonData"`
  11. OrderGroupSuccessTime string `gorm:"column:order_group_success_time" json:"orderGroupSuccessTime"`
  12. OrderID string `gorm:"column:order_id" json:"orderId"`
  13. OrderStatus int `gorm:"column:order_status" json:"orderStatus"`
  14. OrderStatusDesc string `gorm:"column:order_status_desc" json:"orderStatusDesc"`
  15. PID string `gorm:"column:p_id" json:"pId"`
  16. PromotionAmount int64 `gorm:"column:promotion_amount" json:"promotionAmount"`
  17. UpdateTime string `gorm:"column:update_time" json:"updateTime"`
  18. OrderCreateTime string `gorm:"column:order_create_time" json:"orderCreateTime"`
  19. OrderSn string `gorm:"column:order_sn" json:"orderSn"`
  20. Amount decimal.Decimal `gorm:"column:amount" json:"amount"`
  21. Amount1 decimal.Decimal `gorm:"column:amount_1" json:"amount1"`
  22. Amount2 decimal.Decimal `gorm:"column:amount_2" json:"amount2"`
  23. OrderAmount decimal.Decimal `gorm:"column:order_amount" json:"orderAmount"`
  24. }
  25. // TableName sets the insert table name for this struct type
  26. func (o *Order) TableName() string {
  27. return "order"
  28. }
  29. func (o *Order) Create() (Order, error) {
  30. var doc Order
  31. result := orm.Eloquent.Table(o.TableName()).Create(&o)
  32. if result.Error != nil {
  33. err := result.Error
  34. return doc, err
  35. }
  36. doc = *o
  37. return doc, nil
  38. }
  39. func (o *Order) GetNum() int {
  40. var count int
  41. tableCount := orm.Eloquent.Table(o.TableName()).Where("order_id = ? ", o.OrderID)
  42. tableCount.Count(&count)
  43. return count
  44. }
  45. func (o *Order) GetAmount() (Wallet, error) {
  46. var wallet Wallet
  47. //历史总收益: 0,1,2,3,5 求和
  48. //今日预估收益:0,1,2,3 求和
  49. //昨日预估收益:0,1,2,3 求和
  50. //近30日预估收益:0,1,2,3,5 求和
  51. //可体现金额:5求和-已体现金额
  52. //已体现金额:提现记录求和
  53. //历史总收益
  54. err := orm.Eloquent.Select("SUM(promotion_amount) as total_amount").Where("order_status in (0,1,2,3,5) and p_id = ? ", o.PID).Table(o.TableName()).First(&wallet).Error
  55. if err != nil {
  56. return wallet, err
  57. }
  58. //今日收益
  59. err = orm.Eloquent.Select("SUM(promotion_amount) as today_amount").Where("order_status in (0,1,2,3) and p_id = ? and DATE(order_group_success_time) = curdate() ", o.PID).Table(o.TableName()).First(&wallet).Error
  60. if err != nil {
  61. return wallet, err
  62. }
  63. //昨日收益
  64. err = orm.Eloquent.Select("SUM(promotion_amount) as yesterday_amount").Where("order_status in (0,1,2,3) and p_id = ? and DATE(order_group_success_time) = date_sub(curdate(),interval 1 day) ", o.PID).Table(o.TableName()).First(&wallet).Error
  65. if err != nil {
  66. return wallet, err
  67. }
  68. //近30日收益
  69. err = orm.Eloquent.Select("SUM(promotion_amount) as lately_amount").Where("order_status in (0,1,2,3) and p_id = ? and DATE(order_group_success_time) >= date_sub(curdate(),interval 30 day) ", o.PID).Table(o.TableName()).First(&wallet).Error
  70. if err != nil {
  71. return wallet, err
  72. }
  73. //上个月结算收益
  74. err = orm.Eloquent.Select("SUM(promotion_amount) as available_amount").Where("order_status = 5 and p_id = ? and DATE(order_group_success_time) >= date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(day from now()) day),interval 0 month) ", o.PID).Table(o.TableName()).First(&wallet).Error
  75. if err != nil {
  76. return wallet, err
  77. }
  78. return wallet, nil
  79. }
  80. // 更新
  81. func (o *Order) Update(orderId string) (update Order, err error) {
  82. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).First(&update).Error; err != nil {
  83. return
  84. }
  85. //参数1:是要修改的数据
  86. //参数2:是修改的数据
  87. if err = orm.Eloquent.Table(o.TableName()).Model(&update).Updates(&o).Error; err != nil {
  88. return
  89. }
  90. return
  91. }
  92. //list 接口使用
  93. func (o *Order) GetOrderList(pageSize int, pageIndex int) ([]Order, int, error) {
  94. var doc []Order
  95. table := orm.Eloquent.Table(o.TableName())
  96. table = table.Where("p_id = ? ", o.PID)
  97. var count int
  98. if err := table.Select("order_id,promotion_amount,p_id,order_status,order_status_desc,goods_name,goods_thumbnail_url,order_group_success_time,amount,amount_1,amount_2,order_sn,DATE_FORMAT(order_create_time,'%Y-%m-%d %H:%i:%s') as order_create_time,order_amount").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
  99. return nil, 0, err
  100. }
  101. table.Count(&count)
  102. return doc, count, nil
  103. }