package youngee_talent_service import ( "fmt" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" "github.com/gogf/gf/util/gconv" "strings" "youngmini_server/app/model/youngee_talent_model" "youngmini_server/app/utils" ) // 存储每个日期和对应的种草列表 type BrowseProjectHistory struct { Date string `json:"date"` ProjectList []youngee_talent_model.ProjectDetail `json:"projectList"` } // 存储每个日期和对应的带货列表 type BrowseSelectionHistory struct { Date string `json:"date"` SelectionList []youngee_talent_model.SelectionDetail `json:"selectionList"` } // 存储每个日期和对应的本地生活列表 type BrowseLocalHistory struct { Date string `json:"date"` LocalList []youngee_talent_model.LocalInfoDetail `json:"localList"` } func GetLocalBrowseHistory(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } // 获取所有相关的 Redis Key redisKeyPattern := fmt.Sprintf("browseLocal:*:%s", tid) keys, err := g.Redis().DoVar("KEYS", redisKeyPattern) if err != nil { fmt.Println("Get redis keys error", err) } // 初始化返回的数据 var browseLocalHistories []BrowseLocalHistory // 遍历所有的日期 Key for _, key := range keys.Slice() { // 获取日期部分 keyStr := gconv.String(key) date := strings.Split(keyStr, ":")[1] // 获取该日期下的所有 pid localIds, err := g.Redis().DoVar("SMEMBERS", keyStr) if err != nil { println("Get redis keys error", err) } // 使用 localIds 查询数据库,获取商品列表 var localList []youngee_talent_model.LocalInfoDetail err = g.DB().Model("project_info").WithAll().Where("local_id IN(?)", localIds.Strings()).Scan(&localList) if err != nil { println("Get redis projects error", err) } // 构建 BrowseHistory 对象 browseLocalHistory := BrowseLocalHistory{ Date: date, LocalList: localList, } // 添加到结果列表中 browseLocalHistories = append(browseLocalHistories, browseLocalHistory) } return &TalentHttpResult{Code: 0, Msg: "success", Data: browseLocalHistories} } func GetProjectBrowseHistory(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } // 获取所有相关的 Redis Key redisKeyPattern := fmt.Sprintf("browseProject:*:%s", tid) //获取存储了pid和sPid的所有key keys, err := g.Redis().DoVar("KEYS", redisKeyPattern) if err != nil { fmt.Println("Get redis keys error", err) } // 初始化返回的数据 var browseProjectHistories []BrowseProjectHistory // 遍历所有的日期 Key for _, key := range keys.Slice() { // 获取日期部分 keyStr := gconv.String(key) date := strings.Split(keyStr, ":")[1] // 获取该日期下的所有 pid:s_project_id 组合 browseItems, err := g.Redis().DoVar("SMEMBERS", keyStr) if err != nil { println("Get redis keys error", err) continue } // 准备存放项目详细信息的列表 var projectList []youngee_talent_model.ProjectDetail // 遍历每个 pid:s_project_id 组合 for _, item := range browseItems.Strings() { parts := strings.Split(item, ":") if len(parts) < 2 { println("Invalid format for browse item:", item) continue } pid := parts[0] s_project_id := gconv.Int(parts[1]) // 查询项目详情(`project_info` 表中的基础信息) var projectDetail youngee_talent_model.ProjectDetail err = g.DB().Model("project_info").WithAll().Where("project_id = ?", pid).Scan(&projectDetail) if err != nil { println("Get project detail error", err) continue } // 判断 `s_project_id` 是否为 0,若不为 0,表示来自服务商 if s_project_id != 0 { // 查询 `project_info_supplier` 表获取服务商信息 projectInfoSupplier := youngee_talent_model.ProjectInfoSupplier{} err = g.DB().Model("younggee_s_project_info").Where("s_project_id = ?", s_project_id).Scan(&projectInfoSupplier) if err != nil { println("Get projectInfoSupplier error:", err) continue } // 根据供应商 ID 查询 `younggee_supplier` 表获取供应商详细信息 var younggeeSupplier *youngee_talent_model.YounggeeSupplier err = g.DB().Model("younggee_supplier").WithAll().Where("supplier_id", projectInfoSupplier.SupplierID).Scan(&younggeeSupplier) if err != nil { println("Get younggeeSupplier error:", err) continue } // 将供应商信息和项目供应商信息赋值给项目详情 projectDetail.YounggeeSupplier = younggeeSupplier projectDetail.ProjectInfoSupplier = &projectInfoSupplier } // 将项目详情添加到项目列表 projectList = append(projectList, projectDetail) } // 构建 BrowseHistory 对象 browseProjectHistory := BrowseProjectHistory{ Date: date, ProjectList: projectList, } // 添加到结果列表中 browseProjectHistories = append(browseProjectHistories, browseProjectHistory) } return &TalentHttpResult{Code: 0, Msg: "success", Data: browseProjectHistories} } // 获取带货浏览记录 func GetSelectionBrowseHistory(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } // 获取所有相关的 Redis Key redisKeyPattern := fmt.Sprintf("browseSelection:*:%s", tid) //返回该达人所有day的key keys, err := g.Redis().DoVar("KEYS", redisKeyPattern) if err != nil { fmt.Println("Get redis keys error", err) } // 初始化返回的数据 var browseSelectionHistories []BrowseSelectionHistory // 遍历所有的日期 Key for _, key := range keys.Slice() { // 获取日期部分 keyStr := gconv.String(key) date := strings.Split(keyStr, ":")[1] // 获取该日期下的所有 pid selctionIds, err := g.Redis().DoVar("SMEMBERS", keyStr) if err != nil { println("Get redis keys error", err) } // 使用 pids 查询数据库,获取商品列表 var selectionList []youngee_talent_model.SelectionDetail err = g.DB().Model("younggee_selection_info").WithAll().Where("selection_id IN(?)", selctionIds.Strings()).Scan(&selectionList) if err != nil { println("Get redis selections error", err) } // 构建 BrowseHistory 对象 browseSelectionHistory := BrowseSelectionHistory{ Date: date, SelectionList: selectionList, } // 添加到结果列表中 browseSelectionHistories = append(browseSelectionHistories, browseSelectionHistory) } return &TalentHttpResult{Code: 0, Msg: "success", Data: browseSelectionHistories} }