diff --git a/api/v1/game/manage.go b/api/v1/game/manage.go index 01726f0..4cd94f8 100644 --- a/api/v1/game/manage.go +++ b/api/v1/game/manage.go @@ -181,17 +181,21 @@ type CopyUnitReq struct { } type CopyUnitRes struct { - g.Meta `mime:"application/json"` - Filename string `json:"filename"` - StoreFilename string `json:"storeFilename"` + g.Meta `mime:"application/json"` + Filename string `json:"filename"` + StoreFilename string `json:"storeFilename"` + DeadFilename string `json:"deadFilename"` + DecorationFilename string `json:"decorationFilename"` } type UpdateUnitReq struct { - g.Meta `path:"/mange/updateUnit" tags:"账号" method:"get" summary:"更新账号"` - Filename string `p:"filename" v:"required#文件名不能为空"` - StoreFilename string `p:"storeFilename" v:"required#文件名不能为空"` - DestName int `p:"DestName" v:"required|min:1#账号ID不能为空"` - DestServer int `p:"DestServer" v:"required|min:1#服务器ID不能为空"` + g.Meta `path:"/mange/updateUnit" tags:"账号" method:"get" summary:"更新账号"` + Filename string `p:"filename" v:"required#文件名不能为空"` + StoreFilename string `p:"storeFilename" v:"required#文件名不能为空"` + DeadFilename string `p:"deadFilename" v:"required#文件名不能为空"` + DecorationFilename string `p:"decorationFilename" v:"required#文件名不能为空"` + DestName int `p:"DestName" v:"required|min:1#账号ID不能为空"` + DestServer int `p:"DestServer" v:"required|min:1#服务器ID不能为空"` } type UpdateUnitRes struct { diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index 9e8fb62..2b4079e 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -6,7 +6,6 @@ import ( "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/net/goai" "github.com/gogf/gf/v2/os/gcmd" - "log" "tyj_admin/internal/consts" "tyj_admin/internal/router" ) @@ -24,12 +23,11 @@ var ( }) s.BindHandler("/upload_file", func(r *ghttp.Request) { - log.Printf("upload_file >>>>>> filename: %s", r.GetQuery("filename")) r.Response.ServeFileDownload("./download/" + r.GetQuery("filename").String()) }) s.BindHandler("/download_file", func(r *ghttp.Request) { - log.Printf("download_file >>>>>> filename: %s", r.GetQuery("filename")) + r.Response.Header().Set("Access-Control-Allow-Origin", "*") r.Response.ServeFileDownload("./download/" + r.GetQuery("filename").String()) }) enhanceOpenAPIDoc(s) diff --git a/internal/service/aliyunSms.go b/internal/service/aliyunSms.go index f7f3284..b7de157 100644 --- a/internal/service/aliyunSms.go +++ b/internal/service/aliyunSms.go @@ -17,6 +17,7 @@ import ( ) type IAliYunSms interface { + ConfigInit() CreateClient() (_result *dysmsapi20170525.Client, _err error) Main(args []string) (_err error) } @@ -43,6 +44,10 @@ var ( ) func init() { + aliYunSmsService.ConfigInit() +} + +func (a *aliYunSmsServiceTmpl) ConfigInit() { //加载游戏相关配置 ctx := gctx.New() diff --git a/internal/service/email.go b/internal/service/email.go index 33df6df..e0a1b8e 100644 --- a/internal/service/email.go +++ b/internal/service/email.go @@ -12,6 +12,7 @@ import ( ) type IEmail interface { + ConfigInit() SendEmail(emailAddr, code string) (err error) } @@ -39,6 +40,10 @@ var ( ) func init() { + emailService.ConfigInit() +} + +func (a *emailServiceTmpl) ConfigInit() { //加载游戏相关配置 ctx := gctx.New() diff --git a/internal/serviceGame/loginUrl.go b/internal/serviceGame/loginUrl.go index 96c17ba..1221004 100644 --- a/internal/serviceGame/loginUrl.go +++ b/internal/serviceGame/loginUrl.go @@ -12,6 +12,7 @@ import ( "tyj_admin/internal/consts" "tyj_admin/internal/dao" "tyj_admin/internal/model/entity" + "tyj_admin/internal/service" "tyj_admin/internal/serviceGame/internal" "tyj_admin/library/libUtils" "tyj_admin/library/liberr" @@ -233,6 +234,8 @@ func (c *gameLoginUrlImpl) ReConfigServer(ctx context.Context, req *game.ReConfi internal.InitChannel(ctx) internal.InitRouterServer(ctx) internal.MongoInit(ctx) + service.AliYunSms().ConfigInit() + service.Email().ConfigInit() return } diff --git a/internal/serviceGame/manage.go b/internal/serviceGame/manage.go index 40d8f91..2743c1b 100644 --- a/internal/serviceGame/manage.go +++ b/internal/serviceGame/manage.go @@ -92,54 +92,51 @@ func (ga *gameManageImpl) CopyUnit(ctx context.Context, req *game.CopyUnitReq) ( } filename := "Unit" + fmt.Sprint(req.SrcName) + ".json" storeFilename := "storeComponent" + fmt.Sprint(req.SrcName) + ".json" - userDir := "./download/" + filename - storeDir := "./download/" + storeFilename + deadFilename := "DeadVillagerManagerComponent" + fmt.Sprint(req.SrcName) + ".json" + decorationFilename := "DecorationManagerComponent" + fmt.Sprint(req.SrcName) + ".json" + //userDir := "./download/" + filename + //storeDir := "./download/" + storeFilename + //deadDir := "./download/" + deadFilename + //decorationDir := "./download/" + decorationFilename g.Try(ctx, func(ctx context.Context) { - name := "mongoexport" - args := []string{} - args1 := []string{} + mongoexportCommand(ctx, filename, "Unit", int64(req.SrcName), mongoConfig, 1) + mongoexportCommand(ctx, storeFilename, "StoreComponent", unit.Uid, mongoConfig, 2) + mongoexportCommand(ctx, deadFilename, "DeadVillagerManagerComponent", unit.Uid, mongoConfig, 2) + mongoexportCommand(ctx, decorationFilename, "DecorationManagerComponent", unit.Uid, mongoConfig, 2) + res.Filename = filename + res.StoreFilename = storeFilename + res.DeadFilename = deadFilename + res.DecorationFilename = decorationFilename + }) + fmt.Println("CopyUnit GetRoleDelta", gjson.MustEncodeString(res)) + return +} + +func mongoexportCommand(ctx context.Context, filename string, collection string, uid int64, mongoConfig internal.MongoType, qType int) { + g.Try(ctx, func(ctx context.Context) { + args := []string{} + dir := "./download/" + filename args = append(args, fmt.Sprintf("--uri=\"%s\"", mongoConfig.Link1)) args = append(args, fmt.Sprintf("--authenticationDatabase=%s", mongoConfig.Auth)) - args1 = append(args1, fmt.Sprintf("--uri=\"%s\"", mongoConfig.Link1)) - args1 = append(args1, fmt.Sprintf("--authenticationDatabase=%s", mongoConfig.Auth)) - args = append(args, "--collection=Unit") + args = append(args, fmt.Sprintf("--collection=%s", collection)) args = append(args, "--jsonArray") - args = append(args, fmt.Sprintf("--out=\"%s\"", userDir)) - args = append(args, fmt.Sprintf("--query=\"{\\\"UniqueId\\\":%d}\"", req.SrcName)) + args = append(args, fmt.Sprintf("--out=\"%s\"", dir)) + if qType == 1 { + args = append(args, fmt.Sprintf("--query=\"{\\\"UniqueId\\\":%d}\"", uid)) + } else { + args = append(args, fmt.Sprintf("--query=\"{\\\"_id\\\":%d}\"", uid)) + } + args = append(args, "--jsonFormat=canonical") args = append(args, "--type=json") - args1 = append(args1, "--collection=StoreComponent") - args1 = append(args1, "--jsonArray") - args1 = append(args1, fmt.Sprintf("--out=\"%s\"", storeDir)) - args1 = append(args1, fmt.Sprintf("--query=\"{\\\"_id\\\":%d}\"", unit.Uid)) - args1 = append(args1, "--jsonFormat=canonical") - args1 = append(args1, "--type=json") - - err = utils.CmdCommand(ctx, name, args...) + err := utils.CmdCommand(ctx, "mongoexport", args...) if err != nil { - log.Printf("cmd.Run() args failed with %s\n", err) + log.Printf(" %s cmd.Run() args failed with %s\n", dir, err) return } - err = utils.CmdCommand(ctx, name, args1...) - if err != nil { - log.Printf("cmd.Run() args1 failed with %s\n", err) - return - } - - wireteString := fmt.Sprintf("mongoexport --uri=\"%s\" --authenticationDatabase=%s --collection=Unit --out=\"%s\" --query=\"{\\\"UniqueId\\\":%d}\" --jsonArray --jsonFormat=canonical --type=json", - mongoConfig.Link1, mongoConfig.Auth, userDir, req.SrcName) - writeString := fmt.Sprintf("mongoexport --uri=\"%s\" --authenticationDatabase=%s --collection=StoreComponent --out=\"%s\" --query=\"{\\\"_id\\\":%d}\" --jsonArray --jsonFormat=canonical --type=json", - mongoConfig.Link1, mongoConfig.Auth, storeDir, unit.Uid) - log.Println(wireteString) - log.Println(writeString) - - res.Filename = filename - res.StoreFilename = storeFilename }) - fmt.Println("CopyUnit GetRoleDelta", res.Filename) - return } func (ga *gameManageImpl) UpdateUnit(ctx context.Context, req *game.UpdateUnitReq) (res *game.UpdateUnitRes, err error) { @@ -195,6 +192,17 @@ func (ga *gameManageImpl) UpdateUnit(ctx context.Context, req *game.UpdateUnitRe srcId = fmt.Sprint(UniqueId["$numberLong"]) } + log.Printf("copyUnit srcid: %s, uid: %s, destid: %d, uid: %d", srcId, srcUid, destId, req.DestName) + if srcId == "" || srcUid == "" { + return + } + writeUnitString := strings.ReplaceAll(gjson.MustEncodeString(v1), srcId, fmt.Sprint(destId)) + writeUnitString = internal.ReplaceLastOccurrence(writeUnitString, srcUid, fmt.Sprint(req.DestName)) + if err = os.WriteFile(userDir, []byte(writeUnitString), 0666); err != nil { + log.Println(err) + return + } + userStoreDir := "./download/storeComponent" + fmt.Sprint(req.DestName) + fmt.Sprint(time.Now().Unix()) + ".json" srcStoreDir := "./download/" + req.StoreFilename writeStoreByte, err1 := os.ReadFile(srcStoreDir) @@ -206,77 +214,106 @@ func (ga *gameManageImpl) UpdateUnit(ctx context.Context, req *game.UpdateUnitRe if strings.HasPrefix(string(writeStoreByte), "[") { user := []interface{}{} json.Unmarshal(writeStoreByte, &user) - v2 = user[0].(map[string]interface{}) + if len(user) != 0 { + v2 = user[0].(map[string]interface{}) + } } else { json.Unmarshal(writeStoreByte, &v2) } - - log.Printf("copyUnit srcid: %s, uid: %s, destid: %d, uid: %d", srcId, srcUid, destId, req.DestName) - if srcId == "" || srcUid == "" { - return - } - writeUnitString := strings.ReplaceAll(gjson.MustEncodeString(v1), srcId, fmt.Sprint(destId)) writeStoreString := strings.ReplaceAll(gjson.MustEncodeString(v2), srcId, fmt.Sprint(destId)) - writeUnitString = internal.ReplaceLastOccurrence(writeUnitString, srcUid, fmt.Sprint(req.DestName)) - if err = os.WriteFile(userDir, []byte(writeUnitString), 0666); err != nil { - log.Println(err) - return - } - if err = os.WriteFile(userStoreDir, []byte(writeStoreString), 0666); err != nil { log.Println(err) return } - writeUnitCmd := fmt.Sprintf("mongoimport --uri=\"%s\" --authenticationDatabase=%s --collection=Unit --file=\"%s\" --type=json --mode=upsert", - mongoConfig.Link1, mongoConfig.Auth, userDir) - writeStoreCmd := fmt.Sprintf("mongoimport --uri=\"%s\" --authenticationDatabase=%s --collection=StoreComponent --file=\"%s\" --type=json --mode=upsert", - mongoConfig.Link1, mongoConfig.Auth, userStoreDir) - log.Println("sh Unit: ", writeUnitCmd) - log.Println("sh StoreComponent: ", writeStoreCmd) - g.Try(ctx, func(ctx context.Context) { - name := "mongoimport" - args := []string{} - args1 := []string{} - args = append(args, fmt.Sprintf("--uri=\"%s\"", mongoConfig.Link1)) - args = append(args, fmt.Sprintf("--authenticationDatabase=%s", mongoConfig.Auth)) - args1 = append(args1, fmt.Sprintf("--uri=\"%s\"", mongoConfig.Link1)) - args1 = append(args1, fmt.Sprintf("--authenticationDatabase=%s", mongoConfig.Auth)) - args = append(args, "--collection=Unit") - args = append(args, fmt.Sprintf("--file=\"%s\"", userDir)) - args = append(args, "--type=json") - args = append(args, "--mode=upsert") - args1 = append(args1, "--collection=StoreComponent") - args1 = append(args1, fmt.Sprintf("--file=\"%s\"", userStoreDir)) - args1 = append(args1, "--type=json") - args1 = append(args1, "--mode=upsert") + userDeadDir := "./download/DeadVillagerManagerComponent" + fmt.Sprint(req.DestName) + fmt.Sprint(time.Now().Unix()) + ".json" + srcDeadDir := "./download/" + req.DeadFilename + writeDeadByte, err1 := os.ReadFile(srcDeadDir) + if err1 != nil { + return res, err1 + } - err = utils.CmdCommand(ctx, name, args...) - if err != nil { - log.Printf("cmd.Run() failed with %s\n", err) - return + var v3 map[string]interface{} + if strings.HasPrefix(string(writeDeadByte), "[") { + user := []interface{}{} + json.Unmarshal(writeDeadByte, &user) + if len(user) != 0 { + v3 = user[0].(map[string]interface{}) } - err = utils.CmdCommand(ctx, name, args1...) - if err != nil { - log.Printf("cmd.Run() failed with %s\n", err) + } else { + json.Unmarshal(writeDeadByte, &v3) + } + if len(v3) != 0 { + writeDeadString := strings.ReplaceAll(gjson.MustEncodeString(v3), srcId, fmt.Sprint(destId)) + if err = os.WriteFile(userDeadDir, []byte(writeDeadString), 0666); err != nil { + log.Println(err) return } - err = os.Remove(userDir) - if err != nil { - log.Printf("os.Remove failed with %s\n", err) - return + } + + userDecorationDir := "./download/DecorationManagerComponent" + fmt.Sprint(req.DestName) + fmt.Sprint(time.Now().Unix()) + ".json" + srcDecorationDir := "./download/" + req.DecorationFilename + writeDecorationByte, err1 := os.ReadFile(srcDecorationDir) + if err1 != nil { + return res, err1 + } + + var v4 map[string]interface{} + if strings.HasPrefix(string(writeDecorationByte), "[") { + user := []interface{}{} + json.Unmarshal(writeDecorationByte, &user) + if len(user) != 0 { + v4 = user[0].(map[string]interface{}) } - err = os.Remove(userStoreDir) - if err != nil { - log.Printf("os.Remove failed with %s\n", err) + } else { + json.Unmarshal(writeDecorationByte, &v4) + } + if len(v4) != 0 { + writeDecorationString := strings.ReplaceAll(gjson.MustEncodeString(v4), srcId, fmt.Sprint(destId)) + if err = os.WriteFile(userDecorationDir, []byte(writeDecorationString), 0666); err != nil { + log.Println(err) return } + } + //writeUnitCmd := fmt.Sprintf("mongoimport --uri=\"%s\" --authenticationDatabase=%s --collection=Unit --file=\"%s\" --type=json --mode=upsert", + // mongoConfig.Link1, mongoConfig.Auth, userDir) + //writeStoreCmd := fmt.Sprintf("mongoimport --uri=\"%s\" --authenticationDatabase=%s --collection=StoreComponent --file=\"%s\" --type=json --mode=upsert", + // mongoConfig.Link1, mongoConfig.Auth, userStoreDir) + //log.Println("sh Unit: ", writeUnitCmd) + //log.Println("sh StoreComponent: ", writeStoreCmd) + g.Try(ctx, func(ctx context.Context) { + mongoimportCommand(ctx, "Unit", userDir, mongoConfig) + mongoimportCommand(ctx, "StoreComponent", userStoreDir, mongoConfig) + mongoimportCommand(ctx, "DeadVillagerManagerComponent", userDeadDir, mongoConfig) + mongoimportCommand(ctx, "DecorationManagerComponent", userDecorationDir, mongoConfig) }) - fmt.Println("UpdateUnit GetRoleDelta", req.DestName) + //fmt.Println("UpdateUnit GetRoleDelta", gjson.MustEncodeString(req)) return } +func mongoimportCommand(ctx context.Context, collection, dir string, mongoConfig internal.MongoType) { + args := []string{} + args = append(args, fmt.Sprintf("--uri=\"%s\"", mongoConfig.Link1)) + args = append(args, fmt.Sprintf("--authenticationDatabase=%s", mongoConfig.Auth)) + args = append(args, fmt.Sprintf("--collection=%s", collection)) + args = append(args, fmt.Sprintf("--file=\"%s\"", dir)) + args = append(args, "--type=json") + args = append(args, "--mode=upsert") + + err := utils.CmdCommand(ctx, "mongoimport", args...) + if err != nil { + log.Printf("%s cmd.Run() failed with %s\n", dir, err) + return + } + + err = os.Remove(dir) + if err != nil { + log.Printf("%s os.Remove failed with %s\n", dir, err) + return + } +} + func (ga *gameManageImpl) DelAccount(ctx context.Context, req *game.DelAccountReq) (res *game.DelAccountRes, err error) { user := service.Context().GetLoginUser(ctx) fulluser, err1 := service.User().GetUserByUsername(ctx, user.UserName)