From e17afe00ecedfd91c1595b47247d47974194a996 Mon Sep 17 00:00:00 2001 From: meixiongfeng <766881921@qq.com> Date: Fri, 4 Nov 2022 15:22:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/json/game_privilege.json | 44 +++++++ bin/json/game_privilegecard.json | 50 ++++++++ modules/privilege/api.go | 26 ++++ modules/privilege/api_getlist.go | 20 +++ modules/privilege/configure.go | 116 ++++++++++++++++++ modules/privilege/model_privilege.go | 28 +++++ modules/privilege/module.go | 44 +++++++ modules/privilege/module_test.go | 93 ++++++++++++++ sys/configure/structs/Game.Privilege.go | 42 +++++++ sys/configure/structs/Game.PrivilegeCard.go | 42 +++++++ .../structs/Game.PrivilegeCardData.go | 75 +++++++++++ sys/configure/structs/Game.PrivilegeData.go | 37 ++++++ sys/configure/structs/Tables.go | 14 +++ 13 files changed, 631 insertions(+) create mode 100644 bin/json/game_privilege.json create mode 100644 bin/json/game_privilegecard.json create mode 100644 modules/privilege/api.go create mode 100644 modules/privilege/api_getlist.go create mode 100644 modules/privilege/configure.go create mode 100644 modules/privilege/model_privilege.go create mode 100644 modules/privilege/module.go create mode 100644 modules/privilege/module_test.go create mode 100644 sys/configure/structs/Game.Privilege.go create mode 100644 sys/configure/structs/Game.PrivilegeCard.go create mode 100644 sys/configure/structs/Game.PrivilegeCardData.go create mode 100644 sys/configure/structs/Game.PrivilegeData.go diff --git a/bin/json/game_privilege.json b/bin/json/game_privilege.json new file mode 100644 index 000000000..9c3a63eeb --- /dev/null +++ b/bin/json/game_privilege.json @@ -0,0 +1,44 @@ +[ + { + "privilege_id": 10001, + "privilege_describe": { + "key": "privilegecard_10001", + "text": "特权描述1" + } + }, + { + "privilege_id": 10002, + "privilege_describe": { + "key": "privilegecard_10002", + "text": "特权描述2" + } + }, + { + "privilege_id": 10003, + "privilege_describe": { + "key": "privilegecard_10003", + "text": "特权描述3" + } + }, + { + "privilege_id": 10004, + "privilege_describe": { + "key": "privilegecard_10004", + "text": "特权描述4" + } + }, + { + "privilege_id": 10005, + "privilege_describe": { + "key": "privilegecard_10005", + "text": "特权描述5" + } + }, + { + "privilege_id": 10006, + "privilege_describe": { + "key": "privilegecard_10006", + "text": "特权描述6" + } + } +] \ No newline at end of file diff --git a/bin/json/game_privilegecard.json b/bin/json/game_privilegecard.json new file mode 100644 index 000000000..326f34822 --- /dev/null +++ b/bin/json/game_privilegecard.json @@ -0,0 +1,50 @@ +[ + { + "id": 1, + "name": "经典月卡", + "proid": "yueka_lv1", + "assert_day": 30, + "renew_day": 3, + "day_reward": [ + { + "a": "attr", + "t": "diamond", + "n": 60 + } + ], + "disposable_reward": { + "a": "attr", + "t": "diamond", + "n": 300 + }, + "privilege_id": [ + 10001, + 10002, + 10003 + ] + }, + { + "id": 2, + "name": "典藏月卡", + "proid": "yueka_lv2", + "assert_day": 30, + "renew_day": 3, + "day_reward": [ + { + "a": "attr", + "t": "diamond", + "n": 90 + } + ], + "disposable_reward": { + "a": "attr", + "t": "diamond", + "n": 980 + }, + "privilege_id": [ + 10004, + 10005, + 10006 + ] + } +] \ No newline at end of file diff --git a/modules/privilege/api.go b/modules/privilege/api.go new file mode 100644 index 000000000..35949af67 --- /dev/null +++ b/modules/privilege/api.go @@ -0,0 +1,26 @@ +package privilege + +import ( + "go_dreamfactory/modules" + + "go_dreamfactory/lego/core" +) + +type apiComp struct { + modules.MCompGate + service core.IService + module *Privilege +} + +//组件初始化接口 +func (this *apiComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { + this.MCompGate.Init(service, module, comp, options) + this.module = module.(*Privilege) + this.service = service + return +} + +func (this *apiComp) Start() (err error) { + err = this.MCompGate.Start() + return +} diff --git a/modules/privilege/api_getlist.go b/modules/privilege/api_getlist.go new file mode 100644 index 000000000..ed54c70fa --- /dev/null +++ b/modules/privilege/api_getlist.go @@ -0,0 +1,20 @@ +package privilege + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + + "google.golang.org/protobuf/proto" +) + +//参数校验 +func (this *apiComp) GetlistCheck(session comm.IUserSession, req *pb.ShopGetListReq) (code pb.ErrorCode) { + + return +} + +///获取特权列表 +func (this *apiComp) Getlist(session comm.IUserSession, req *pb.ShopGetListReq) (code pb.ErrorCode, data proto.Message) { + + return +} diff --git a/modules/privilege/configure.go b/modules/privilege/configure.go new file mode 100644 index 000000000..bed2b3097 --- /dev/null +++ b/modules/privilege/configure.go @@ -0,0 +1,116 @@ +package privilege + +import ( + "fmt" + "go_dreamfactory/lego/core" + "go_dreamfactory/modules" + "go_dreamfactory/pb" + cfg "go_dreamfactory/sys/configure/structs" +) + +const ( + game_shop = "game_shop.json" + game_shopitem = "game_shopitem.json" +) + +///背包配置管理组件 +type configureComp struct { + modules.MCompConfigure + module *Privilege +} + +//组件初始化接口 +func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { + this.MCompConfigure.Init(service, module, comp, options) + this.module = module.(*Privilege) + this.LoadConfigure(game_shop, cfg.NewGameShop) + this.LoadConfigure(game_shopitem, cfg.NewGameShopitem) + return +} + +//获取装备配置数据 +func (this *configureComp) GetShopConfigure(id int32) (configure *cfg.GameShopData, err error) { + var ( + v interface{} + ok bool + ) + if v, err = this.GetConfigure(game_shop); err != nil { + this.module.Errorf("err:%v", err) + return + } else { + if configure, ok = v.(*cfg.GameShop).GetDataMap()[id]; !ok { + err = fmt.Errorf("ShopConfigure not found:%d ", id) + this.module.Errorf("err:%v", err) + return + } + } + return +} + +//读取商品 +func (this *configureComp) GetShopItemsConfigure(key int32) (result *cfg.GameShopitemData, err error) { + var ( + v interface{} + ok bool + ) + if v, err = this.GetConfigure(game_shopitem); err != nil { + this.module.Errorf("err:%v", err) + return + } else { + if result, ok = v.(*cfg.GameShopitem).GetDataMap()[key]; !ok { + err = fmt.Errorf("ShopConfigure not found:%d ", key) + this.module.Errorf("err:%v", err) + return + } + } + return +} + +//读取商品组 +func (this *configureComp) GetShopItemsConfigureByGroups(groupid int32, user *pb.DBUser) (result []*cfg.GameShopitemData, err error) { + result = make([]*cfg.GameShopitemData, 0, 10) + var ( + v interface{} + table *cfg.GameShopitem + ) + if v, err = this.GetConfigure(game_shopitem); err != nil { + this.module.Errorf("err:%v", err) + return + } else { + table = v.(*cfg.GameShopitem) + for _, v := range table.GetDataMap() { + if v.Id == groupid && + user.Lv >= v.Lvmin && + user.Lv <= v.Lvmax && + user.Vip >= v.Vip { + result = append(result, v) + } + } + } + return +} + +//读取商品 +func (this *configureComp) GetShopItemsConfigureByIds(keys ...int32) (result []*cfg.GameShopitemData, err error) { + result = make([]*cfg.GameShopitemData, 0, len(keys)) + var ( + v interface{} + table *cfg.GameShopitem + item *cfg.GameShopitemData + ok bool + ) + if v, err = this.GetConfigure(game_shopitem); err != nil { + this.module.Errorf("err:%v", err) + return + } else { + table = v.(*cfg.GameShopitem) + for _, v := range keys { + if item, ok = table.GetDataMap()[v]; ok { + result = append(result, item) + } else { + this.module.Errorf("no found GetShopItemsConfigureByIds:%d", v) + } + } + } + return +} diff --git a/modules/privilege/model_privilege.go b/modules/privilege/model_privilege.go new file mode 100644 index 000000000..747b8322e --- /dev/null +++ b/modules/privilege/model_privilege.go @@ -0,0 +1,28 @@ +package privilege + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/lego/core" + "go_dreamfactory/modules" + + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/x/bsonx" +) + +///论坛 数据组件 +type modelShopComp struct { + modules.MCompModel + module *Privilege +} + +//组件初始化接口 +func (this *modelShopComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) { + this.MCompModel.Init(service, module, comp, opt) + this.module = module.(*Privilege) + this.TableName = comm.TableShop + //创建uid索引 + this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ + Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, + }) + return +} diff --git a/modules/privilege/module.go b/modules/privilege/module.go new file mode 100644 index 000000000..a431ef16a --- /dev/null +++ b/modules/privilege/module.go @@ -0,0 +1,44 @@ +package privilege + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/lego/core" + "go_dreamfactory/modules" + "go_dreamfactory/sys/db" +) + +func NewModule() core.IModule { + m := new(Privilege) + return m +} + +type Privilege struct { + modules.ModuleBase + api_comp *apiComp + configure *configureComp + modelShop *modelShopComp +} + +//模块名 +func (this *Privilege) GetType() core.M_Modules { + return comm.ModuleShop +} + +//模块初始化接口 注册用户创建角色事件 +func (this *Privilege) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { + err = this.ModuleBase.Init(service, module, options) + return +} + +//装备组件 +func (this *Privilege) OnInstallComp() { + this.ModuleBase.OnInstallComp() + this.api_comp = this.RegisterComp(new(apiComp)).(*apiComp) + this.modelShop = this.RegisterComp(new(modelShopComp)).(*modelShopComp) + this.configure = this.RegisterComp(new(configureComp)).(*configureComp) +} + +//Event------------------------------------------------------------------------------------------------------------ +func (this *Privilege) EventUserOffline(session comm.IUserSession) { + this.modelShop.DelByUId(session.GetUserId(), db.SetDBMgoLog(false)) +} diff --git a/modules/privilege/module_test.go b/modules/privilege/module_test.go new file mode 100644 index 000000000..25243d3cf --- /dev/null +++ b/modules/privilege/module_test.go @@ -0,0 +1,93 @@ +package privilege_test + +import ( + "context" + "fmt" + "go_dreamfactory/comm" + "go_dreamfactory/lego" + "go_dreamfactory/lego/base/rpcx" + "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/log" + "go_dreamfactory/modules/equipment" + "go_dreamfactory/modules/hero" + "go_dreamfactory/modules/items" + "go_dreamfactory/modules/shop" + "go_dreamfactory/modules/user" + "go_dreamfactory/pb" + "go_dreamfactory/services" + "go_dreamfactory/sys/configure" + "go_dreamfactory/sys/db" + "os" + "testing" + "time" + + "github.com/golang/protobuf/ptypes" +) + +func newService(ops ...rpcx.Option) core.IService { + s := new(TestService) + s.Configure(ops...) + return s +} + +//梦工厂基础服务对象 +type TestService struct { + rpcx.RPCXService +} + +//初始化相关系统 +func (this *TestService) InitSys() { + this.RPCXService.InitSys() + if err := db.OnInit(this.GetSettings().Sys["db"]); err != nil { + panic(fmt.Sprintf("init sys.db err: %s", err.Error())) + } else { + log.Infof("init sys.db success!") + } + if err := configure.OnInit(this.GetSettings().Sys["configure"], configure.SetConfigPath("F:/work/go/go_dreamfactory/bin/json")); err != nil { + panic(fmt.Sprintf("init sys.configure err: %s", err.Error())) + } else { + log.Infof("init sys.configure success!") + } +} + +var service core.IService +var s_gateComp comm.ISC_GateRouteComp = services.NewGateRouteComp() +var module = new(shop.Shop) + +//测试环境下初始化db和cache 系统 +func TestMain(m *testing.M) { + service = newService( + rpcx.SetConfPath("../../bin/conf/worker_1.yaml"), + rpcx.SetVersion("1.0.0.0"), + ) + service.OnInstallComp( //装备组件 + s_gateComp, //此服务需要接受用户的消息 需要装备网关组件 + ) + go func() { + lego.Run(service, //运行模块 + module, + hero.NewModule(), + user.NewModule(), + items.NewModule(), + equipment.NewModule(), + ) + }() + time.Sleep(time.Second * 3) + defer os.Exit(m.Run()) +} + +//测试api_getlist +func Test_Module_APIGetList(t *testing.T) { + data, _ := ptypes.MarshalAny(&pb.ShopGetListReq{SType: pb.ShopType_GoldShop, IsManualRefresh: false}) + reply := &pb.RPCMessageReply{} + s_gateComp.ReceiveMsg(context.Background(), &pb.AgentMessage{UserId: "0_62b16dda909b2f8faeff788d", MainType: "shop", SubType: "getlist", Message: data}, reply) + log.Debugf("reply:%v", reply) +} + +//测试api_buy +func Test_Module_APIBuy(t *testing.T) { + data, _ := ptypes.MarshalAny(&pb.ShopBuyReq{GoodsId: 7}) + reply := &pb.RPCMessageReply{} + s_gateComp.ReceiveMsg(context.Background(), &pb.AgentMessage{UserId: "0_62b16dda909b2f8faeff788d", MainType: "shop", SubType: "buy", Message: data}, reply) + log.Debugf("reply:%v", reply) +} diff --git a/sys/configure/structs/Game.Privilege.go b/sys/configure/structs/Game.Privilege.go new file mode 100644 index 000000000..a1826b03c --- /dev/null +++ b/sys/configure/structs/Game.Privilege.go @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +type GamePrivilege struct { + _dataMap map[int32]*GamePrivilegeData + _dataList []*GamePrivilegeData +} + +func NewGamePrivilege(_buf []map[string]interface{}) (*GamePrivilege, error) { + _dataList := make([]*GamePrivilegeData, 0, len(_buf)) + dataMap := make(map[int32]*GamePrivilegeData) + for _, _ele_ := range _buf { + if _v, err2 := DeserializeGamePrivilegeData(_ele_); err2 != nil { + return nil, err2 + } else { + _dataList = append(_dataList, _v) + dataMap[_v.PrivilegeId] = _v + } + } + return &GamePrivilege{_dataList:_dataList, _dataMap:dataMap}, nil +} + +func (table *GamePrivilege) GetDataMap() map[int32]*GamePrivilegeData { + return table._dataMap +} + +func (table *GamePrivilege) GetDataList() []*GamePrivilegeData { + return table._dataList +} + +func (table *GamePrivilege) Get(key int32) *GamePrivilegeData { + return table._dataMap[key] +} + + diff --git a/sys/configure/structs/Game.PrivilegeCard.go b/sys/configure/structs/Game.PrivilegeCard.go new file mode 100644 index 000000000..e90f6b648 --- /dev/null +++ b/sys/configure/structs/Game.PrivilegeCard.go @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +type GamePrivilegeCard struct { + _dataMap map[int32]*GamePrivilegeCardData + _dataList []*GamePrivilegeCardData +} + +func NewGamePrivilegeCard(_buf []map[string]interface{}) (*GamePrivilegeCard, error) { + _dataList := make([]*GamePrivilegeCardData, 0, len(_buf)) + dataMap := make(map[int32]*GamePrivilegeCardData) + for _, _ele_ := range _buf { + if _v, err2 := DeserializeGamePrivilegeCardData(_ele_); err2 != nil { + return nil, err2 + } else { + _dataList = append(_dataList, _v) + dataMap[_v.Id] = _v + } + } + return &GamePrivilegeCard{_dataList:_dataList, _dataMap:dataMap}, nil +} + +func (table *GamePrivilegeCard) GetDataMap() map[int32]*GamePrivilegeCardData { + return table._dataMap +} + +func (table *GamePrivilegeCard) GetDataList() []*GamePrivilegeCardData { + return table._dataList +} + +func (table *GamePrivilegeCard) Get(key int32) *GamePrivilegeCardData { + return table._dataMap[key] +} + + diff --git a/sys/configure/structs/Game.PrivilegeCardData.go b/sys/configure/structs/Game.PrivilegeCardData.go new file mode 100644 index 000000000..e6d96ca5d --- /dev/null +++ b/sys/configure/structs/Game.PrivilegeCardData.go @@ -0,0 +1,75 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +import "errors" + +type GamePrivilegeCardData struct { + Id int32 + Name string + Proid string + AssertDay int32 + RenewDay int32 + DayReward []*Gameatn + DisposableReward *Gameatn + PrivilegeId []int32 +} + +const TypeId_GamePrivilegeCardData = 1735553455 + +func (*GamePrivilegeCardData) GetTypeId() int32 { + return 1735553455 +} + +func (_v *GamePrivilegeCardData)Deserialize(_buf map[string]interface{}) (err error) { + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) } + { var _ok_ bool; if _v.Name, _ok_ = _buf["name"].(string); !_ok_ { err = errors.New("name error"); return } } + { var _ok_ bool; if _v.Proid, _ok_ = _buf["proid"].(string); !_ok_ { err = errors.New("proid error"); return } } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["assert_day"].(float64); !_ok_ { err = errors.New("assert_day error"); return }; _v.AssertDay = int32(_tempNum_) } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["renew_day"].(float64); !_ok_ { err = errors.New("renew_day error"); return }; _v.RenewDay = int32(_tempNum_) } + { + var _arr_ []interface{} + var _ok_ bool + if _arr_, _ok_ = _buf["day_reward"].([]interface{}); !_ok_ { err = errors.New("day_reward error"); return } + + _v.DayReward = make([]*Gameatn, 0, len(_arr_)) + + for _, _e_ := range _arr_ { + var _list_v_ *Gameatn + { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _e_.(map[string]interface{}); !_ok_ { err = errors.New("_list_v_ error"); return }; if _list_v_, err = DeserializeGameatn(_x_); err != nil { return } } + _v.DayReward = append(_v.DayReward, _list_v_) + } + } + + { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _buf["disposable_reward"].(map[string]interface{}); !_ok_ { err = errors.New("disposable_reward error"); return }; if _v.DisposableReward, err = DeserializeGameatn(_x_); err != nil { return } } + { + var _arr_ []interface{} + var _ok_ bool + if _arr_, _ok_ = _buf["privilege_id"].([]interface{}); !_ok_ { err = errors.New("privilege_id error"); return } + + _v.PrivilegeId = make([]int32, 0, len(_arr_)) + + for _, _e_ := range _arr_ { + var _list_v_ int32 + { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) } + _v.PrivilegeId = append(_v.PrivilegeId, _list_v_) + } + } + + return +} + +func DeserializeGamePrivilegeCardData(_buf map[string]interface{}) (*GamePrivilegeCardData, error) { + v := &GamePrivilegeCardData{} + if err := v.Deserialize(_buf); err == nil { + return v, nil + } else { + return nil, err + } +} diff --git a/sys/configure/structs/Game.PrivilegeData.go b/sys/configure/structs/Game.PrivilegeData.go new file mode 100644 index 000000000..cfbc9f5a4 --- /dev/null +++ b/sys/configure/structs/Game.PrivilegeData.go @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +package cfg + +import "errors" + +type GamePrivilegeData struct { + PrivilegeId int32 + PrivilegeDescribe string +} + +const TypeId_GamePrivilegeData = 40320255 + +func (*GamePrivilegeData) GetTypeId() int32 { + return 40320255 +} + +func (_v *GamePrivilegeData)Deserialize(_buf map[string]interface{}) (err error) { + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["privilege_id"].(float64); !_ok_ { err = errors.New("privilege_id error"); return }; _v.PrivilegeId = int32(_tempNum_) } + {var _ok_ bool; var __json_text__ map[string]interface{}; if __json_text__, _ok_ = _buf["privilege_describe"].(map[string]interface{}) ; !_ok_ { err = errors.New("_v.PrivilegeDescribe error"); return }; { var _ok_ bool; if _, _ok_ = __json_text__["key"].(string); !_ok_ { err = errors.New("key error"); return } }; { var _ok_ bool; if _v.PrivilegeDescribe, _ok_ = __json_text__["text"].(string); !_ok_ { err = errors.New("text error"); return } } } + return +} + +func DeserializeGamePrivilegeData(_buf map[string]interface{}) (*GamePrivilegeData, error) { + v := &GamePrivilegeData{} + if err := v.Deserialize(_buf); err == nil { + return v, nil + } else { + return nil, err + } +} diff --git a/sys/configure/structs/Tables.go b/sys/configure/structs/Tables.go index 0e98b2430..869ecc258 100644 --- a/sys/configure/structs/Tables.go +++ b/sys/configure/structs/Tables.go @@ -120,6 +120,8 @@ type Tables struct { TrollTrain *GameTrollTrain TrollLv *GameTrollLv TrollCoefficient *GameTrollCoefficient + PrivilegeCard *GamePrivilegeCard + Privilege *GamePrivilege } func NewTables(loader JsonLoader) (*Tables, error) { @@ -781,5 +783,17 @@ func NewTables(loader JsonLoader) (*Tables, error) { if tables.TrollCoefficient, err = NewGameTrollCoefficient(buf); err != nil { return nil, err } + if buf, err = loader("game_privilegecard"); err != nil { + return nil, err + } + if tables.PrivilegeCard, err = NewGamePrivilegeCard(buf); err != nil { + return nil, err + } + if buf, err = loader("game_privilege"); err != nil { + return nil, err + } + if tables.Privilege, err = NewGamePrivilege(buf); err != nil { + return nil, err + } return tables, nil }