takecash.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package balance_model
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/astaxie/beego"
  6. "github.com/astaxie/beego/orm"
  7. "fohow.com/cache"
  8. )
  9. const (
  10. take_cash_orders_tablename = "take_cash_orders"
  11. ORDER_ID_PREFIX_TX = "TX" //提现
  12. //状态:提现失败(pay_state:0,audit_state:2), 提现中(pay_state:0,audit_state:0,1), 已完成(pay_state:1, audit_state:1)
  13. STATE_CN_REJECTED = "提现失败"
  14. STATE_CN_IN_PROGRESS = "提现中"
  15. STATE_CN_SUCESS = "已完成"
  16. TAKE_CASH_LIMIT = 10 //每天提现次数限制
  17. AUTOTAKE_STATE = int64(1) //自动提现状态
  18. REAL_STATE = int64(0) //强制检验
  19. )
  20. type TakeCashOrder struct {
  21. Id int64 `orm:"column(id);pk" json:"id"` // int(11)
  22. WxUId int64 `orm:"column(wx_uid)" json:"wx_uid"` // int(11)
  23. OrderId string `orm:"column(order_id)" json:"order_id"` // varchar(64)
  24. TradeNo string `orm:"column(trade_no);null" json:"trade_no"` // varchar(64)
  25. Count int64 `orm:"column(count);null" json:"count"` // bigint(20)
  26. Fee int64 `orm:"column(fee);null" json:"fee"` // bigint(20)
  27. State int64 `orm:"column(pay_state);null" json:"pay_state"` // tinyint(1)
  28. RealState int64 `orm:"column(real_state);null" json:"-"` // tinyint(1)
  29. AuditState int64 `orm:"column(audit_state);null" json:"audit_state"` // tinyint(1)
  30. PaiedAt int64 `orm:"column(paied_at);null" json:"paied_at"` // int(11)
  31. Remark string `orm:"column(remark);null" json:"remark"` // varchar(255)
  32. ExpcPayAt time.Time `orm:"column(expc_pay_at);null;auto_now_add;type(datetime)" json:"expc_pay_at"` // datetime
  33. //银行信息
  34. BankName string `orm:"column(bank_name)" json:"bank_name"`
  35. BankAccount string `orm:"column(bank_account)" json:"bank_account"`
  36. AccountName string `orm:"column(account_name)" json:"account_name"`
  37. CreatedAt time.Time `orm:"column(created_at);null;auto_now_add;type(datetime)" json:"created_at"` // datetime
  38. UpdatedAt time.Time `orm:"column(updated_at);null;auto_now;type(datetime)" json:"updated_at"` // datetime
  39. }
  40. func (self *TakeCashOrder) TableName() string {
  41. return take_cash_orders_tablename
  42. }
  43. func (self *TakeCashOrder) Create(wxUId, count int64) (item *TakeCashOrder) {
  44. oId := createOrderId(ORDER_ID_PREFIX_TX)
  45. item = &TakeCashOrder{
  46. Count: count,
  47. WxUId: wxUId,
  48. OrderId: oId,
  49. RealState: REAL_STATE,
  50. }
  51. id, err := orm.NewOrm().Insert(item)
  52. if err != nil {
  53. beego.BeeLogger.Error("Create TakeCashOrder err=[%s]", err)
  54. return nil
  55. }
  56. item.Id = id
  57. return item
  58. }
  59. func (self *TakeCashOrder) Save() error {
  60. if _, err := orm.NewOrm().Update(self); err != nil {
  61. beego.BeeLogger.Error("Save take cash order id=[%d] .err=[%s]", self.Id, err)
  62. return err
  63. }
  64. return nil
  65. }
  66. //状态值中文
  67. func (self *TakeCashOrder) GetStateCn() string {
  68. stateCn := ""
  69. switch self.State {
  70. case 0:
  71. switch self.AuditState {
  72. case 0:
  73. stateCn = STATE_CN_IN_PROGRESS
  74. case 1:
  75. stateCn = STATE_CN_IN_PROGRESS
  76. case 2:
  77. stateCn = STATE_CN_REJECTED
  78. }
  79. case 1:
  80. switch self.AuditState {
  81. case 1:
  82. stateCn = STATE_CN_SUCESS
  83. }
  84. case 2:
  85. stateCn = STATE_CN_REJECTED
  86. }
  87. return stateCn
  88. }
  89. func GetTakeCashOrderByOId(oId string, useCache bool) *TakeCashOrder {
  90. k := fmt.Sprintf("balance_model.GetTakeCashOrderByOId[%s]", oId)
  91. if useCache {
  92. if order, ok := cache.Cache.Get(k).(*TakeCashOrder); ok {
  93. return order
  94. }
  95. }
  96. order := new(TakeCashOrder)
  97. o := orm.NewOrm()
  98. err := o.QueryTable(order).Filter("order_id", oId).Limit(1).One(order)
  99. if err != nil {
  100. beego.Debug("GetOrderByOrderId is not found err=[%s], oId=%s", err, oId)
  101. return nil
  102. } else {
  103. cache.Cache.Put(k, order, 5*time.Minute)
  104. return order
  105. }
  106. }
  107. func GetTakeCashOrderById(id int64, useCache bool) *TakeCashOrder {
  108. k := fmt.Sprintf("balance_model.GetTakeCashOrderById[%d]", id)
  109. if useCache {
  110. if order, ok := cache.Cache.Get(k).(*TakeCashOrder); ok {
  111. return order
  112. }
  113. }
  114. order := new(TakeCashOrder)
  115. o := orm.NewOrm()
  116. err := o.QueryTable(order).Filter("id", id).Limit(1).One(order)
  117. if err != nil {
  118. beego.Debug("GetTakeCashOrderById is not found err=[%s], id=%d", err, id)
  119. return nil
  120. } else {
  121. cache.Cache.Put(k, order, 5*time.Minute)
  122. return order
  123. }
  124. }
  125. //获取某人的提现流列表
  126. func GetTakeCashOrderListByWxUId(wxUId, page, perPage int64, useCache bool) (list []*TakeCashOrder) {
  127. k := fmt.Sprintf("balance_model.GetTakeCashOrderListByWxUId.wxUId(%d).page(%d).perPage(%d)", wxUId, page, perPage)
  128. if useCache {
  129. if s, ok := cache.Cache.Get(k).([]*TakeCashOrder); ok {
  130. return s
  131. }
  132. }
  133. order := new(TakeCashOrder)
  134. qs := orm.NewOrm().QueryTable(order)
  135. qs = qs.Filter("wx_uid", wxUId)
  136. if _, err := qs.OrderBy("-created_at", "-id").
  137. Limit(perPage, (page-1)*perPage).All(&list); err != nil {
  138. beego.BeeLogger.Debug("get GetTakeCashOrderListByWxUId with wxUId=%d, err=[%s]", wxUId, err)
  139. return nil
  140. }
  141. cache.Cache.Put(k, list, 5*time.Minute)
  142. return list
  143. }
  144. //获取某人的提现流列表总条数
  145. func GetTakeCashOrderCountByWxUId(wxUId int64, useCache bool) int64 {
  146. k := fmt.Sprintf("balance_model.GetTakeCashOrderCountByWxUId.wxUId(%d)", wxUId)
  147. if useCache {
  148. if s, ok := cache.Cache.Get(k).(int64); ok {
  149. return s
  150. }
  151. }
  152. item := new(TakeCashOrder)
  153. o := orm.NewOrm()
  154. count, _ := o.QueryTable(item).Filter("wx_uid", wxUId).Count()
  155. if count > 0 {
  156. cache.Cache.Put(k, count, 5*time.Minute)
  157. }
  158. return count
  159. }
  160. func GetTakeCashOrderListByWxUIdAndTime(wxUId int64, now time.Time, useCache bool) (list []*TakeCashOrder) {
  161. k := fmt.Sprintf("balance_model.GetTakeCashOrderListByWxUIdAndTime.wxUId(%d).nowDay(%s)", wxUId, now.Format("2006-01-02"))
  162. if useCache {
  163. if s, ok := cache.Cache.Get(k).([]*TakeCashOrder); ok {
  164. return s
  165. }
  166. }
  167. qs := orm.NewOrm()
  168. sql :=
  169. `
  170. SELECT
  171. *
  172. FROM
  173. take_cash_orders
  174. WHERE
  175. wx_uid = ?
  176. AND DATE_FORMAT(
  177. DATE_ADD(created_at, INTERVAL 8 HOUR),
  178. '%Y-%m-%d'
  179. ) = ?
  180. LIMIT 1;
  181. `
  182. if _, err := qs.Raw(sql, wxUId, now.Format("2006-01-02")).QueryRows(&list); err != nil {
  183. beego.BeeLogger.Debug("get GetTakeCashOrderListByWxUIdAndTime with wxUId=%d, err=[%s]", wxUId, err)
  184. return nil
  185. }
  186. if len(list) > 0 {
  187. cache.Cache.Put(k, list, 5*time.Minute)
  188. }
  189. return list
  190. }
  191. //取正在提现的订单列表
  192. func GetAllTakingCashOrders() (list []*TakeCashOrder) {
  193. sql := fmt.Sprintf("select * from %s where pay_state=? and audit_state=? and expc_pay_at < ?", take_cash_orders_tablename)
  194. if _, err := orm.NewOrm().Raw(sql, 0, 1, time.Now().Add(-8*time.Hour)).QueryRows(&list); err != nil {
  195. return nil
  196. }
  197. return list
  198. }