CommunityListController.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. package api
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "net/url"
  9. "strconv"
  10. "think-go/controllers/services"
  11. "think-go/utils"
  12. "time"
  13. beego "github.com/beego/beego/v2/server/web"
  14. )
  15. type CommunityListController struct {
  16. beego.Controller
  17. }
  18. var communityListService = &services.CommunityListService{}
  19. // GetCommunityList 获取社区列表信息
  20. type ExternalCommunityResponse struct {
  21. Code int `json:"code"`
  22. Data struct {
  23. InviteAmount int `json:"invite_amount"`
  24. List []struct {
  25. CTime int64 `json:"c_time"`
  26. UserID string `json:"userid"`
  27. Username string `json:"username"`
  28. PromoteName string `json:"promote_name"`
  29. Sales string `json:"sales"`
  30. TeamSales string `json:"team_sales"`
  31. TodayTeamSales string `json:"today_team_sales"`
  32. UserBV string `json:"user_bv"`
  33. SubStatus int `json:"sub_status"`
  34. } `json:"list"`
  35. Count int `json:"count"`
  36. } `json:"data"`
  37. }
  38. // 假设路由为 /invite/list [post]
  39. func (c *CommunityListController) GetExternalCommunityList() {
  40. // 1. 获取当前请求中的参数(可以根据业务从 c 中获取,例如 c.GetInt 等)
  41. limit, _ := c.GetInt("limit", 100) // 默认每页10条
  42. page, _ := c.GetInt("page", 1) // 默认第一页
  43. userid := c.GetString("userid") // 假设从当前请求传入
  44. // 2. 准备外部接口的请求参数(x-www-form-urlencoded)
  45. data := url.Values{}
  46. data.Set("limit", strconv.Itoa(limit))
  47. data.Set("page", strconv.Itoa(page))
  48. data.Set("userid", userid)
  49. // 3. 构造 HTTP 请求
  50. externalURL := "https://app-api.aiceanglobal1.com/api/v1/reward/inviteList" // 替换为真实地址
  51. req, err := http.NewRequest("POST", externalURL, bytes.NewBufferString(data.Encode()))
  52. if err != nil {
  53. c.Data["json"] = map[string]interface{}{"code": 500, "msg": "请求构造失败"}
  54. c.ServeJSON()
  55. return
  56. }
  57. // 4. 设置 Headers
  58. req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
  59. // 假设 Authorization 是 Bearer token,从配置或环境变量获取
  60. req.Header.Set("Authorization", "Bearer 9409e48b4f3cfabc4d44b88db19516ca")
  61. // 外部接口需要的 userid header(可能和 body 中的 userid 不同,按需设置)
  62. req.Header.Set("userid", "04a0d628189644a1b918f14cde664610")
  63. // 5. 发送请求
  64. client := &http.Client{}
  65. resp, err := client.Do(req)
  66. if err != nil {
  67. c.Data["json"] = map[string]interface{}{"code": 500, "msg": "请求外部接口失败"}
  68. c.ServeJSON()
  69. fmt.Println("errrr:", err)
  70. return
  71. }
  72. defer resp.Body.Close()
  73. // 6. 读取响应体
  74. body, err := ioutil.ReadAll(resp.Body)
  75. if err != nil {
  76. c.Data["json"] = map[string]interface{}{"code": 500, "msg": "读取响应失败"}
  77. c.ServeJSON()
  78. return
  79. }
  80. // 7. 解析 JSON
  81. var externalResp ExternalCommunityResponse
  82. if err := json.Unmarshal(body, &externalResp); err != nil {
  83. c.Data["json"] = map[string]interface{}{"code": 500, "msg": "解析响应失败"}
  84. c.ServeJSON()
  85. return
  86. }
  87. // 遍历列表
  88. for _, item := range externalResp.Data.List {
  89. fmt.Printf("用户: %s, 用户名: %s, 销售额: %s\n",
  90. item.UserID, item.Username, item.Sales)
  91. // 取 count
  92. info := &services.CommunityInfo{
  93. ParentId: userid,
  94. UserId: item.UserID,
  95. Username: item.Username,
  96. PromoteName: item.PromoteName,
  97. Sales: item.Sales,
  98. TeamSales: item.TeamSales,
  99. TodayTeamSales: item.TodayTeamSales,
  100. UserBv: item.UserBV,
  101. SubStatus: strconv.Itoa(item.SubStatus),
  102. CTime: item.CTime,
  103. IsYes: 0,
  104. }
  105. err := communityListService.CreateCommunityList(info)
  106. if err != nil {
  107. utils.JSON(&c.Controller, 500, err.Error(), nil)
  108. return
  109. }
  110. }
  111. // 8. 根据业务需要处理外部接口返回的数据,例如转换格式、添加额外字段等
  112. // 这里直接透传给客户端,也可以重新封装
  113. c.Data["json"] = externalResp
  114. c.ServeJSON()
  115. }
  116. func (c *CommunityListController) GetExternalCommunityList002() {
  117. // 外部循环 50 次
  118. for i := 0; i < 100; i++ {
  119. // 1. 查询数据库中待处理的用户
  120. records, err := communityListService.GetCommunityListByIsYes()
  121. if err != nil {
  122. utils.JSON(&c.Controller, 500, "查询失败: "+err.Error(), nil)
  123. return
  124. }
  125. // 如果本次查询没有数据,说明处理完了,直接跳出大循环
  126. if len(records) == 0 {
  127. break
  128. }
  129. // 2. 遍历用户
  130. for _, record := range records {
  131. // 注意:因为报错提示 mismatched types,说明 record 是值类型而非指针
  132. // 所以这里不需要 if record == nil 的判断,直接使用即可
  133. info := &services.CommunityInfo{
  134. CommunityId: record.CommunityId,
  135. ParentId: record.ParentId,
  136. UserId: record.UserId,
  137. Username: record.Username,
  138. PromoteName: record.PromoteName,
  139. Sales: record.Sales,
  140. TeamSales: record.TeamSales,
  141. TodayTeamSales: record.TodayTeamSales,
  142. UserBv: record.UserBv,
  143. SubStatus: record.SubStatus,
  144. CTime: record.CTime,
  145. IsYes: 1, // 标记为已处理
  146. }
  147. // 按照业务需求延迟 5 秒
  148. time.Sleep(5 * time.Second)
  149. fmt.Println("正在处理用户ID:", info.UserId)
  150. // 3. 请求外部接口并存入数据库
  151. communityListService.GoRequestNetCommunityInfo(info.UserId)
  152. // 4. 修改当前用户状态
  153. err = communityListService.UpdateCommunityList(info)
  154. if err != nil {
  155. utils.JSON(&c.Controller, 500, "更新状态失败: "+err.Error(), nil)
  156. return
  157. }
  158. }
  159. }
  160. // 5. 循环全部结束后,正常返回成功
  161. // 此时 err 为空,所以不能调用 err.Error()
  162. utils.JSON(&c.Controller, 200, "处理完成", nil)
  163. }
  164. // @router /api/community/list [get]
  165. func (c *CommunityListController) GetCommunityList() {
  166. // 获取参数
  167. idStr := c.Ctx.Input.Query("id")
  168. userId, _ := utils.GetRequestString(&c.Controller, "user_id")
  169. if idStr != "" {
  170. // 根据 ID 查询
  171. id, err := strconv.Atoi(idStr)
  172. if err != nil {
  173. utils.JSON(&c.Controller, 400, "invalid id parameter", nil)
  174. return
  175. }
  176. record, err := communityListService.GetCommunityList(id)
  177. if err != nil {
  178. utils.JSON(&c.Controller, 500, err.Error(), nil)
  179. return
  180. }
  181. utils.JSON(&c.Controller, 200, "success", record)
  182. return
  183. }
  184. if userId != "" {
  185. // 根据用户 ID 查询
  186. record, err := communityListService.GetCommunityListByUserId(userId)
  187. if err != nil {
  188. utils.JSON(&c.Controller, 500, err.Error(), nil)
  189. return
  190. }
  191. utils.JSON(&c.Controller, 200, "success", record)
  192. return
  193. }
  194. utils.JSON(&c.Controller, 400, "please provide id or user_id parameter", nil)
  195. }
  196. // CreateCommunityList 创建社区列表记录
  197. // @router /api/community/create [post]
  198. func (c *CommunityListController) CreateCommunityList() {
  199. parentId, _ := utils.GetRequestString(&c.Controller, "parent_id")
  200. userId, _ := utils.GetRequestString(&c.Controller, "user_id")
  201. username, _ := utils.GetRequestString(&c.Controller, "username")
  202. promoteName, _ := utils.GetRequestString(&c.Controller, "promote_name")
  203. sales, _ := utils.GetRequestString(&c.Controller, "sales")
  204. teamSales, _ := utils.GetRequestString(&c.Controller, "team_sales")
  205. todayTeamSales, _ := utils.GetRequestString(&c.Controller, "today_team_sales")
  206. userBv, _ := utils.GetRequestString(&c.Controller, "user_bv")
  207. subStatus, _ := utils.GetRequestString(&c.Controller, "sub_status")
  208. cTimeStr := c.Ctx.Input.Query("c_time")
  209. cTime := int64(0)
  210. if cTimeStr != "" {
  211. if ct, err := strconv.ParseInt(cTimeStr, 10, 64); err == nil {
  212. cTime = ct
  213. }
  214. }
  215. isYesStr := c.Ctx.Input.Query("is_yes")
  216. isYes := 0
  217. if isYesStr != "" {
  218. if iy, err := strconv.Atoi(isYesStr); err == nil {
  219. isYes = iy
  220. }
  221. }
  222. info := &services.CommunityInfo{
  223. ParentId: parentId,
  224. UserId: userId,
  225. Username: username,
  226. PromoteName: promoteName,
  227. Sales: sales,
  228. TeamSales: teamSales,
  229. TodayTeamSales: todayTeamSales,
  230. UserBv: userBv,
  231. SubStatus: subStatus,
  232. CTime: cTime,
  233. IsYes: isYes,
  234. }
  235. err := communityListService.CreateCommunityList(info)
  236. if err != nil {
  237. utils.JSON(&c.Controller, 500, err.Error(), nil)
  238. return
  239. }
  240. utils.JSON(&c.Controller, 200, "create success", map[string]interface{}{
  241. "message": "community list record created successfully",
  242. })
  243. }
  244. // UpdateCommunityList 更新社区列表记录
  245. // @router /api/community/update [post]
  246. func (c *CommunityListController) UpdateCommunityList() {
  247. idStr, _ := utils.GetRequestString(&c.Controller, "community_id")
  248. communityId, err := strconv.Atoi(idStr)
  249. if err != nil || communityId <= 0 {
  250. utils.JSON(&c.Controller, 400, "invalid or missing id parameter", nil)
  251. return
  252. }
  253. parentId, _ := utils.GetRequestString(&c.Controller, "parent_id")
  254. userId, _ := utils.GetRequestString(&c.Controller, "user_id")
  255. username, _ := utils.GetRequestString(&c.Controller, "username")
  256. promoteName, _ := utils.GetRequestString(&c.Controller, "promote_name")
  257. sales, _ := utils.GetRequestString(&c.Controller, "sales")
  258. teamSales, _ := utils.GetRequestString(&c.Controller, "team_sales")
  259. todayTeamSales, _ := utils.GetRequestString(&c.Controller, "today_team_sales")
  260. userBv, _ := utils.GetRequestString(&c.Controller, "user_bv")
  261. subStatus, _ := utils.GetRequestString(&c.Controller, "sub_status")
  262. cTimeStr := c.Ctx.Input.Query("c_time")
  263. cTime := int64(0)
  264. if cTimeStr != "" {
  265. if ct, err := strconv.ParseInt(cTimeStr, 10, 64); err == nil {
  266. cTime = ct
  267. }
  268. }
  269. isYesStr := c.Ctx.Input.Query("is_yes")
  270. isYes := 0
  271. if isYesStr != "" {
  272. if iy, err := strconv.Atoi(isYesStr); err == nil {
  273. isYes = iy
  274. }
  275. }
  276. info := &services.CommunityInfo{
  277. CommunityId: communityId,
  278. ParentId: parentId,
  279. UserId: userId,
  280. Username: username,
  281. PromoteName: promoteName,
  282. Sales: sales,
  283. TeamSales: teamSales,
  284. TodayTeamSales: todayTeamSales,
  285. UserBv: userBv,
  286. SubStatus: subStatus,
  287. CTime: cTime,
  288. IsYes: isYes,
  289. }
  290. err = communityListService.UpdateCommunityList(info)
  291. if err != nil {
  292. utils.JSON(&c.Controller, 500, err.Error(), nil)
  293. return
  294. }
  295. utils.JSON(&c.Controller, 200, "update success", map[string]interface{}{
  296. "message": "community list record updated successfully",
  297. })
  298. }
  299. // GetAllCommunityLists 获取所有社区列表记录(分页)
  300. // @router /api/community/listAll [get]
  301. func (c *CommunityListController) GetAllCommunityLists() {
  302. // 获取分页参数
  303. pageStr := c.Ctx.Input.Query("page")
  304. pageSizeStr := c.Ctx.Input.Query("pageSize")
  305. page := 1
  306. pageSize := 10
  307. if pageStr != "" {
  308. if p, err := strconv.Atoi(pageStr); err == nil && p > 0 {
  309. page = p
  310. }
  311. }
  312. if pageSizeStr != "" {
  313. if ps, err := strconv.Atoi(pageSizeStr); err == nil && ps > 0 {
  314. pageSize = ps
  315. }
  316. }
  317. offset := int64((page - 1) * pageSize)
  318. limit := int64(pageSize)
  319. records, total, err := communityListService.GetAllCommunityLists(offset, limit)
  320. if err != nil {
  321. utils.JSON(&c.Controller, 500, err.Error(), nil)
  322. return
  323. }
  324. utils.JSON(&c.Controller, 200, "success", map[string]interface{}{
  325. "list": records,
  326. "total": total,
  327. "page": page,
  328. "pageSize": pageSize,
  329. })
  330. }
  331. // DeleteCommunityList 删除社区列表记录
  332. // @router /api/community/delete [post]
  333. func (c *CommunityListController) DeleteCommunityList() {
  334. idStr, _ := utils.GetRequestString(&c.Controller, "id")
  335. id, err := strconv.Atoi(idStr)
  336. if err != nil || id <= 0 {
  337. utils.JSON(&c.Controller, 400, "invalid or missing id parameter", nil)
  338. return
  339. }
  340. err = communityListService.DeleteCommunityList(id)
  341. if err != nil {
  342. utils.JSON(&c.Controller, 500, err.Error(), nil)
  343. return
  344. }
  345. utils.JSON(&c.Controller, 200, "success", map[string]interface{}{
  346. "message": "community list record deleted successfully",
  347. })
  348. }