BrowseHistory.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package youngee_talent_service
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/frame/g"
  5. "github.com/gogf/gf/net/ghttp"
  6. "github.com/gogf/gf/util/gconv"
  7. "strings"
  8. "youngmini_server/app/model/youngee_talent_model"
  9. "youngmini_server/app/utils"
  10. )
  11. // 存储每个日期和对应的种草列表
  12. type BrowseProjectHistory struct {
  13. Date string `json:"date"`
  14. ProjectList []youngee_talent_model.ProjectDetail `json:"projectList"`
  15. }
  16. // 存储每个日期和对应的带货列表
  17. type BrowseSelectionHistory struct {
  18. Date string `json:"date"`
  19. SelectionList []youngee_talent_model.SelectionDetail `json:"selectionList"`
  20. }
  21. // 存储每个日期和对应的本地生活列表
  22. type BrowseLocalHistory struct {
  23. Date string `json:"date"`
  24. LocalList []youngee_talent_model.LocalInfoDetail `json:"localList"`
  25. }
  26. func GetLocalBrowseHistory(r *ghttp.Request) *TalentHttpResult {
  27. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  28. if err != nil {
  29. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  30. }
  31. // 获取所有相关的 Redis Key
  32. redisKeyPattern := fmt.Sprintf("browseLocal:*:%s", tid)
  33. keys, err := g.Redis().DoVar("KEYS", redisKeyPattern)
  34. if err != nil {
  35. fmt.Println("Get redis keys error", err)
  36. }
  37. // 初始化返回的数据
  38. var browseLocalHistories []BrowseLocalHistory
  39. // 遍历所有的日期 Key
  40. for _, key := range keys.Slice() {
  41. // 获取日期部分
  42. keyStr := gconv.String(key)
  43. date := strings.Split(keyStr, ":")[1]
  44. // 获取该日期下的所有 pid
  45. localIds, err := g.Redis().DoVar("SMEMBERS", keyStr)
  46. if err != nil {
  47. println("Get redis keys error", err)
  48. }
  49. // 使用 localIds 查询数据库,获取商品列表
  50. var localList []youngee_talent_model.LocalInfoDetail
  51. err = g.DB().Model("project_info").WithAll().Where("local_id IN(?)", localIds.Strings()).Scan(&localList)
  52. if err != nil {
  53. println("Get redis projects error", err)
  54. }
  55. // 构建 BrowseHistory 对象
  56. browseLocalHistory := BrowseLocalHistory{
  57. Date: date,
  58. LocalList: localList,
  59. }
  60. // 添加到结果列表中
  61. browseLocalHistories = append(browseLocalHistories, browseLocalHistory)
  62. }
  63. return &TalentHttpResult{Code: 0, Msg: "success", Data: browseLocalHistories}
  64. }
  65. func GetProjectBrowseHistory(r *ghttp.Request) *TalentHttpResult {
  66. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  67. if err != nil {
  68. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  69. }
  70. // 获取所有相关的 Redis Key
  71. redisKeyPattern := fmt.Sprintf("browseProject:*:%s", tid)
  72. //获取存储了pid和sPid的所有key
  73. keys, err := g.Redis().DoVar("KEYS", redisKeyPattern)
  74. if err != nil {
  75. fmt.Println("Get redis keys error", err)
  76. }
  77. // 初始化返回的数据
  78. var browseProjectHistories []BrowseProjectHistory
  79. // 遍历所有的日期 Key
  80. for _, key := range keys.Slice() {
  81. // 获取日期部分
  82. keyStr := gconv.String(key)
  83. date := strings.Split(keyStr, ":")[1]
  84. // 获取该日期下的所有 pid:s_project_id 组合
  85. browseItems, err := g.Redis().DoVar("SMEMBERS", keyStr)
  86. if err != nil {
  87. println("Get redis keys error", err)
  88. continue
  89. }
  90. // 准备存放项目详细信息的列表
  91. var projectList []youngee_talent_model.ProjectDetail
  92. // 遍历每个 pid:s_project_id 组合
  93. for _, item := range browseItems.Strings() {
  94. parts := strings.Split(item, ":")
  95. if len(parts) < 2 {
  96. println("Invalid format for browse item:", item)
  97. continue
  98. }
  99. pid := parts[0]
  100. s_project_id := gconv.Int(parts[1])
  101. // 查询项目详情(`project_info` 表中的基础信息)
  102. var projectDetail youngee_talent_model.ProjectDetail
  103. err = g.DB().Model("project_info").WithAll().Where("project_id = ?", pid).Scan(&projectDetail)
  104. if err != nil {
  105. println("Get project detail error", err)
  106. continue
  107. }
  108. // 判断 `s_project_id` 是否为 0,若不为 0,表示来自服务商
  109. if s_project_id != 0 {
  110. // 查询 `project_info_supplier` 表获取服务商信息
  111. projectInfoSupplier := youngee_talent_model.ProjectInfoSupplier{}
  112. err = g.DB().Model("younggee_s_project_info").Where("s_project_id = ?", s_project_id).Scan(&projectInfoSupplier)
  113. if err != nil {
  114. println("Get projectInfoSupplier error:", err)
  115. continue
  116. }
  117. // 根据供应商 ID 查询 `younggee_supplier` 表获取供应商详细信息
  118. var younggeeSupplier *youngee_talent_model.YounggeeSupplier
  119. err = g.DB().Model("younggee_supplier").WithAll().Where("supplier_id", projectInfoSupplier.SupplierID).Scan(&younggeeSupplier)
  120. if err != nil {
  121. println("Get younggeeSupplier error:", err)
  122. continue
  123. }
  124. // 将供应商信息和项目供应商信息赋值给项目详情
  125. projectDetail.YounggeeSupplier = younggeeSupplier
  126. projectDetail.ProjectInfoSupplier = &projectInfoSupplier
  127. }
  128. // 将项目详情添加到项目列表
  129. projectList = append(projectList, projectDetail)
  130. }
  131. // 构建 BrowseHistory 对象
  132. browseProjectHistory := BrowseProjectHistory{
  133. Date: date,
  134. ProjectList: projectList,
  135. }
  136. // 添加到结果列表中
  137. browseProjectHistories = append(browseProjectHistories, browseProjectHistory)
  138. }
  139. return &TalentHttpResult{Code: 0, Msg: "success", Data: browseProjectHistories}
  140. }
  141. // 获取带货浏览记录
  142. func GetSelectionBrowseHistory(r *ghttp.Request) *TalentHttpResult {
  143. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  144. if err != nil {
  145. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  146. }
  147. // 获取所有相关的 Redis Key
  148. redisKeyPattern := fmt.Sprintf("browseSelection:*:%s", tid)
  149. //返回该达人所有day的key
  150. keys, err := g.Redis().DoVar("KEYS", redisKeyPattern)
  151. if err != nil {
  152. fmt.Println("Get redis keys error", err)
  153. }
  154. // 初始化返回的数据
  155. var browseSelectionHistories []BrowseSelectionHistory
  156. // 遍历所有的日期 Key
  157. for _, key := range keys.Slice() {
  158. // 获取日期部分
  159. keyStr := gconv.String(key)
  160. date := strings.Split(keyStr, ":")[1]
  161. // 获取该日期下的所有 pid
  162. selctionIds, err := g.Redis().DoVar("SMEMBERS", keyStr)
  163. if err != nil {
  164. println("Get redis keys error", err)
  165. }
  166. // 使用 pids 查询数据库,获取商品列表
  167. var selectionList []youngee_talent_model.SelectionDetail
  168. err = g.DB().Model("younggee_selection_info").WithAll().Where("selection_id IN(?)", selctionIds.Strings()).Scan(&selectionList)
  169. if err != nil {
  170. println("Get redis selections error", err)
  171. }
  172. // 构建 BrowseHistory 对象
  173. browseSelectionHistory := BrowseSelectionHistory{
  174. Date: date,
  175. SelectionList: selectionList,
  176. }
  177. // 添加到结果列表中
  178. browseSelectionHistories = append(browseSelectionHistories, browseSelectionHistory)
  179. }
  180. return &TalentHttpResult{Code: 0, Msg: "success", Data: browseSelectionHistories}
  181. }