package egg_energy import ( "applet/app/db" "applet/app/e" md "applet/app/md/institutional_management/egg_energy" "applet/app/utils" "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/rule/egg_energy/enum" md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" "errors" "fmt" "github.com/gin-gonic/gin" "time" ) // GetVirtualCoinList // @Summary 制度中心-蛋蛋能量-查询所有币种(获取) // @Tags 蛋蛋能量 // @Description 查询所有币种(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Success 200 {object} []md.VirtualCoin "成功返回" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/availableEnergy/list [post] func GetVirtualCoinList(c *gin.Context) { virtualCoinDb := implement.NewVirtualCoinDb(db.Db) coins, err := virtualCoinDb.VirtualCoinFindAll() if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } list := make([]md.VirtualCoin, len(coins)) for i, coin := range coins { list[i] = md.VirtualCoin{ Id: coin.Id, Name: coin.Name, ExchangeRatio: coin.ExchangeRatio, IsUse: coin.IsUse, CreateAt: coin.CreateAt, UpdateAt: coin.UpdateAt, } } e.OutSuc(c, list, nil) } // GetEggEnergyBasic // @Summary 制度中心-蛋蛋能量-基础设置(获取) // @Tags 蛋蛋能量 // @Description 基础设置(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Success 200 {object} md.GetEggEnergyBasicResp "具体数据" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/getBasic [get] func GetEggEnergyBasic(c *gin.Context) { basicSettingDb := implement.NewEggEnergyBasicSettingDb(db.Db) basicSettings, err1 := basicSettingDb.EggEnergyBasicSettingGetOne() if err1 != nil { e.OutErr(c, e.ERR_DB_ORM, err1.Error()) return } if basicSettings == nil { e.OutErr(c, e.ERR_NO_DATA, errors.New("未能获取基础设置")) return } var videoRewardSystem md2.VideoRewardSystemStruct utils.Unserialize([]byte(basicSettings.VideoRewardSystem), videoRewardSystem) var destructionSetting md2.DestructionSettingStruct utils.Unserialize([]byte(basicSettings.DestructionSetting), destructionSetting) var priceSetting md2.PriceSettingStruct utils.Unserialize([]byte(basicSettings.PriceSetting), priceSetting) var exchangeRules md2.ExchangeRulesStruct utils.Unserialize([]byte(basicSettings.ExchangeRules), exchangeRules) var rewardSystem md2.RewardSystemStruct utils.Unserialize([]byte(basicSettings.RewardSystem), rewardSystem) var newUserRewardRules md2.NewUserRewardRules utils.Unserialize([]byte(basicSettings.NewUserIncentiveRules), newUserRewardRules) var directPushReward md2.TeamRewardSettingStruct utils.Unserialize([]byte(basicSettings.DirectPushReward), directPushReward) resp := md.GetEggEnergyBasicResp{ BasicSetting: md.BasicSetting{ IsOpen: basicSettings.IsOpen, PersonEggEnergyCoinId: basicSettings.PersonEggEnergyCoinId, TeamEggEnergyCoinId: basicSettings.TeamEggEnergyCoinId, PersonEggPointsCoinId: basicSettings.PersonEggPointsCoinId, TeamEggPointsCoinId: basicSettings.TeamEggPointsCoinId, DirectPushReward: md2.TeamRewardSettingStruct{ RewardDecrementValue: directPushReward.RewardDecrementValue, RewardEndValue: directPushReward.RewardEndValue, MemberSelfIsOpenGetTeamReward: directPushReward.MemberSelfIsOpenGetTeamReward, OneRoundDuration: directPushReward.OneRoundDuration, }, }, VideoRewardSetting: md.VideoRewardSetting{ VideoRewardIsOpen: basicSettings.VideoRewardIsOpen, VideoRewardSystem: md2.VideoRewardSystemStruct{ RewardValue: videoRewardSystem.RewardValue, RewardTotalNum: videoRewardSystem.RewardTotalNum, IntervalMinutes: videoRewardSystem.IntervalMinutes, EachRoundHour: videoRewardSystem.EachRoundHour, }, }, DataSetting: md.DataSetting{ TotalIssuanceAmount: basicSettings.TotalIssuanceAmount, TotalTechnologyTeam: basicSettings.TotalTechnologyTeam, TotalAngelInvestor: basicSettings.TotalAngelInvestor, TotalOperateFund: basicSettings.TotalOperateFund, TotalEcologicalDevelopment: basicSettings.TotalEcologicalDevelopment, TotalUserForPerson: basicSettings.TotalUserForPerson, TotalUserForTeam: basicSettings.TotalUserForTeam, }, DestructionSetting: md2.DestructionSettingStruct{ DestructionQuantity: destructionSetting.DestructionQuantity, PublicWelfareAndCharity: destructionSetting.PublicWelfareAndCharity, DevelopmentCommittee: destructionSetting.DevelopmentCommittee, StarLevelDividends: destructionSetting.StarLevelDividends, MarketplaceMerchant: destructionSetting.MarketplaceMerchant, CommunityDividends: destructionSetting.CommunityDividends, }, PriceSetting: md2.PriceSettingStruct{ PriceHigherThanValue: priceSetting.PriceHigherThanValue, MarketplaceMerchantsNumsExchangeMarketplaceMerchantsFundValue: priceSetting.MarketplaceMerchantsNumsExchangeMarketplaceMerchantsFundValue, PriceBelowValue: priceSetting.PriceBelowValue, MarketplaceMerchantsFundExchangeMarketplaceMerchantsNumsValue: priceSetting.MarketplaceMerchantsFundExchangeMarketplaceMerchantsNumsValue, }, ExchangeRules: md2.ExchangeRulesStruct{ AutoExchangeNumsByPerson: exchangeRules.AutoExchangeNumsByPerson, AutoExchangeRateByPerson: exchangeRules.AutoExchangeRateByPerson, AutoExchangeNumsByTeam: exchangeRules.AutoExchangeNumsByTeam, AutoExchangeRateByTeam: exchangeRules.AutoExchangeRateByTeam, }, RewardSystem: md2.RewardSystemStruct{ Level: rewardSystem.Level, RewardCondition: rewardSystem.RewardCondition, RewardValue: rewardSystem.RewardValue, }, NewUserIncentiveRules: md2.NewUserRewardRules{ InviteUserRewardValue: newUserRewardRules.InviteUserRewardValue, RewardCoefficient: newUserRewardRules.RewardCoefficient, ContinueDays: newUserRewardRules.ContinueDays, }, SystemID: basicSettings.Id, } e.OutSuc(c, resp, nil) } // UpdateEggEnergyBasic // @Summary 制度中心-蛋蛋能量-基础设置(更新) // @Tags 蛋蛋能量 // @Description 基础设置(更新) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param req body md.UpdateEggEnergyBasicReq true "system_id 必填" // @Success 200 {int} "修改数据条数" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/updateBasic [post] func UpdateEggEnergyBasic(c *gin.Context) { var req *md.UpdateEggEnergyBasicReq if err1 := c.ShouldBindJSON(&req); err1 != nil { e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error()) return } destructionSettingStr := utils.SerializeStr(req.DestructionSetting) priceSettingStr := utils.SerializeStr(req.PriceSetting) videoRewardSystemStr := utils.SerializeStr(req.VideoRewardSetting.VideoRewardSystem) exchangeRulesStr := utils.SerializeStr(req.ExchangeRules) rewardSystemStr := utils.SerializeStr(req.RewardSystem) newUserIncentiveRulesStr := utils.SerializeStr(req.NewUserIncentiveRules) directPushRewardStr := utils.SerializeStr(req.BasicSetting.DirectPushReward) m := model.EggEnergyBasicSetting{ Id: req.SystemID, IsOpen: req.BasicSetting.IsOpen, PersonEggEnergyCoinId: req.BasicSetting.PersonEggEnergyCoinId, TeamEggEnergyCoinId: req.BasicSetting.TeamEggEnergyCoinId, PersonEggPointsCoinId: req.BasicSetting.PersonEggPointsCoinId, TeamEggPointsCoinId: req.BasicSetting.TeamEggPointsCoinId, TotalIssuanceAmount: req.DataSetting.TotalIssuanceAmount, TotalTechnologyTeam: req.DataSetting.TotalTechnologyTeam, TotalAngelInvestor: req.DataSetting.TotalAngelInvestor, TotalOperateFund: req.DataSetting.TotalOperateFund, TotalEcologicalDevelopment: req.DataSetting.TotalEcologicalDevelopment, TotalUserForPerson: req.DataSetting.TotalUserForPerson, TotalUserForTeam: req.DataSetting.TotalUserForTeam, DestructionSetting: destructionSettingStr, DirectPushReward: directPushRewardStr, PriceSetting: priceSettingStr, VideoRewardIsOpen: req.VideoRewardSetting.VideoRewardIsOpen, VideoRewardSystem: videoRewardSystemStr, ExchangeRules: exchangeRulesStr, RewardSystem: rewardSystemStr, NewUserIncentiveRules: newUserIncentiveRulesStr, } forceColums := []string{"is_open", "video_reward_is_open"} energyBasicSettingDb := implement.NewEggEnergyBasicSettingDb(db.Db) session := db.Db.NewSession() affected, err := energyBasicSettingDb.EggEnergyBasicSettingUpdate(session, req.SystemID, &m, forceColums...) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } e.OutSuc(c, affected, nil) } // GetEggCoreDataList // @Summary 制度中心-蛋蛋能量-数据概览(获取) // @Tags 蛋蛋能量 // @Description 数据概览(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Success 200 {object} md.GetEggCoreDataListResp "具体数据" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/globalData/coreDataList [get] func GetEggCoreDataList(c *gin.Context) { coreDataDb := implement.NewEggEnergyCoreDataDb(db.Db) coreData, err := coreDataDb.EggEnergyCoreDataGet() if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } if coreData == nil { e.OutErr(c, e.ERR_NO_DATA, errors.New("数据不存在")) return } sql := "SELECT SUM(amount) AS total, coin_id FORM `user_virtual_amount` GROUP BY (coin_id)" results, err := db.Db.QueryString(sql) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } coinsHoldMap := make(map[int]string) for _, result := range results { coinsHoldMap[utils.StrToInt(result["coin_id"])] = result["total"] } basicSettingDb := implement.NewEggEnergyBasicSettingDb(db.Db) basicSetting, err := basicSettingDb.EggEnergyBasicSettingGetOne() if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } userHoldTotalNumsMap := map[string]string{ "PersonEggEnergyUserHoldTotal": coinsHoldMap[basicSetting.PersonEggEnergyCoinId], "TeamEggEnergyUserHoldTotal": coinsHoldMap[basicSetting.TeamEggEnergyCoinId], "PersonEggPointsUserHoldTotal": coinsHoldMap[basicSetting.PersonEggPointsCoinId], "TeamEggPointsUserHoldTotal": coinsHoldMap[basicSetting.TeamEggPointsCoinId], "ContributionUserHoldTotal": coinsHoldMap[basicSetting.ContributionCoinId], } resp := md.GetEggCoreDataListResp{ PlanetTotalValue: coreData.PlanetTotalValue, NowPrice: coreData.NowPrice, NowEnergyTotalNums: coreData.NowEnergyTotalNums, UserHoldTotalNums: userHoldTotalNumsMap, } e.OutSuc(c, resp, nil) } // GetPriceCurve // @Summary 制度中心-蛋蛋能量-价格趋势(获取) // @Tags 蛋蛋能量 // @Description 价格趋势(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param kind query string false "1:按天 2:按小时 3:按周" // @Success 200 {object} md.GetPriceCurveResp "具体数据" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/globalData/pointsCenterPriceCurve [get] func GetPriceCurve(c *gin.Context) { kind := c.DefaultQuery("kind", "1") now := time.Now() priceDb := implement.NewEggEnergyPriceDb(db.Db) m, has, err := priceDb.EggEnergyPriceGetLastOne() if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } if has == false { e.OutErr(c, e.ERR_NO_DATA, "未查询到数据") return } var yData []interface{} var xData []interface{} switch kind { case "1": var date = now.AddDate(0, 0, -30).Format("2006-01-02") var sql = fmt.Sprintf("SELECT price,date FROM `egg_energy_price` WHERE HOUR = 23 AND DATE >= \"%s\" AND DATE != \"%s\" ORDER BY DATE ASC ", date, now.Format("2006-01-02")) results, _ := db.Db.QueryString(sql) for _, v := range results { tmpDate := utils.TimeParseStd(v["date"]) yData = append(yData, v["price"]) xData = append(xData, tmpDate.Format("01-02")) } yData = append(yData, m.Price) tmpDate := utils.TimeParseStd(m.Date) xData = append(xData, tmpDate.Format("01-02")) break case "2": for i := 29; i >= 1; i-- { date := now.Add(-time.Hour * 4 * time.Duration(i)).Format("2006-01-02") hour := now.Add(-time.Hour * 4 * time.Duration(i)).Hour() var sql = "SELECT price,date,hour FROM `egg_energy_price` WHERE HOUR = %d AND DATE = \"%s\" " sql = fmt.Sprintf(sql, hour, date) results, _ := db.Db.QueryString(sql) if results != nil { //if results[0]["date"] != now.Format("2006-01-02") { // continue //} yData = append(yData, results[0]["price"]) xData = append(xData, results[0]["hour"]+":00") } } yData = append(yData, m.Price) xData = append(xData, m.Hour+":00") break case "3": var nums = 29 for i := nums; i >= 1; i-- { var date = now.AddDate(0, 0, -7*i).Format("2006-01-02") var sql = "SELECT price,date FROM `egg_energy_price` WHERE HOUR = 23 AND DATE = \"%s\" " sql = fmt.Sprintf(sql, date) results, _ := db.Db.QueryString(sql) if results != nil { tmpDate := utils.TimeParseStd(results[0]["date"]) yData = append(yData, results[0]["price"]) xData = append(xData, tmpDate.Format("01-02")) } } yData = append(yData, m.Price) tmpDate := utils.TimeParseStd(m.Date) xData = append(xData, tmpDate.Format("01-02")) break } e.OutSuc(c, md.GetPriceCurveResp{ YData: yData, XData: xData, }, nil) return } // GetFundDataList // @Summary 制度中心-蛋蛋能量-新增数据列表(获取) // @Tags 蛋蛋能量 // @Description 新增数据列表(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param req body md.GetFundDataListReq true "分页信息必填" // @Success 200 {object} md.GetFundDataListResp "具体数据" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/globalData/fundDataList [post] func GetFundDataList(c *gin.Context) { var req *md.GetFundDataListReq if err1 := c.ShouldBindJSON(&req); err1 != nil { e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error()) return } var kindList = []map[string]interface{}{ { "name": enum.EggEnergyFundDataKind.String(enum.CompanySubsidies), "value": enum.CompanySubsidies, }, { "name": enum.EggEnergyFundDataKind.String(enum.InvestmentByInvestors), "value": enum.InvestmentByInvestors, }, { "name": enum.EggEnergyFundDataKind.String(enum.MarketExpectations), "value": enum.MarketExpectations, }, } fundDataDb := implement.NewEggEnergyFundDataDb(db.Db) fundDataList, total, err := fundDataDb.EggEnergyFundDataFindAndCount(req.Page, req.Limit, req.Kind, req.StartAt, req.EndAt) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } list := make([]md.FundDataNode, len(fundDataList)) for i, fundData := range fundDataList { list[i].Kind = fundData.Kind list[i].TotalAmount = fundData.TotalAmount list[i].Hours = fundData.Hours list[i].Memo = fundData.Memo list[i].BalanceTimes = fundData.BalanceTimes list[i].BalanceAmount = fundData.BalanceAmount list[i].CreateAt = fundData.CreateAt list[i].SystemID = fundData.Id } resp := md.GetFundDataListResp{ KindList: kindList, Paginate: md.Paginate{ Limit: req.Limit, Page: req.Page, Total: total, }, List: list, } e.OutSuc(c, resp, nil) } // GetFundDataRecordList // @Summary 制度中心-蛋蛋能量-新增数据列表详情(查询) // @Tags 蛋蛋能量 // @Description 新增数据列表详情(查询) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param req body md.GetFundDataRecordListReq true "获取到的 system_id 以及分页信息" // @Success 200 {object} md.GetFundDataRecordListResp "具体数据" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/globalData/fundDataRecordList [post] func GetFundDataRecordList(c *gin.Context) { var req *md.GetFundDataRecordListReq if err1 := c.ShouldBindJSON(&req); err1 != nil { e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error()) return } recordsDb := implement.NewEggEnergyFundDataRecordsDb(db.Db) records, total, err := recordsDb.EggEnergyFundDataRecordsFindAndCount(req.Page, req.Limit, req.SystemID) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } var list []md.FundDataRecordNode for i, record := range records { list[i].TotalAmount = record.TotalAmount list[i].BalanceAmount = record.BalanceAmount list[i].BalanceTimes = record.BalanceTimes list[i].BeforePrice = record.BeforePrice list[i].AfterPrice = record.AfterPrice list[i].BeforePlanetTotalValue = record.BeforePlanetTotalValue list[i].AfterPlanetTotalValue = record.AfterPlanetTotalValue list[i].CreateAt = record.CreateAt } resp := md.GetFundDataRecordListResp{ Paginate: md.Paginate{ Limit: req.Limit, Page: req.Page, Total: total, }, List: list, } e.OutSuc(c, resp, nil) } // AddFundData // @Summary 制度中心-蛋蛋能量-价值明细数据(新增) // @Tags 蛋蛋能量 // @Description 价值明细数据(新增) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param req body md.AddFundDataReq true "数据种类、金额、时长(最长24h)、执行次数必填,备注选填" // @Success 200 {int} "插入数据 id" // @Failure 400 {object} md.Response "具体错误" // @Router /api/institutionalManagement/eggEnergy/globalData/fundDataAdd [post] func AddFundData(c *gin.Context) { var req *md.AddFundDataReq if err1 := c.ShouldBindJSON(&req); err1 != nil { e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error()) return } fundDataDb := implement.NewEggEnergyFundDataDb(db.Db) now := time.Now() hour := now.Hour() if req.Hours > 24 { hour = 24 } // 十分钟执行一次 times := req.Hours * 60 / md.ExecutionInterval m := model.EggEnergyFundData{ Kind: req.Kind, TotalAmount: req.TotalAmount, BalanceAmount: req.TotalAmount, Hours: hour, BalanceTimes: times, Frequency: req.Frequency, Memo: req.Memo, CreateAt: now.Format("2006-01-02 15:04:05"), UpdateAt: now.Format("2006-01-02 15:04:05"), } id, err := fundDataDb.EggEnergyFundDataInsert(&m) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } e.OutSuc(c, id, nil) }