order.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  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) GetAdminAvailable() (decimal.Decimal, error) {
  100. var order Order
  101. var order1 Order
  102. var order2 Order
  103. err := orm.Eloquent.Select("SUM(amount) as amount").Where("order_status = 5 ").Table(o.TableName()).First(&order).Error
  104. if err != nil {
  105. return order.Amount, err
  106. }
  107. err = orm.Eloquent.Select("SUM(amount_1) as amount_1").Where("order_status = 5 and open_id_1 != '' ").Table(o.TableName()).First(&order1).Error
  108. if err != nil {
  109. return order1.Amount1, err
  110. }
  111. err = orm.Eloquent.Select("SUM(amount_2) as amount_2").Where("order_status = 5 and open_id_2 != '' ").Table(o.TableName()).First(&order2).Error
  112. if err != nil {
  113. return order2.Amount2, err
  114. }
  115. return order.Amount.Add(order1.Amount1.Add(order2.Amount2)), nil
  116. }
  117. func (o *Order) GetAmount() (Wallet, error) {
  118. var wallet Wallet
  119. //历史总收益: 0,1,2,3,5 求和
  120. //今日预估收益:0,1,2,3 求和
  121. //昨日预估收益:0,1,2,3 求和
  122. //近30日预估收益:0,1,2,3,5 求和
  123. //可体现金额:5求和-已体现金额
  124. //已体现金额:提现记录求和
  125. //历史总收益
  126. 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
  127. if err != nil {
  128. return wallet, err
  129. }
  130. //今日收益
  131. 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
  132. if err != nil {
  133. return wallet, err
  134. }
  135. //昨日收益
  136. 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
  137. if err != nil {
  138. return wallet, err
  139. }
  140. //近30日收益
  141. 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
  142. if err != nil {
  143. return wallet, err
  144. }
  145. //上个月结算收益
  146. 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
  147. if err != nil {
  148. return wallet, err
  149. }
  150. return wallet, nil
  151. }
  152. func (o *Order) GetAmountOpenId() (OrderAmount, error) {
  153. var wallet OrderAmount
  154. //历史总收益: 0,1,2,3,5 求和
  155. //今日预估收益:0,1,2,3 求和
  156. //昨日预估收益:0,1,2,3 求和
  157. //近30日预估收益:0,1,2,3,5 求和
  158. //可体现金额:5求和-已体现金额
  159. //已体现金额:提现记录求和
  160. //历史总收益
  161. 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
  162. if err != nil {
  163. return wallet, err
  164. }
  165. 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
  166. if err != nil {
  167. return wallet, err
  168. }
  169. 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
  170. if err != nil {
  171. return wallet, err
  172. }
  173. //今日收益
  174. 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
  175. if err != nil {
  176. return wallet, err
  177. }
  178. 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
  179. if err != nil {
  180. return wallet, err
  181. }
  182. 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
  183. if err != nil {
  184. return wallet, err
  185. }
  186. //昨日收益
  187. 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
  188. if err != nil {
  189. return wallet, err
  190. }
  191. 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
  192. if err != nil {
  193. return wallet, err
  194. }
  195. 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
  196. if err != nil {
  197. return wallet, err
  198. }
  199. //近30日收益
  200. 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
  201. if err != nil {
  202. return wallet, err
  203. }
  204. 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
  205. if err != nil {
  206. return wallet, err
  207. }
  208. 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
  209. if err != nil {
  210. return wallet, err
  211. }
  212. //上个月结算收益
  213. 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
  214. if err != nil {
  215. return wallet, err
  216. }
  217. 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
  218. if err != nil {
  219. return wallet, err
  220. }
  221. 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
  222. if err != nil {
  223. return wallet, err
  224. }
  225. return wallet, nil
  226. }
  227. // 更新
  228. func (o *Order) Update(orderId string) (update Order, err error) {
  229. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).First(&update).Error; err != nil {
  230. return
  231. }
  232. //参数1:是要修改的数据
  233. //参数2:是修改的数据
  234. if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).Model(&update).Updates(&o).Error; err != nil {
  235. return
  236. }
  237. return
  238. }
  239. //list 接口使用
  240. func (o *Order) GetOrderList(pageSize int, pageIndex int) ([]Order, int, error) {
  241. var doc []Order
  242. table := orm.Eloquent.Table(o.TableName())
  243. table = table.Where("p_id = ? ", o.PID)
  244. var count int
  245. 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 {
  246. return nil, 0, err
  247. }
  248. table.Count(&count)
  249. return doc, count, nil
  250. }
  251. //list 接口使用
  252. func (o *Order) GetOrderOpenIdList(pageSize int, pageIndex int, status int) ([]Order, int, error) {
  253. var doc []Order
  254. table := orm.Eloquent.Table(o.TableName())
  255. if status == 0 {
  256. table = table.Where("open_id = ? ", o.OpenId)
  257. } else if status == 1 {
  258. table = table.Where("open_id_1 = ? ", o.OpenId)
  259. } else if status == 2 {
  260. table = table.Where("open_id_2 = ? ", o.OpenId)
  261. } else if status == 3 {
  262. } else {
  263. return nil, 0, errors.New("status err")
  264. }
  265. //table = table.Where("open_id = ? ", o.OpenId)
  266. var count int
  267. 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," +
  268. "goods_thumbnail_url,order_group_success_time,amount,amount_1,amount_2,order_sn," +
  269. "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 {
  270. return nil, 0, err
  271. }
  272. table.Count(&count)
  273. return doc, count, nil
  274. }
  275. //list 查询十分钟内的订单并进行计算
  276. func (o *Order) GetOrderInfoList() ([]Order, int, error) {
  277. var doc []Order
  278. table := orm.Eloquent.Table(o.TableName())
  279. table = table.Where("TO_DAYS( NOW( ) ) - TO_DAYS(update_time) >= 1 and order_status = 5")
  280. var count int
  281. if err := table.Select("open_id,p_id,open_id_1,open_id_2").Group("open_id,p_id,open_id_1,open_id_2").Find(&doc).Error; err != nil {
  282. return nil, 0, err
  283. }
  284. table.Count(&count)
  285. return doc, count, nil
  286. }
  287. //计算可以提现金额
  288. func (o *Order) GetAvailableAmount() (Order, error) {
  289. var wallet Order
  290. //收益
  291. err := orm.Eloquent.Select("SUM(amount) as amount").Where("order_status = 5 and open_id = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  292. if err != nil {
  293. return wallet, err
  294. }
  295. err = orm.Eloquent.Select("SUM(amount_1) as amount_1").Where("order_status = 5 and open_id_1 = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  296. if err != nil {
  297. return wallet, err
  298. }
  299. err = orm.Eloquent.Select("SUM(amount_2) as amount_2").Where("order_status = 5 and open_id_2 = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
  300. if err != nil {
  301. return wallet, err
  302. }
  303. return wallet, nil
  304. }