view_data_service.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package service
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "time"
  6. "youngee_b_api/app/vo"
  7. )
  8. type ViewDataService struct{}
  9. func (v ViewDataService) SelectionTalentDataDetail(param *vo.SelectionShowDataParam) (vo.ReSelectionTalentData, error) {
  10. // 设置随机种子
  11. rand.Seed(time.Now().UnixNano())
  12. // 随机生成 AddWindowNum 列表
  13. var rangeLength int64
  14. if param.Type == 1 {
  15. rangeLength = 7
  16. } else if param.Type == 2 {
  17. rangeLength = 30
  18. } else {
  19. rangeLength = 90
  20. }
  21. addWindowNum := make([]int64, rangeLength)
  22. for i := range addWindowNum {
  23. addWindowNum[i] = rand.Int63n(1000) // 随机生成0-999的数
  24. }
  25. // 随机生成 SalesDistribution 和 FansDistribution 列表
  26. salesDistribution := []int64{
  27. rand.Int63n(1000),
  28. rand.Int63n(500),
  29. rand.Int63n(100),
  30. rand.Int63n(50),
  31. rand.Int63n(10),
  32. rand.Int63n(5),
  33. }
  34. fansDistribution := []int64{
  35. rand.Int63n(1000),
  36. rand.Int63n(20),
  37. rand.Int63n(5),
  38. rand.Int63n(3),
  39. }
  40. // 随机生成 RegionRank 列表
  41. regions := []string{"广东", "广西", "海南", "湖南", "浙江", "福建", "河南", "江苏", "四川", "江西"}
  42. regionRank := make([]vo.RankItem, len(regions))
  43. totalPercent := 0.0
  44. for i := 0; i < len(regions)-1; i++ {
  45. percent := rand.Float64() * (1 - totalPercent) / 2 // 确保生成的总和小于 1
  46. totalPercent += percent
  47. regionRank[i] = vo.RankItem{
  48. Region: regions[i],
  49. Percent: percent,
  50. }
  51. }
  52. // 最后一个元素的 Percent 设置为 1 - totalPercent,确保总和小于 1
  53. regionRank[len(regions)-1] = vo.RankItem{
  54. Region: regions[len(regions)-1],
  55. Percent: 1 - totalPercent,
  56. }
  57. reSelectionTalentData := vo.ReSelectionTalentData{
  58. AddWindowNum: addWindowNum,
  59. AvgFanNum: rand.Int63n(10000), // 平均粉丝数
  60. SalesDistribution: salesDistribution,
  61. FansDistribution: fansDistribution,
  62. MaleNum: rand.Int63n(500), // 随机生成男性人数
  63. FemaleNum: rand.Int63n(500), // 随机生成女性人数
  64. RegionRank: regionRank,
  65. }
  66. return reSelectionTalentData, nil
  67. }
  68. func (v ViewDataService) SelectionSampleDataDetail(param *vo.SelectionShowDataParam) (vo.ReSelectionSampleData, error) {
  69. // 设置随机种子
  70. rand.Seed(time.Now().UnixNano())
  71. // 随机生成 AddWindowNum 列表
  72. var rangeLength int64
  73. if param.Type == 1 {
  74. rangeLength = 7
  75. } else if param.Type == 2 {
  76. rangeLength = 30
  77. } else {
  78. rangeLength = 90
  79. }
  80. enrollNum := make([]int64, rangeLength)
  81. for i := range enrollNum {
  82. enrollNum[i] = rand.Int63n(1000) // 随机生成0-999的数
  83. }
  84. // 随机生成 SalesDistribution 和 FansDistribution 列表
  85. salesDistribution := []int64{
  86. rand.Int63n(1000),
  87. rand.Int63n(500),
  88. rand.Int63n(100),
  89. rand.Int63n(50),
  90. rand.Int63n(10),
  91. rand.Int63n(5),
  92. }
  93. fansDistribution := []int64{
  94. rand.Int63n(1000),
  95. rand.Int63n(20),
  96. rand.Int63n(5),
  97. rand.Int63n(3),
  98. }
  99. // 随机生成 RegionRank 列表
  100. regions := []string{"广东", "广西", "海南", "湖南", "浙江", "福建", "河南", "江苏", "四川", "江西"}
  101. regionRank := make([]vo.RankItem, len(regions))
  102. totalPercent := 0.0
  103. for i := 0; i < len(regions)-1; i++ {
  104. percent := rand.Float64() * (1 - totalPercent) / 2 // 确保生成的总和小于 1
  105. totalPercent += percent
  106. regionRank[i] = vo.RankItem{
  107. Region: regions[i],
  108. Percent: percent,
  109. }
  110. }
  111. // 最后一个元素的 Percent 设置为 1 - totalPercent,确保总和小于 1
  112. regionRank[len(regions)-1] = vo.RankItem{
  113. Region: regions[len(regions)-1],
  114. Percent: 1 - totalPercent,
  115. }
  116. reSelectionTalentData := vo.ReSelectionSampleData{
  117. EnrollNum: enrollNum,
  118. AgreeSampleNum: rand.Int63n(10000),
  119. SampledNum: rand.Int63n(1000),
  120. AvgFanNum: rand.Int63n(10000),
  121. SalesDistribution: salesDistribution,
  122. FansDistribution: fansDistribution,
  123. MaleNum: rand.Int63n(500), // 随机生成男性人数
  124. FemaleNum: rand.Int63n(500), // 随机生成女性人数
  125. RegionRank: regionRank,
  126. }
  127. return reSelectionTalentData, nil
  128. }
  129. func (v ViewDataService) SelectionDataDetail(param *vo.SelectionShowDataParam) (vo.ReSelectionData, error) {
  130. // 设置随机种子
  131. rand.Seed(time.Now().UnixNano())
  132. // 随机生成 AddWindowNum 列表
  133. var rangeLength int64
  134. if param.Type == 1 {
  135. rangeLength = 7
  136. } else if param.Type == 2 {
  137. rangeLength = 30
  138. } else {
  139. rangeLength = 90
  140. }
  141. payData := make([]float64, rangeLength)
  142. for i := range payData {
  143. payData[i] = rand.Float64() * 10000
  144. }
  145. estimateData := make([]float64, rangeLength)
  146. for i := range estimateData {
  147. estimateData[i] = rand.Float64() * 10000
  148. }
  149. payOrderNum := make([]int64, rangeLength)
  150. for i := range payOrderNum {
  151. payOrderNum[i] = rand.Int63n(1000)
  152. }
  153. saleOrderNum := make([]int64, rangeLength)
  154. for i := range saleOrderNum {
  155. saleOrderNum[i] = rand.Int63n(1000)
  156. }
  157. // 随机生成 TalentMsgList 数据
  158. totalTalents := rand.Int63n(100) // 假设总共有100个达人
  159. talentMsgList := make([]vo.TalentMsg, 0, param.PageSize)
  160. start := (param.Page - 1) * param.PageSize
  161. end := start + param.PageSize
  162. if end > totalTalents {
  163. end = totalTalents
  164. }
  165. for i := start; i < end; i++ {
  166. talentMsgList = append(talentMsgList, vo.TalentMsg{
  167. PhotoUrl: fmt.Sprintf("https://example.com/photo/%d.jpg", i),
  168. Nickname: fmt.Sprintf("达人%d", i),
  169. Account: fmt.Sprintf("account_%d", i),
  170. OrderNum: rand.Int63n(100),
  171. GMV: rand.Float64() * 10000,
  172. })
  173. }
  174. resultVO := vo.ResultVO{
  175. Page: int(param.Page),
  176. PageSize: int(param.PageSize),
  177. Total: totalTalents,
  178. Data: talentMsgList,
  179. }
  180. reSelectionData := vo.ReSelectionData{
  181. PayData: payData,
  182. EstimateData: estimateData,
  183. ForecastCommission: rand.Float64() * 100000,
  184. PayOrderNum: payOrderNum,
  185. SaleOrderNum: saleOrderNum,
  186. AvgCommissionRate: rand.Float64(),
  187. TalentMsgList: resultVO,
  188. }
  189. return reSelectionData, nil
  190. }