talent.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  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: salesInfo.SaleNum30Day,
  98. AccSales: salesInfo.SaleNumTotal,
  99. ActualSales: GetActualSales(db, salesInfo.OpenId), //open_id sec_task sale_actual
  100. AccCoopTime: item.CooperateNum,
  101. FirCoopFrom: "公海",
  102. })
  103. }
  104. return result, nil
  105. }
  106. func GetActualSales(db *gorm.DB, openid string) int {
  107. var sectaskinfo []gorm_model.YounggeeSecTaskInfo
  108. if err := db.Where("open_id = ?", openid).Find(&sectaskinfo).Error; err != nil {
  109. return 0
  110. }
  111. var total int
  112. for _, item := range sectaskinfo {
  113. total += item.SaleActual
  114. }
  115. return total
  116. }
  117. func GetProjecttalentList(ctx context.Context, request http_model.GetProjectTalentRequest) (*http_model.GetProjectTalentListData, error) {
  118. db := GetReadDB(ctx)
  119. // 存储达人信息
  120. var etcoopinfo []gorm_model.EnterpriseTalentCooperate
  121. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 2)
  122. // 根据平台筛选
  123. if request.Platform != nil {
  124. query.Where("platform = ?", request.Platform)
  125. }
  126. // 根据达人名称筛选
  127. if request.TalentName != "" {
  128. query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
  129. }
  130. // 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
  131. query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
  132. // 根据排序字段和排序顺序进行排序
  133. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  134. for i := 0; i < len(request.SortField); i++ {
  135. sortField := request.SortField[i]
  136. sortOrder := request.SortOrder[i]
  137. switch sortField {
  138. case "fan":
  139. if sortOrder == "asc" {
  140. query = query.Order("fan asc")
  141. } else {
  142. query = query.Order("fan desc")
  143. }
  144. case "like_num":
  145. if sortOrder == "asc" {
  146. query = query.Order("like_num asc")
  147. } else {
  148. query = query.Order("like_num desc")
  149. }
  150. case "sale_num_total":
  151. if sortOrder == "asc" {
  152. query = query.Order("sale_num_total asc")
  153. } else {
  154. query = query.Order("sale_num_total desc")
  155. }
  156. case "cooperate_num":
  157. if sortOrder == "asc" {
  158. query = query.Order("cooperate_num asc")
  159. } else {
  160. query = query.Order("cooperate_num desc")
  161. }
  162. }
  163. }
  164. } else {
  165. // Default sorting if no valid sort parameters
  166. query = query.Order("create_at asc")
  167. }
  168. // 分页查询
  169. offset := (request.PageNum - 1) * request.PageSize
  170. query = query.Limit(request.PageSize).Offset(offset)
  171. // 执行查询
  172. if err := query.Find(&etcoopinfo).Error; err != nil {
  173. return nil, err
  174. }
  175. // 生成返回的数据
  176. result := &http_model.GetProjectTalentListData{
  177. Total: conv.MustString(len(etcoopinfo), ""),
  178. TalentList: make([]*http_model.ProjectTalentInfo, 0),
  179. }
  180. for _, item := range etcoopinfo {
  181. var salesInfo gorm_model.PlatformKuaishouUserInfo
  182. if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
  183. return nil, err
  184. }
  185. fans, _ := conv.Int(salesInfo.Fan)
  186. var taskinfo gorm_model.YoungeeTaskInfo
  187. if err := db.Where(gorm_model.YoungeeTaskInfo{TaskID: item.ProjectTaskID}).First(&taskinfo).Error; err != nil {
  188. return nil, err
  189. }
  190. var projectinfo gorm_model.ProjectInfo
  191. err := db.Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", taskinfo.ProjectID).First(&projectinfo).Error
  192. if err != nil {
  193. return nil, err
  194. }
  195. s_type, s_name := stype(db, taskinfo.SupplierId, taskinfo.SupplierStatus, projectinfo.ProjectType)
  196. result.TalentList = append(result.TalentList, &http_model.ProjectTalentInfo{
  197. TalentId: item.TalentId,
  198. Nickname: item.TalentName,
  199. City: salesInfo.City,
  200. HeadUrl: salesInfo.HeadUri,
  201. FansNum: fans,
  202. AccInteract: 0,
  203. AccPlay: 0,
  204. AvgCollected: 0,
  205. AvgComments: 0,
  206. AvgLikes: 0,
  207. AccCoopTime: item.CooperateNum,
  208. FirCoopFrom: s_name,
  209. Stype: s_type,
  210. })
  211. }
  212. return result, nil
  213. }
  214. func GetLocallifetalentList(ctx context.Context, request http_model.GetLocallifeTalentRequest) (*http_model.GetLocallifeTalentListData, error) {
  215. db := GetReadDB(ctx)
  216. // 存储达人信息
  217. var etcoopinfo []gorm_model.EnterpriseTalentCooperate
  218. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 2)
  219. // 根据平台筛选
  220. if request.Platform != nil {
  221. query.Where("platform = ?", request.Platform)
  222. }
  223. // 根据达人名称筛选
  224. if request.TalentName != "" {
  225. query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
  226. }
  227. // 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
  228. query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
  229. // 根据排序字段和排序顺序进行排序
  230. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  231. for i := 0; i < len(request.SortField); i++ {
  232. sortField := request.SortField[i]
  233. sortOrder := request.SortOrder[i]
  234. switch sortField {
  235. case "fan":
  236. if sortOrder == "asc" {
  237. query = query.Order("fan asc")
  238. } else {
  239. query = query.Order("fan desc")
  240. }
  241. case "like_num":
  242. if sortOrder == "asc" {
  243. query = query.Order("like_num asc")
  244. } else {
  245. query = query.Order("like_num desc")
  246. }
  247. case "sale_num_total":
  248. if sortOrder == "asc" {
  249. query = query.Order("sale_num_total asc")
  250. } else {
  251. query = query.Order("sale_num_total desc")
  252. }
  253. case "cooperate_num":
  254. if sortOrder == "asc" {
  255. query = query.Order("cooperate_num asc")
  256. } else {
  257. query = query.Order("cooperate_num desc")
  258. }
  259. }
  260. }
  261. } else {
  262. // Default sorting if no valid sort parameters
  263. query = query.Order("create_at asc")
  264. }
  265. // 分页查询
  266. offset := (request.PageNum - 1) * request.PageSize
  267. query = query.Limit(request.PageSize).Offset(offset)
  268. // 执行查询
  269. if err := query.Find(&etcoopinfo).Error; err != nil {
  270. return nil, err
  271. }
  272. // 生成返回的数据
  273. result := &http_model.GetLocallifeTalentListData{
  274. Total: conv.MustString(len(etcoopinfo), ""),
  275. TalentList: make([]*http_model.LocallifeTalentInfo, 0),
  276. }
  277. for _, item := range etcoopinfo {
  278. var salesInfo gorm_model.PlatformKuaishouUserInfo
  279. if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
  280. return nil, err
  281. }
  282. fans, _ := conv.Int(salesInfo.Fan)
  283. var taskinfo gorm_model.YoungeeLocalTaskInfo
  284. if err := db.Where(gorm_model.YoungeeLocalTaskInfo{TaskId: item.LocalTaskID}).First(&taskinfo).Error; err != nil {
  285. return nil, err
  286. }
  287. var projectinfo gorm_model.YounggeeLocalLifeInfo
  288. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", taskinfo.LocalId).First(&projectinfo).Error
  289. if err != nil {
  290. return nil, err
  291. }
  292. s_type, s_name := stype(db, taskinfo.SupplierId, taskinfo.SupplierStatus, projectinfo.LocalType)
  293. result.TalentList = append(result.TalentList, &http_model.LocallifeTalentInfo{
  294. TalentId: item.TalentId,
  295. Nickname: item.TalentName,
  296. City: salesInfo.City,
  297. HeadUrl: salesInfo.HeadUri,
  298. FansNum: fans,
  299. AccInteract: 0,
  300. AccPlay: 0,
  301. AvgCollected: 0,
  302. AvgComments: 0,
  303. AvgLikes: 0,
  304. AccCoopTime: item.CooperateNum,
  305. FirCoopFrom: s_name,
  306. SType: s_type,
  307. })
  308. }
  309. return result, nil
  310. }
  311. func GetTalentNum(ctx context.Context, request http_model.GetTalentNumRequest) (*http_model.GetTalentNumResponse, error) {
  312. db := GetReadDB(ctx)
  313. var sectalent, projtalent, localtalent int64
  314. sectalent, _ = GetTalentnum(db, request, 1)
  315. projtalent, _ = GetTalentnum(db, request, 2)
  316. localtalent, _ = GetTalentnum(db, request, 3)
  317. count := &http_model.GetTalentNumResponse{
  318. SecTalentnum: sectalent,
  319. ProjectTalentnum: projtalent,
  320. LocalTalentnum: localtalent,
  321. }
  322. return count, nil
  323. }
  324. func GetTalentnum(db *gorm.DB, request http_model.GetTalentNumRequest, cooptype int) (int64, error) {
  325. query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, cooptype)
  326. var total int64
  327. if err := query.Count(&total).Error; err != nil {
  328. return 0, err
  329. }
  330. return total, nil
  331. }