浏览代码

数据传输

cyzhao 3 年之前
父节点
当前提交
907e69f627
共有 2 个文件被更改,包括 98 次插入16 次删除
  1. 78 16
      CSserver/DataTransfer/Program.cs
  2. 20 0
      CSserver/Lib1/MemKey_User.cs

+ 78 - 16
CSserver/DataTransfer/Program.cs

@@ -31,7 +31,7 @@ namespace DataTransfer
                 try
                 {                               
                     int hour = DateTime.Now.Hour;            
-                    if (hour == 17 && mask == 0)//正式的是晚上2点进行数据传输
+                    if (hour == 10 && mask == 0)//正式的是晚上2点进行数据传输
                     {
                         Console.WriteLine("数据传输的时间到了开始执行程序.......");
                         //进行数据传输
@@ -39,7 +39,7 @@ namespace DataTransfer
                         dataTransfer();                      
                     }
 
-                    if (hour != 17 && mask != 0)
+                    if (hour != 10 && mask != 0)
                     {
                         mask = 0;
                     }
@@ -55,23 +55,38 @@ namespace DataTransfer
         public static void dataTransfer()
         {
             Console.WriteLine("进入dataTransfer方法..............");
-            
-            TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970,1,1);            
+
+            TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1);
             float day = MathF.Floor((long)ts.TotalSeconds / 24 / 60 / 60);
-            Console.WriteLine("当前天是:"+ day);
+            Console.WriteLine("当前天是:" + day);
 
             var mem = Redis.Ins.GetDatabase(0);
 
-            int zoneid = 1;//暂时先这样
-            if (mem.KeyExists(MemKey_Statistics.GamerunLoginUser(zoneid,day)))
-            {              
-                string[] list = mem.HashKeys(MemKey_Statistics.GamerunLoginUser(zoneid, day)).ToStringArray();                          
-                foreach (string k in list)
+            //int zoneid = 1;//暂时先这样
+
+            HashEntry[] zoneidList = mem.HashGetAll(MemKey_Statistics.Zonelist());
+            foreach (var item in zoneidList)
+            {
+                string[] sList = item.ToString().Split(':');
+                int zoneid = int.Parse(sList[0]);
+
+                Taskprogressrecord_RedisToSql(zoneid);
+
+                if (mem.KeyExists(MemKey_Statistics.GamerunLoginUser(zoneid, day)))
                 {
-                    Console.WriteLine("uid:" + k);
-                    redisToSql(k,zoneid);
+                    string[] list = mem.HashKeys(MemKey_Statistics.GamerunLoginUser(zoneid, day)).ToStringArray();
+                    foreach (string k in list)
+                    {
+                        Console.WriteLine("uid:" + k);
+                        redisToSql(k, zoneid);
+                    }
                 }
-            }
+                else
+                {
+                    Console.WriteLine(day+"-没有玩家登录,以玩家为单位的数据不做传输");
+                }
+            }       
+            
         }
        
         /// <summary>
@@ -81,15 +96,17 @@ namespace DataTransfer
         /// <param name="zoneid"></param>
         public static void redisToSql(string uid,int zoneid)
         {
-            Console.WriteLine("数据传输开始..........:" );
+            Console.WriteLine("以玩家为单位数据传输开始..........:" );
             Userbaseparams_RedisToSql(uid,zoneid);
             TaskcompleteTsrecord_RedisToSql(uid,zoneid);
         }
-     
+       
         const string Userbaseparams_TableName = "tab_userbaseparams";
 
         const string TaskcompleteTsrecord_TableName = "tab_taskcompleteTsrecord";
 
+        const string Taskprogressrecord_TableName = "tab_taskprogressrecord";
+
         /// <summary>
         /// 界面内数值变化数据传输
         /// </summary>
@@ -97,6 +114,7 @@ namespace DataTransfer
         /// <param name="zoneid"></param>
         public static void Userbaseparams_RedisToSql(string uid, int zoneid)
         {
+            Console.WriteLine("玩家基础数值变化方法开始.........");
             var mem = Redis.Ins.GetDatabase(0);
             string key = MemKey_Statistics.UserBaseParams(uid, zoneid);
 
@@ -146,12 +164,13 @@ namespace DataTransfer
         /// <param name="uid"></param>
         /// <param name="zoneid"></param>
         public static void TaskcompleteTsrecord_RedisToSql(string uid, int zoneid)
-        {
+        {            
             var mem = Redis.Ins.GetDatabase(0);
             string key = MemKey_Statistics.SelfTaskDataCollect(uid, zoneid);
 
             if (mem.KeyExists(key))
             {
+                Console.WriteLine("玩家任务完成时间记录方法开始.........");
                 long length = mem.ListLength(key);
                 var ctxList = mem.ListRange(key, 0, length);
 
@@ -180,5 +199,48 @@ namespace DataTransfer
                 }
             }
         }
+
+        /// <summary>
+        /// 所有玩家最新任务id记录
+        /// </summary>
+        /// <param name="uid"></param>
+        /// <param name="zoneid"></param>
+        public static void Taskprogressrecord_RedisToSql(int zoneid)
+        {
+            Console.WriteLine("玩家任务进度方式开始......");
+            var mem = Redis.Ins.GetDatabase(0);
+            string key = MemKey_Statistics.TaskDataCollect(zoneid);
+
+            if (mem.KeyExists(key))
+            {
+                HashEntry[] ctxList = mem.HashGetAll(key);
+                int length = ctxList.Length;
+                int num = 0;
+                foreach (var item in ctxList)
+                {
+                    num += 1;
+                    string[] sList = item.ToString().Split(':');
+                    string uid = sList[0];
+                    string taskId = sList[1];
+
+                    var sql = $" Insert Into {Taskprogressrecord_TableName} (`uid`, `zoneid`, `taskId`) " +
+                $"values('{uid}',{zoneid},'{taskId}')";
+
+                    var n = MysqlUtil.Ins.ExecuteSqlNonQuery(sql);
+                    //Debug.Assert(n > 0, $"{sql} 执行失败!");
+
+                    if (num >= length)
+                    {
+                        Console.WriteLine("总共执行条数:" + num);
+                        mem.KeyDelete(key);
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                Console.WriteLine("玩家任务进度redis-key不存在所以不在数据传输处理");
+            }          
+        }
     }
 }

+ 20 - 0
CSserver/Lib1/MemKey_User.cs

@@ -116,6 +116,16 @@ public class MemKey_User
 /// </summary>
 public class MemKey_Statistics
 {
+    /// <summary>
+    /// 游戏所有的区
+    /// </summary>
+    /// <returns></returns>
+    public static string Zonelist()
+    {
+        return "gamecfg-zonelist";
+    }
+
+
     /// <summary>
     /// 经验 金币钻石统计信息
     /// </summary>
@@ -142,4 +152,14 @@ public class MemKey_Statistics
     {
         return "SelfTaskDataCollect-" + uid + "-" + zoneid;
     }
+
+    /// <summary>
+    /// TaskDataCollect
+    /// </summary>
+    /// <param name="zoneid"></param>
+    /// <returns></returns>
+    public static string TaskDataCollect(int zoneid)
+    {
+        return "TaskDataCollect-"+ zoneid;
+    }
 }