up_income.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package income
  2. import (
  3. "bytes"
  4. "context"
  5. "strconv"
  6. incomeD "go-common/app/job/main/growup/dao/income"
  7. model "go-common/app/job/main/growup/model/income"
  8. )
  9. // UpIncomeSvr up income service
  10. type UpIncomeSvr struct {
  11. batchSize int
  12. dao *incomeD.Dao
  13. }
  14. // NewUpIncomeSvr new income service
  15. func NewUpIncomeSvr(dao *incomeD.Dao, batchSize int) (svr *UpIncomeSvr) {
  16. return &UpIncomeSvr{
  17. batchSize: batchSize,
  18. dao: dao,
  19. }
  20. }
  21. func (p *UpIncomeSvr) getUpIncomeByDate(c context.Context, upCh chan []*model.UpIncome, date string, limit int) (err error) {
  22. defer close(upCh)
  23. var id int64
  24. for {
  25. var up []*model.UpIncome
  26. up, err = p.dao.GetUpIncomeTable(c, "up_income", date, id, limit)
  27. if err != nil {
  28. return
  29. }
  30. upCh <- up
  31. if len(up) < limit {
  32. break
  33. }
  34. id = up[len(up)-1].ID
  35. }
  36. return
  37. }
  38. // BatchInsertUpIncome insert up_income batch
  39. func (p *UpIncomeSvr) BatchInsertUpIncome(c context.Context, us map[int64]*model.UpIncome) (err error) {
  40. var (
  41. buff = make([]*model.UpIncome, p.batchSize)
  42. buffEnd = 0
  43. )
  44. for _, u := range us {
  45. buff[buffEnd] = u
  46. buffEnd++
  47. if buffEnd >= p.batchSize {
  48. values := upIncomeValues(buff[:buffEnd])
  49. buffEnd = 0
  50. _, err = p.dao.InsertUpIncome(c, values)
  51. if err != nil {
  52. return
  53. }
  54. }
  55. }
  56. if buffEnd > 0 {
  57. values := upIncomeValues(buff[:buffEnd])
  58. buffEnd = 0
  59. _, err = p.dao.InsertUpIncome(c, values)
  60. }
  61. return
  62. }
  63. func upIncomeValues(us []*model.UpIncome) (values string) {
  64. var buf bytes.Buffer
  65. for _, u := range us {
  66. buf.WriteString("(")
  67. buf.WriteString(strconv.FormatInt(u.MID, 10))
  68. buf.WriteByte(',')
  69. buf.WriteString(strconv.FormatInt(u.AvCount, 10))
  70. buf.WriteByte(',')
  71. buf.WriteString(strconv.FormatInt(u.PlayCount, 10))
  72. buf.WriteByte(',')
  73. buf.WriteString(strconv.FormatInt(u.AvIncome, 10))
  74. buf.WriteByte(',')
  75. buf.WriteString(strconv.FormatInt(u.AudioIncome, 10))
  76. buf.WriteByte(',')
  77. buf.WriteString(strconv.FormatInt(u.ColumnCount, 10))
  78. buf.WriteByte(',')
  79. buf.WriteString(strconv.FormatInt(u.ColumnIncome, 10))
  80. buf.WriteByte(',')
  81. buf.WriteString(strconv.FormatInt(u.TaxMoney, 10))
  82. buf.WriteByte(',')
  83. buf.WriteString(strconv.FormatInt(u.Income, 10))
  84. buf.WriteByte(',')
  85. buf.WriteString(strconv.FormatInt(u.TotalIncome, 10))
  86. buf.WriteByte(',')
  87. buf.WriteString(strconv.FormatInt(u.AvBaseIncome, 10))
  88. buf.WriteByte(',')
  89. buf.WriteString(strconv.FormatInt(u.AvTax, 10))
  90. buf.WriteByte(',')
  91. buf.WriteString(strconv.FormatInt(u.ColumnBaseIncome, 10))
  92. buf.WriteByte(',')
  93. buf.WriteString(strconv.FormatInt(u.ColumnTax, 10))
  94. buf.WriteByte(',')
  95. buf.WriteString(strconv.FormatInt(u.BgmBaseIncome, 10))
  96. buf.WriteByte(',')
  97. buf.WriteString(strconv.FormatInt(u.BgmTax, 10))
  98. buf.WriteByte(',')
  99. buf.WriteString("'" + u.Date.Time().Format(_layout) + "'")
  100. buf.WriteByte(',')
  101. buf.WriteString(strconv.FormatInt(u.BaseIncome, 10))
  102. buf.WriteByte(',')
  103. buf.WriteString(strconv.FormatInt(u.BgmIncome, 10))
  104. buf.WriteByte(',')
  105. buf.WriteString(strconv.FormatInt(u.BgmCount, 10))
  106. buf.WriteByte(',')
  107. buf.WriteString(strconv.FormatInt(u.AvTotalIncome, 10))
  108. buf.WriteByte(',')
  109. buf.WriteString(strconv.FormatInt(u.ColumnTotalIncome, 10))
  110. buf.WriteByte(',')
  111. buf.WriteString(strconv.FormatInt(u.BgmTotalIncome, 10))
  112. buf.WriteString(")")
  113. buf.WriteByte(',')
  114. }
  115. if buf.Len() > 0 {
  116. buf.Truncate(buf.Len() - 1)
  117. }
  118. values = buf.String()
  119. buf.Reset()
  120. return
  121. }
  122. ///************************************************************ FOR HISTORY ****************************************************************/
  123. //
  124. //// UpdateBusinessIncomeByDate update business income by date
  125. //func (p *UpIncomeSvr) UpdateBusinessIncomeByDate(c context.Context, date string, ustat map[int64]*model.UpIncomeStat) (err error) {
  126. // us, err := p.businessTotalIncome(c, ustat, date)
  127. // if err != nil {
  128. // return
  129. // }
  130. // err = p.batchUpdateUpIncome(c, us)
  131. // if err != nil {
  132. // return
  133. // }
  134. // return p.batchUpdateUpIncomeStat(c, ustat)
  135. //}
  136. //
  137. //// for history data m: map[mid]map[date]*model.UpIncome
  138. //func (p *UpIncomeSvr) businessTotalIncome(c context.Context, ustat map[int64]*model.UpIncomeStat, date string) (m []*model.UpIncome, err error) {
  139. // var id int64
  140. // for {
  141. // var ups []*model.UpIncome
  142. // ups, err = p.dao.GetUpIncomeTable(c, "up_income", date, id, 2000)
  143. // if err != nil {
  144. // return
  145. // }
  146. // for _, up := range ups {
  147. // ut := ustat[up.MID]
  148. //
  149. // ut.AvTotalIncome += up.AvIncome
  150. // up.AvTotalIncome = ut.AvTotalIncome
  151. //
  152. // ut.ColumnTotalIncome += up.ColumnIncome
  153. // up.ColumnTotalIncome = ut.ColumnTotalIncome
  154. //
  155. // ut.BgmTotalIncome += up.BgmIncome
  156. // up.BgmTotalIncome = ut.BgmTotalIncome
  157. // m = append(m, up)
  158. // }
  159. // if len(ups) < 2000 {
  160. // break
  161. // }
  162. // id = ups[len(ups)-1].ID
  163. // }
  164. // return
  165. //}
  166. //
  167. //// BatchUpdateUpIncome insert up_income batch
  168. //func (p *UpIncomeSvr) batchUpdateUpIncome(c context.Context, us []*model.UpIncome) (err error) {
  169. // var (
  170. // buff = make([]*model.UpIncome, p.batchSize)
  171. // buffEnd = 0
  172. // )
  173. //
  174. // for _, u := range us {
  175. // buff[buffEnd] = u
  176. // buffEnd++
  177. //
  178. // if buffEnd >= p.batchSize {
  179. // values := businessValues(buff[:buffEnd])
  180. // buffEnd = 0
  181. // _, err = p.dao.FixInsertUpIncome(c, values)
  182. // if err != nil {
  183. // return
  184. // }
  185. // }
  186. // }
  187. // if buffEnd > 0 {
  188. // values := businessValues(buff[:buffEnd])
  189. // buffEnd = 0
  190. // _, err = p.dao.FixInsertUpIncome(c, values)
  191. // }
  192. // return
  193. //}
  194. //
  195. //func businessValues(us []*model.UpIncome) (values string) {
  196. // var buf bytes.Buffer
  197. // for _, u := range us {
  198. // buf.WriteString("(")
  199. // buf.WriteString(strconv.FormatInt(u.MID, 10))
  200. // buf.WriteByte(',')
  201. // buf.WriteString(strconv.FormatInt(u.AvTotalIncome, 10))
  202. // buf.WriteByte(',')
  203. // buf.WriteString(strconv.FormatInt(u.ColumnTotalIncome, 10))
  204. // buf.WriteByte(',')
  205. // buf.WriteString(strconv.FormatInt(u.BgmTotalIncome, 10))
  206. // buf.WriteByte(',')
  207. // buf.WriteString("'" + u.Date.Time().Format(_layout) + "'")
  208. // buf.WriteString(")")
  209. // buf.WriteByte(',')
  210. // }
  211. // if buf.Len() > 0 {
  212. // buf.Truncate(buf.Len() - 1)
  213. // }
  214. // values = buf.String()
  215. // buf.Reset()
  216. // return
  217. //}
  218. //
  219. //// BatchUpdateUpIncome insert up_income batch
  220. //func (p *UpIncomeSvr) batchUpdateUpIncomeStat(c context.Context, us map[int64]*model.UpIncomeStat) (err error) {
  221. // var (
  222. // buff = make([]*model.UpIncomeStat, p.batchSize)
  223. // buffEnd = 0
  224. // )
  225. //
  226. // for _, u := range us {
  227. // buff[buffEnd] = u
  228. // buffEnd++
  229. //
  230. // if buffEnd >= p.batchSize {
  231. // values := businessStatValues(buff[:buffEnd])
  232. // buffEnd = 0
  233. // _, err = p.dao.FixInsertUpIncomeStat(c, values)
  234. // if err != nil {
  235. // return
  236. // }
  237. // }
  238. // }
  239. // if buffEnd > 0 {
  240. // values := businessStatValues(buff[:buffEnd])
  241. // buffEnd = 0
  242. // _, err = p.dao.FixInsertUpIncomeStat(c, values)
  243. // }
  244. // return
  245. //}
  246. //
  247. //func businessStatValues(ustat []*model.UpIncomeStat) (values string) {
  248. // var buf bytes.Buffer
  249. // for _, u := range ustat {
  250. // buf.WriteString("(")
  251. // buf.WriteString(strconv.FormatInt(u.MID, 10))
  252. // buf.WriteByte(',')
  253. // buf.WriteString(strconv.FormatInt(u.AvTotalIncome, 10))
  254. // buf.WriteByte(',')
  255. // buf.WriteString(strconv.FormatInt(u.ColumnTotalIncome, 10))
  256. // buf.WriteByte(',')
  257. // buf.WriteString(strconv.FormatInt(u.BgmTotalIncome, 10))
  258. // buf.WriteString(")")
  259. // buf.WriteByte(',')
  260. // }
  261. // if buf.Len() > 0 {
  262. // buf.Truncate(buf.Len() - 1)
  263. // }
  264. // values = buf.String()
  265. // buf.Reset()
  266. // return
  267. //}