order.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  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) GetTotal() (int, error) {
  67. var count int
  68. tableCount := orm.Eloquent.Table(o.TableName())
  69. tableCount.Count(&count)
  70. return count, nil
  71. }
  72. func (o *Order) GetAdminAmount() (int64, error) {
  73. var doc Order
  74. //var amount int64
  75. err := orm.Eloquent.Select("SUM(promotion_amount) as promotion_amount").Where("order_status in (0,1,2,3,5) ").Table(o.TableName()).First(&doc).Error
  76. if err != nil {
  77. return doc.PromotionAmount, err
  78. }
  79. return doc.PromotionAmount, nil
  80. }
  81. func (o *Order) GetPlatform() (decimal.Decimal, error) {
  82. var order Order
  83. var order1 Order
  84. var order2 Order
  85. err := orm.Eloquent.Select("SUM(amount) as amount").Where("order_status in (0,1,2,3,5) ").Table(o.TableName()).First(&order).Error
  86. if err != nil {
  87. return order.Amount, err
  88. }
  89. err = orm.Eloquent.Select("SUM(amount_1) as amount_1").Where("order_status in (0,1,2,3,5) and open_id_1 != '' ").Table(o.TableName()).First(&order1).Error
  90. if err != nil {
  91. return order1.Amount1, err
  92. }
  93. err = orm.Eloquent.Select("SUM(amount_2) as amount_2").Where("order_status in (0,1,2,3,5) and open_id_2 != '' ").Table(o.TableName()).First(&order2).Error
  94. if err != nil {
  95. return order2.Amount2, err
  96. }
  97. return order.Amount.Add(order1.Amount1.Add(order2.Amount2)), nil
  98. }
  99. func (o *Order) GetAmount() (Wallet, error) {
  100. var wallet Wallet
  101. //历史总收益: 0,1,2,3,5 求和
  102. //今日预估收益:0,1,2,3 求和
  103. //昨日预估收益:0,1,2,3 求和
  104. //近30日预估收益:0,1,2,3,5 求和
  105. //可体现金额:5求和-已体现金额
  106. //已体现金额:提现记录求和
  107. //历史总收益
  108. 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
  109. if err != nil {
  110. return wallet, err
  111. }
  112. //今日收益
  113. 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
  114. if err != nil {
  115. return wallet, err
  116. }
  117. //昨日收益
  118. 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
  119. if err != nil {
  120. return wallet, err
  121. }
  122. //近30日收益
  123. 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
  124. if err != nil {
  125. return wallet, err
  126. }
  127. //上个月结算收益
  128. 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
  129. if err != nil {
  130. return wallet, err
  131. }
  132. return wallet, nil
  133. }
  134. func (o *Order) GetAmountOpenId() (OrderAmount, error) {
  135. var wallet OrderAmount
  136. //历史总收益: 0,1,2,3,5 求和
  137. //今日预估收益:0,1,2,3 求和
  138. //昨日预估收益:0,1,2,3 求和
  139. //近30日预估收益:0,1,2,3,5 求和
  140. //可体现金额:5求和-已体现金额
  141. //已体现金额:提现记录求和
  142. //历史总收益
  143. 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
  144. if err != nil {
  145. return wallet, err
  146. }
  147. 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
  148. if err != nil {
  149. return wallet, err
  150. }
  151. 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
  152. if err != nil {
  153. return wallet, err
  154. }
  155. //今日收益
  156. 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
  157. if err != nil {
  158. return wallet, err
  159. }
  160. 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
  161. if err != nil {
  162. return wallet, err
  163. }
  164. 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
  165. if err != nil {
  166. return wallet, err
  167. }
  168. //昨日收益
  169. 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
  170. if err != nil {
  171. return wallet, err
  172. }
  173. 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
  174. if err != nil {
  175. return wallet, err
  176. }
  177. 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
  178. if err != nil {
  179. return wallet, err
  180. }
  181. //近30日收益
  182. 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
  183. if err != nil {
  184. return wallet, err
  185. }
  186. 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
  187. if err != nil {
  188. return wallet, err
  189. }
  190. 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
  191. if err != nil {
  192. return wallet, err
  193. }
  194. //上个月结算收益
  195. 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
  196. if err != nil {
  197. return wallet, err
  198. }
  199. 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
  200. if err != nil {
  201. return wallet, err
  202. }
  203. 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
  204. if err != nil {
  205. return wallet, err
  206. }
  207. return wallet, nil
  208. }
  209. // 更新
  210. func (o *Order) Update(orderId string) (update Order, err error) {
  211. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).First(&update).Error; err != nil {
  212. return
  213. }
  214. //参数1:是要修改的数据
  215. //参数2:是修改的数据
  216. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).Model(&update).Updates(&o).Error; err != nil {
  217. return
  218. }
  219. return
  220. }
  221. //list 接口使用
  222. func (o *Order) GetOrderList(pageSize int, pageIndex int) ([]Order, int, error) {
  223. var doc []Order
  224. table := orm.Eloquent.Table(o.TableName())
  225. table = table.Where("p_id = ? ", o.PID)
  226. var count int
  227. 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 {
  228. return nil, 0, err
  229. }
  230. table.Count(&count)
  231. return doc, count, nil
  232. }
  233. //list 接口使用
  234. func (o *Order) GetOrderOpenIdList(pageSize int, pageIndex int, status int) ([]Order, int, error) {
  235. var doc []Order
  236. table := orm.Eloquent.Table(o.TableName())
  237. if status == 0 {
  238. table = table.Where("open_id = ? ", o.OpenId)
  239. } else if status == 1 {
  240. table = table.Where("open_id_1 = ? ", o.OpenId)
  241. } else if status == 2 {
  242. table = table.Where("open_id_2 = ? ", o.OpenId)
  243. } else if status == 3 {
  244. } else {
  245. return nil, 0, errors.New("status err")
  246. }
  247. //table = table.Where("open_id = ? ", o.OpenId)
  248. var count int
  249. if err := table.Select("open_id,open_id_1,open_id_2,order_id,promotion_amount,p_id,order_status,order_status_desc,goods_name," +
  250. "goods_thumbnail_url,order_group_success_time,amount,amount_1,amount_2,order_sn," +
  251. "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 {
  252. return nil, 0, err
  253. }
  254. table.Count(&count)
  255. return doc, count, nil
  256. }