talent.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. package db
  2. import (
  3. "context"
  4. "github.com/issue9/conv"
  5. "gorm.io/gorm"
  6. "youngee_b_api/model/gorm_model"
  7. "youngee_b_api/model/http_model"
  8. )
  9. func GetGoodstalentList(ctx context.Context, request http_model.GetGoodsTalentRequest) (*http_model.GetGoodsTalentListData, error) {
  10. db := GetReadDB(ctx)
  11. // 存储达人信息
  12. var etcoopinfo []gorm_model.EnterpriseTalentCooperate
  13. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 1)
  14. // 根据平台筛选
  15. if request.Platform != nil {
  16. query.Where("platform = ?", request.Platform)
  17. }
  18. // 根据达人名称筛选
  19. if request.TalentName != "" {
  20. query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
  21. }
  22. if request.Productcategory != nil {
  23. query = query.Where("FIND_IN_SET(?, product_category) > 0", request.Productcategory)
  24. }
  25. // 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
  26. query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
  27. // 根据30天销量区间筛选
  28. if request.SalesRange != nil {
  29. if *request.SalesRange == "0-30" {
  30. query = query.Where("pkui.sale_num_30day BETWEEN ? AND ?", 0, 30)
  31. } else if *request.SalesRange == "30-100" {
  32. query = query.Where("pkui.sale_num_30day BETWEEN ? AND ?", 30, 100)
  33. } else if *request.SalesRange == "100+" {
  34. query = query.Where("pkui.sale_num_30day > ?", 100)
  35. }
  36. }
  37. // 根据排序字段和排序顺序进行排序
  38. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  39. for i := 0; i < len(request.SortField); i++ {
  40. sortField := request.SortField[i]
  41. sortOrder := request.SortOrder[i]
  42. switch sortField {
  43. case "fan":
  44. if sortOrder == "asc" {
  45. query = query.Order("fan asc")
  46. } else {
  47. query = query.Order("fan desc")
  48. }
  49. case "sale_num_30day":
  50. if sortOrder == "asc" {
  51. query = query.Order("sale_num_30day asc")
  52. } else {
  53. query = query.Order("sale_num_30day desc")
  54. }
  55. case "sale_num_total":
  56. if sortOrder == "asc" {
  57. query = query.Order("sale_num_total asc")
  58. } else {
  59. query = query.Order("sale_num_total desc")
  60. }
  61. case "cooperate_num":
  62. if sortOrder == "asc" {
  63. query = query.Order("cooperate_num asc")
  64. } else {
  65. query = query.Order("cooperate_num desc")
  66. }
  67. }
  68. }
  69. } else {
  70. // Default sorting if no valid sort parameters
  71. query = query.Order("create_at asc")
  72. }
  73. // 分页查询
  74. offset := (request.PageNum - 1) * request.PageSize
  75. query = query.Limit(request.PageSize).Offset(offset)
  76. // 执行查询
  77. if err := query.Find(&etcoopinfo).Error; err != nil {
  78. return nil, err
  79. }
  80. // 生成返回的数据
  81. result := &http_model.GetGoodsTalentListData{
  82. Total: conv.MustString(len(etcoopinfo), ""),
  83. TalentList: make([]*http_model.GoodsTalentInfo, 0),
  84. }
  85. for _, item := range etcoopinfo {
  86. var salesInfo gorm_model.PlatformKuaishouUserInfo
  87. if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
  88. return nil, err
  89. }
  90. fans, _ := conv.Int(salesInfo.Fan)
  91. result.TalentList = append(result.TalentList, &http_model.GoodsTalentInfo{
  92. TalentId: item.TalentId,
  93. Nickname: item.TalentName,
  94. City: salesInfo.City,
  95. HeadUrl: salesInfo.HeadUri,
  96. FansNum: fans,
  97. ThirtySales: conv.MustString(salesInfo.SaleNum30Day, ""),
  98. AccSales: conv.MustString(salesInfo.SaleNum30Day, ""),
  99. ActualSales: conv.MustString(salesInfo.SaleNumTotal, ""),
  100. AccCoopTime: item.CooperateNum,
  101. FirCoopFrom: "公海",
  102. })
  103. }
  104. return result, nil
  105. }
  106. func GetProjecttalentList(ctx context.Context, request http_model.GetProjectTalentRequest) (*http_model.GetProjectTalentListData, error) {
  107. db := GetReadDB(ctx)
  108. // 存储达人信息
  109. var etcoopinfo []gorm_model.EnterpriseTalentCooperate
  110. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 2)
  111. // 根据平台筛选
  112. if request.Platform != nil {
  113. query.Where("platform = ?", request.Platform)
  114. }
  115. // 根据达人名称筛选
  116. if request.TalentName != "" {
  117. query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
  118. }
  119. // 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
  120. query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
  121. // 根据排序字段和排序顺序进行排序
  122. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  123. for i := 0; i < len(request.SortField); i++ {
  124. sortField := request.SortField[i]
  125. sortOrder := request.SortOrder[i]
  126. switch sortField {
  127. case "fan":
  128. if sortOrder == "asc" {
  129. query = query.Order("fan asc")
  130. } else {
  131. query = query.Order("fan desc")
  132. }
  133. case "like_num":
  134. if sortOrder == "asc" {
  135. query = query.Order("like_num asc")
  136. } else {
  137. query = query.Order("like_num desc")
  138. }
  139. case "sale_num_total":
  140. if sortOrder == "asc" {
  141. query = query.Order("sale_num_total asc")
  142. } else {
  143. query = query.Order("sale_num_total desc")
  144. }
  145. case "cooperate_num":
  146. if sortOrder == "asc" {
  147. query = query.Order("cooperate_num asc")
  148. } else {
  149. query = query.Order("cooperate_num desc")
  150. }
  151. }
  152. }
  153. } else {
  154. // Default sorting if no valid sort parameters
  155. query = query.Order("create_at asc")
  156. }
  157. // 分页查询
  158. offset := (request.PageNum - 1) * request.PageSize
  159. query = query.Limit(request.PageSize).Offset(offset)
  160. // 执行查询
  161. if err := query.Find(&etcoopinfo).Error; err != nil {
  162. return nil, err
  163. }
  164. // 生成返回的数据
  165. result := &http_model.GetProjectTalentListData{
  166. Total: conv.MustString(len(etcoopinfo), ""),
  167. TalentList: make([]*http_model.ProjectTalentInfo, 0),
  168. }
  169. for _, item := range etcoopinfo {
  170. var salesInfo gorm_model.PlatformKuaishouUserInfo
  171. if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
  172. return nil, err
  173. }
  174. fans, _ := conv.Int(salesInfo.Fan)
  175. result.TalentList = append(result.TalentList, &http_model.ProjectTalentInfo{
  176. TalentId: item.TalentId,
  177. Nickname: item.TalentName,
  178. City: salesInfo.City,
  179. HeadUrl: salesInfo.HeadUri,
  180. FansNum: fans,
  181. ThirtySales: conv.MustString(salesInfo.SaleNum30Day, ""),
  182. AccSales: conv.MustString(salesInfo.SaleNum30Day, ""),
  183. ActualSales: conv.MustString(salesInfo.SaleNumTotal, ""),
  184. AccCoopTime: item.CooperateNum,
  185. FirCoopFrom: "公海",
  186. })
  187. }
  188. return result, nil
  189. }
  190. func GetLocallifetalentList(ctx context.Context, request http_model.GetLocallifeTalentRequest) (*http_model.GetLocallifeTalentListData, error) {
  191. db := GetReadDB(ctx)
  192. // 存储达人信息
  193. var etcoopinfo []gorm_model.EnterpriseTalentCooperate
  194. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 2)
  195. // 根据平台筛选
  196. if request.Platform != nil {
  197. query.Where("platform = ?", request.Platform)
  198. }
  199. // 根据达人名称筛选
  200. if request.TalentName != "" {
  201. query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
  202. }
  203. // 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
  204. query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
  205. // 根据排序字段和排序顺序进行排序
  206. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  207. for i := 0; i < len(request.SortField); i++ {
  208. sortField := request.SortField[i]
  209. sortOrder := request.SortOrder[i]
  210. switch sortField {
  211. case "fan":
  212. if sortOrder == "asc" {
  213. query = query.Order("fan asc")
  214. } else {
  215. query = query.Order("fan desc")
  216. }
  217. case "like_num":
  218. if sortOrder == "asc" {
  219. query = query.Order("like_num asc")
  220. } else {
  221. query = query.Order("like_num desc")
  222. }
  223. case "sale_num_total":
  224. if sortOrder == "asc" {
  225. query = query.Order("sale_num_total asc")
  226. } else {
  227. query = query.Order("sale_num_total desc")
  228. }
  229. case "cooperate_num":
  230. if sortOrder == "asc" {
  231. query = query.Order("cooperate_num asc")
  232. } else {
  233. query = query.Order("cooperate_num desc")
  234. }
  235. }
  236. }
  237. } else {
  238. // Default sorting if no valid sort parameters
  239. query = query.Order("create_at asc")
  240. }
  241. // 分页查询
  242. offset := (request.PageNum - 1) * request.PageSize
  243. query = query.Limit(request.PageSize).Offset(offset)
  244. // 执行查询
  245. if err := query.Find(&etcoopinfo).Error; err != nil {
  246. return nil, err
  247. }
  248. // 生成返回的数据
  249. result := &http_model.GetLocallifeTalentListData{
  250. Total: conv.MustString(len(etcoopinfo), ""),
  251. TalentList: make([]*http_model.LocallifeTalentInfo, 0),
  252. }
  253. for _, item := range etcoopinfo {
  254. var salesInfo gorm_model.PlatformKuaishouUserInfo
  255. if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
  256. return nil, err
  257. }
  258. fans, _ := conv.Int(salesInfo.Fan)
  259. result.TalentList = append(result.TalentList, &http_model.LocallifeTalentInfo{
  260. TalentId: item.TalentId,
  261. Nickname: item.TalentName,
  262. City: salesInfo.City,
  263. HeadUrl: salesInfo.HeadUri,
  264. FansNum: fans,
  265. ThirtySales: conv.MustString(salesInfo.SaleNum30Day, ""),
  266. AccSales: conv.MustString(salesInfo.SaleNum30Day, ""),
  267. ActualSales: conv.MustString(salesInfo.SaleNumTotal, ""),
  268. AccCoopTime: item.CooperateNum,
  269. FirCoopFrom: "公海",
  270. })
  271. }
  272. return result, nil
  273. }
  274. func GetTalentNum(ctx context.Context, request http_model.GetTalentNumRequest) (*http_model.GetTalentNumResponse, error) {
  275. db := GetReadDB(ctx)
  276. var sectalent, projtalent, localtalent int64
  277. sectalent, _ = GetTalentnum(db, request, 1)
  278. projtalent, _ = GetTalentnum(db, request, 2)
  279. localtalent, _ = GetTalentnum(db, request, 3)
  280. count := &http_model.GetTalentNumResponse{
  281. SecTalentnum: sectalent,
  282. ProjectTalentnum: projtalent,
  283. LocalTalentnum: localtalent,
  284. }
  285. return count, nil
  286. }
  287. func GetTalentnum(db *gorm.DB, request http_model.GetTalentNumRequest, cooptype int) (int64, error) {
  288. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, cooptype)
  289. var total int64
  290. if err := query.Count(&total).Error; err != nil {
  291. return 0, err
  292. }
  293. return total, nil
  294. }