| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- package api
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "strconv"
- "think-go/controllers/services"
- "think-go/utils"
- "time"
- beego "github.com/beego/beego/v2/server/web"
- )
- type CommunityListController struct {
- beego.Controller
- }
- var communityListService = &services.CommunityListService{}
- // GetCommunityList 获取社区列表信息
- type ExternalCommunityResponse struct {
- Code int `json:"code"`
- Data struct {
- InviteAmount int `json:"invite_amount"`
- List []struct {
- CTime int64 `json:"c_time"`
- UserID string `json:"userid"`
- Username string `json:"username"`
- PromoteName string `json:"promote_name"`
- Sales string `json:"sales"`
- TeamSales string `json:"team_sales"`
- TodayTeamSales string `json:"today_team_sales"`
- UserBV string `json:"user_bv"`
- SubStatus int `json:"sub_status"`
- } `json:"list"`
- Count int `json:"count"`
- } `json:"data"`
- }
- // 假设路由为 /invite/list [post]
- func (c *CommunityListController) GetExternalCommunityList() {
- // 1. 获取当前请求中的参数(可以根据业务从 c 中获取,例如 c.GetInt 等)
- limit, _ := c.GetInt("limit", 100) // 默认每页10条
- page, _ := c.GetInt("page", 1) // 默认第一页
- userid := c.GetString("userid") // 假设从当前请求传入
- // 2. 准备外部接口的请求参数(x-www-form-urlencoded)
- data := url.Values{}
- data.Set("limit", strconv.Itoa(limit))
- data.Set("page", strconv.Itoa(page))
- data.Set("userid", userid)
- // 3. 构造 HTTP 请求
- externalURL := "https://app-api.aiceanglobal1.com/api/v1/reward/inviteList" // 替换为真实地址
- req, err := http.NewRequest("POST", externalURL, bytes.NewBufferString(data.Encode()))
- if err != nil {
- c.Data["json"] = map[string]interface{}{"code": 500, "msg": "请求构造失败"}
- c.ServeJSON()
- return
- }
- // 4. 设置 Headers
- req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
- // 假设 Authorization 是 Bearer token,从配置或环境变量获取
- req.Header.Set("Authorization", "Bearer 9409e48b4f3cfabc4d44b88db19516ca")
- // 外部接口需要的 userid header(可能和 body 中的 userid 不同,按需设置)
- req.Header.Set("userid", "04a0d628189644a1b918f14cde664610")
- // 5. 发送请求
- client := &http.Client{}
- resp, err := client.Do(req)
- if err != nil {
- c.Data["json"] = map[string]interface{}{"code": 500, "msg": "请求外部接口失败"}
- c.ServeJSON()
- fmt.Println("errrr:", err)
- return
- }
- defer resp.Body.Close()
- // 6. 读取响应体
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- c.Data["json"] = map[string]interface{}{"code": 500, "msg": "读取响应失败"}
- c.ServeJSON()
- return
- }
- // 7. 解析 JSON
- var externalResp ExternalCommunityResponse
- if err := json.Unmarshal(body, &externalResp); err != nil {
- c.Data["json"] = map[string]interface{}{"code": 500, "msg": "解析响应失败"}
- c.ServeJSON()
- return
- }
- // 遍历列表
- for _, item := range externalResp.Data.List {
- // 取 count
- info := &services.CommunityInfo{
- ParentId: userid,
- UserId: item.UserID,
- Username: item.Username,
- PromoteName: item.PromoteName,
- Sales: item.Sales,
- TeamSales: item.TeamSales,
- TodayTeamSales: item.TodayTeamSales,
- UserBv: item.UserBV,
- SubStatus: strconv.Itoa(item.SubStatus),
- CTime: item.CTime,
- IsYes: 0,
- }
- err := communityListService.CreateCommunityList(info)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- }
- // 8. 根据业务需要处理外部接口返回的数据,例如转换格式、添加额外字段等
- // 这里直接透传给客户端,也可以重新封装
- c.Data["json"] = externalResp
- c.ServeJSON()
- }
- func (c *CommunityListController) GetExternalCommunityList002() {
- // 外部循环 50 次
- for i := 0; i < 100; i++ {
- // 1. 查询数据库中待处理的用户
- records, err := communityListService.GetCommunityListByIsYes()
- if err != nil {
- utils.JSON(&c.Controller, 500, "查询失败: "+err.Error(), nil)
- return
- }
- // 如果本次查询没有数据,说明处理完了,直接跳出大循环
- if len(records) == 0 {
- break
- }
- // 2. 遍历用户
- for _, record := range records {
- // 注意:因为报错提示 mismatched types,说明 record 是值类型而非指针
- // 所以这里不需要 if record == nil 的判断,直接使用即可
- info := &services.CommunityInfo{
- CommunityId: record.CommunityId,
- ParentId: record.ParentId,
- UserId: record.UserId,
- Username: record.Username,
- PromoteName: record.PromoteName,
- Sales: record.Sales,
- TeamSales: record.TeamSales,
- TodayTeamSales: record.TodayTeamSales,
- UserBv: record.UserBv,
- SubStatus: record.SubStatus,
- CTime: record.CTime,
- IsYes: 1, // 标记为已处理
- }
- // 按照业务需求延迟 5 秒
- time.Sleep(5 * time.Second)
- fmt.Println("正在处理用户ID:", info.UserId)
- // 3. 请求外部接口并存入数据库
- communityListService.GoRequestNetCommunityInfo(info.UserId)
- // 4. 修改当前用户状态
- err = communityListService.UpdateCommunityList(info)
- if err != nil {
- utils.JSON(&c.Controller, 500, "更新状态失败: "+err.Error(), nil)
- return
- }
- }
- }
- // 5. 循环全部结束后,正常返回成功
- // 此时 err 为空,所以不能调用 err.Error()
- utils.JSON(&c.Controller, 200, "处理完成", nil)
- }
- // @router /api/community/list [get]
- func (c *CommunityListController) GetCommunityList() {
- // 获取参数
- idStr := c.Ctx.Input.Query("id")
- userId, _ := utils.GetRequestString(&c.Controller, "user_id")
- if idStr != "" {
- // 根据 ID 查询
- id, err := strconv.Atoi(idStr)
- if err != nil {
- utils.JSON(&c.Controller, 400, "invalid id parameter", nil)
- return
- }
- record, err := communityListService.GetCommunityList(id)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- utils.JSON(&c.Controller, 200, "success", record)
- return
- }
- if userId != "" {
- // 根据用户 ID 查询
- record, err := communityListService.GetCommunityListByUserId(userId)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- utils.JSON(&c.Controller, 200, "success", record)
- return
- }
- utils.JSON(&c.Controller, 400, "please provide id or user_id parameter", nil)
- }
- // CreateCommunityList 创建社区列表记录
- // @router /api/community/create [post]
- func (c *CommunityListController) CreateCommunityList() {
- parentId, _ := utils.GetRequestString(&c.Controller, "parent_id")
- userId, _ := utils.GetRequestString(&c.Controller, "user_id")
- username, _ := utils.GetRequestString(&c.Controller, "username")
- promoteName, _ := utils.GetRequestString(&c.Controller, "promote_name")
- sales, _ := utils.GetRequestString(&c.Controller, "sales")
- teamSales, _ := utils.GetRequestString(&c.Controller, "team_sales")
- todayTeamSales, _ := utils.GetRequestString(&c.Controller, "today_team_sales")
- userBv, _ := utils.GetRequestString(&c.Controller, "user_bv")
- subStatus, _ := utils.GetRequestString(&c.Controller, "sub_status")
- cTimeStr := c.Ctx.Input.Query("c_time")
- cTime := int64(0)
- if cTimeStr != "" {
- if ct, err := strconv.ParseInt(cTimeStr, 10, 64); err == nil {
- cTime = ct
- }
- }
- isYesStr := c.Ctx.Input.Query("is_yes")
- isYes := 0
- if isYesStr != "" {
- if iy, err := strconv.Atoi(isYesStr); err == nil {
- isYes = iy
- }
- }
- info := &services.CommunityInfo{
- ParentId: parentId,
- UserId: userId,
- Username: username,
- PromoteName: promoteName,
- Sales: sales,
- TeamSales: teamSales,
- TodayTeamSales: todayTeamSales,
- UserBv: userBv,
- SubStatus: subStatus,
- CTime: cTime,
- IsYes: isYes,
- }
- err := communityListService.CreateCommunityList(info)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- utils.JSON(&c.Controller, 200, "create success", map[string]interface{}{
- "message": "community list record created successfully",
- })
- }
- // UpdateCommunityList 更新社区列表记录
- // @router /api/community/update [post]
- func (c *CommunityListController) UpdateCommunityList() {
- idStr, _ := utils.GetRequestString(&c.Controller, "community_id")
- communityId, err := strconv.Atoi(idStr)
- if err != nil || communityId <= 0 {
- utils.JSON(&c.Controller, 400, "invalid or missing id parameter", nil)
- return
- }
- parentId, _ := utils.GetRequestString(&c.Controller, "parent_id")
- userId, _ := utils.GetRequestString(&c.Controller, "user_id")
- username, _ := utils.GetRequestString(&c.Controller, "username")
- promoteName, _ := utils.GetRequestString(&c.Controller, "promote_name")
- sales, _ := utils.GetRequestString(&c.Controller, "sales")
- teamSales, _ := utils.GetRequestString(&c.Controller, "team_sales")
- todayTeamSales, _ := utils.GetRequestString(&c.Controller, "today_team_sales")
- userBv, _ := utils.GetRequestString(&c.Controller, "user_bv")
- subStatus, _ := utils.GetRequestString(&c.Controller, "sub_status")
- cTimeStr := c.Ctx.Input.Query("c_time")
- cTime := int64(0)
- if cTimeStr != "" {
- if ct, err := strconv.ParseInt(cTimeStr, 10, 64); err == nil {
- cTime = ct
- }
- }
- isYesStr := c.Ctx.Input.Query("is_yes")
- isYes := 0
- if isYesStr != "" {
- if iy, err := strconv.Atoi(isYesStr); err == nil {
- isYes = iy
- }
- }
- info := &services.CommunityInfo{
- CommunityId: communityId,
- ParentId: parentId,
- UserId: userId,
- Username: username,
- PromoteName: promoteName,
- Sales: sales,
- TeamSales: teamSales,
- TodayTeamSales: todayTeamSales,
- UserBv: userBv,
- SubStatus: subStatus,
- CTime: cTime,
- IsYes: isYes,
- }
- err = communityListService.UpdateCommunityList(info)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- utils.JSON(&c.Controller, 200, "update success", map[string]interface{}{
- "message": "community list record updated successfully",
- })
- }
- // GetAllCommunityLists 获取所有社区列表记录(分页)
- // @router /api/community/listAll [get]
- func (c *CommunityListController) GetAllCommunityLists() {
- // 获取分页参数
- pageStr := c.Ctx.Input.Query("page")
- pageSizeStr := c.Ctx.Input.Query("pageSize")
- page := 1
- pageSize := 10
- if pageStr != "" {
- if p, err := strconv.Atoi(pageStr); err == nil && p > 0 {
- page = p
- }
- }
- if pageSizeStr != "" {
- if ps, err := strconv.Atoi(pageSizeStr); err == nil && ps > 0 {
- pageSize = ps
- }
- }
- offset := int64((page - 1) * pageSize)
- limit := int64(pageSize)
- records, total, err := communityListService.GetAllCommunityLists(offset, limit)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- utils.JSON(&c.Controller, 200, "success", map[string]interface{}{
- "list": records,
- "total": total,
- "page": page,
- "pageSize": pageSize,
- })
- }
- // DeleteCommunityList 删除社区列表记录
- // @router /api/community/delete [post]
- func (c *CommunityListController) DeleteCommunityList() {
- idStr, _ := utils.GetRequestString(&c.Controller, "id")
- id, err := strconv.Atoi(idStr)
- if err != nil || id <= 0 {
- utils.JSON(&c.Controller, 400, "invalid or missing id parameter", nil)
- return
- }
- err = communityListService.DeleteCommunityList(id)
- if err != nil {
- utils.JSON(&c.Controller, 500, err.Error(), nil)
- return
- }
- utils.JSON(&c.Controller, 200, "success", map[string]interface{}{
- "message": "community list record deleted successfully",
- })
- }
|