order.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package mysql
  2. import (
  3. orm "duoduo/database"
  4. "errors"
  5. "github.com/shopspring/decimal"
  6. )
  7. type Order struct {
  8. CreateTime string `gorm:"column:create_time" json:"createTime"`
  9. GoodsName string `gorm:"column:goods_name" json:"goodsName"`
  10. GoodsThumbnailURL string `gorm:"column:goods_thumbnail_url" json:"goodsThumbnailUrl"`
  11. JSONData string `gorm:"column:json_data" json:"jsonData"`
  12. OrderGroupSuccessTime string `gorm:"column:order_group_success_time" json:"orderGroupSuccessTime"`
  13. OrderID string `gorm:"column:order_id" json:"orderId"`
  14. OrderStatus int `gorm:"column:order_status" json:"orderStatus"`
  15. OrderStatusDesc string `gorm:"column:order_status_desc" json:"orderStatusDesc"`
  16. PID string `gorm:"column:p_id" json:"pId"`
  17. PromotionAmount int64 `gorm:"column:promotion_amount" json:"promotionAmount"`
  18. UpdateTime string `gorm:"column:update_time" json:"updateTime"`
  19. OrderCreateTime string `gorm:"column:order_create_time" json:"orderCreateTime"`
  20. OrderSn string `gorm:"column:order_sn" json:"orderSn"`
  21. Amount decimal.Decimal `gorm:"column:amount" json:"amount"`
  22. Amount1 decimal.Decimal `gorm:"column:amount_1" json:"amount1"`
  23. Amount2 decimal.Decimal `gorm:"column:amount_2" json:"amount2"`
  24. OrderAmount decimal.Decimal `gorm:"column:order_amount" json:"orderAmount"`
  25. OpenId string `gorm:"column:open_id" json:"openId"`
  26. OpenId1 string `gorm:"column:open_id_1" json:"openId1"`
  27. OpenId2 string `gorm:"column:open_id_2" json:"openId2"`
  28. }
  29. type OrderAmount struct {
  30. TotalAmount decimal.Decimal `gorm:"column:total_amount" json:"totalAmount"`
  31. TotalAmountOne decimal.Decimal `gorm:"column:total_amount_one" json:"totalAmountOne"`
  32. TotalAmountTwo decimal.Decimal `gorm:"column:total_amount_two" json:"totalAmountTwo"`
  33. TodayAmount decimal.Decimal `gorm:"column:today_amount" json:"todayAmount"`
  34. TodayAmountOne decimal.Decimal `gorm:"column:today_amount_one" json:"todayAmountOne"`
  35. TodayAmountTwo decimal.Decimal `gorm:"column:today_amount_two" json:"todayAmountTwo"`
  36. YesterdayAmount decimal.Decimal `gorm:"column:yesterday_amount" json:"yesterdayAmount"`
  37. YesterdayAmountOne decimal.Decimal `gorm:"column:yesterday_amount_one" json:"yesterdayAmountOne"`
  38. YesterdayAmountTwo decimal.Decimal `gorm:"column:yesterday_amount_two" json:"yesterdayAmountTwo"`
  39. LatelyAmount decimal.Decimal `gorm:"column:lately_amount" json:"latelyAmount"`
  40. LatelyAmountOne decimal.Decimal `gorm:"column:lately_amount_one" json:"latelyAmountOne"`
  41. LatelyAmountTwo decimal.Decimal `gorm:"column:lately_amount_two" json:"latelyAmountTwo"`
  42. AvailableAmount decimal.Decimal `gorm:"column:available_amount" json:"availableAmount"`
  43. AvailableAmountOne decimal.Decimal `gorm:"column:available_amount_one" json:"availableAmountOne"`
  44. AvailableAmountTwo decimal.Decimal `gorm:"column:available_amount_two" json:"availableAmountTwo"`
  45. }
  46. // TableName sets the insert table name for this struct type
  47. func (o *Order) TableName() string {
  48. return "order"
  49. }
  50. func (o *Order) Create() (Order, error) {
  51. var doc Order
  52. result := orm.Eloquent.Table(o.TableName()).Create(&o)
  53. if result.Error != nil {
  54. err := result.Error
  55. return doc, err
  56. }
  57. doc = *o
  58. return doc, nil
  59. }
  60. func (o *Order) GetNum() int {
  61. var count int
  62. tableCount := orm.Eloquent.Table(o.TableName()).Where("order_id = ? ", o.OrderID)
  63. tableCount.Count(&count)
  64. return count
  65. }
  66. func (o *Order) GetAmount() (Wallet, error) {
  67. var wallet Wallet
  68. //历史总收益: 0,1,2,3,5 求和
  69. //今日预估收益:0,1,2,3 求和
  70. //昨日预估收益:0,1,2,3 求和
  71. //近30日预估收益:0,1,2,3,5 求和
  72. //可体现金额:5求和-已体现金额
  73. //已体现金额:提现记录求和
  74. //历史总收益
  75. 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
  76. if err != nil {
  77. return wallet, err
  78. }
  79. //今日收益
  80. 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
  81. if err != nil {
  82. return wallet, err
  83. }
  84. //昨日收益
  85. 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
  86. if err != nil {
  87. return wallet, err
  88. }
  89. //近30日收益
  90. 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
  91. if err != nil {
  92. return wallet, err
  93. }
  94. //上个月结算收益
  95. 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
  96. if err != nil {
  97. return wallet, err
  98. }
  99. return wallet, nil
  100. }
  101. func (o *Order) GetAmountOpenId() (OrderAmount, error) {
  102. var wallet OrderAmount
  103. //历史总收益: 0,1,2,3,5 求和
  104. //今日预估收益:0,1,2,3 求和
  105. //昨日预估收益:0,1,2,3 求和
  106. //近30日预估收益:0,1,2,3,5 求和
  107. //可体现金额:5求和-已体现金额
  108. //已体现金额:提现记录求和
  109. //历史总收益
  110. err := orm.Eloquent.Select("SUM(amount) as total_amount").Where("order_status in (0,1,2,3,5) and open_id = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  111. if err != nil {
  112. return wallet, err
  113. }
  114. err = orm.Eloquent.Select("SUM(amount_1) as total_amount_one").Where("order_status in (0,1,2,3,5) and open_id_1 = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  115. if err != nil {
  116. return wallet, err
  117. }
  118. err = orm.Eloquent.Select("SUM(amount_2) as total_amount_two").Where("order_status in (0,1,2,3,5) and open_id_2 = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  119. if err != nil {
  120. return wallet, err
  121. }
  122. //今日收益
  123. err = orm.Eloquent.Select("SUM(amount) as today_amount").Where("order_status in (0,1,2,3) and open_id = ? and DATE(order_group_success_time) = curdate() ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  124. if err != nil {
  125. return wallet, err
  126. }
  127. err = orm.Eloquent.Select("SUM(amount_1) as today_amount_one").Where("order_status in (0,1,2,3) and open_id_1 = ? and DATE(order_group_success_time) = curdate() ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  128. if err != nil {
  129. return wallet, err
  130. }
  131. err = orm.Eloquent.Select("SUM(amount_2) as today_amount_two").Where("order_status in (0,1,2,3) and open_id_2 = ? and DATE(order_group_success_time) = curdate() ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  132. if err != nil {
  133. return wallet, err
  134. }
  135. //昨日收益
  136. err = orm.Eloquent.Select("SUM(amount) as yesterday_amount").Where("order_status in (0,1,2,3) and open_id = ? and DATE(order_group_success_time) = date_sub(curdate(),interval 1 day) ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  137. if err != nil {
  138. return wallet, err
  139. }
  140. err = orm.Eloquent.Select("SUM(amount_1) as yesterday_amount_one").Where("order_status in (0,1,2,3) and open_id_1 = ? and DATE(order_group_success_time) = date_sub(curdate(),interval 1 day) ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  141. if err != nil {
  142. return wallet, err
  143. }
  144. err = orm.Eloquent.Select("SUM(amount_2) as yesterday_amount_two").Where("order_status in (0,1,2,3) and open_id_2 = ? and DATE(order_group_success_time) = date_sub(curdate(),interval 1 day) ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  145. if err != nil {
  146. return wallet, err
  147. }
  148. //近30日收益
  149. err = orm.Eloquent.Select("SUM(amount) as lately_amount").Where("order_status in (0,1,2,3) and open_id = ? and DATE(order_group_success_time) >= date_sub(curdate(),interval 30 day) ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  150. if err != nil {
  151. return wallet, err
  152. }
  153. err = orm.Eloquent.Select("SUM(amount_1) as lately_amount_one").Where("order_status in (0,1,2,3) and open_id_1 = ? and DATE(order_group_success_time) >= date_sub(curdate(),interval 30 day) ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  154. if err != nil {
  155. return wallet, err
  156. }
  157. err = orm.Eloquent.Select("SUM(amount_2) as lately_amount_two").Where("order_status in (0,1,2,3) and open_id_2 = ? and DATE(order_group_success_time) >= date_sub(curdate(),interval 30 day) ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  158. if err != nil {
  159. return wallet, err
  160. }
  161. //上个月结算收益
  162. err = orm.Eloquent.Select("SUM(amount) as available_amount").Where("order_status = 5 and open_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.OpenId).Table(o.TableName()).First(&wallet).Error
  163. if err != nil {
  164. return wallet, err
  165. }
  166. err = orm.Eloquent.Select("SUM(amount_1) as available_amount_one").Where("order_status = 5 and open_id_1 = ? 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.OpenId).Table(o.TableName()).First(&wallet).Error
  167. if err != nil {
  168. return wallet, err
  169. }
  170. err = orm.Eloquent.Select("SUM(amount_2) as available_amount_two").Where("order_status = 5 and open_id_2 = ? 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.OpenId).Table(o.TableName()).First(&wallet).Error
  171. if err != nil {
  172. return wallet, err
  173. }
  174. return wallet, nil
  175. }
  176. // 更新
  177. func (o *Order) Update(orderId string) (update Order, err error) {
  178. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).First(&update).Error; err != nil {
  179. return
  180. }
  181. //参数1:是要修改的数据
  182. //参数2:是修改的数据
  183. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).Model(&update).Updates(&o).Error; err != nil {
  184. return
  185. }
  186. return
  187. }
  188. //list 接口使用
  189. func (o *Order) GetOrderList(pageSize int, pageIndex int) ([]Order, int, error) {
  190. var doc []Order
  191. table := orm.Eloquent.Table(o.TableName())
  192. table = table.Where("p_id = ? ", o.PID)
  193. var count int
  194. 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 {
  195. return nil, 0, err
  196. }
  197. table.Count(&count)
  198. return doc, count, nil
  199. }
  200. //list 接口使用
  201. func (o *Order) GetOrderOpenIdList(pageSize int, pageIndex int, status int) ([]Order, int, error) {
  202. var doc []Order
  203. table := orm.Eloquent.Table(o.TableName())
  204. if status == 0 {
  205. table = table.Where("open_id = ? ", o.OpenId)
  206. } else if status == 1 {
  207. table = table.Where("open_id_1 = ? ", o.OpenId)
  208. } else if status == 2 {
  209. table = table.Where("open_id_2 = ? ", o.OpenId)
  210. } else {
  211. return nil, 0, errors.New("status err")
  212. }
  213. //table = table.Where("open_id = ? ", o.OpenId)
  214. var count int
  215. if err := table.Select("order_id,promotion_amount,p_id,order_status,order_status_desc,goods_name," +
  216. "goods_thumbnail_url,order_group_success_time,amount,amount_1,amount_2,order_sn," +
  217. "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 {
  218. return nil, 0, err
  219. }
  220. table.Count(&count)
  221. return doc, count, nil
  222. }