蛋蛋星球-客户端
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 

575 rindas
18 KiB

  1. package hdl
  2. import (
  3. "applet/app/db"
  4. "applet/app/e"
  5. "applet/app/es/hdl"
  6. md2 "applet/app/es/md"
  7. "applet/app/lib/auth"
  8. "applet/app/md"
  9. "applet/app/svc"
  10. "applet/app/utils"
  11. "applet/app/utils/cache"
  12. "applet/app/utils/qrcode"
  13. "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
  14. "code.fnuoos.com/EggPlanet/egg_models.git/src/model"
  15. "code.fnuoos.com/EggPlanet/egg_system_rules.git/baidu"
  16. md3 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md"
  17. md4 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md"
  18. es2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/es"
  19. "code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es"
  20. "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
  21. "context"
  22. "encoding/json"
  23. "fmt"
  24. "github.com/gin-gonic/gin"
  25. "github.com/olivere/elastic/v7"
  26. "github.com/syyongx/php2go"
  27. "github.com/tidwall/gjson"
  28. "strconv"
  29. "strings"
  30. "time"
  31. )
  32. // UserInfo
  33. // @Summary 用户信息
  34. // @Tags 用户信息
  35. // @Description 用户信息
  36. // @Accept json
  37. // @Produce json
  38. // @param Authorization header string true "验证参数Bearer和token空格拼接"
  39. // @Success 200 {object} md.UserInfoResp "具体数据"
  40. // @Failure 400 {object} md.Response "具体错误"
  41. // @Router /api/v1/userInfo [get]
  42. func UserInfo(c *gin.Context) {
  43. user := svc.GetUser(c)
  44. res := md.UserInfoResp{
  45. Id: utils.Int64ToStr(user.Id),
  46. Phone: user.Phone,
  47. Nickname: user.Phone,
  48. InviteCode: user.SystemInviteCode,
  49. IsBindExtend: "0",
  50. }
  51. if user.Avatar == "" {
  52. user.Avatar = svc.GetSysCfgStr("default_avatar")
  53. }
  54. if user.Avatar != "" {
  55. res.HeadImg = svc.GetOssUrl(user.Avatar)
  56. }
  57. if user.CustomInviteCode != "" {
  58. res.InviteCode = user.CustomInviteCode
  59. }
  60. if user.ParentUid > 0 {
  61. res.IsBindExtend = "1"
  62. }
  63. e.OutSuc(c, res, nil)
  64. return
  65. }
  66. // InviteCodeUserInfo
  67. // @Summary 邀请码获取用户信息
  68. // @Tags 登录注册
  69. // @Description 邀请码获取用户信息
  70. // @Accept json
  71. // @Produce json
  72. // @Param req body md.InviteCodeUserInfoReq true "注册参数"
  73. // @Success 200 {object} md.InviteCodeUserInfoResp "具体数据"
  74. // @Failure 400 {object} md.Response "具体错误"
  75. // @Router /api/v1/inviteCode/userInfo [post]
  76. func InviteCodeUserInfo(c *gin.Context) {
  77. var req md.InviteCodeUserInfoReq
  78. err := c.ShouldBindJSON(&req)
  79. if err != nil {
  80. err = svc.HandleValidateErr(err)
  81. err1 := err.(e.E)
  82. e.OutErr(c, err1.Code, err1.Error())
  83. return
  84. }
  85. if req.InviteCode == "" {
  86. e.OutErr(c, 400, e.NewErr(400, "邀请码不能为空"))
  87. return
  88. }
  89. userDb := implement.NewUserDb(db.Db)
  90. user, err := userDb.UserGetOneByParams(map[string]interface{}{
  91. "key": "system_invite_code",
  92. "value": req.InviteCode,
  93. })
  94. if user == nil {
  95. user, _ = userDb.UserGetOneByParams(map[string]interface{}{
  96. "key": "custom_invite_code",
  97. "value": req.InviteCode,
  98. })
  99. if user == nil {
  100. e.OutErr(c, 400, e.NewErr(400, "邀请码失效,请联系上级重新获取分享"))
  101. return
  102. }
  103. }
  104. nickname := user.Nickname
  105. if nickname == "" {
  106. nickname = user.Phone
  107. }
  108. if php2go.IsNumeric(nickname) {
  109. nickname = utils.HideTrueName(user.Nickname)
  110. }
  111. user = svc.UserImg(user)
  112. res := md.InviteCodeUserInfoResp{
  113. Nickname: nickname,
  114. HeadImg: svc.GetOssUrl(user.Avatar),
  115. }
  116. e.OutSuc(c, res, nil)
  117. return
  118. }
  119. // UserBindParent
  120. // @Summary 绑定上级-要登陆的
  121. // @Tags 登录注册
  122. // @Description 绑定上级
  123. // @Accept json
  124. // @Produce json
  125. // @Param req body md.InviteCodeUserInfoReq true "注册参数"
  126. // @Success 200 {string} "具体数据"
  127. // @Failure 400 {object} md.Response "具体错误"
  128. // @Router /api/v1/memberCenter/bindParent [post]
  129. func UserBindParent(c *gin.Context) {
  130. var req md.InviteCodeUserInfoReq
  131. err := c.ShouldBindJSON(&req)
  132. if err != nil {
  133. err = svc.HandleValidateErr(err)
  134. err1 := err.(e.E)
  135. e.OutErr(c, err1.Code, err1.Error())
  136. return
  137. }
  138. if req.InviteCode == "" {
  139. e.OutErr(c, 400, e.NewErr(400, "邀请码不能为空"))
  140. return
  141. }
  142. userDb := implement.NewUserDb(db.Db)
  143. user, err := userDb.UserGetOneByParams(map[string]interface{}{
  144. "key": "system_invite_code",
  145. "value": req.InviteCode,
  146. })
  147. if user == nil {
  148. user, _ = userDb.UserGetOneByParams(map[string]interface{}{
  149. "key": "custom_invite_code",
  150. "value": req.InviteCode,
  151. })
  152. if user == nil {
  153. e.OutErr(c, 400, e.NewErr(400, "用户不存在"))
  154. return
  155. }
  156. }
  157. ownUser := svc.GetUser(c)
  158. if ownUser.ParentUid > 0 {
  159. e.OutErr(c, 400, e.NewErr(400, "已有导师"))
  160. return
  161. }
  162. if user.Id == ownUser.Id {
  163. e.OutErr(c, 400, e.NewErr(400, "不能绑定自己"))
  164. return
  165. }
  166. ownUser.ParentUid = user.Id
  167. _, err = db.Db.Where("id=?", ownUser.Id).Cols("parent_uid").Update(ownUser)
  168. if err != nil {
  169. e.OutErr(c, 400, e.NewErr(400, "绑定失败,请重试"))
  170. return
  171. }
  172. initLV := 1
  173. ur := new(model.UserRelate)
  174. ur.ParentUid = user.Id
  175. ur.Uid = ownUser.Id
  176. ur.Level = initLV
  177. ur.InviteTime = ownUser.CreateAt
  178. userRelateDb := implement.NewUserRelateDb(db.Db)
  179. _, err = userRelateDb.UserRelateInsert(ur)
  180. if err != nil {
  181. e.OutErr(c, e.ERR_DB_ORM, err)
  182. return
  183. }
  184. // 插入多级关联
  185. go svc.RoutineMultiRelate(ur.ParentUid, ur.Uid, initLV)
  186. //TODO 绑定成功后 加群之类的怎么处理
  187. if ownUser.ParentUid > 0 {
  188. //TODO::推入mq异步处理
  189. ch, err := rabbit.Cfg.Pool.GetChannel()
  190. if err != nil {
  191. e.OutErr(c, e.ERR_INIT_RABBITMQ, err.Error())
  192. return
  193. }
  194. defer ch.Release()
  195. ch.Publish(md4.EggAppExchange, md4.AddPublicPlatoonUserRelationCommissionReq{RecommendUid: utils.Int64ToStr(ownUser.ParentUid), Uid: utils.Int64ToStr(ownUser.Id)}, md4.EggRoutKeyForAddPublicPlatoonUserRelationCommission)
  196. }
  197. e.OutSuc(c, "success", nil)
  198. return
  199. }
  200. // BindUserInfo
  201. // @Summary 绑定用户信息
  202. // @Tags 会员中心
  203. // @Description 绑定用户信息
  204. // @Accept json
  205. // @Produce json
  206. // @Param req body md.WechatAccountUserInfoReq true "注册参数"
  207. // @Success 200 {string} "具体数据"
  208. // @Failure 400 {object} md.Response "具体错误"
  209. // @Router /api/v1/memberCenter/bindUserInfo [post]
  210. func BindUserInfo(c *gin.Context) {
  211. var req md.WechatAccountUserInfoReq
  212. err := c.ShouldBindJSON(&req)
  213. if err != nil {
  214. err = svc.HandleValidateErr(err)
  215. err1 := err.(e.E)
  216. e.OutErr(c, err1.Code, err1.Error())
  217. return
  218. }
  219. ownUser := svc.GetUser(c)
  220. cols := ""
  221. if req.Nickname != "" {
  222. ownUser.Nickname = req.Nickname
  223. cols += ",nickname"
  224. }
  225. if req.HeadImg != "" {
  226. ownUser.Avatar = req.HeadImg
  227. cols += ",avatar"
  228. }
  229. if req.WechatAccount != "" {
  230. ownUser.WechatAccount = req.WechatAccount
  231. cols += ",wechat_account"
  232. }
  233. if cols == "" {
  234. e.OutErr(c, 400, e.NewErr(400, "修改失败"))
  235. return
  236. }
  237. _, err = db.Db.Where("id=?", ownUser.Id).Cols(cols[1:]).Update(ownUser)
  238. if err != nil {
  239. e.OutErr(c, 400, e.NewErr(400, "修改失败"))
  240. return
  241. }
  242. e.OutSuc(c, "success", nil)
  243. return
  244. }
  245. // UpdatePassword
  246. // @Summary 修改密码-不要原密码 换成验证码
  247. // @Tags 账号与安全
  248. // @Description 修改密码
  249. // @Accept json
  250. // @Produce json
  251. // @Param req body md.UpdatePasswordReq true "注册参数"
  252. // @Success 200 string "登录成功返回"
  253. // @Failure 400 {object} md.Response "具体错误"
  254. // @Router /api/v1/memberCenter/updatePassword [post]
  255. func UpdatePassword(c *gin.Context) {
  256. var req md.UpdatePasswordReq
  257. err := c.ShouldBindJSON(&req)
  258. if err != nil {
  259. err = svc.HandleValidateErr(err)
  260. err1 := err.(e.E)
  261. e.OutErr(c, err1.Code, err1.Error())
  262. return
  263. }
  264. user := svc.GetUser(c)
  265. //校验短信
  266. err = svc.CommSmsCheck(c, user.Phone, req.Code)
  267. if err != nil {
  268. e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试"))
  269. return
  270. }
  271. user.Password = utils.Md5(req.Password)
  272. db.Db.Where("id=?", user.Id).Cols("password").Update(user)
  273. e.OutSuc(c, "success", nil)
  274. return
  275. }
  276. // UpdatePasscode
  277. // @Summary 修改支付宝密码
  278. // @Tags 账号与安全
  279. // @Description 修改支付宝密码
  280. // @Accept json
  281. // @Produce json
  282. // @Param req body md.UpdatePasscodeReq true "注册参数"
  283. // @Success 200 string "登录成功返回"
  284. // @Failure 400 {object} md.Response "具体错误"
  285. // @Router /api/v1/memberCenter/updatePasscode [post]
  286. func UpdatePasscode(c *gin.Context) {
  287. var req md.UpdatePasscodeReq
  288. err := c.ShouldBindJSON(&req)
  289. if err != nil {
  290. err = svc.HandleValidateErr(err)
  291. err1 := err.(e.E)
  292. e.OutErr(c, err1.Code, err1.Error())
  293. return
  294. }
  295. user := svc.GetUser(c)
  296. //校验短信
  297. err = svc.CommSmsCheck(c, user.Phone, req.Code)
  298. if err != nil {
  299. e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试"))
  300. return
  301. }
  302. user.Passcode = utils.Md5(req.PassCode)
  303. db.Db.Where("id=?", user.Id).Cols("passcode").Update(user)
  304. e.OutSuc(c, "success", nil)
  305. return
  306. }
  307. // InviteUrl
  308. // @Summary 邀请链接
  309. // @Tags 邀请海报
  310. // @Description 邀请链接
  311. // @Accept json
  312. // @Produce json
  313. // @Success 200 {object} md.InviteUrl "登录成功返回"
  314. // @Failure 400 {object} md.Response "具体错误"
  315. // @Router /api/v1/memberCenter/inviteUrl [get]
  316. func InviteUrl(c *gin.Context) {
  317. user := svc.GetUser(c)
  318. link := svc.GetSysCfgStr("kuaizhan_url") + "?type="
  319. res := md.InviteUrl{
  320. Link: "",
  321. InviteCode: user.SystemInviteCode,
  322. }
  323. if user.CustomInviteCode != "" {
  324. res.InviteCode = user.CustomInviteCode
  325. }
  326. _, registerViewUrl, _ := svc.DownUrl(c)
  327. if registerViewUrl != "" {
  328. link = registerViewUrl
  329. }
  330. link += "&inviteCode=" + res.InviteCode
  331. EggUserShortLink := md2.EggUserShortLink
  332. boolQueryToItem := elastic.NewBoolQuery() // 创建bool查询
  333. aggsMatch := elastic.NewMatchQuery("link", link) //设置查询条件
  334. boolQueryToItem.Must(aggsMatch)
  335. result, _ := hdl.EsSelectOne(context.Background(), EggUserShortLink, boolQueryToItem, false)
  336. isHas := 0
  337. if result != nil && len(result.Hits.Hits) > 0 {
  338. for _, hit := range result.Hits.Hits {
  339. if hit == nil {
  340. continue
  341. }
  342. jsonByte, _ := hit.Source.MarshalJSON()
  343. if gjson.Get(string(jsonByte), "short_link").String() != "" && gjson.Get(string(jsonByte), "date").Int() > time.Now().Unix() {
  344. isHas = 1
  345. link = gjson.Get(string(jsonByte), "short_link").String()
  346. }
  347. }
  348. }
  349. if isHas == 0 {
  350. url, _ := baidu.BaiduShortenUrl(svc.GetSysCfgStr("baidu_token"), link)
  351. if url != "" {
  352. var uniqueId = php2go.Md5(link)
  353. oldLink := link
  354. link = url
  355. tmp := map[string]interface{}{
  356. "uid": user.Id,
  357. "link": oldLink,
  358. "short_link": link,
  359. "date": time.Now().Unix() + 365*86400,
  360. }
  361. doc, _ := es.FirstDoc(EggUserShortLink, uniqueId)
  362. if doc == nil {
  363. es.CreateDoc(EggUserShortLink, uniqueId, tmp)
  364. } else {
  365. es.UpdateDoc(EggUserShortLink, uniqueId, tmp)
  366. }
  367. }
  368. }
  369. res.Link = link
  370. QRcode := qrcode.GetPNGBase64(link)
  371. QRcode = strings.ReplaceAll(QRcode, "\u0000", "")
  372. res.Qrcode = QRcode
  373. e.OutSuc(c, res, nil)
  374. return
  375. }
  376. // ParentInfo
  377. // @Summary 导师信息
  378. // @Tags 会员中心
  379. // @Description 导师信息
  380. // @Accept json
  381. // @Produce json
  382. // @Success 200 {object} md.ParentInfo "登录成功返回"
  383. // @Failure 400 {object} md.Response "具体错误"
  384. // @Router /api/v1/memberCenter/parentInfo [get]
  385. func ParentInfo(c *gin.Context) {
  386. ownUser := svc.GetUser(c)
  387. publicPlatoonBasicDb := implement.NewPublicPlatoonBasicSettingDb(db.Db)
  388. publicPlatoonBasic, _ := publicPlatoonBasicDb.PublicPlatoonBasicSettingGetOne()
  389. if publicPlatoonBasic != nil && int(ownUser.Id) == publicPlatoonBasic.OriginatorUid {
  390. ownUser.ParentUid = ownUser.Id
  391. }
  392. if ownUser.ParentUid == 0 {
  393. e.OutSuc(c, md.ParentInfo{}, nil)
  394. return
  395. }
  396. NewUserDb := implement.NewUserDb(db.Db)
  397. user, _ := NewUserDb.GetUser(ownUser.ParentUid)
  398. // 1. 获取会员等级名称
  399. userLevelDb := implement.NewUserLevelDb(db.Db)
  400. level, err := userLevelDb.UserLevelByID(user.Level)
  401. if err != nil {
  402. e.OutErr(c, e.ERR_DB_ORM, nil)
  403. return
  404. }
  405. code := user.SystemInviteCode
  406. if user.CustomInviteCode != "" {
  407. code = user.CustomInviteCode
  408. }
  409. imUser, err1 := svc.GetImUser(0, user.Phone)
  410. if err1 != nil {
  411. e.OutErr(c, e.ERR, err1.Error())
  412. return
  413. }
  414. var imUid = "0"
  415. if imUser != nil {
  416. imUid = strconv.FormatInt(imUser.UserId, 10)
  417. }
  418. res := md.ParentInfo{
  419. Nickname: user.Nickname,
  420. LevelName: level.LevelName,
  421. InviteCode: code,
  422. HeadImg: svc.GetOssUrl(user.Avatar),
  423. Id: utils.Int64ToStr(user.Id),
  424. Phone: user.Phone,
  425. WechatAccount: user.WechatAccount,
  426. ImUid: imUid,
  427. }
  428. e.OutSuc(c, res, nil)
  429. return
  430. }
  431. // Delete
  432. // @Summary 注销账号操作
  433. // @Tags 账号与安全
  434. // @Description 注销账号操作
  435. // @Accept json
  436. // @Produce json
  437. // @Param req body md.DeleteUserReq true "注册参数"
  438. // @Success 200 string "登录成功返回"
  439. // @Failure 400 {object} md.Response "具体错误"
  440. // @Router /api/v1/memberCenter/delete [post]
  441. func Delete(c *gin.Context) {
  442. var req md.DeleteUserReq
  443. err := c.ShouldBindJSON(&req)
  444. if err != nil {
  445. err = svc.HandleValidateErr(err)
  446. err1 := err.(e.E)
  447. e.OutErr(c, err1.Code, err1.Error())
  448. return
  449. }
  450. user := svc.GetUser(c)
  451. //校验短信
  452. err = svc.CommSmsCheck(c, user.Phone, req.Code)
  453. if err != nil {
  454. e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试"))
  455. return
  456. }
  457. user.State = 3
  458. db.Db.Where("id=?", user.Id).Cols("state").Update(user)
  459. tmp := model.UserDeleteInfo{
  460. Uid: int(user.Id),
  461. Phone: user.Phone,
  462. ParentUid: int(user.ParentUid),
  463. CreateAt: time.Now(),
  464. }
  465. db.Db.Insert(&tmp)
  466. ch, err := rabbit.Cfg.Pool.GetChannel()
  467. if err == nil {
  468. defer ch.Release()
  469. err = ch.PublishV2(md.EggUserExchange, md.CommUserId{
  470. Uid: utils.Int64ToStr(user.Id),
  471. ParentUid: utils.Int64ToStr(user.ParentUid),
  472. }, md.EggUserDelete)
  473. if err != nil {
  474. ch.PublishV2(md.EggUserExchange, md.CommUserId{
  475. Uid: utils.Int64ToStr(user.Id),
  476. ParentUid: utils.Int64ToStr(user.ParentUid),
  477. }, md.EggUserDelete)
  478. }
  479. }
  480. // 清掉token
  481. cacheKey := fmt.Sprintf(auth.TokenKey, user.Id)
  482. _, err = cache.SetEx(cacheKey, "", 1)
  483. e.OutSuc(c, "success", nil)
  484. return
  485. }
  486. // DeleteInfo
  487. // @Summary 注销账号信息
  488. // @Tags 账号与安全
  489. // @Description 注销账号信息
  490. // @Accept json
  491. // @Produce json
  492. // @Success 200 {object} md.UserDeleteInfo "登录成功返回"
  493. // @Failure 400 {object} md.Response "具体错误"
  494. // @Router /api/v1/memberCenter/delete/info [get]
  495. func DeleteInfo(c *gin.Context) {
  496. user := svc.GetUser(c)
  497. resp := md.UserDeleteInfo{
  498. Url: fmt.Sprintf("%s%s?id=%s&is_hide=1", svc.GetSysCfgStr("wap_host"), "/#/pages/course-detail-page/course-detail-page", "115"),
  499. }
  500. extendUserCount, _ := db.Db.Where("parent_uid=?", user.Id).Count(&model.User{})
  501. NewUserWalletDb := implement.NewUserWalletDb(db.Db)
  502. walletAmount := "0"
  503. wallet, _ := NewUserWalletDb.GetUserVirtualWallet(user.Id)
  504. if wallet != nil {
  505. walletAmount = wallet.Amount
  506. }
  507. NewUserVirtualAmountDb := implement.NewUserVirtualAmountDb(db.Db)
  508. virtualWallet, _ := NewUserVirtualAmountDb.GetUserVirtualAllWallets(user.Id)
  509. virtualAmount1 := "0"
  510. virtualAmount2 := "0"
  511. virtualAmount3 := "0"
  512. settingDb := implement.NewEggEnergyBasicSettingDb(db.Db)
  513. setting, _ := settingDb.EggEnergyBasicSettingGetOne()
  514. if virtualWallet != nil {
  515. for _, v := range *virtualWallet {
  516. if v.CoinId == setting.PersonEggPointsCoinId {
  517. virtualAmount3 = utils.Float64ToStrPrec8(utils.StrToFloat64(v.Amount) + utils.StrToFloat64(virtualAmount3))
  518. }
  519. if v.CoinId == setting.TeamEggPointsCoinId {
  520. virtualAmount3 = utils.Float64ToStrPrec8(utils.StrToFloat64(v.Amount) + utils.StrToFloat64(virtualAmount3))
  521. }
  522. if v.CoinId == setting.PersonEggEnergyCoinId {
  523. virtualAmount2 = utils.Float64ToStrPrec8(utils.StrToFloat64(v.Amount) + utils.StrToFloat64(virtualAmount2))
  524. }
  525. if v.CoinId == setting.TeamEggEnergyCoinId {
  526. virtualAmount2 = utils.Float64ToStrPrec8(utils.StrToFloat64(v.Amount) + utils.StrToFloat64(virtualAmount2))
  527. }
  528. if v.CoinId == setting.ContributionCoinId {
  529. virtualAmount1 = utils.Float64ToStrPrec8(utils.StrToFloat64(v.Amount) + utils.StrToFloat64(virtualAmount1))
  530. }
  531. }
  532. }
  533. score := 60.00
  534. now := time.Now()
  535. esIndex := es2.GetLatestEffectiveIndexFromAlias(now)
  536. esIndexName := md3.EggEnergyUserEggScoreEsAlias + "_" + esIndex
  537. results, _ := es.FirstDoc(esIndexName, esIndex+"_"+utils.Int64ToStr(user.Id))
  538. if results != nil {
  539. var doc md.UserEggFlowReqRespList
  540. json.Unmarshal(results.Source, &doc)
  541. score = doc.ScoreValue
  542. }
  543. uid := user.Id
  544. sql := fmt.Sprintf("SELECT COUNT(*)AS total FROM `public_platoon_user_relation` WHERE father_uid1 = %d OR father_uid2= %d OR father_uid3= %d OR father_uid4= %d OR father_uid5= %d OR father_uid6= %d OR father_uid7= %d OR father_uid8= %d OR father_uid9= %d", uid, uid, uid, uid, uid, uid, uid, uid, uid)
  545. nativeString1, _ := db.QueryNativeString(db.Db, sql)
  546. hasUserCount := "0"
  547. if len(nativeString1) > 0 {
  548. hasUserCount = nativeString1[0]["total"]
  549. }
  550. info := []md.UserDeleteInfoList{
  551. {Title: "贡献值", Content: "贡献值 " + virtualAmount1},
  552. {Title: "能量值", Content: "能量值 " + virtualAmount2},
  553. {Title: "活跃值", Content: "活跃值 " + virtualAmount3},
  554. {Title: "蛋蛋分", Content: "蛋蛋分 " + utils.Float64ToStr(score)},
  555. {Title: "余额", Content: "余额 " + walletAmount},
  556. {Title: "直推好友", Content: "直推好友 " + utils.Int64ToStr(extendUserCount) + " 人"},
  557. {Title: "团队", Content: "团队 " + hasUserCount + " 人"},
  558. }
  559. resp.Info = info
  560. e.OutSuc(c, resp, nil)
  561. return
  562. }