data.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package dao
  2. import (
  3. "context"
  4. "fmt"
  5. "go-common/library/database/sql"
  6. "go-common/library/xstr"
  7. "go-common/app/job/main/growup/model"
  8. )
  9. const (
  10. _avIDs = "SELECT av_id,mid,tag_id,income,tax_money FROM av_income WHERE date=? AND mid=?"
  11. _avCharges = "SELECT av_id,inc_charge FROM av_daily_charge_04 WHERE av_id IN (%s) AND date=?"
  12. _upChargeRatio = "SELECT mid,ratio FROM up_charge_ratio WHERE tag_id = ?"
  13. _upIncomeStatis = "SELECT mid,total_income FROM up_income_statis WHERE mid in (%s)"
  14. _upIncomeDate = "SELECT mid, income FROM %s WHERE date = ? AND mid in (%s)"
  15. _upIncome = "SELECT id,mid,date,base_income FROM %s WHERE id > ? ORDER BY id LIMIT ?"
  16. _inUpIncome = "INSERT INTO %s(mid,date,av_base_income) VALUES %s ON DUPLICATE KEY UPDATE av_base_income=VALUES(av_base_income)"
  17. _creditScoreSQL = "SELECT id,mid,credit_score FROM up_info_%s WHERE id > ? ORDER BY id LIMIT ?"
  18. _inCreditScoreSQL = "INSERT INTO credit_score(mid,score) VALUES %s ON DUPLICATE KEY UPDATE score=VALUES(score)"
  19. _bgmIncome = "SELECT sid,income FROM bgm_income"
  20. _bgmIncomeStatis = "INSERT INTO bgm_income_statis(sid,total_income) VALUES(?,?)"
  21. )
  22. // InsertBGMIncomeStatis fix bgm income statis
  23. func (d *Dao) InsertBGMIncomeStatis(c context.Context, sid int64, income int64) (rows int64, err error) {
  24. res, err := d.db.Exec(c, _bgmIncomeStatis, sid, income)
  25. if err != nil {
  26. return
  27. }
  28. return res.RowsAffected()
  29. }
  30. // GetBGMIncome map[sid]totalIncome
  31. func (d *Dao) GetBGMIncome(c context.Context) (statis map[int64]int64, err error) {
  32. rows, err := d.db.Query(c, _bgmIncome)
  33. if err != nil {
  34. return
  35. }
  36. statis = make(map[int64]int64)
  37. defer rows.Close()
  38. for rows.Next() {
  39. var sid, income int64
  40. err = rows.Scan(&sid, &income)
  41. if err != nil {
  42. return
  43. }
  44. if _, ok := statis[sid]; ok {
  45. statis[sid] += income
  46. } else {
  47. statis[sid] = income
  48. }
  49. }
  50. return
  51. }
  52. // GetCreditScore get credit scores
  53. func (d *Dao) GetCreditScore(c context.Context, table string, id int64, limit int64) (scores map[int64]int, last int64, err error) {
  54. rows, err := d.db.Query(c, fmt.Sprintf(_creditScoreSQL, table), id, limit)
  55. if err != nil {
  56. return
  57. }
  58. scores = make(map[int64]int)
  59. defer rows.Close()
  60. for rows.Next() {
  61. var mid int64
  62. var score int
  63. err = rows.Scan(&last, &mid, &score)
  64. if err != nil {
  65. return
  66. }
  67. scores[mid] = score
  68. }
  69. return
  70. }
  71. // SyncCreditScore sync credit score
  72. func (d *Dao) SyncCreditScore(c context.Context, values string) (rows int64, err error) {
  73. res, err := d.db.Exec(c, fmt.Sprintf(_inCreditScoreSQL, values))
  74. if err != nil {
  75. return
  76. }
  77. return res.RowsAffected()
  78. }
  79. // GetAvBaseIncome get up av baseincome
  80. func (d *Dao) GetAvBaseIncome(c context.Context, table string, id, limit int64) (abs []*model.AvBaseIncome, last int64, err error) {
  81. rows, err := d.db.Query(c, fmt.Sprintf(_upIncome, table), id, limit)
  82. if err != nil {
  83. return
  84. }
  85. defer rows.Close()
  86. for rows.Next() {
  87. ab := &model.AvBaseIncome{}
  88. err = rows.Scan(&last, &ab.MID, &ab.Date, &ab.AvBaseIncome)
  89. if err != nil {
  90. return
  91. }
  92. abs = append(abs, ab)
  93. }
  94. return
  95. }
  96. // BatchUpdateUpIncome batch update av_base_income
  97. func (d *Dao) BatchUpdateUpIncome(c context.Context, table, values string) (rows int64, err error) {
  98. res, err := d.db.Exec(c, fmt.Sprintf(_inUpIncome, table, values))
  99. if err != nil {
  100. return
  101. }
  102. return res.RowsAffected()
  103. }
  104. // GetAvs avs map[av_id]*model.Av
  105. func (d *Dao) GetAvs(c context.Context, date string, mid int64) (avs map[int64]*model.Av, err error) {
  106. rows, err := d.db.Query(c, _avIDs, date, mid)
  107. if err != nil {
  108. return
  109. }
  110. avs = make(map[int64]*model.Av)
  111. defer rows.Close()
  112. for rows.Next() {
  113. av := &model.Av{}
  114. err = rows.Scan(&av.AvID, &av.MID, &av.TagID, &av.Income, &av.TaxMoney)
  115. if err != nil {
  116. return
  117. }
  118. avs[av.AvID] = av
  119. }
  120. return
  121. }
  122. // GetAvCharges get av charges
  123. func (d *Dao) GetAvCharges(c context.Context, avIds []int64, date string) (charges map[int64]int64, err error) {
  124. rows, err := d.db.Query(c, fmt.Sprintf(_avCharges, xstr.JoinInts(avIds)), date)
  125. if err != nil {
  126. return
  127. }
  128. charges = make(map[int64]int64)
  129. defer rows.Close()
  130. for rows.Next() {
  131. var avID, charge int64
  132. err = rows.Scan(&avID, &charge)
  133. if err != nil {
  134. return
  135. }
  136. charges[avID] = charge
  137. }
  138. return
  139. }
  140. // GetUpChargeRatio get up_charge_ratio
  141. func (d *Dao) GetUpChargeRatio(c context.Context, tagID int64) (ups map[int64]int64, err error) {
  142. rows, err := d.db.Query(c, _upChargeRatio, tagID)
  143. if err != nil {
  144. return
  145. }
  146. defer rows.Close()
  147. ups = make(map[int64]int64)
  148. for rows.Next() {
  149. var mid, ratio int64
  150. err = rows.Scan(&mid, &ratio)
  151. if err != nil {
  152. return
  153. }
  154. ups[mid] = ratio
  155. }
  156. return
  157. }
  158. // GetUpIncomeStatis get up_income_statis
  159. func (d *Dao) GetUpIncomeStatis(c context.Context, mids []int64) (ups map[int64]int64, err error) {
  160. rows, err := d.db.Query(c, fmt.Sprintf(_upIncomeStatis, xstr.JoinInts(mids)))
  161. if err != nil {
  162. return
  163. }
  164. defer rows.Close()
  165. ups = make(map[int64]int64)
  166. for rows.Next() {
  167. var mid, income int64
  168. err = rows.Scan(&mid, &income)
  169. if err != nil {
  170. return
  171. }
  172. ups[mid] = income
  173. }
  174. return
  175. }
  176. // GetUpIncomeDate get up_income by date
  177. func (d *Dao) GetUpIncomeDate(c context.Context, mids []int64, table, date string) (ups map[int64]int64, err error) {
  178. rows, err := d.db.Query(c, fmt.Sprintf(_upIncomeDate, table, xstr.JoinInts(mids)), date)
  179. if err != nil {
  180. return
  181. }
  182. defer rows.Close()
  183. ups = make(map[int64]int64)
  184. for rows.Next() {
  185. var mid, income int64
  186. err = rows.Scan(&mid, &income)
  187. if err != nil {
  188. return
  189. }
  190. ups[mid] = income
  191. }
  192. return
  193. }
  194. // UpdateDate update date
  195. func (d *Dao) UpdateDate(tx *sql.Tx, stmt string) (count int64, err error) {
  196. res, err := tx.Exec(stmt)
  197. if err != nil {
  198. return
  199. }
  200. return res.RowsAffected()
  201. }