From 31ec717853e3e4df28769ef2d669fd6b2e8beeb6 Mon Sep 17 00:00:00 2001 From: shenjiachi Date: Sat, 23 Nov 2024 17:35:48 +0800 Subject: [PATCH] add wallet and points center --- app/hdl/hdl_member_center.go | 2 +- app/hdl/hdl_points_center.go | 395 +++++++++++++++++++++++- app/hdl/hdl_wallet.go | 94 ++++++ app/md/md.wallet.go | 23 ++ app/md/md_member_center.go | 1 + app/md/md_points_center.go | 44 ++- app/router/router.go | 10 +- app/svc/svc_common.go | 24 ++ app/svc/svc_points_center.go | 136 +++++++++ docs/docs.go | 578 ++++++++++++++++++++++++++++++++++- docs/swagger.json | 573 +++++++++++++++++++++++++++++++++- docs/swagger.yaml | 398 +++++++++++++++++++++++- go.mod | 4 +- 13 files changed, 2241 insertions(+), 41 deletions(-) create mode 100644 app/hdl/hdl_wallet.go create mode 100644 app/md/md.wallet.go create mode 100644 app/svc/svc_points_center.go diff --git a/app/hdl/hdl_member_center.go b/app/hdl/hdl_member_center.go index 742614e..723f8cb 100644 --- a/app/hdl/hdl_member_center.go +++ b/app/hdl/hdl_member_center.go @@ -111,7 +111,7 @@ func MemberCenterGetBasic(c *gin.Context) { eggEnergyValue := nowPrice.Mul(decimal.NewFromFloat(eggEnergy)) // 5. 查询蛋蛋分 - now := time.Now().Add(-7 * time.Hour * 24) + now := time.Now() esIndexName := es2.GetLatestEffectiveIndexFromAlias(now) // 构建查询条件 boolQuery := elastic.NewBoolQuery() diff --git a/app/hdl/hdl_points_center.go b/app/hdl/hdl_points_center.go index 2b753b8..e3f6b79 100644 --- a/app/hdl/hdl_points_center.go +++ b/app/hdl/hdl_points_center.go @@ -5,7 +5,9 @@ import ( "applet/app/db" "applet/app/e" "applet/app/md" + "applet/app/svc" "applet/app/utils" + "applet/app/utils/cache" "code.fnuoos.com/EggPlanet/egg_models.git/src/implement" "code.fnuoos.com/EggPlanet/egg_models.git/src/model" "code.fnuoos.com/EggPlanet/egg_system_rules.git" @@ -14,23 +16,26 @@ import ( "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule" "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy" md3 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" - "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/svc" + svc2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/svc" + "errors" "fmt" "github.com/gin-gonic/gin" "github.com/shopspring/decimal" "time" ) +const PointsCenterCalcExchangeRedisKey = "Points_Center_Cache_Key" + // PointsCenterGetBasic -// @Summary 蛋蛋星球-积分中心-基础信息(获取) +// @Summary 蛋蛋星球-积分中心-上部分基础信息(获取) // @Tags 积分中心 -// @Description 基础信息(获取) +// @Description 上部分基础信息(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Success 200 {object} md.PointsCenterGetBasicResp "具体数据" // @Failure 400 {object} md.Response "具体错误" -// @Router /api/v1/pointsCenter/getBasic [GET] +// @Router /api/v1/pointsCenter/basic [GET] func PointsCenterGetBasic(c *gin.Context) { val, exists := c.Get("user") if !exists { @@ -43,6 +48,238 @@ func PointsCenterGetBasic(c *gin.Context) { return } + settingDb := implement.NewEggEnergyBasicSettingDb(db.Db) + setting, err := settingDb.EggEnergyBasicSettingGetOne() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + + virtualAmountDb := implement.NewUserVirtualAmountDb(db.Db) + // 蛋蛋能量 (个人 + 团队) + 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) + + // 蛋蛋能量价值 + coreDataDb := implement.NewEggEnergyCoreDataDb(db.Db) + coreData, err := coreDataDb.EggEnergyCoreDataGet() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + eggEnergyAmount := utils.StrToFloat64(coreData.NowPrice) * eggEnergy + + // 活跃积分(蛋蛋积分 = 团队 + 个人) + 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) + + // 蛋蛋积分价值 + coinDb := implement.NewVirtualCoinDb(db.Db) + coin, err := coinDb.VirtualCoinGetOneByParams(map[string]interface{}{ + "key": "id", + "value": setting.PersonEggPointsCoinId, + }) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + var eggPointValue decimal.Decimal + if coin != nil { + ratio, _ := decimal.NewFromString(coin.ExchangeRatio) + eggPointValue = decimal.NewFromFloat(eggPoint).Div(ratio) + } + eggPointValue = decimal.NewFromInt(0) + + // 账户余额 + walletDb := implement.NewUserWalletDb(db.Db) + wallet, err := walletDb.GetUserVirtualWallet(user.Id) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + + resp := md.PointsCenterGetBasicResp{ + Energy: utils.Float64ToStr(eggEnergy), + EnergyValue: utils.Float64ToStr(eggEnergyAmount), + WalletAmount: wallet.Amount, + EggPoint: utils.Float64ToStr(eggPoint), + EggPointValue: eggPointValue.String(), + } + e.OutSuc(c, resp, nil) +} + +// InitialData +// @Summary 蛋蛋星球-积分中心-初始数据(获取) +// @Tags 积分中心 +// @Description 初始数据(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Success 200 {object} md.InitialDataResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/pointsCenter/initialData [GET] +func InitialData(c *gin.Context) { + settingDb := implement.NewEggEnergyBasicSettingDb(db.Db) + setting, err := settingDb.EggEnergyBasicSettingGetOne() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + resp := md.InitialDataResp{ + InitialPrice: setting.InitialPrice, + TotalIssuanceAmount: setting.TotalIssuanceAmount, + TotalTechnologyTeam: setting.TotalTechnologyTeam, + TotalAngelInvestor: setting.TotalAngelInvestor, + TotalOperateFund: setting.TotalOperateFund, + TotalEcologicalDevelopment: setting.TotalEcologicalDevelopment, + } + e.OutSuc(c, resp, nil) +} + +// DynamicData +// @Summary 蛋蛋星球-积分中心-动态数据(获取) +// @Tags 积分中心 +// @Description 动态数据(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Success 200 {object} md.DynamicDataResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/pointsCenter/dynamicData [GET] +func DynamicData(c *gin.Context) { + + settingDb := implement.NewEggEnergyBasicSettingDb(db.Db) + setting, err := settingDb.EggEnergyBasicSettingGetOne() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + + // 1.用户持有总量 + redisKey1 := PointsCenterCalcExchangeRedisKey + "_1" + redisValue1, err := cache.GetString(redisKey1) + if err != nil { + if err.Error() == "redigo: nil returned" { + amountDb := implement.NewUserVirtualAmountDb(db.Db) + total, err := amountDb.UserVirtualAmountGetSumByCoinKind(setting.PersonEggEnergyCoinId) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, nil) + return + } + //将获取到的余额值缓存至redis + redisValue1 = utils.Float64ToStr(total) + cache.SetEx(redisKey1, redisValue1, 60) + } else { + e.OutErr(c, e.ERR, err.Error()) + return + } + } + // 2.星级分红 + redisKey2 := PointsCenterCalcExchangeRedisKey + "_2" + redisValue2, err := cache.GetString(redisKey2) + if err != nil { + if err.Error() == "redigo: nil returned" { + coreDataDb := implement.NewEggEnergyCoreDataDb(db.Db) + coreData, err := coreDataDb.EggEnergyCoreDataGet() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + redisValue2 = coreData.StarLevelDividends + cache.SetEx(redisKey2, redisValue2, 60) + } else { + e.OutErr(c, e.ERR, err.Error()) + return + } + } + + // 3.发展委员会 + redisKey3 := PointsCenterCalcExchangeRedisKey + "_3" + redisValue3, err := cache.GetString(redisKey3) + if err != nil { + if err.Error() == "redigo: nil returned" { + coreDataDb := implement.NewEggEnergyCoreDataDb(db.Db) + coreData, err := coreDataDb.EggEnergyCoreDataGet() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + redisValue3 = coreData.DevelopmentCommittee + cache.SetEx(redisKey3, redisValue3, 60) + } else { + e.OutErr(c, e.ERR, err.Error()) + return + } + } + // 4.公益基金 + redisKey4 := PointsCenterCalcExchangeRedisKey + "_4" + redisValue4, err := cache.GetString(redisKey4) + if err != nil { + if err.Error() == "redigo: nil returned" { + coreDataDb := implement.NewEggEnergyCoreDataDb(db.Db) + coreData, err := coreDataDb.EggEnergyCoreDataGet() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + redisValue4 = coreData.PublicWelfareAndCharity + cache.SetEx(redisKey4, redisValue4, 60) + } else { + e.OutErr(c, e.ERR, err.Error()) + return + } + } + + resp := md.DynamicDataResp{ + UserTotalHold: redisValue1, + StarLevelDividends: redisValue2, + DevelopmentCommittee: redisValue3, + PublicWelfareAndCharity: redisValue4, + } + + e.OutSuc(c, resp, nil) +} + +// PointsExchangeGetBasic +// @Summary 蛋蛋星球-积分中心-积分兑换基础信息(获取) +// @Tags 积分中心 +// @Description 积分兑换基础信息(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Success 200 {object} md.PointsExchangeGetBasicResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/pointsCenter/pointsExchangeBasic [GET] +func PointsExchangeGetBasic(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. 获取蛋蛋能量货币类型 settingDb := implement.NewEggEnergyBasicSettingDb(db.Db) setting, err := settingDb.EggEnergyBasicSettingGetOne() @@ -68,7 +305,7 @@ func PointsCenterGetBasic(c *gin.Context) { return } - resp := md.PointsCenterGetBasicResp{ + resp := md.PointsExchangeGetBasicResp{ AvailableEnergy: eggEnergyAmount.Amount, AvailableCash: wallet.Amount, } @@ -205,7 +442,7 @@ func ExchangeEnergy(c *gin.Context) { // 2. 计算蛋蛋能量兑换的金额 egg_system_rules.Init(cfg.RedisAddr) - eggEnergyCoreData, cb, err1 := svc.GetEggEnergyCoreData(db.Db) + eggEnergyCoreData, cb, err1 := svc2.GetEggEnergyCoreData(db.Db) if err1 != nil { fmt.Println("EggEnergyAutoRecordPrices_ERR:::::", err1.Error()) return @@ -374,8 +611,8 @@ func GetContributionValue(c *gin.Context) { // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" -// @Param limit query int true "每页大小" -// @Param page query int true "页数" +// @Param limit query string true "每页大小" +// @Param page query string true "页数" // @Success 200 {object} md.GetContributionValueFlowResp "具体数据" // @Failure 400 {object} md.Response "具体错误" // @Router /api/v1/pointsCenter/contributionValueFlow [GET] @@ -428,6 +665,148 @@ func GetContributionValueFlow(c *gin.Context) { e.OutSuc(c, resp, nil) } +// GetEggPointRecord +// @Summary 蛋蛋星球-积分中心-蛋蛋分明细(获取) +// @Tags 积分中心 +// @Description 蛋蛋分明细(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Param limit query string true "每页大小" +// @Param page query string true "页数" +// @Success 200 {object} md.GetEggPointRecordResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/pointsCenter/record [GET] func GetEggPointRecord(c *gin.Context) { + // todo 待补充 + pageStr := c.DefaultQuery("page", "1") + limitStr := c.DefaultQuery("limit", "5") + page := utils.StrToInt(pageStr) + limit := utils.StrToInt(limitStr) + 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 + } + now := time.Now() + + list, nowScore, indexNum, err := svc.GetEggPointRecordBase(now, user.Id, page, limit) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + + resp := md.GetEggPointRecordResp{ + NowScore: nowScore, + List: list, + Paginate: md.Paginate{ + Limit: limit, + Page: page, + Total: int64(indexNum), + }, + } + + e.OutSuc(c, resp, nil) +} + +// GetEggEnergyFlow +// @Summary 蛋蛋星球-积分中心-收支明细(获取) +// @Tags 积分中心 +// @Description 收支明细(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Param limit query string true "每页大小" +// @Param page query string true "页数" +// @Param startAt query string false "开始时间" +// @Param endAt query string false "结束时间" +// @Param direction query string false "流水方向(1.收入 2.支出 0.全部)" +// @Success 200 {object} md.GetEggEnergyFlowResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/pointsCenter/energyFlow [GET] +func GetEggEnergyFlow(c *gin.Context) { + pageStr := c.DefaultQuery("page", "1") + limitStr := c.DefaultQuery("limit", "10") + startAt := c.Query("startAt") + endAt := c.Query("endAt") + directionStr := c.Query("direction") + + 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 + } + + coinDb := implement.NewVirtualCoinDb(db.Db) + coins, err := coinDb.VirtualCoinFindAll() + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + if coins == nil { + e.OutErr(c, e.ERR_NO_DATA, errors.New("未初始化货币")) + return + } + + coinsList := make([]map[string]interface{}, len(coins)) + coinsMap := map[int]string{} + for i, coin := range coins { + coinsList[i] = map[string]interface{}{ + "coinID": coin.Id, + "name": coin.Name, + } + coinsMap[coin.Id] = coin.Name + } + + direction := 0 + switch directionStr { + case "1": + direction = 1 + case "2": + direction = 2 + } + + page := utils.StrToInt(pageStr) + limit := utils.StrToInt(limitStr) + + flowDb := implement.NewUserVirtualCoinFlowDb(db.Db) + flows, total, err := flowDb.UserVirtualCoinFlowFindByCoinAndUser(page, limit, 0, user.Id, startAt, endAt, direction, false, 0) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + list := make([]md.EggEnergyFlowNode, len(flows)) + for i, flow := range flows { + list[i].Title = flow.Title + list[i].Amount = flow.Amount + list[i].Direction = flow.Direction + list[i].CreateAt = flow.CreateAt + list[i].Id = flow.Id + list[i].BeforeAmount = flow.BeforeAmount + list[i].AfterAmount = flow.AfterAmount + list[i].CoinName = coinsMap[flow.CoinId] + list[i].SysFee = flow.SysFee + list[i].TransferType = enum.UserVirtualAmountFlowTransferType(flow.TransferType).String() + } + + resp := md.GetEggEnergyFlowResp{ + List: list, + Paginate: md.Paginate{ + Limit: limit, + Page: page, + Total: total, + }, + } + e.OutSuc(c, resp, nil) } diff --git a/app/hdl/hdl_wallet.go b/app/hdl/hdl_wallet.go new file mode 100644 index 0000000..e2f232a --- /dev/null +++ b/app/hdl/hdl_wallet.go @@ -0,0 +1,94 @@ +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" + "github.com/gin-gonic/gin" +) + +// GetAmountFlow +// @Summary 蛋蛋星球-钱包-余额明细(获取) +// @Tags 钱包 +// @Description 余额明细(获取) +// @Accept json +// @Produce json +// @param Authorization header string true "验证参数Bearer和token空格拼接" +// @Param limit query string true "每页大小" +// @Param page query string true "页数" +// @Param startAt query string false "开始时间" +// @Param endAt query string false "结束时间" +// @Param direction query string false "流水方向(1.收入 2.支出 0.全部)" +// @Success 200 {object} md.GetAmountFlowResp "具体数据" +// @Failure 400 {object} md.Response "具体错误" +// @Router /api/v1/wallet/amountFlow [GET] +func GetAmountFlow(c *gin.Context) { + pageStr := c.DefaultQuery("page", "1") + limitStr := c.DefaultQuery("limit", "10") + startAt := c.Query("startAt") + endAt := c.Query("endAt") + directionStr := c.Query("direction") + + 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 + } + + direction := 0 + switch directionStr { + case "1": + direction = 1 + case "2": + direction = 2 + } + + page := utils.StrToInt(pageStr) + limit := utils.StrToInt(limitStr) + + flowDb := implement.NewUserWalletFlowDb(db.Db) + flows, total, err := flowDb.UserWalletFlowFindByCoinAndUser(page, limit, user.Id, startAt, endAt, direction, false, 0, 0) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + + list := make([]md.WalletFlowNode, 0, len(flows)) + for _, flow := range flows { + temp := md.WalletFlowNode{ + Id: flow.Id, + Uid: flow.Uid, + Direction: flow.Direction, + Amount: flow.Amount, + BeforeAmount: flow.BeforeAmount, + AfterAmount: flow.AfterAmount, + SysFee: flow.SysFee, + OrdId: flow.OrdId, + Title: flow.Title, + Kind: flow.Kind, + State: flow.State, + Memo: flow.Memo, + CreateTime: flow.CreateAt, + UpdateTime: flow.UpdateAt, + } + list = append(list, temp) + } + + resp := md.GetAmountFlowResp{ + List: list, + Paginate: md.Paginate{ + Limit: limit, + Page: page, + Total: total, + }, + } + e.OutSuc(c, resp, nil) +} diff --git a/app/md/md.wallet.go b/app/md/md.wallet.go new file mode 100644 index 0000000..b5b15dd --- /dev/null +++ b/app/md/md.wallet.go @@ -0,0 +1,23 @@ +package md + +type WalletFlowNode struct { + Id int64 `json:"id"` + Uid int64 `json:"uid"` // 用户 ID + Direction int `json:"direction"` // 方向:1.收入 2.支出 + Amount string `json:"amount"` // 变动金额 + BeforeAmount string `json:"before_amount"` // 变动前金额 + AfterAmount string `json:"after_amount"` // 变动后金额 + SysFee string `json:"sys_fee"` // 手续费 + OrdId string `json:"ord_id"` // 对应订单编号 + Title string `json:"title"` // 标题 + Kind int `json:"kind"` // 1:管理员操作增加余额 2:管理员操作扣除余额 3:蛋蛋能量兑换余额 4:余额兑换蛋蛋能量 + State int `json:"state"` // 1未到账,2已到账 + Memo string `json:"memo"` // 备注 + CreateTime string `json:"create_time"` // 创建时间 + UpdateTime string `json:"update_time"` // 更新时间 +} + +type GetAmountFlowResp struct { + List []WalletFlowNode `json:"list"` + Paginate Paginate `json:"paginate"` +} diff --git a/app/md/md_member_center.go b/app/md/md_member_center.go index 27c29e8..cfdc233 100644 --- a/app/md/md_member_center.go +++ b/app/md/md_member_center.go @@ -31,4 +31,5 @@ type UserEggFlowReqRespList struct { ViolateNums int `json:"violate_nums"` //违规次数 BrowseInterfaceNums int `json:"browse_interface_nums"` //浏览界面次数 PersonAddActivityValue int `json:"person_add_activity_value"` //个人活跃积分 + UpdatedAt string `json:"updated_at"` //更新时间 } diff --git a/app/md/md_points_center.go b/app/md/md_points_center.go index 3567877..c4e484c 100644 --- a/app/md/md_points_center.go +++ b/app/md/md_points_center.go @@ -1,11 +1,35 @@ package md +type PointsCenterGetBasicResp struct { + Energy string `json:"energy"` // 蛋蛋能量值 + EnergyValue string `json:"energy_amount"` // 能量价值 + WalletAmount string `json:"wallet_amount"` // 账户余额 + EggPoint string `json:"egg_point"` // 能量积分 + EggPointValue string `json:"egg_point_amount"` // 能量积分价值 +} + +type InitialDataResp struct { + InitialPrice string `json:"initial_price"` // 初始价格 + TotalIssuanceAmount string `json:"total_issuance_amount"` // 总发行量 + TotalTechnologyTeam string `json:"total_technology_team"` // 技术团队 + TotalAngelInvestor string `json:"total_angel_investor"` // 天使投资人 + TotalOperateFund string `json:"total_operate_fund"` // 运营资金 + TotalEcologicalDevelopment string `json:"total_ecological_development"` // 生态建设 +} + +type DynamicDataResp struct { + UserTotalHold string `json:"user_total_hold"` // 用户持有总量 + StarLevelDividends string `json:"star_level_dividends"` // 星级分红 + DevelopmentCommittee string `json:"development_committee"` // 发展委员会 + PublicWelfareAndCharity string `json:"public_welfare_and_charity"` // 公益基金 +} + type GetPriceCurveResp struct { XData []interface{} `json:"x_data"` YData []interface{} `json:"y_data"` } -type PointsCenterGetBasicResp struct { +type PointsExchangeGetBasicResp struct { AvailableEnergy string `json:"available_energy"` // 可用能量 AvailableCash string `json:"available_cash"` // 可用现金 } @@ -44,3 +68,21 @@ type GetEggPointRecordResp struct { List []EggPointRecordNode `json:"list"` // 分数明细列表 Paginate Paginate `json:"paginate"` } + +type EggEnergyFlowNode struct { + Id int64 `json:"id"` + CoinName string `json:"coin_name"` // 虚拟币名称 + Direction int `json:"direction"` // 方向:1.收入 2.支出 + Title string `json:"title"` // 标题 + Amount string `json:"amount"` // 变更数量 + BeforeAmount string `json:"before_amount"` // 变更前数量 + AfterAmount string `json:"after_amount"` // 变更后数量 + SysFee string `json:"sys_fee"` // 手续费 + TransferType string `json:"transfer_type"` // 转账类型 + CreateAt string `json:"create_at"` // 创建时间 +} + +type GetEggEnergyFlowResp struct { + List []EggEnergyFlowNode `json:"list"` + Paginate Paginate `json:"paginate"` +} diff --git a/app/router/router.go b/app/router/router.go index 3bdda1b..859ba28 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -92,12 +92,20 @@ func route(r *gin.RouterGroup) { } rPointsCenter := r.Group("/pointsCenter") // 积分中心 { - rPointsCenter.GET("/getBasic", hdl.PointsCenterGetBasic) // 积分中-基础数据 + rPointsCenter.GET("/basic", hdl.PointsCenterGetBasic) // 积分中心-基础信息 + rPointsCenter.GET("/initialData", hdl.InitialData) // 积分中心-初始数据 + rPointsCenter.GET("/dynamicData", hdl.DynamicData) // 积分中心-动态数据 + rPointsCenter.GET("/pointsExchangeBasic", hdl.PointsExchangeGetBasic) // 积分中心-能量兑换基础数据 rPointsCenter.GET("/priceCurve", hdl.GetPriceCurve) // 积分中心-获取价格曲线 rPointsCenter.POST("/exchangeEnergy", hdl.ExchangeEnergy) // 积分中心-能量兑换 rPointsCenter.GET("/contributionValue", hdl.GetContributionValue) // 积分中心-贡献值 rPointsCenter.GET("/contributionValueFlow", hdl.GetContributionValueFlow) // 积分中心-贡献值明细 rPointsCenter.GET("/record", hdl.GetEggPointRecord) // 积分中心-蛋蛋分历史记录 + rPointsCenter.GET("/energyFlow", hdl.GetEggEnergyFlow) // 积分中心-积分收支明细 + } + rWallet := r.Group("/wallet") // 钱包 + { + rWallet.GET("/amountFlow", hdl.GetAmountFlow) // 余额流水 } } diff --git a/app/svc/svc_common.go b/app/svc/svc_common.go index adb5c64..d15fbb8 100644 --- a/app/svc/svc_common.go +++ b/app/svc/svc_common.go @@ -2,10 +2,12 @@ package svc import ( "applet/app/db" + "applet/app/utils" "applet/app/utils/cache" "applet/app/utils/logx" "code.fnuoos.com/EggPlanet/egg_models.git/src/implement" "strings" + "time" ) // 简单的recover @@ -29,3 +31,25 @@ func GetSysCfgStr(key string) string { return sysCfgDb.SysCfgGetWithDb(key) } + +// GetYearsAndWeekStr 获取年份和周数 +func GetYearsAndWeekStr(esIndexName string) (string, string) { + parts := strings.Split(esIndexName, "_") + return parts[len(parts)-1][:4], parts[len(parts)-1][4:] +} + +// GetWeekInfo 获取周数、开始时间、结束时间 +func GetWeekInfo(dateStr string) (string, string, string, string) { + date := utils.TimeParseStd(dateStr) + year, week := date.ISOWeek() + location, _ := time.LoadLocation("Asia/Shanghai") + // 计算给定年份1月1日是星期几 + startOfYear := time.Date(year, time.January, 1, 0, 0, 0, 0, location) + daysOffset := int(startOfYear.Weekday()) - int(time.Monday) + 1 + // 计算给定年份的第一周的开始日期 + firstWeekStart := startOfYear.AddDate(0, 0, -daysOffset+1) + // 计算给定周的开始日期 + weekStart := firstWeekStart.AddDate(0, 0, (week-1)*7) + weekEnd := weekStart.AddDate(0, 0, 6) + return utils.IntToStr(year), utils.IntToStr(week), weekStart.Format("2006-01-02"), weekEnd.Format("2006-01-02") +} diff --git a/app/svc/svc_points_center.go b/app/svc/svc_points_center.go new file mode 100644 index 0000000..ff3fec9 --- /dev/null +++ b/app/svc/svc_points_center.go @@ -0,0 +1,136 @@ +package svc + +import ( + "applet/app/md" + "applet/app/utils" + md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md" + 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" + "errors" + "github.com/olivere/elastic/v7" + "time" +) + +func GetEggPointRecordBase(now time.Time, uid int64, page int, limit int) ([]md.EggPointRecordNode, string, int, error) { + aliasName := md2.EggEnergyUserEggScoreEsAlias + // 1. 判断当周分数是否生效 + getLastWeek := true + if now.Weekday() > time.Wednesday || (now.Weekday() > time.Wednesday && now.Hour() > 14) { + getLastWeek = false + } + + // 2. 计算有效周数数量 + aliases, err := es.EsClient.Aliases(). + Index(aliasName). // 指定别名 + Do(context.Background()) + if err != nil { + return nil, "", 0, err + } + indexNum := len(aliases.Indices) + if getLastWeek == true { + // 如果当期未生效 有效周数 - 1 + indexNum-- + } + if indexNum < 1 { + return nil, "", 0, errors.New("no data") + } + // 3. 获取最老有效索引及年份周数 + oldestIndex := aliasName + "_" + "999999" + for key, _ := range aliases.Indices { + if key < oldestIndex { + oldestIndex = key + } + } + oldestYearStr, oldestWeekStr := GetYearsAndWeekStr(oldestIndex) + oldestYear := utils.StrToInt(oldestYearStr) + oldestWeek := utils.StrToInt(oldestWeekStr) + + // 4. 获取当期有效蛋蛋分 + nowIndex := es2.GetLatestEffectiveIndexFromAlias(now) + boolQuery := elastic.NewBoolQuery() + boolQuery.Filter(elastic.NewTermQuery("uid", uid)) + searchResult, err := es.EsClient.Search(). + Index(nowIndex). + Query(boolQuery). + Pretty(true). + Do(context.Background()) + if searchResult == nil { + return nil, "", 0, errors.New("failed to get current egg score") + } + + 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 { + return nil, "", 0, errors.New("failed to unmarshal") + } + results = append(results, doc) + } + } + + nowScore := utils.Float64ToStr(results[0].ScoreValue) + + indexes := make([]string, 0, limit) + // 5. 构造分页索引列表 查询历史蛋蛋分 + for i := 0; i < limit; i++ { + var tempDays int + if getLastWeek { + tempDays = 7 * ((page-1)*limit + i + 1) + } else { + tempDays = 7 * ((page-1)*limit + i) + } + tempTime := now.AddDate(0, 0, -tempDays) + tempYear, tempWeek := tempTime.ISOWeek() + // 判断跳转到的时间是否大于最老索引时间 + if tempYear == oldestYear { + if tempWeek < oldestWeek { + break + } + } else if tempYear < oldestYear { + break + } + tempIndex := es2.GetAppointIndexFromAlias(utils.IntToStr(tempYear), utils.IntToStr(tempWeek)) + indexes = append(indexes, tempIndex) + } + // 构建查询条件 + recordBoolQuery := elastic.NewBoolQuery() + recordBoolQuery.Filter(elastic.NewTermQuery("uid", uid)) + searchRecordResult, err := es.EsClient.Search(). + Index(indexes...). + Query(boolQuery). + Pretty(true). + Do(context.Background()) + if searchRecordResult == nil { + return nil, "", 0, errors.New("failed to get egg score flows") + } + var recordResults []md.UserEggFlowReqRespList + // 检查是否有结果 + if searchRecordResult.Hits.TotalHits.Value != 0 { + // 解析结果 + for _, hit := range searchResult.Hits.Hits { + var doc md.UserEggFlowReqRespList + err = json.Unmarshal(hit.Source, &doc) + if err != nil { + return nil, "", 0, errors.New("failed to unmarshal") + } + recordResults = append(recordResults, doc) + } + } + + list := make([]md.EggPointRecordNode, len(results)) + for i, result := range recordResults { + year, week, startAt, endAt := GetWeekInfo(result.UpdatedAt) + list[i].Score = utils.Float64ToStr(result.ScoreValue) + list[i].Year = year + list[i].Week = week + list[i].StartAt = startAt + list[i].EndAt = endAt + } + + return list, nowScore, indexNum, nil +} diff --git a/docs/docs.go b/docs/docs.go index 751c52d..4cb1dd4 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" @@ -832,6 +831,44 @@ const docTemplate = `{ } } }, + "/api/v1/pointsCenter/basic": { + "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.PointsCenterGetBasicResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/pointsCenter/contributionValue": { "get": { "description": "贡献值(获取)", @@ -892,14 +929,14 @@ const docTemplate = `{ "required": true }, { - "type": "integer", + "type": "string", "description": "每页大小", "name": "limit", "in": "query", "required": true }, { - "type": "integer", + "type": "string", "description": "页数", "name": "page", "in": "query", @@ -922,6 +959,114 @@ const docTemplate = `{ } } }, + "/api/v1/pointsCenter/dynamicData": { + "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.DynamicDataResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, + "/api/v1/pointsCenter/energyFlow": { + "get": { + "description": "收支明细(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "积分中心" + ], + "summary": "蛋蛋星球-积分中心-收支明细(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "每页大小", + "name": "limit", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "开始时间", + "name": "startAt", + "in": "query" + }, + { + "type": "string", + "description": "结束时间", + "name": "endAt", + "in": "query" + }, + { + "type": "string", + "description": "流水方向(1.收入 2.支出 0.全部)", + "name": "direction", + "in": "query" + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.GetEggEnergyFlowResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/pointsCenter/exchangeEnergy": { "post": { "description": "能量兑换", @@ -969,9 +1114,9 @@ const docTemplate = `{ } } }, - "/api/v1/pointsCenter/getBasic": { + "/api/v1/pointsCenter/initialData": { "get": { - "description": "基础信息(获取)", + "description": "初始数据(获取)", "consumes": [ "application/json" ], @@ -981,7 +1126,7 @@ const docTemplate = `{ "tags": [ "积分中心" ], - "summary": "蛋蛋星球-积分中心-基础信息(获取)", + "summary": "蛋蛋星球-积分中心-初始数据(获取)", "parameters": [ { "type": "string", @@ -995,7 +1140,45 @@ const docTemplate = `{ "200": { "description": "具体数据", "schema": { - "$ref": "#/definitions/md.PointsCenterGetBasicResp" + "$ref": "#/definitions/md.InitialDataResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, + "/api/v1/pointsCenter/pointsExchangeBasic": { + "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.PointsExchangeGetBasicResp" } }, "400": { @@ -1051,6 +1234,58 @@ const docTemplate = `{ } } }, + "/api/v1/pointsCenter/record": { + "get": { + "description": "蛋蛋分明细(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "积分中心" + ], + "summary": "蛋蛋星球-积分中心-蛋蛋分明细(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "每页大小", + "name": "limit", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.GetEggPointRecordResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/register": { "post": { "description": "注册", @@ -1150,9 +1385,7 @@ const docTemplate = `{ "name": "req", "in": "body", "required": true, - "schema": { - "type": "object" - } + "schema": {} } ], "responses": { @@ -1210,6 +1443,76 @@ const docTemplate = `{ } } }, + "/api/v1/wallet/amountFlow": { + "get": { + "description": "余额明细(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "钱包" + ], + "summary": "蛋蛋星球-钱包-余额明细(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "每页大小", + "name": "limit", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "开始时间", + "name": "startAt", + "in": "query" + }, + { + "type": "string", + "description": "结束时间", + "name": "endAt", + "in": "query" + }, + { + "type": "string", + "description": "流水方向(1.收入 2.支出 0.全部)", + "name": "direction", + "in": "query" + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.GetAmountFlowResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/wechatLogin": { "post": { "description": "微信登陆", @@ -1479,6 +1782,27 @@ const docTemplate = `{ } } }, + "md.DynamicDataResp": { + "type": "object", + "properties": { + "development_committee": { + "description": "发展委员会", + "type": "string" + }, + "public_welfare_and_charity": { + "description": "公益基金", + "type": "string" + }, + "star_level_dividends": { + "description": "星级分红", + "type": "string" + }, + "user_total_hold": { + "description": "用户持有总量", + "type": "string" + } + } + }, "md.EggEnergyDetailReq": { "type": "object", "properties": { @@ -1555,6 +1879,50 @@ const docTemplate = `{ } } }, + "md.EggEnergyFlowNode": { + "type": "object", + "properties": { + "after_amount": { + "description": "变更后数量", + "type": "string" + }, + "amount": { + "description": "变更数量", + "type": "string" + }, + "before_amount": { + "description": "变更前数量", + "type": "string" + }, + "coin_name": { + "description": "虚拟币名称", + "type": "string" + }, + "create_at": { + "description": "创建时间", + "type": "string" + }, + "direction": { + "description": "方向:1.收入 2.支出", + "type": "integer" + }, + "id": { + "type": "integer" + }, + "sys_fee": { + "description": "手续费", + "type": "string" + }, + "title": { + "description": "标题", + "type": "string" + }, + "transfer_type": { + "description": "转账类型", + "type": "string" + } + } + }, "md.EggPointDetailsReq": { "type": "object", "properties": { @@ -1631,6 +1999,31 @@ const docTemplate = `{ } } }, + "md.EggPointRecordNode": { + "type": "object", + "properties": { + "end_at": { + "description": "结束时间", + "type": "string" + }, + "score": { + "description": "分数", + "type": "string" + }, + "start_at": { + "description": "开始时间", + "type": "string" + }, + "week": { + "description": "周数", + "type": "string" + }, + "year": { + "description": "年份", + "type": "string" + } + } + }, "md.ExchangeEnergyReq": { "type": "object", "properties": { @@ -1672,6 +2065,20 @@ const docTemplate = `{ } } }, + "md.GetAmountFlowResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/md.WalletFlowNode" + } + }, + "paginate": { + "$ref": "#/definitions/applet_app_md.Paginate" + } + } + }, "md.GetContributionValueFlowResp": { "type": "object", "properties": { @@ -1699,6 +2106,39 @@ const docTemplate = `{ } } }, + "md.GetEggEnergyFlowResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/md.EggEnergyFlowNode" + } + }, + "paginate": { + "$ref": "#/definitions/applet_app_md.Paginate" + } + } + }, + "md.GetEggPointRecordResp": { + "type": "object", + "properties": { + "list": { + "description": "分数明细列表", + "type": "array", + "items": { + "$ref": "#/definitions/md.EggPointRecordNode" + } + }, + "now_score": { + "description": "当前分数", + "type": "string" + }, + "paginate": { + "$ref": "#/definitions/applet_app_md.Paginate" + } + } + }, "md.GetPriceCurveResp": { "type": "object", "properties": { @@ -1786,6 +2226,35 @@ const docTemplate = `{ } } }, + "md.InitialDataResp": { + "type": "object", + "properties": { + "initial_price": { + "description": "初始价格", + "type": "string" + }, + "total_angel_investor": { + "description": "天使投资人", + "type": "string" + }, + "total_ecological_development": { + "description": "生态建设", + "type": "string" + }, + "total_issuance_amount": { + "description": "总发行量", + "type": "string" + }, + "total_operate_fund": { + "description": "运营资金", + "type": "string" + }, + "total_technology_team": { + "description": "技术团队", + "type": "string" + } + } + }, "md.IntegralList": { "type": "object", "properties": { @@ -1977,6 +2446,31 @@ const docTemplate = `{ } }, "md.PointsCenterGetBasicResp": { + "type": "object", + "properties": { + "egg_point": { + "description": "能量积分", + "type": "string" + }, + "egg_point_amount": { + "description": "能量积分价值", + "type": "string" + }, + "energy": { + "description": "蛋蛋能量值", + "type": "string" + }, + "energy_amount": { + "description": "能量价值", + "type": "string" + }, + "wallet_amount": { + "description": "账户余额", + "type": "string" + } + } + }, + "md.PointsExchangeGetBasicResp": { "type": "object", "properties": { "available_cash": { @@ -2198,6 +2692,66 @@ const docTemplate = `{ } } }, + "md.WalletFlowNode": { + "type": "object", + "properties": { + "after_amount": { + "description": "变动后金额", + "type": "string" + }, + "amount": { + "description": "变动金额", + "type": "string" + }, + "before_amount": { + "description": "变动前金额", + "type": "string" + }, + "create_time": { + "description": "创建时间", + "type": "string" + }, + "direction": { + "description": "方向:1.收入 2.支出", + "type": "integer" + }, + "id": { + "type": "integer" + }, + "kind": { + "description": "1:管理员操作增加余额 2:管理员操作扣除余额 3:蛋蛋能量兑换余额 4:余额兑换蛋蛋能量", + "type": "integer" + }, + "memo": { + "description": "备注", + "type": "string" + }, + "ord_id": { + "description": "对应订单编号", + "type": "string" + }, + "state": { + "description": "1未到账,2已到账", + "type": "integer" + }, + "sys_fee": { + "description": "手续费", + "type": "string" + }, + "title": { + "description": "标题", + "type": "string" + }, + "uid": { + "description": "用户 ID", + "type": "integer" + }, + "update_time": { + "description": "更新时间", + "type": "string" + } + } + }, "md.WechatLoginReq": { "type": "object", "properties": { @@ -2232,6 +2786,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 108e984..4231c99 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -825,6 +825,44 @@ } } }, + "/api/v1/pointsCenter/basic": { + "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.PointsCenterGetBasicResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/pointsCenter/contributionValue": { "get": { "description": "贡献值(获取)", @@ -885,14 +923,14 @@ "required": true }, { - "type": "integer", + "type": "string", "description": "每页大小", "name": "limit", "in": "query", "required": true }, { - "type": "integer", + "type": "string", "description": "页数", "name": "page", "in": "query", @@ -915,6 +953,114 @@ } } }, + "/api/v1/pointsCenter/dynamicData": { + "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.DynamicDataResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, + "/api/v1/pointsCenter/energyFlow": { + "get": { + "description": "收支明细(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "积分中心" + ], + "summary": "蛋蛋星球-积分中心-收支明细(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "每页大小", + "name": "limit", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "开始时间", + "name": "startAt", + "in": "query" + }, + { + "type": "string", + "description": "结束时间", + "name": "endAt", + "in": "query" + }, + { + "type": "string", + "description": "流水方向(1.收入 2.支出 0.全部)", + "name": "direction", + "in": "query" + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.GetEggEnergyFlowResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/pointsCenter/exchangeEnergy": { "post": { "description": "能量兑换", @@ -962,9 +1108,9 @@ } } }, - "/api/v1/pointsCenter/getBasic": { + "/api/v1/pointsCenter/initialData": { "get": { - "description": "基础信息(获取)", + "description": "初始数据(获取)", "consumes": [ "application/json" ], @@ -974,7 +1120,7 @@ "tags": [ "积分中心" ], - "summary": "蛋蛋星球-积分中心-基础信息(获取)", + "summary": "蛋蛋星球-积分中心-初始数据(获取)", "parameters": [ { "type": "string", @@ -988,7 +1134,45 @@ "200": { "description": "具体数据", "schema": { - "$ref": "#/definitions/md.PointsCenterGetBasicResp" + "$ref": "#/definitions/md.InitialDataResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, + "/api/v1/pointsCenter/pointsExchangeBasic": { + "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.PointsExchangeGetBasicResp" } }, "400": { @@ -1044,6 +1228,58 @@ } } }, + "/api/v1/pointsCenter/record": { + "get": { + "description": "蛋蛋分明细(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "积分中心" + ], + "summary": "蛋蛋星球-积分中心-蛋蛋分明细(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "每页大小", + "name": "limit", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.GetEggPointRecordResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/register": { "post": { "description": "注册", @@ -1143,9 +1379,7 @@ "name": "req", "in": "body", "required": true, - "schema": { - "type": "object" - } + "schema": {} } ], "responses": { @@ -1203,6 +1437,76 @@ } } }, + "/api/v1/wallet/amountFlow": { + "get": { + "description": "余额明细(获取)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "钱包" + ], + "summary": "蛋蛋星球-钱包-余额明细(获取)", + "parameters": [ + { + "type": "string", + "description": "验证参数Bearer和token空格拼接", + "name": "Authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "每页大小", + "name": "limit", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "页数", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "开始时间", + "name": "startAt", + "in": "query" + }, + { + "type": "string", + "description": "结束时间", + "name": "endAt", + "in": "query" + }, + { + "type": "string", + "description": "流水方向(1.收入 2.支出 0.全部)", + "name": "direction", + "in": "query" + } + ], + "responses": { + "200": { + "description": "具体数据", + "schema": { + "$ref": "#/definitions/md.GetAmountFlowResp" + } + }, + "400": { + "description": "具体错误", + "schema": { + "$ref": "#/definitions/md.Response" + } + } + } + } + }, "/api/v1/wechatLogin": { "post": { "description": "微信登陆", @@ -1472,6 +1776,27 @@ } } }, + "md.DynamicDataResp": { + "type": "object", + "properties": { + "development_committee": { + "description": "发展委员会", + "type": "string" + }, + "public_welfare_and_charity": { + "description": "公益基金", + "type": "string" + }, + "star_level_dividends": { + "description": "星级分红", + "type": "string" + }, + "user_total_hold": { + "description": "用户持有总量", + "type": "string" + } + } + }, "md.EggEnergyDetailReq": { "type": "object", "properties": { @@ -1548,6 +1873,50 @@ } } }, + "md.EggEnergyFlowNode": { + "type": "object", + "properties": { + "after_amount": { + "description": "变更后数量", + "type": "string" + }, + "amount": { + "description": "变更数量", + "type": "string" + }, + "before_amount": { + "description": "变更前数量", + "type": "string" + }, + "coin_name": { + "description": "虚拟币名称", + "type": "string" + }, + "create_at": { + "description": "创建时间", + "type": "string" + }, + "direction": { + "description": "方向:1.收入 2.支出", + "type": "integer" + }, + "id": { + "type": "integer" + }, + "sys_fee": { + "description": "手续费", + "type": "string" + }, + "title": { + "description": "标题", + "type": "string" + }, + "transfer_type": { + "description": "转账类型", + "type": "string" + } + } + }, "md.EggPointDetailsReq": { "type": "object", "properties": { @@ -1624,6 +1993,31 @@ } } }, + "md.EggPointRecordNode": { + "type": "object", + "properties": { + "end_at": { + "description": "结束时间", + "type": "string" + }, + "score": { + "description": "分数", + "type": "string" + }, + "start_at": { + "description": "开始时间", + "type": "string" + }, + "week": { + "description": "周数", + "type": "string" + }, + "year": { + "description": "年份", + "type": "string" + } + } + }, "md.ExchangeEnergyReq": { "type": "object", "properties": { @@ -1665,6 +2059,20 @@ } } }, + "md.GetAmountFlowResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/md.WalletFlowNode" + } + }, + "paginate": { + "$ref": "#/definitions/applet_app_md.Paginate" + } + } + }, "md.GetContributionValueFlowResp": { "type": "object", "properties": { @@ -1692,6 +2100,39 @@ } } }, + "md.GetEggEnergyFlowResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/md.EggEnergyFlowNode" + } + }, + "paginate": { + "$ref": "#/definitions/applet_app_md.Paginate" + } + } + }, + "md.GetEggPointRecordResp": { + "type": "object", + "properties": { + "list": { + "description": "分数明细列表", + "type": "array", + "items": { + "$ref": "#/definitions/md.EggPointRecordNode" + } + }, + "now_score": { + "description": "当前分数", + "type": "string" + }, + "paginate": { + "$ref": "#/definitions/applet_app_md.Paginate" + } + } + }, "md.GetPriceCurveResp": { "type": "object", "properties": { @@ -1779,6 +2220,35 @@ } } }, + "md.InitialDataResp": { + "type": "object", + "properties": { + "initial_price": { + "description": "初始价格", + "type": "string" + }, + "total_angel_investor": { + "description": "天使投资人", + "type": "string" + }, + "total_ecological_development": { + "description": "生态建设", + "type": "string" + }, + "total_issuance_amount": { + "description": "总发行量", + "type": "string" + }, + "total_operate_fund": { + "description": "运营资金", + "type": "string" + }, + "total_technology_team": { + "description": "技术团队", + "type": "string" + } + } + }, "md.IntegralList": { "type": "object", "properties": { @@ -1970,6 +2440,31 @@ } }, "md.PointsCenterGetBasicResp": { + "type": "object", + "properties": { + "egg_point": { + "description": "能量积分", + "type": "string" + }, + "egg_point_amount": { + "description": "能量积分价值", + "type": "string" + }, + "energy": { + "description": "蛋蛋能量值", + "type": "string" + }, + "energy_amount": { + "description": "能量价值", + "type": "string" + }, + "wallet_amount": { + "description": "账户余额", + "type": "string" + } + } + }, + "md.PointsExchangeGetBasicResp": { "type": "object", "properties": { "available_cash": { @@ -2191,6 +2686,66 @@ } } }, + "md.WalletFlowNode": { + "type": "object", + "properties": { + "after_amount": { + "description": "变动后金额", + "type": "string" + }, + "amount": { + "description": "变动金额", + "type": "string" + }, + "before_amount": { + "description": "变动前金额", + "type": "string" + }, + "create_time": { + "description": "创建时间", + "type": "string" + }, + "direction": { + "description": "方向:1.收入 2.支出", + "type": "integer" + }, + "id": { + "type": "integer" + }, + "kind": { + "description": "1:管理员操作增加余额 2:管理员操作扣除余额 3:蛋蛋能量兑换余额 4:余额兑换蛋蛋能量", + "type": "integer" + }, + "memo": { + "description": "备注", + "type": "string" + }, + "ord_id": { + "description": "对应订单编号", + "type": "string" + }, + "state": { + "description": "1未到账,2已到账", + "type": "integer" + }, + "sys_fee": { + "description": "手续费", + "type": "string" + }, + "title": { + "description": "标题", + "type": "string" + }, + "uid": { + "description": "用户 ID", + "type": "integer" + }, + "update_time": { + "description": "更新时间", + "type": "string" + } + } + }, "md.WechatLoginReq": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 59857db..bdaf652 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -161,6 +161,21 @@ definitions: description: 标题 type: string type: object + md.DynamicDataResp: + properties: + development_committee: + description: 发展委员会 + type: string + public_welfare_and_charity: + description: 公益基金 + type: string + star_level_dividends: + description: 星级分红 + type: string + user_total_hold: + description: 用户持有总量 + type: string + type: object md.EggEnergyDetailReq: properties: asc: @@ -212,6 +227,38 @@ definitions: - $ref: '#/definitions/md.TransferTypeList' description: 转账类型列表 type: object + md.EggEnergyFlowNode: + properties: + after_amount: + description: 变更后数量 + type: string + amount: + description: 变更数量 + type: string + before_amount: + description: 变更前数量 + type: string + coin_name: + description: 虚拟币名称 + type: string + create_at: + description: 创建时间 + type: string + direction: + description: 方向:1.收入 2.支出 + type: integer + id: + type: integer + sys_fee: + description: 手续费 + type: string + title: + description: 标题 + type: string + transfer_type: + description: 转账类型 + type: string + type: object md.EggPointDetailsReq: properties: asc: @@ -263,6 +310,24 @@ definitions: - $ref: '#/definitions/md.TransferTypeList' description: 转账类型列表 type: object + md.EggPointRecordNode: + properties: + end_at: + description: 结束时间 + type: string + score: + description: 分数 + type: string + start_at: + description: 开始时间 + type: string + week: + description: 周数 + type: string + year: + description: 年份 + type: string + type: object md.ExchangeEnergyReq: properties: energy_amount: @@ -291,6 +356,15 @@ definitions: required: - mobile type: object + md.GetAmountFlowResp: + properties: + list: + items: + $ref: '#/definitions/md.WalletFlowNode' + type: array + paginate: + $ref: '#/definitions/applet_app_md.Paginate' + type: object md.GetContributionValueFlowResp: properties: list: @@ -309,6 +383,28 @@ definitions: description: 兑换比率(x 分兑换 1 人民币) type: string type: object + md.GetEggEnergyFlowResp: + properties: + list: + items: + $ref: '#/definitions/md.EggEnergyFlowNode' + type: array + paginate: + $ref: '#/definitions/applet_app_md.Paginate' + type: object + md.GetEggPointRecordResp: + properties: + list: + description: 分数明细列表 + items: + $ref: '#/definitions/md.EggPointRecordNode' + type: array + now_score: + description: 当前分数 + type: string + paginate: + $ref: '#/definitions/applet_app_md.Paginate' + type: object md.GetPriceCurveResp: properties: x_data: @@ -372,6 +468,27 @@ definitions: description: 奖励X个活跃积分 type: string type: object + md.InitialDataResp: + properties: + initial_price: + description: 初始价格 + type: string + total_angel_investor: + description: 天使投资人 + type: string + total_ecological_development: + description: 生态建设 + type: string + total_issuance_amount: + description: 总发行量 + type: string + total_operate_fund: + description: 运营资金 + type: string + total_technology_team: + description: 技术团队 + type: string + type: object md.IntegralList: properties: expend_list: @@ -505,6 +622,24 @@ definitions: type: string type: object md.PointsCenterGetBasicResp: + properties: + egg_point: + description: 能量积分 + type: string + egg_point_amount: + description: 能量积分价值 + type: string + energy: + description: 蛋蛋能量值 + type: string + energy_amount: + description: 能量价值 + type: string + wallet_amount: + description: 账户余额 + type: string + type: object + md.PointsExchangeGetBasicResp: properties: available_cash: description: 可用现金 @@ -655,6 +790,50 @@ definitions: phone: type: string type: object + md.WalletFlowNode: + properties: + after_amount: + description: 变动后金额 + type: string + amount: + description: 变动金额 + type: string + before_amount: + description: 变动前金额 + type: string + create_time: + description: 创建时间 + type: string + direction: + description: 方向:1.收入 2.支出 + type: integer + id: + type: integer + kind: + description: 1:管理员操作增加余额 2:管理员操作扣除余额 3:蛋蛋能量兑换余额 4:余额兑换蛋蛋能量 + type: integer + memo: + description: 备注 + type: string + ord_id: + description: 对应订单编号 + type: string + state: + description: 1未到账,2已到账 + type: integer + sys_fee: + description: 手续费 + type: string + title: + description: 标题 + type: string + uid: + description: 用户 ID + type: integer + update_time: + description: 更新时间 + type: string + type: object md.WechatLoginReq: properties: avatar: @@ -1215,6 +1394,31 @@ paths: summary: 蛋蛋星球-会员中心-基础数据(获取) tags: - 会员中心 + /api/v1/pointsCenter/basic: + 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.PointsCenterGetBasicResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-积分中心-上部分基础信息(获取) + tags: + - 积分中心 /api/v1/pointsCenter/contributionValue: get: consumes: @@ -1255,12 +1459,12 @@ paths: in: query name: limit required: true - type: integer + type: string - description: 页数 in: query name: page required: true - type: integer + type: string produces: - application/json responses: @@ -1275,6 +1479,78 @@ paths: summary: 蛋蛋星球-积分中心-贡献值明细(获取) tags: - 积分中心 + /api/v1/pointsCenter/dynamicData: + 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.DynamicDataResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-积分中心-动态数据(获取) + tags: + - 积分中心 + /api/v1/pointsCenter/energyFlow: + get: + consumes: + - application/json + description: 收支明细(获取) + parameters: + - description: 验证参数Bearer和token空格拼接 + in: header + name: Authorization + required: true + type: string + - description: 每页大小 + in: query + name: limit + required: true + type: string + - description: 页数 + in: query + name: page + required: true + type: string + - description: 开始时间 + in: query + name: startAt + type: string + - description: 结束时间 + in: query + name: endAt + type: string + - description: 流水方向(1.收入 2.支出 0.全部) + in: query + name: direction + type: string + produces: + - application/json + responses: + "200": + description: 具体数据 + schema: + $ref: '#/definitions/md.GetEggEnergyFlowResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-积分中心-收支明细(获取) + tags: + - 积分中心 /api/v1/pointsCenter/exchangeEnergy: post: consumes: @@ -1306,11 +1582,11 @@ paths: summary: 蛋蛋星球-积分中心-能量兑换 tags: - 积分中心 - /api/v1/pointsCenter/getBasic: + /api/v1/pointsCenter/initialData: get: consumes: - application/json - description: 基础信息(获取) + description: 初始数据(获取) parameters: - description: 验证参数Bearer和token空格拼接 in: header @@ -1323,12 +1599,37 @@ paths: "200": description: 具体数据 schema: - $ref: '#/definitions/md.PointsCenterGetBasicResp' + $ref: '#/definitions/md.InitialDataResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-积分中心-初始数据(获取) + tags: + - 积分中心 + /api/v1/pointsCenter/pointsExchangeBasic: + 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.PointsExchangeGetBasicResp' "400": description: 具体错误 schema: $ref: '#/definitions/md.Response' - summary: 蛋蛋星球-积分中心-基础信息(获取) + summary: 蛋蛋星球-积分中心-积分兑换基础信息(获取) tags: - 积分中心 /api/v1/pointsCenter/priceCurve: @@ -1360,6 +1661,41 @@ paths: summary: 蛋蛋星球-积分中心-价格趋势(获取) tags: - 积分中心 + /api/v1/pointsCenter/record: + get: + consumes: + - application/json + description: 蛋蛋分明细(获取) + parameters: + - description: 验证参数Bearer和token空格拼接 + in: header + name: Authorization + required: true + type: string + - description: 每页大小 + in: query + name: limit + required: true + type: string + - description: 页数 + in: query + name: page + required: true + type: string + produces: + - application/json + responses: + "200": + description: 具体数据 + schema: + $ref: '#/definitions/md.GetEggPointRecordResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-积分中心-蛋蛋分明细(获取) + tags: + - 积分中心 /api/v1/register: post: consumes: @@ -1422,8 +1758,7 @@ paths: in: body name: req required: true - schema: - type: object + schema: {} produces: - application/json responses: @@ -1464,6 +1799,53 @@ paths: summary: 用户信息 tags: - 用户信息 + /api/v1/wallet/amountFlow: + get: + consumes: + - application/json + description: 余额明细(获取) + parameters: + - description: 验证参数Bearer和token空格拼接 + in: header + name: Authorization + required: true + type: string + - description: 每页大小 + in: query + name: limit + required: true + type: string + - description: 页数 + in: query + name: page + required: true + type: string + - description: 开始时间 + in: query + name: startAt + type: string + - description: 结束时间 + in: query + name: endAt + type: string + - description: 流水方向(1.收入 2.支出 0.全部) + in: query + name: direction + type: string + produces: + - application/json + responses: + "200": + description: 具体数据 + schema: + $ref: '#/definitions/md.GetAmountFlowResp' + "400": + description: 具体错误 + schema: + $ref: '#/definitions/md.Response' + summary: 蛋蛋星球-钱包-余额明细(获取) + tags: + - 钱包 /api/v1/wechatLogin: post: consumes: diff --git a/go.mod b/go.mod index 611c654..62e45ca 100644 --- a/go.mod +++ b/go.mod @@ -32,8 +32,8 @@ require ( ) require ( - code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241123072806-2fc832067f77 - code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241123034858-48fbf35fcb21 + code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241123093254-20bf9e0d7fc0 + code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241123093218-87b65e51eea3 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