OSDN Git Service

戦果を更新する時刻を午前5時から午前2時にする
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 18 May 2017 12:12:59 +0000 (21:12 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 18 May 2017 12:12:59 +0000 (21:12 +0900)
KancolleSniffer.Test/LoggerTest.cs
KancolleSniffer/Logger.cs
LogViewer/index.html

index 3314223..0f51aab 100644 (file)
@@ -345,12 +345,12 @@ namespace KancolleSniffer.Test
             {\r
                 new DateTime(2017, 3, 31, 21, 0, 0),\r
                 new DateTime(2017, 3, 31, 22, 0, 0),\r
-                new DateTime(2017, 4, 1, 4, 0, 0),\r
-                new DateTime(2017, 4, 1, 5, 0, 0),\r
-                new DateTime(2017, 4, 1, 6, 0, 0),\r
-                new DateTime(2017, 4, 2, 5, 0, 0),\r
-                new DateTime(2017, 4, 2, 6, 0, 0),\r
-                new DateTime(2017, 4, 2, 7, 0, 0)\r
+                new DateTime(2017, 4, 1, 1, 0, 0),\r
+                new DateTime(2017, 4, 1, 2, 0, 0),\r
+                new DateTime(2017, 4, 1, 3, 0, 0),\r
+                new DateTime(2017, 4, 2, 2, 0, 0),\r
+                new DateTime(2017, 4, 2, 3, 0, 0),\r
+                new DateTime(2017, 4, 2, 4, 0, 0)\r
             }.GetEnumerator();\r
             logger.SetWriter((path, s, h) => { result += s + "|"; }, () =>\r
             {\r
@@ -363,8 +363,8 @@ namespace KancolleSniffer.Test
             logger.InspectMapNext(JsonParser.Parse("{\"api_get_eo_rate\": 75}"));\r
             PAssert.That(() =>\r
                 "2017-03-31 21:00:00,0,0|2017-03-31 21:00:00,0,0|2017-03-31 22:00:00,1000,0|" +\r
-                "2017-04-01 06:00:00,4000,0|2017-04-02 05:00:00,5000,0|" +\r
-                "2017-04-02 06:00:00,5000,100|2017-04-02 07:00:00,5000,75|"\r
+                "2017-04-01 03:00:00,4000,0|2017-04-02 02:00:00,5000,0|" +\r
+                "2017-04-02 03:00:00,5000,100|2017-04-02 04:00:00,5000,75|"\r
                 == result);\r
         }\r
 \r
index 9ac3fdf..c8a7229 100644 (file)
@@ -384,8 +384,8 @@ namespace KancolleSniffer
                         _endOfMonth = _endOfMonth.AddDays(days);\r
                     }\r
                 }\r
-                _nextDate = new DateTime(now.Year, now.Month, now.Day, 5, 0, 0);\r
-                if (now.Hour >= 5)\r
+                _nextDate = new DateTime(now.Year, now.Month, now.Day, 2, 0, 0);\r
+                if (now.Hour >= 2)\r
                     _nextDate = _nextDate.AddDays(1);\r
                 if (_nextDate.Day == 1)\r
                     _nextDate = _nextDate.AddDays(1);\r
index 06b568f..c84b554 100644 (file)
@@ -669,25 +669,34 @@ function showAchivementTable(data) {
     }
     var result = [];
     var dayEo = 0;
-    var endOfMonth = null;
+    var endOfMonth = moment(0);
     var monthExp = 0;
     var monthEo = 0;
-    var endOfYear = null;
+    var endOfYear = moment(0);
     var yearExp = 0;
     var carryOverAch = 0;
     var carryOverEo = 0;
     var prevExp = null;
+    var lastDate = moment(0);
     var lastExp = -1;
-    var nextDate = null;
+    var nextDate = moment(0);
     for (var i = 0; i < data.length; i++) {
         var row = data[i];
         var date = parseDate(row[0]);
         var exp = row[1] - 0;
         var eo = row[2] - 0;
-        var isNewYear = endOfYear == null || date.isSameOrAfter(endOfYear);
-        var isNewMonth = endOfMonth == null || date.isSameOrAfter(endOfMonth);
-        var isNewDate = nextDate == null || date.isSameOrAfter(nextDate);
+        var isNewYear = date.isSameOrAfter(endOfYear);
+        var isNewMonth = date.isSameOrAfter(endOfMonth);
+        var isNewDate = date.isSameOrAfter(nextDate);
         if (isNewDate || isNewMonth || isNewYear) {
+            if (lastDate.add('hour', 1).isSameOrBefore(date)) {
+                // 2時を過ぎて最初のexpを戦果の計算に使うと、2時をまたいだ出撃の戦果が前日に加算される。
+                // そこで2時前のexpを使って戦果を計算するが、2時前のexpが正しく出力されていない場合は
+                // 戦果を正しく計算できない。記録の間隔が1時間以上空いているときは、2時をまたいだ出撃が
+                // 行われていない可能性が高いので計算には今のexpを使うことにする。
+                // これは5時基準で出力された過去のデータで、妥当な戦果を計算するために必要な処理である。
+                lastExp = exp;
+            }
             if (nextDate != null) {
                 result.push([
                     (isNewDate ? nextDate.subtract(1, 'days') : endOfMonth).format("YYYY-MM-DD"),
@@ -714,14 +723,15 @@ function showAchivementTable(data) {
                     carryOverAch.toFixed(1), carryOverEo.toFixed(1), (carryOverAch + carryOverEo).toFixed(1)]);
             }
             dayEo = 0;
-            nextDate = date.clone().hour(5).startOf('hour');
-            if (date.hour() >= 5)
+            nextDate = date.clone().hour(2).startOf('hour');
+            if (date.hour() >= 2)
                 nextDate.add(1, 'days');
             if (nextDate.date() === 1)
                 nextDate.add(1, 'days');
         }
         dayEo += eo;
         monthEo += eo;
+        lastDate = date;
         lastExp = exp;
     }
     var dt = $('#achivement_table').DataTable();