diff --git a/.gitignore b/.gitignore index d1274e9..79c45ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .idea .vscode bin +bat apigame.exe +apigame.exe~ *.bat \ No newline at end of file diff --git a/service/cardholder/config-registry.go b/service/cardholder/config-registry.go index 58c543f..23a32fb 100644 --- a/service/cardholder/config-registry.go +++ b/service/cardholder/config-registry.go @@ -9,15 +9,15 @@ import ( ) var ( - Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置 + _Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置 ) func NewConfigs() { - Configs = make(map[string]*CardActivityConfig) + _Configs = make(map[string]*CardActivityConfig) } func GetConfig(gameId string) (config *CardActivityConfig, has bool) { - config, has = Configs[gameId] + config, has = _Configs[gameId] return } @@ -119,7 +119,7 @@ func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) { Config.StarShopConfig[i2.Id] = i2 } } - Configs[gameId] = Config + _Configs[gameId] = Config GenerateConfigClient(Config) } diff --git a/service/cardholder/handle.go b/service/cardholder/handle.go index 97c0ca6..8eb9fc4 100644 --- a/service/cardholder/handle.go +++ b/service/cardholder/handle.go @@ -5,7 +5,7 @@ import ( "apigame/service/constd" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" - "apigame/util/uttype" + "apigame/util/utslice" "strconv" ) @@ -103,7 +103,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH sequenceId, cohort, openMode) // 打乱顺序 - uttype.Shuffle(newCards) + utslice.Shuffle(newCards) for _, i3 := range newCards { allNewCards = append(allNewCards, i3) } @@ -226,7 +226,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model // 存档 SaveData(req.GameID, gameData) - uttype.Shuffle(rsp.NewCards) + utslice.Shuffle(rsp.NewCards) // 返回信息 rsp.CardHolderInfo = GetInfo(gameData, config) diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index 18d6f6c..671c225 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -7,7 +7,8 @@ import ( "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "apigame/util/utjson" - "apigame/util/uttype" + "apigame/util/utslice" + "apigame/util/utstring" ) // SaveData 存储数据 @@ -117,7 +118,7 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { list = append(list, index) } - indexMin := uttype.Min(list...) + indexMin := utslice.Min(list) return int(indexMin % rate) } @@ -194,7 +195,7 @@ func DoOpen(gameId string, combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) scale := gameData.Details.CardSequenceScales[combineId] cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) - cardIdInt := uttype.StringToInt(cardId) + cardIdInt := utstring.StringToInt(cardId) // 增加刻度 gameData.Details.CardSequenceScales[combineId] = scale + 1 // 增加卡牌 @@ -228,7 +229,7 @@ func DoOpen(gameId string, { recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) dto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, - openMode, uttype.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) + openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) } return @@ -270,7 +271,7 @@ func DoOpenCheckAward(gameId string, } // 集齐处理发奖 gameData.Details.Album[albumId] += 1 - award := confAlbum.Rewards[uttype.IntToString(gameData.Details.Round)] + award := confAlbum.Rewards[utstring.IntToString(gameData.Details.Round)] awardAlbum[albumId] = award { // 记录日志 @@ -282,7 +283,7 @@ func DoOpenCheckAward(gameId string, // 判断 处理 发放轮次奖励 轮次完成 if CheckRoundFinish(gameData, config) { // 返回奖励 - awardRound = config.Awards[uttype.IntToString(gameData.Details.Round)] + awardRound = config.Awards[utstring.IntToString(gameData.Details.Round)] // 记录日志 recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) diff --git a/util/utmap/map.go b/util/utmap/map.go new file mode 100644 index 0000000..fff0f1d --- /dev/null +++ b/util/utmap/map.go @@ -0,0 +1,66 @@ +package utmap + +import ( + "math/rand" + "venus/util/uttype" +) + +// Keys Keys切片 +func Keys[T1 comparable, T2 any](dict map[T1]T2) []T1 { + list := make([]T1, 0) + for k, _ := range dict { + list = append(list, k) + } + return list +} + +// Values Values切片 +func Values[T1 comparable, T2 any](dict map[T1]T2) []T2 { + list := make([]T2, 0) + for _, v := range dict { + list = append(list, v) + } + return list +} + +// ContainValue 值等于 +func ContainValue[T1 comparable, T2 comparable](dict map[T1]T2, value T2) bool { + for _, v := range dict { + if v == value { + return true + } + } + return false +} + +// ContainValueEquals 值等于 +func ContainValueEquals[T1 comparable, T2 uttype.EqualAble](dict map[T1]T2, value T2) bool { + for _, v := range dict { + if v.Equals(value) { + return true + } + } + return false +} + +// ContainValueBy 值符合 +func ContainValueBy[T1 comparable, T2 any](dict map[T1]T2, value T2, equals func(v1 T2, v2 T2) bool) bool { + for _, v := range dict { + if equals(v, value) { + return true + } + } + return false +} + +// RandomOne 随机一个值 +func RandomOne[T1 comparable, T2 any](dict map[T1]T2) T2 { + if len(dict) <= 0 { + return *new(T2) + } + list := make([]T1, 0) + for i, _ := range dict { + list = append(list, i) + } + return dict[list[rand.Intn(len(list))]] +} diff --git a/util/utslice/slice.go b/util/utslice/slice.go new file mode 100644 index 0000000..21b4def --- /dev/null +++ b/util/utslice/slice.go @@ -0,0 +1,183 @@ +package utslice + +import ( + "apigame/util/uttype" + "math/rand" +) + +// Contains 判断切片是否包含某元素 +func Contains[T comparable](list []T, value T) bool { + for _, v := range list { + if v == value { + return true + } + } + return false +} + +// RandomOne 随机一个元素 +func RandomOne[T any](list []T) T { + if len(list) <= 0 { + return *new(T) + } + return list[rand.Intn(len(list))] +} + +// Remove 切片删除一个元素 +func Remove[T comparable](list []T, item T) []T { + for i := 0; i < len(list); i++ { + if item == list[i] { + list = append(list[:i], list[i+1:]...) + i = i - 1 + } + } + return list +} + +// RemoveList 切片删除多个元素 +func RemoveList[T comparable](list []T, items []T) []T { + dMap := make(map[T]bool) + for _, s := range items { + dMap[s] = true + } + + for i := 0; i < len(list); i++ { + if _, ok := dMap[list[i]]; ok { + list = append(list[:i], list[i+1:]...) + i = i - 1 + } + } + return list +} + +// Sum 求和 +func Sum[T uttype.UtNumber](list []T) T { + var result T = 0 + for _, v := range list { + result += v + } + return result +} + +// Min 最小值 +func Min[T uttype.UtNumber](list []T) T { + var result T = 0 + for _, v := range list { + if v < result { + result = v + } + } + return result +} + +// Max 最大值 +func Max[T uttype.UtNumber](list []T) T { + var result T = 0 + for _, v := range list { + if v > result { + result = v + } + } + return result +} + +// Any 其中有一个元素符合就返回true +func Any[T uttype.UtNumber](list []T, value T) bool { + for _, v := range list { + if v == value { + return true + } + } + return false +} + +// AnyEquals 其中有一个元素符合就返回true +func AnyEquals[T uttype.EqualAble](list []T, value T) bool { + for _, v := range list { + if v.Equals(value) { + return true + } + } + return false +} + +// AnyBy 其中有一个元素符合就返回true +func AnyBy[T any](list []T, value T, equals func(v1 T, v2 T) bool) bool { + for _, v := range list { + if equals(v, value) { + return true + } + } + return false +} + +// All 所有元素符合就返回true +func All[T uttype.UtNumber](list []T, value T) bool { + for _, v := range list { + if v != value { + return false + } + } + return true +} + +// AllEquals 所有元素符合就返回true +func AllEquals[T uttype.EqualAble](list []T, value T) bool { + for _, v := range list { + if !v.Equals(value) { + return false + } + } + return true +} + +// AllBy 所有元素符合就返回true +func AllBy[T any](list []T, value T, equals func(v1 T, v2 T) bool) bool { + for _, v := range list { + if !equals(v, value) { + return false + } + } + return true +} + +// Filter 过滤 +func Filter[T comparable](list []T, value T) []T { + result := make([]T, 0) + for _, v := range list { + if v == value { + result = append(result, v) + } + } + return result +} + +// FilterEquals 过滤 +func FilterEquals[T uttype.EqualAble](list []T, value T) []T { + result := make([]T, 0) + for _, v := range list { + if v.Equals(value) { + result = append(result, v) + } + } + return result +} + +// FilterBy 过滤 +func FilterBy[T any](list []T, value T, equals func(v1 T, v2 T) bool) []T { + result := make([]T, 0) + for _, v := range list { + if equals(v, value) { + result = append(result, v) + } + } + return result +} + +// Shuffle 打乱 +func Shuffle[T any](list []T) { + for i := len(list) - 1; i > 0; i-- { + j := rand.Intn(i + 1) + list[i], list[j] = list[j], list[i] + } +} diff --git a/util/utstring/list.go b/util/utstring/list.go new file mode 100644 index 0000000..d111dfd --- /dev/null +++ b/util/utstring/list.go @@ -0,0 +1,51 @@ +package utstring + +import "strings" + +func ListStringToListInt(list []string) []int { + result := make([]int, 0) + for _, v := range list { + result = append(result, StringToInt(v)) + } + return result +} +func ListStringToListInt64(list []string) []int64 { + result := make([]int64, 0) + for _, v := range list { + result = append(result, StringToInt64(v)) + } + return result +} +func StringToListString(str string, sep string) []string { + return strings.Split(str, sep) +} +func StringToListInt(str string, sep string) []int { + return ListStringToListInt(strings.Split(str, sep)) +} +func StringToListListString(str string, sep1, sep2 string) [][]string { + result := make([][]string, 0) + list1 := strings.Split(str, sep1) + for _, v := range list1 { + list2 := strings.Split(v, sep2) + result = append(result, list2) + } + return result +} +func StringToListListInt(str string, sep1, sep2 string) [][]int { + result := make([][]int, 0) + list1 := strings.Split(str, sep1) + for _, v := range list1 { + list2 := strings.Split(v, sep2) + result = append(result, ListStringToListInt(list2)) + } + return result +} +func StringToListListInt64(str string, sep1, sep2 string) [][]int64 { + result := make([][]int64, 0) + list1 := strings.Split(str, sep1) + for _, v := range list1 { + list2 := strings.Split(v, sep2) + result = append(result, ListStringToListInt64(list2)) + } + return result +} diff --git a/util/utstring/string.go b/util/utstring/string.go new file mode 100644 index 0000000..6fd261d --- /dev/null +++ b/util/utstring/string.go @@ -0,0 +1,30 @@ +package utstring + +import ( + "strconv" +) + +func StringToInt(str string) int { + if value, err := strconv.Atoi(str); err == nil { + return value + } + return 0 +} +func StringToInt32(str string) int32 { + return int32(StringToInt(str)) +} +func StringToInt64(str string) int64 { + if value, err := strconv.ParseInt(str, 10, 64); err == nil { + return value + } + return 0 +} +func IntToString(value int) string { + return strconv.Itoa(value) +} +func Int32ToString(value int32) string { + return IntToString(int(value)) +} +func Int64ToString(value int64) string { + return strconv.FormatInt(value, 10) +} diff --git a/util/uttype/equals.go b/util/uttype/equals.go new file mode 100644 index 0000000..4e4be35 --- /dev/null +++ b/util/uttype/equals.go @@ -0,0 +1,8 @@ +package uttype + +// EqualAble 可比较的 +type EqualAble interface { + Equals(T EqualAble) bool +} + +type FuncEquals[T any] func(v1 T, v2 T) bool diff --git a/util/uttype/number.go b/util/uttype/number.go deleted file mode 100644 index b770182..0000000 --- a/util/uttype/number.go +++ /dev/null @@ -1,21 +0,0 @@ -package uttype - -// Int 整型 -type Int interface { - int | int8 | int16 | int32 | int64 | float32 | float64 -} - -// Uint 无符号整型 -type Uint interface { - uint | uint8 | uint16 | uint32 -} - -// Float 浮点 -type Float interface { - float32 | float64 -} - -// Number 数字 -type Number interface { - Int | Uint | Float -} diff --git a/util/uttype/slice.go b/util/uttype/slice.go deleted file mode 100644 index fd4d21c..0000000 --- a/util/uttype/slice.go +++ /dev/null @@ -1,43 +0,0 @@ -package uttype - -import "math/rand" - -// Contains 切片内是否有 -func Contains[T comparable](values []T, value T) bool { - for _, v := range values { - if v == value { - return true - } - } - return false -} - -// Min 最小值 -func Min[T Number](values ...T) T { - result := values[0] - for _, v := range values[1:] { - if v < result { - result = v - } - } - return result -} - -// Max 最大值 -func Max[T Number](values ...T) T { - result := values[0] - for _, v := range values[1:] { - if v > result { - result = v - } - } - return result -} - -// Shuffle 打乱 -func Shuffle[T any](list []T) { - for i := len(list) - 1; i > 0; i-- { - j := rand.Intn(i + 1) - list[i], list[j] = list[j], list[i] - } -} diff --git a/util/uttype/string.go b/util/uttype/string.go deleted file mode 100644 index 72a68aa..0000000 --- a/util/uttype/string.go +++ /dev/null @@ -1,84 +0,0 @@ -package uttype - -import ( - "strconv" - "strings" -) - -const ( - StrSpe1 = "|" - StrSpe2 = "_" -) - -func StringToInt(str string) int { - if value, err := strconv.Atoi(str); err == nil { - return value - } - return 0 -} -func StringToInt32(str string) int32 { - return int32(StringToInt(str)) -} -func StringToInt64(str string) int64 { - if value, err := strconv.ParseInt(str, 10, 64); err == nil { - return value - } - return 0 -} -func IntToString(value int) string { - return strconv.Itoa(value) -} -func Int32ToString(value int32) string { - return IntToString(int(value)) -} -func Int64ToString(value int64) string { - return strconv.FormatInt(value, 10) -} - -func ListStringToListInt(list []string) []int { - result := make([]int, 0) - for _, v := range list { - result = append(result, StringToInt(v)) - } - return result -} -func ListStringToListInt64(list []string) []int64 { - result := make([]int64, 0) - for _, v := range list { - result = append(result, StringToInt64(v)) - } - return result -} -func StringToListString(str string) []string { - return strings.Split(str, StrSpe1) -} -func StringToListInt(str string) []int { - return ListStringToListInt(strings.Split(str, StrSpe1)) -} -func StringToListListString(str string) [][]string { - result := make([][]string, 0) - list1 := strings.Split(str, StrSpe1) - for _, v := range list1 { - list2 := strings.Split(v, StrSpe2) - result = append(result, list2) - } - return result -} -func StringToListListInt(str string) [][]int { - result := make([][]int, 0) - list1 := strings.Split(str, StrSpe1) - for _, v := range list1 { - list2 := strings.Split(v, StrSpe2) - result = append(result, ListStringToListInt(list2)) - } - return result -} -func StringToListListInt64(str string) [][]int64 { - result := make([][]int64, 0) - list1 := strings.Split(str, StrSpe1) - for _, v := range list1 { - list2 := strings.Split(v, StrSpe2) - result = append(result, ListStringToListInt64(list2)) - } - return result -} diff --git a/util/uttype/type.go b/util/uttype/type.go new file mode 100644 index 0000000..a2e10ea --- /dev/null +++ b/util/uttype/type.go @@ -0,0 +1,21 @@ +package uttype + +type UtInt interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 +} + +type UtUint interface { + ~uint | ~uint8 | ~uint16 | ~uint32 +} + +type UtFloat interface { + ~float32 | ~float64 +} + +type UtNumber interface { + UtInt | UtUint | UtFloat +} + +type UtBase interface { + UtNumber | string +} -- libgit2 0.21.0