Multi users data [1/N]

Signed-off-by: Yuan Si <do4suki@gmail.com>
This commit is contained in:
2023-04-12 16:05:24 +08:00
parent fe1e012127
commit dd2da649c1
15 changed files with 1501 additions and 225 deletions
+273
View File
@@ -0,0 +1,273 @@
package tools
import (
"encoding/json"
"fmt"
"honoka-chan/model"
"time"
_ "github.com/mattn/go-sqlite3"
)
type UnitData struct {
UnitOwningUserID int `xorm:"unit_owning_user_id pk autoincr" json:"unit_owning_user_id"`
UserID int `xorm:"user_id" json:"-"`
UnitID int `xorm:"unit_id" json:"unit_id"`
Exp int `xorm:"exp" json:"exp"`
NextExp int `xorm:"next_exp" json:"next_exp"`
Level int `xorm:"level" json:"level"`
MaxLevel int `xorm:"max_level" json:"max_level"`
LevelLimitID int `xorm:"level_limit_id" json:"level_limit_id"`
Rank int `xorm:"rank" json:"rank"`
MaxRank int `xorm:"max_rank" json:"max_rank"`
Love int `xorm:"love" json:"love"`
MaxLove int `xorm:"max_love" json:"max_love"`
UnitSkillExp int `xorm:"unit_skill_exp" json:"unit_skill_exp"`
UnitSkillLevel int `xorm:"unit_skill_level" json:"unit_skill_level"`
MaxHp int `xorm:"max_hp" json:"max_hp"`
UnitRemovableSkillCapacity int `xorm:"unit_removable_skill_capacity" json:"unit_removable_skill_capacity"`
FavoriteFlag bool `xorm:"favorite_flag" json:"favorite_flag"`
DisplayRank int `xorm:"display_rank" json:"display_rank"`
IsRankMax bool `xorm:"is_rank_max" json:"is_rank_max"`
IsLoveMax bool `xorm:"is_love_max" json:"is_love_max"`
IsLevelMax bool `xorm:"is_level_max" json:"is_level_max"`
IsSigned bool `xorm:"is_signed" json:"is_signed"`
IsSkillLevelMax bool `xorm:"is_skill_level_max" json:"is_skill_level_max"`
IsRemovableSkillCapacityMax bool `xorm:"is_removable_skill_capacity_max" json:"is_removable_skill_capacity_max"`
InsertDate string `xorm:"insert_date" json:"insert_date"`
}
type UserDeckData struct {
ID int `xorm:"id pk autoincr"`
DeckID int `xorm:"deck_id"`
MainFlag int `xorm:"main_flag"`
DeckName string `xorm:"deck_name"`
UserID int `xorm:"user_id"`
InsertDate int64 `xorm:"insert_date"`
}
type UnitDeckData struct {
ID int `xorm:"id pk autoincr" json:"-"`
UserDeckID int `xorm:"user_deck_id" json:"-"`
UnitOwningUserID int `xorm:"unit_owning_user_id" json:"unit_owning_user_id"`
UnitID int `xorm:"unit_id" json:"unit_id"`
Position int `xorm:"position" json:"position"`
Level int `xorm:"level" json:"level"`
LevelLimitID int `xorm:"level_limit_id" json:"level_limit_id"`
DisplayRank int `xorm:"display_rank" json:"display_rank"`
Love int `xorm:"love" json:"love"`
UnitSkillLevel int `xorm:"unit_skill_level" json:"unit_skill_level"`
IsRankMax bool `xorm:"is_rank_max" json:"is_rank_max"`
IsLoveMax bool `xorm:"is_love_max" json:"is_love_max"`
IsLevelMax bool `xorm:"is_level_max" json:"is_level_max"`
IsSigned bool `xorm:"is_signed" json:"is_signed"`
BeforeLove int `xorm:"before_love" json:"before_love"`
MaxLove int `xorm:"max_love" json:"max_love"`
InsertData int64 `xorm:"insert_date" json:"-"`
}
type AlbumSeries struct {
UnitID int `json:"unit_id"`
AlbumSeriesID int `json:"album_series_id"`
Rarity int `json:"rarity"`
RankMin int `json:"rank_min"`
RankMax int `json:"rank_max"`
HpMax int `json:"hp_max"`
DefaultRemovableSkillCapacity int `json:"default_removable_skill_capacity"`
}
func GenCommonUnitData2() {
sql := `SELECT unit_id,album_series_id,rarity,rank_min,rank_max,hp_max,default_removable_skill_capacity FROM unit_m WHERE unit_id NOT IN (SELECT unit_id FROM unit_m WHERE unit_type_id IN (SELECT unit_type_id FROM unit_type_m WHERE image_button_asset IS NULL AND (background_color = 'dcdbe3' AND original_attribute_id IS NULL) OR (unit_type_id IN (10,110,127,128,129) OR unit_type_id BETWEEN 131 AND 140))) ORDER BY unit_number ASC`
rows, err := MainEng.QueryInterface(sql)
CheckErr(err)
rb, err := json.Marshal(rows)
CheckErr(err)
// fmt.Println(string(rb))
// 默认卡组
userDeck := UserDeckData{
DeckID: 1,
MainFlag: 1,
DeckName: "Default deck",
UserID: 1,
InsertDate: time.Now().Unix(),
}
_, err = UserEng.Table("user_deck_m").Insert(&userDeck)
CheckErr(err)
userDeckId := userDeck.ID
fmt.Println("userDeckId:", userDeckId)
position := 1
albums := []AlbumSeries{}
if err = json.Unmarshal(rb, &albums); err != nil {
panic(err)
}
startTime := time.Now().Add(-time.Hour * 24 * 30)
for _, v := range albums {
unitData := UnitData{}
startTime = startTime.Add(time.Second * 3)
unitData.UnitID = v.UnitID
unitData.NextExp = 0
unitData.Rank = v.RankMin
unitData.MaxRank = v.RankMax
unitData.MaxHp = v.HpMax
unitData.DisplayRank = 2
unitData.UnitSkillLevel = 8
unitData.FavoriteFlag = true
unitData.IsRankMax = true
unitData.IsLevelMax = true
unitData.IsLoveMax = true
unitData.IsSkillLevelMax = true
unitData.IsRemovableSkillCapacityMax = true
unitData.InsertDate = startTime.Local().Format("2006-01-02 03:04:05")
if v.Rarity != 4 {
unitData.LevelLimitID = 0
unitData.UnitRemovableSkillCapacity = v.DefaultRemovableSkillCapacity
unitData.IsSigned = false
switch v.Rarity {
case 1:
// N
unitData.Exp = 8000
unitData.Level = 40
unitData.MaxLevel = 40
unitData.Love = 50
unitData.MaxLove = 50
unitData.UnitSkillExp = 0
unitData.UnitSkillLevel = 0
unitData.FavoriteFlag = false
unitData.IsRankMax = false
unitData.IsLevelMax = false
unitData.IsLoveMax = false
unitData.IsSkillLevelMax = false
unitData.IsRemovableSkillCapacityMax = false
case 2:
// R
unitData.Exp = 13500
unitData.Level = 60
unitData.MaxLevel = 60
unitData.Love = 200
unitData.MaxLove = 200
unitData.UnitSkillExp = 490
case 3:
// SR
unitData.Exp = 36800
unitData.Level = 80
unitData.MaxLevel = 80
unitData.Love = 500
unitData.MaxLove = 500
unitData.UnitSkillExp = 4900
case 5:
// SSR
unitData.Exp = 56657
unitData.Level = 90
unitData.MaxLevel = 90
unitData.Love = 750
unitData.MaxLove = 750
unitData.UnitSkillExp = 12700
}
} else {
// UR
unitData.Exp = 79700
unitData.Level = 100
unitData.MaxLevel = 100
unitData.LevelLimitID = 2
unitData.Love = 1000
unitData.MaxLove = 1000
unitData.UnitSkillExp = 29900
unitData.UnitRemovableSkillCapacity = 8
stmt, err := MainEng.DB().Prepare("SELECT COUNT(*) AS ct FROM unit_sign_asset_m WHERE unit_id = ?")
CheckErr(err)
defer stmt.Close()
var ct int
err = stmt.QueryRow(v.UnitID).Scan(&ct)
CheckErr(err)
if ct > 0 {
unitData.IsSigned = true
} else {
unitData.IsSigned = false
}
}
_, err = MainEng.Table("common_unit_m").Insert(&unitData)
CheckErr(err)
// fmt.Println("Inserted ID:", unitData.UnitOwningUserID)
// 默认卡组
if v.AlbumSeriesID == 615 { // 仆光套
unitDeckData := UnitDeckData{
UserDeckID: userDeckId,
UnitOwningUserID: unitData.UnitOwningUserID,
UnitID: v.UnitID,
Position: position,
Level: 100,
LevelLimitID: 2,
DisplayRank: 2,
Love: 1000,
UnitSkillLevel: 8,
IsRankMax: true,
IsLoveMax: true,
IsLevelMax: true,
IsSigned: unitData.IsSigned,
BeforeLove: 1000,
MaxLove: 1000,
InsertData: time.Now().Unix(),
}
// 入库
_, err = UserEng.Table("deck_unit_m").Insert(&unitDeckData)
CheckErr(err)
deckUnitId := unitDeckData.ID
fmt.Println("deckUnitId:", deckUnitId)
//
position++
}
}
}
func GenCommonUnitData3() {
uId := 1681205441 // Hardcode for now
userDeck := []UserDeckData{}
err := UserEng.Table("user_deck_m").Where("user_id = ?", uId).Asc("deck_id").Find(&userDeck)
CheckErr(err)
unitDeckInfo := []model.UnitDeckInfo{}
for _, deck := range userDeck {
deckUnit := []UnitDeckData{}
err = UserEng.Table("deck_unit_m").Where("user_deck_id = ?", deck.ID).Asc("position").Find(&deckUnit)
CheckErr(err)
oUids := []model.UnitOwningUserIds{}
for _, unit := range deckUnit {
oUids = append(oUids, model.UnitOwningUserIds{
Position: unit.Position,
UnitOwningUserID: unit.UnitOwningUserID,
})
}
mainFlag := false
if deck.MainFlag == 1 {
mainFlag = true
}
unitDeckInfo = append(unitDeckInfo, model.UnitDeckInfo{
UnitDeckID: deck.DeckID,
MainFlag: mainFlag,
DeckName: deck.DeckName,
UnitOwningUserIds: oUids,
})
}
b, err := json.Marshal(unitDeckInfo)
CheckErr(err)
fmt.Println(string(b))
}
func GenCommonUnitData() {
}
+42 -159
View File
@@ -3,7 +3,6 @@ package tools
import (
"encoding/json"
"fmt"
"honoka-chan/database"
"honoka-chan/model"
"honoka-chan/utils"
"strings"
@@ -149,7 +148,7 @@ type ProfileResp struct {
}
var (
CenterId int
CenterId = 41674
)
func GenApi1Data() {
@@ -242,144 +241,20 @@ func GenApi1Data() {
respAll = append(respAll, liveListResp)
// unit_list_result
sql = `SELECT unit_id,album_series_id,rarity,rank_min,rank_max,hp_max,default_removable_skill_capacity FROM unit_m WHERE unit_id NOT IN (SELECT unit_id FROM unit_m WHERE unit_type_id IN (SELECT unit_type_id FROM unit_type_m WHERE image_button_asset IS NULL AND (background_color = 'dcdbe3' AND original_attribute_id IS NULL) OR (unit_type_id IN (10,110,127,128,129) OR unit_type_id BETWEEN 131 AND 140))) ORDER BY unit_number ASC;`
rows, err = MainEng.DB().Query(sql)
CheckErr(err)
unitsData := []model.Active{}
oId := 3000000000 // 起始卡片 ID,随意设置
sdt := time.Now().Add(-time.Hour * 24 * 30)
defaultDeckUnitList := []model.PlayRewardUnitList{}
for rows.Next() {
unitData := model.Active{}
var uid, rit, rank, max_rank, hp_max, skill_capacity int
var album_series_id interface{}
err = rows.Scan(&uid, &album_series_id, &rit, &rank, &max_rank, &hp_max, &skill_capacity)
if err != nil {
fmt.Println(err)
continue
}
oId++
sdt = sdt.Add(time.Second * 3)
unitData.UnitOwningUserID = oId
unitData.UnitID = uid
unitData.NextExp = 0
unitData.Rank = rank
unitData.MaxRank = max_rank
unitData.MaxHp = hp_max
unitData.DisplayRank = 2
unitData.UnitSkillLevel = 8
unitData.FavoriteFlag = true
unitData.IsRankMax = true
unitData.IsLevelMax = true
unitData.IsLoveMax = true
unitData.IsSkillLevelMax = true
unitData.IsRemovableSkillCapacityMax = true
unitData.InsertDate = sdt.Local().Format("2006-01-02 03:04:05")
if rit != 4 {
unitData.LevelLimitID = 0
unitData.UnitRemovableSkillCapacity = skill_capacity
unitData.IsSigned = false
switch rit {
case 1:
// N
unitData.Exp = 8000
unitData.Level = 40
unitData.MaxLevel = 40
unitData.Love = 50
unitData.MaxLove = 50
unitData.UnitSkillExp = 0
unitData.UnitSkillLevel = 0
unitData.FavoriteFlag = false
unitData.IsRankMax = false
unitData.IsLevelMax = false
unitData.IsLoveMax = false
unitData.IsSkillLevelMax = false
unitData.IsRemovableSkillCapacityMax = false
case 2:
// R
unitData.Exp = 13500
unitData.Level = 60
unitData.MaxLevel = 60
unitData.Love = 200
unitData.MaxLove = 200
unitData.UnitSkillExp = 490
case 3:
// SR
unitData.Exp = 36800
unitData.Level = 80
unitData.MaxLevel = 80
unitData.Love = 500
unitData.MaxLove = 500
unitData.UnitSkillExp = 4900
case 5:
// SSR
unitData.Exp = 56657
unitData.Level = 90
unitData.MaxLevel = 90
unitData.Love = 750
unitData.MaxLove = 750
unitData.UnitSkillExp = 12700
}
} else {
// UR
unitData.Exp = 79700
unitData.Level = 100
unitData.MaxLevel = 100
unitData.LevelLimitID = 2
unitData.Love = 1000
unitData.MaxLove = 1000
unitData.UnitSkillExp = 29900
unitData.UnitRemovableSkillCapacity = 8
stmt, err := MainEng.DB().Prepare("SELECT COUNT(*) AS ct FROM unit_sign_asset_m WHERE unit_id = ?")
CheckErr(err)
defer stmt.Close()
var count int
err = stmt.QueryRow(uid).Scan(&count)
CheckErr(err)
if count > 0 {
unitData.IsSigned = true
} else {
unitData.IsSigned = false
}
}
unitsData = append(unitsData, unitData)
// 中心位成员
if uid == 3927 { // AC15 果
CenterId = oId
}
switch album_series_id := album_series_id.(type) {
case int64:
if album_series_id == 615 {
// 仆光套
defaultDeckUnitList = append(defaultDeckUnitList, model.PlayRewardUnitList{
UnitOwningUserID: oId,
UnitID: uid,
Level: 100,
LevelLimitID: 2,
DisplayRank: 2,
Love: 1000,
UnitSkillLevel: 8,
IsRankMax: true,
IsLoveMax: true,
IsLevelMax: true,
IsSigned: unitData.IsSigned,
BeforeLove: 1000,
MaxLove: 1000,
})
}
}
err = MainEng.Table("common_unit_m").Select("*").Find(&unitsData)
if err != nil {
panic(err)
}
userUnits := []model.Active{}
err = UserEng.Table("user_unit_m").Select("*").Find(&userUnits)
if err != nil {
panic(err)
}
unitsData = append(unitsData, userUnits...)
unitListResp := model.UnitAllResp{
// _ = model.UnitAllResp{
Result: model.UnitAllResult{
@@ -393,37 +268,45 @@ func GenApi1Data() {
respAll = append(respAll, unitListResp)
// unit_deck_result
oUids := []model.UnitOwningUserIds{}
for k, v := range defaultDeckUnitList[0:9] {
position := k + 1
defaultDeckUnitList[k].Position = position
oUids = append(oUids, model.UnitOwningUserIds{
Position: position,
UnitOwningUserID: v.UnitOwningUserID,
uId := 1681205441 // Hardcode for now
userDeck := []UserDeckData{}
err = UserEng.Table("user_deck_m").Where("user_id = ?", uId).Asc("deck_id").Find(&userDeck)
CheckErr(err)
unitDeckInfo := []model.UnitDeckInfo{}
for _, deck := range userDeck {
deckUnit := []UnitDeckData{}
err = UserEng.Table("deck_unit_m").Where("user_deck_id = ?", deck.ID).Asc("position").Find(&deckUnit)
CheckErr(err)
oUids := []model.UnitOwningUserIds{}
for _, unit := range deckUnit {
oUids = append(oUids, model.UnitOwningUserIds{
Position: unit.Position,
UnitOwningUserID: unit.UnitOwningUserID,
})
}
mainFlag := false
if deck.MainFlag == 1 {
mainFlag = true
}
unitDeckInfo = append(unitDeckInfo, model.UnitDeckInfo{
UnitDeckID: deck.DeckID,
MainFlag: mainFlag,
DeckName: deck.DeckName,
UnitOwningUserIds: oUids,
})
}
unitDeckResp := model.UnitDeckInfoResp{
// _ = model.UnitDeckInfoResp{
Result: []model.UnitDeckInfo{
{
UnitDeckID: 1,
MainFlag: true,
DeckName: "Future style",
UnitOwningUserIds: oUids,
},
},
Result: unitDeckInfo,
Status: 200,
CommandNum: false,
TimeStamp: time.Now().Unix(),
}
respAll = append(respAll, unitDeckResp)
// HACK 保存卡组信息
deck, err := json.Marshal(defaultDeckUnitList)
CheckErr(err)
err = database.LevelDb.Put([]byte("deck_info"), deck)
CheckErr(err)
// unit_support_result
unitSupportResp := model.UnitSupportResp{
// _ = model.UnitSupportResp{
@@ -969,7 +852,7 @@ func GenApi2Data() {
FriendVarietyCnt: 0,
FriendNewCnt: 0,
PresentCnt: 0,
SecretBoxBadgeFlag: true,
SecretBoxBadgeFlag: false,
ServerDatetime: time.Now().Format("2006-01-02 15:04:05"),
ServerTimestamp: time.Now().Unix(),
NoticeFriendDatetime: time.Now().Format("2006-01-02 15:04:05"),
+151
View File
@@ -0,0 +1,151 @@
package tools
import (
"fmt"
"time"
)
type UserData struct {
ID int `xorm:"id pk autoincr"`
Phone string `xorm:"phone"`
Password string `xorm:"password"`
Autokey string `xorm:"autokey"`
Ticket string `xorm:"ticket"`
UserID int `xorm:"userid"`
LastLoginTime int64 `xorm:"last_login_time"`
}
type UserPref struct {
ID int `xorm:"id pk autoincr"`
UserID int `xorm:"user_id"`
AwardID int `xorm:"award_id"`
BackgroundID int `xorm:"background_id"`
UnitOwningUserID int `xorm:"unit_owning_user_id"`
UserName string `xorm:"user_name"`
UserLevel int `xorm:"user_level"`
UserDesc string `xorm:"user_desc"`
UpdateTime int64 `xorm:"update_time"`
}
func InitUserData(userId int) {
userList := []UserData{}
if userId != 0 {
err := UserEng.Table("users").Where("userid = ?", userId).Find(&userList)
CheckErr(err)
} else {
err := UserEng.Table("users").Asc("id").Find(&userList)
CheckErr(err)
}
session := UserEng.NewSession()
defer session.Close()
for _, user := range userList {
// 检查用户配置
exists, err := UserEng.Table("user_preference_m").Where("user_id = ?", user.UserID).Exist()
CheckErr(err)
if !exists {
// 默认中心成员()
var oId int
_, err = MainEng.Table("common_unit_m").Cols("unit_owning_user_id").Where("unit_id = ?", 31).Get(&oId)
CheckErr(err)
fmt.Println("Center UnitOwningUserID:", oId)
userPref := UserPref{
UserID: user.UserID,
AwardID: 1, // 音乃木坂学生
BackgroundID: 1, // 初始背景
UnitOwningUserID: oId,
UserName: "音乃木坂学生",
UserLevel: 1,
UserDesc: "你好。",
UpdateTime: time.Now().Unix(),
}
_, err = UserEng.Table("user_preference_m").Insert(&userPref)
CheckErr(err)
fmt.Println("UserPref ID", userPref.ID)
} else {
userPref := UserPref{}
_, err = UserEng.Table("user_preference_m").Where("user_id = ?", user.UserID).Get(&userPref)
CheckErr(err)
}
// 检查用户卡组配置
exists, err = UserEng.Table("user_deck_m").Where("user_id = ?", user.UserID).Asc("deck_id").Exist()
CheckErr(err)
fmt.Println("UserDeck exists:", exists)
if !exists {
userDeck := UserDeckData{
DeckID: 1,
MainFlag: 1,
DeckName: "队伍A",
UserID: user.UserID,
InsertDate: time.Now().Unix(),
}
if err = session.Begin(); err != nil {
panic(err)
}
// 默认队伍
_, err = session.Table("user_deck_m").Insert(&userDeck)
if err != nil {
session.Rollback()
panic(err)
}
userDeckId := userDeck.ID
fmt.Println("New UserDeck:", userDeckId)
// 默认卡组
unitIds := []int{}
err = MainEng.Table("unit_m").Cols("unit_id").Where("album_series_id = ?", 615).Find(&unitIds)
if err != nil {
session.Rollback()
panic(err)
}
unitData := []UnitData{}
err = MainEng.Table("common_unit_m").In("unit_id", unitIds).Find(&unitData)
if err != nil {
session.Rollback()
panic(err)
}
// fmt.Println(unitData)
position := 1
for _, unit := range unitData {
unitDeckData := UnitDeckData{
UserDeckID: userDeckId,
UnitOwningUserID: unit.UnitOwningUserID,
UnitID: unit.UnitID,
Position: position,
Level: 100,
LevelLimitID: 2,
DisplayRank: 2,
Love: 1000,
UnitSkillLevel: 8,
IsRankMax: true,
IsLoveMax: true,
IsLevelMax: true,
IsSigned: unit.IsSigned,
BeforeLove: 1000,
MaxLove: 1000,
InsertData: time.Now().Unix(),
}
_, err = session.Table("deck_unit_m").Insert(&unitDeckData)
if err != nil {
session.Rollback()
panic(err)
}
fmt.Println("New DeckUnit:", unitDeckData.ID)
position++
}
if err = session.Commit(); err != nil {
panic(err)
}
}
}
}
+8 -6
View File
@@ -15,15 +15,17 @@ func init() {
MainEng = config.MainEng
UserEng = config.UserEng
GenApi1Data()
GenApi2Data()
GenApi3Data()
LoadApi1Data("assets/api1.json")
LoadApi2Data("assets/api2.json")
LoadApi3Data("assets/api3.json")
// GenApi1Data()
// GenApi2Data()
// GenApi3Data()
// LoadApi1Data("assets/api1.json")
// LoadApi2Data("assets/api2.json")
// LoadApi3Data("assets/api3.json")
// ListUnitData()
// go SyncNotesList()
// GenDownloadDb()
// GenCommonUnitData()
InitUserData(0)
}
func CheckErr(err error) {