From 42b9d489e032767cb39d232bf56be05519cd7f6b Mon Sep 17 00:00:00 2001 From: shenjiachi Date: Fri, 22 Nov 2024 15:26:43 +0800 Subject: [PATCH] add member center --- app/hdl/hdl_member_center.go | 159 +++++++++++++++++++++++++++++++++++ app/md/md_member_center.go | 34 ++++++++ app/router/router.go | 4 + docs/docs.go | 92 ++++++++++++++++++-- docs/swagger.json | 87 ++++++++++++++++++- docs/swagger.yaml | 61 +++++++++++++- go.mod | 2 +- 7 files changed, 428 insertions(+), 11 deletions(-) create mode 100644 app/hdl/hdl_member_center.go create mode 100644 app/md/md_member_center.go diff --git a/app/hdl/hdl_member_center.go b/app/hdl/hdl_member_center.go new file mode 100644 index 0000000..742614e --- /dev/null +++ b/app/hdl/hdl_member_center.go @@ -0,0 +1,159 @@ +package hdl + +import ( + "applet/app/db" + "applet/app/e" + "applet/app/md" + "applet/app/utils" + "code.fnuoos.com/EggPlanet/egg_models.git/src/implement" + "code.fnuoos.com/EggPlanet/egg_models.git/src/model" + es2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/es" + "code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es" + "context" + "encoding/json" + "github.com/gin-gonic/gin" + "github.com/olivere/elastic/v7" + "github.com/shopspring/decimal" + "time" +) + +// MemberCenterGetBasic +// @Summary 蛋蛋星球-会员中心-基础数据(获取) +// @Tags 会员中心 +// @Description 基础数据(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Success 200 {object} md.MemberCenterGetBasicResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/memberCenter/getBasic [GET] +func MemberCenterGetBasic(c *gin.Context) { + val, exists := c.Get("user") + if !exists { + e.OutErr(c, e.ERR_USER_CHECK_ERR, nil) + return + } + user, ok := val.(*model.User) + if !ok { + e.OutErr(c, e.ERR_USER_CHECK_ERR, nil) + return + } + + // 1. 获取会员等级名称 + userLevelDb := implement.NewUserLevelDb(db.Db) + level, err := userLevelDb.UserLevelByID(user.Level) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + + // 2. 获取基础设置 + settingDb := implement.NewEggEnergyBasicSettingDb(db.Db) + setting, err := settingDb.EggEnergyBasicSettingGetOne() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + + // 3. 查询余额 + virtualAmountDb := implement.NewUserVirtualAmountDb(db.Db) + // 3.1 活跃积分(蛋蛋积分 = 团队 + 个人) + eggPersonalPoint, err := virtualAmountDb.GetUserVirtualWalletBySession(user.Id, setting.PersonEggPointsCoinId) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + eggTeamPoint, err := virtualAmountDb.GetUserVirtualWalletBySession(user.Id, setting.TeamEggPointsCoinId) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + eggPoint := utils.StrToFloat64(eggPersonalPoint.Amount) + utils.StrToFloat64(eggTeamPoint.Amount) + // 3.2 蛋蛋能量 (个人 + 团队) + eggPersonalEnergy, err := virtualAmountDb.GetUserVirtualWalletBySession(user.Id, setting.PersonEggEnergyCoinId) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + eggTeamEnergy, err := virtualAmountDb.GetUserVirtualWalletBySession(user.Id, setting.TeamEggEnergyCoinId) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + eggEnergy := utils.StrToFloat64(eggPersonalEnergy.Amount) + utils.StrToFloat64(eggTeamEnergy.Amount) + // 3.3 钱包余额 + walletDb := implement.NewUserWalletDb(db.Db) + wallet, err := walletDb.GetUserVirtualWallet(user.Id) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + // 3.4 贡献值 + contributionValue, err := virtualAmountDb.GetUserVirtualWalletBySession(user.Id, setting.ContributionCoinId) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + + coreDataDb := implement.NewEggEnergyCoreDataDb(db.Db) + coreData, err := coreDataDb.EggEnergyCoreDataGet() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + + // 4. 预估蛋蛋能量价值 + nowPrice, err := decimal.NewFromString(coreData.NowPrice) + if err != nil { + e.OutErr(c, e.ERR_UNMARSHAL, nil) + return + } + eggEnergyValue := nowPrice.Mul(decimal.NewFromFloat(eggEnergy)) + + // 5. 查询蛋蛋分 + now := time.Now().Add(-7 * time.Hour * 24) + esIndexName := es2.GetLatestEffectiveIndexFromAlias(now) + // 构建查询条件 + boolQuery := elastic.NewBoolQuery() + boolQuery.Filter(elastic.NewTermQuery("uid", user.Id)) + searchResult, err := es.EsClient.Search(). + Index(esIndexName). + Query(boolQuery). + Pretty(true). + Do(context.Background()) + + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + var results []md.UserEggFlowReqRespList + // 检查是否有结果 + if searchResult.Hits.TotalHits.Value != 0 { + // 解析结果 + for _, hit := range searchResult.Hits.Hits { + var doc md.UserEggFlowReqRespList + err = json.Unmarshal(hit.Source, &doc) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + results = append(results, doc) + } + } + score := results[0].ScoreValue + + resp := md.MemberCenterGetBasicResp{ + Nickname: user.Nickname, + LevelName: level.LevelName, + ActiveNum: utils.Float64ToStr(eggPoint), + EggScore: utils.Float64ToStr(score), + EggEnergy: utils.Float64ToStr(eggEnergy), + EggEnergyValue: eggEnergyValue.String(), + ContributionValue: contributionValue.Amount, + Date: "29", + Ratio: "1:1000", + Amount: wallet.Amount, + } + e.OutSuc(c, resp, nil) + return +} diff --git a/app/md/md_member_center.go b/app/md/md_member_center.go new file mode 100644 index 0000000..27c29e8 --- /dev/null +++ b/app/md/md_member_center.go @@ -0,0 +1,34 @@ +package md + +type MemberCenterGetBasicResp struct { + Nickname string `json:"nickname"` // 会员名称 + LevelName string `json:"level_name"` // 会员等级名称 + ActiveNum string `json:"active_num"` // 活跃值 + EggScore string `json:"egg_score"` // 蛋蛋分 + EggEnergy string `json:"egg_energy"` // 能量值 + EggEnergyValue string `json:"egg_energy_value"` // 能量预估价值 + ContributionValue string `json:"contribution_value"` // 贡献值 + Date string `json:"date"` // 兑换时间(每月x日) + Ratio string `json:"ratio"` // 兑换比例(x:y) + Amount string `json:"amount"` // 账户余额 +} + +type UserEggFlowReqRespList struct { + IndexId string `json:"index_id"` //文档id + ScoreValue float64 `json:"score_value"` //蛋蛋分-起始值 + ScoreValueKind int `json:"score_value_kind"` //评分类型(0:未知 1:人工 2:系统) + Ecpm float64 `json:"ecpm"` //ecpm + InviteUserNums int `json:"invite_user_nums"` //拉新人数 + TeamActivityNums int `json:"team_activity_nums"` //团队活跃次数 + SignInNums int `json:"sign_in_nums"` //签到次数 + ImActivityNums int `json:"im_activity_nums"` //im活跃次数 + SendRedPackageNums int `json:"send_red_package_nums"` //发红包次数 + EggEnergyExchangeAccountBalance int `json:"egg_energy_exchange_account_balance"` //蛋蛋能量兑换余额数量 + AccountBalanceExchangeEggEnergyNums int `json:"account_balance_exchange_egg_energy_nums"` //余额兑换蛋蛋能量数量 + SendCircleOfFriendNums int `json:"send_circle_of_friend_nums"` //发朋友圈次数 + ForumCommentsNums int `json:"forum_comments_nums"` //论坛评论次数 + CollegeLearningNums int `json:"college_learning_nums"` //学院学习次数 + ViolateNums int `json:"violate_nums"` //违规次数 + BrowseInterfaceNums int `json:"browse_interface_nums"` //浏览界面次数 + PersonAddActivityValue int `json:"person_add_activity_value"` //个人活跃积分 +} diff --git a/app/router/router.go b/app/router/router.go index ebc97bc..35a420c 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -77,6 +77,10 @@ func route(r *gin.RouterGroup) { rAddFriend.GET("/myFansUserList", hdl.MyFansUserList) // 添加好友-我的粉丝-好友列表 rAddFriend.GET("/nineDimensionalSpace", hdl.NineDimensionalSpace) // 添加好友-我的粉丝-九维空间 } + rMemberCenter := r.Group("/memberCenter") + { + rMemberCenter.GET("/getBasic", hdl.MemberCenterGetBasic) // 会员中心-基础数据 + } } diff --git a/docs/docs.go b/docs/docs.go index 26bc9cd..1e19bb1 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1,5 +1,4 @@ -// Code generated by swaggo/swag. DO NOT EDIT. - +// Package docs Code generated by swaggo/swag. DO NOT EDIT package docs import "github.com/swaggo/swag" @@ -617,6 +616,44 @@ const docTemplate = `{ } } }, + "/api/v1/memberCenter/getBasic": { + "get": { + "description": "基础数据(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会员中心" + ], + "summary": "蛋蛋星球-会员中心-基础数据(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.MemberCenterGetBasicResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/register": { "post": { "description": "注册", @@ -716,9 +753,7 @@ const docTemplate = `{ "name": "req", "in": "body", "required": true, - "schema": { - "type": "object" - } + "schema": {} } ], "responses": { @@ -1135,6 +1170,51 @@ const docTemplate = `{ } } }, + "md.MemberCenterGetBasicResp": { + "type": "object", + "properties": { + "active_num": { + "description": "活跃值", + "type": "string" + }, + "amount": { + "description": "账户余额", + "type": "string" + }, + "contribution_value": { + "description": "贡献值", + "type": "string" + }, + "date": { + "description": "兑换时间(每月x日)", + "type": "string" + }, + "egg_energy": { + "description": "能量值", + "type": "string" + }, + "egg_energy_value": { + "description": "能量预估价值", + "type": "string" + }, + "egg_score": { + "description": "蛋蛋分", + "type": "string" + }, + "level_name": { + "description": "会员等级名称", + "type": "string" + }, + "nickname": { + "description": "会员名称", + "type": "string" + }, + "ratio": { + "description": "兑换比例(x:y)", + "type": "string" + } + } + }, "md.MyFansResp": { "type": "object", "properties": { @@ -1416,6 +1496,8 @@ var SwaggerInfo = &swag.Spec{ Description: "APP客户端-Api接口", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", } func init() { diff --git a/docs/swagger.json b/docs/swagger.json index 0d68ed2..11b3add 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -610,6 +610,44 @@ } } }, + "/api/v1/memberCenter/getBasic": { + "get": { + "description": "基础数据(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "会员中心" + ], + "summary": "蛋蛋星球-会员中心-基础数据(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.MemberCenterGetBasicResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/register": { "post": { "description": "注册", @@ -709,9 +747,7 @@ "name": "req", "in": "body", "required": true, - "schema": { - "type": "object" - } + "schema": {} } ], "responses": { @@ -1128,6 +1164,51 @@ } } }, + "md.MemberCenterGetBasicResp": { + "type": "object", + "properties": { + "active_num": { + "description": "活跃值", + "type": "string" + }, + "amount": { + "description": "账户余额", + "type": "string" + }, + "contribution_value": { + "description": "贡献值", + "type": "string" + }, + "date": { + "description": "兑换时间(每月x日)", + "type": "string" + }, + "egg_energy": { + "description": "能量值", + "type": "string" + }, + "egg_energy_value": { + "description": "能量预估价值", + "type": "string" + }, + "egg_score": { + "description": "蛋蛋分", + "type": "string" + }, + "level_name": { + "description": "会员等级名称", + "type": "string" + }, + "nickname": { + "description": "会员名称", + "type": "string" + }, + "ratio": { + "description": "兑换比例(x:y)", + "type": "string" + } + } + }, "md.MyFansResp": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b1f1bad..965a906 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -247,6 +247,39 @@ definitions: token: type: string type: object + md.MemberCenterGetBasicResp: + properties: + active_num: + description: 活跃值 + type: string + amount: + description: 账户余额 + type: string + contribution_value: + description: 贡献值 + type: string + date: + description: 兑换时间(每月x日) + type: string + egg_energy: + description: 能量值 + type: string + egg_energy_value: + description: 能量预估价值 + type: string + egg_score: + description: 蛋蛋分 + type: string + level_name: + description: 会员等级名称 + type: string + nickname: + description: 会员名称 + type: string + ratio: + description: 兑换比例(x:y) + type: string + type: object md.MyFansResp: properties: now_team_assistance_num: @@ -832,6 +865,31 @@ paths: summary: 登陆 tags: - 登录 + /api/v1/memberCenter/getBasic: + get: + consumes: + - application/json + description: 基础数据(获取) + parameters: + - description: 验证参数Bearer和token空格拼接 + in: header + name: Authorization + required: true + type: string + produces: + - application/json + responses: + "200": + description: 具体数据 + schema: + $ref: '#/definitions/md.MemberCenterGetBasicResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-会员中心-基础数据(获取) + tags: + - 会员中心 /api/v1/register: post: consumes: @@ -894,8 +952,7 @@ paths: in: body name: req required: true - schema: - type: object + schema: {} produces: - application/json responses: diff --git a/go.mod b/go.mod index 5f45759..4ac74ad 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( require ( code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241122012509-ceb61ba8203c - code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241122035952-de4df98d64dc + code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241122063050-e7a72a7c807c code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible