order.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_cygx/models/order"
  8. "hongze/hongze_cygx/utils"
  9. "time"
  10. )
  11. // CancelCygxOrder 关闭到期个人用户研选权限
  12. func CancelCygxOrder(cont context.Context) (err error) {
  13. defer func() {
  14. if err != nil {
  15. fmt.Println(err)
  16. go utils.SendAlarmMsg(fmt.Sprint("自动取消十分钟之内没有付款的的订单 CancelCygxOrder ,err:", err.Error()), 2)
  17. }
  18. }()
  19. var condition string
  20. var pars []interface{}
  21. endTime := time.Now().Add(-10 * time.Minute)
  22. condition = ` AND order_status = 1 AND create_time < ? `
  23. pars = append(pars, endTime)
  24. orderList, e := order.GetCygxOrderList(condition, pars, 0, 999)
  25. if e != nil && e.Error() != utils.ErrNoRow() {
  26. err = errors.New("GetCygxOrderList, Err: " + e.Error())
  27. return
  28. }
  29. fmt.Println(len(orderList))
  30. if len(orderList) == 0 {
  31. return
  32. }
  33. //订单量不大,先这么写吧
  34. for _, v := range orderList {
  35. fmt.Println(v.OrderCode)
  36. e = order.CancelCygxOrder(v)
  37. if e != nil && e.Error() != utils.ErrNoRow() {
  38. err = errors.New("CancelCygxOrder, Err: " + e.Error())
  39. return
  40. }
  41. }
  42. return
  43. }
  44. // GetQueryOrderByOutTradeNoTask 定时任务主动获取订单支付状态
  45. func GetQueryOrderByOutTradeNoTask(cont context.Context) (err error) {
  46. defer func() {
  47. if err != nil {
  48. fmt.Println(err)
  49. go utils.SendAlarmMsg(fmt.Sprint("自动取消十分钟之内没有付款的的订单 CancelCygxOrder ,err:", err.Error()), 2)
  50. }
  51. }()
  52. var condition string
  53. var pars []interface{}
  54. endTime := time.Now().Add(-10 * time.Minute)
  55. condition = ` AND order_status = 1 AND create_time > ? ` //获取十分钟之内待支付的订单
  56. pars = append(pars, endTime)
  57. orderList, e := order.GetCygxOrderList(condition, pars, 0, 999)
  58. if e != nil && e.Error() != utils.ErrNoRow() {
  59. err = errors.New("GetCygxOrderList, Err: " + e.Error())
  60. return
  61. }
  62. fmt.Println(len(orderList))
  63. if len(orderList) == 0 {
  64. return
  65. }
  66. //订单量不大,先这么写吧
  67. for _, v := range orderList {
  68. tradeState, statusCode, itemResp := GetQueryOrderByOutTradeNo(v.OrderCode)
  69. if tradeState == "SUCCESS" && statusCode == 200 {
  70. go HandleOrderHandle(itemResp)
  71. }
  72. }
  73. return
  74. }
  75. // 手动处理支付订单回调
  76. func HandleOrderHandle(itemCallback *Transaction) {
  77. var err error
  78. defer func() {
  79. if err != nil {
  80. fmt.Println(err)
  81. go utils.SendAlarmMsg(fmt.Sprint("手动处理支付订单回调失败 HandleOrderHandle, err:", err.Error()), 2)
  82. }
  83. }()
  84. outTradeNo := itemCallback.OutTradeNo
  85. orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo)
  86. if e != nil {
  87. err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error())
  88. return
  89. }
  90. go AddCygxOrderPayment(itemCallback) // 记录支付交易信息
  91. if itemCallback.TradeState != "SUCCESS" { // 回调显示支付不成功,模版消息推送
  92. if e != nil {
  93. err = errors.New("支付失败, OrderCode: " + outTradeNo)
  94. return
  95. }
  96. }
  97. //修改过状态的不再二次处理
  98. if orderDetail.OrderStatus == 2 {
  99. return
  100. }
  101. itemOrder := new(order.CygxOrder)
  102. itemOrder.OrderCode = itemCallback.OutTradeNo
  103. itemOrder.PayTime = itemCallback.SuccessTime
  104. itemOrder.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  105. itemOrder.OrderStatus = 2
  106. itemOrder.OutTradeCode = itemCallback.TransactionId
  107. //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"`
  108. if orderDetail.OrderType == 1 {
  109. itemUserCard := new(order.CygxOrderUserCard)
  110. itemUserCard.OrderCode = orderDetail.OrderCode
  111. itemUserCard.UserId = orderDetail.UserId
  112. itemUserCard.Mobile = orderDetail.Mobile
  113. itemUserCard.Email = orderDetail.Email
  114. itemUserCard.CompanyId = orderDetail.CompanyId
  115. itemUserCard.CompanyName = orderDetail.CompanyName
  116. itemUserCard.RealName = orderDetail.RealName
  117. itemUserCard.SellerName = orderDetail.SellerName
  118. itemUserCard.CreateTime = time.Now()
  119. itemUserCard.ModifyTime = time.Now()
  120. itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform
  121. if orderDetail.GoodsId == 1 {
  122. itemUserCard.StartDate = itemOrder.PayTime
  123. itemUserCard.EndDate = itemOrder.PayTime.AddDate(0, 0, 1)
  124. itemUserCard.CardType = "日卡"
  125. } else {
  126. now := time.Now()
  127. itemUserCard.StartDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
  128. itemUserCard.EndDate = itemUserCard.StartDate.AddDate(0, 1, 0)
  129. itemUserCard.CardType = "月卡"
  130. }
  131. e = order.AddCygxOrderUserCard(itemUserCard, itemOrder)
  132. if e != nil {
  133. err = errors.New("AddCygxOrderUserCard, Err: " + e.Error())
  134. return
  135. }
  136. } else if orderDetail.OrderType == 2 {
  137. //如果是活动,把单场付费信息的活动写入 用户虚拟资产表
  138. itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
  139. itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode
  140. itemOrderVirtualAsset.UserId = orderDetail.UserId
  141. itemOrderVirtualAsset.Mobile = orderDetail.Mobile
  142. itemOrderVirtualAsset.Email = orderDetail.Email
  143. itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId
  144. itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName
  145. itemOrderVirtualAsset.RealName = orderDetail.RealName
  146. itemOrderVirtualAsset.SellerName = orderDetail.SellerName
  147. itemOrderVirtualAsset.Source = orderDetail.Source
  148. itemOrderVirtualAsset.SourceId = orderDetail.SourceId
  149. itemOrderVirtualAsset.CreateTime = time.Now()
  150. itemOrderVirtualAsset.ModifyTime = time.Now()
  151. e = order.AddCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder)
  152. if e != nil {
  153. err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error())
  154. return
  155. }
  156. }
  157. return
  158. }
  159. func AddCygxOrderPayment(itemCallback *Transaction) {
  160. var err error
  161. defer func() {
  162. if err != nil {
  163. fmt.Println(err)
  164. go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2)
  165. }
  166. }()
  167. itemPay := new(order.CygxOrderPayment)
  168. itemPay.OrderCode = itemCallback.OutTradeNo
  169. itemPay.OutTradeCode = itemCallback.TransactionId
  170. itemPay.PayBody = itemCallback.TradeStateDesc
  171. jsonData, _ := json.Marshal(itemCallback)
  172. itemPay.PayDetail = string(jsonData)
  173. itemPay.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  174. itemPay.PayStatus = itemCallback.TradeState
  175. itemPay.CreateTime = time.Now()
  176. itemPay.PaymentType = 1
  177. e := order.AddCygxOrderPayment(itemPay)
  178. if e != nil {
  179. err = errors.New("AddCygxOrderPayment, Err: " + e.Error())
  180. return
  181. }
  182. return
  183. }