OSDN Git Service

Kybernetes1.1.6.8リリース
[kybernetes/Kybernetes.git] / main / command / Control / PauseCommand.cs
diff --git a/main/command/Control/PauseCommand.cs b/main/command/Control/PauseCommand.cs
new file mode 100644 (file)
index 0000000..91b41b4
--- /dev/null
@@ -0,0 +1,95 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using com.andoutomo.kybernetes.data.accessor;\r
+using com.andoutomo.kybernetes.data.DAO;\r
+using com.andoutomo.kybernetes.view;\r
+using System.Windows.Forms;\r
+\r
+namespace com.andoutomo.kybernetes.command.control\r
+{\r
+    class PauseCommand:AbCommand\r
+    {\r
+        protected string message;\r
+        \r
+\r
+        protected override bool execute()\r
+        {\r
+            //アクセッサ\r
+            TaskDataAccessor accessor = TaskDataAccessor.getObject;\r
+\r
+            //現在実行中のタスクをターゲットとするので\r
+            //実行中のタスクを取得する(pwdのSQLを使用する)\r
+            List<TaskData> dataList = accessor.getPwdTaskList();\r
+            \r
+            //停止すべきものがない場合はメッセージを出して処理終了\r
+            if(dataList.Count == 0)\r
+            {\r
+                message = "停止すべきタスクはありません。";\r
+                return true;\r
+            }\r
+            //ループに入る前に終了時間を決めておく\r
+            data.TimeComponent endTime = data.TimeComponent.justNow();\r
+            foreach (TaskData _newData in dataList)\r
+            {\r
+                TaskData newData = accessor.getTask(_newData.SortID);\r
+                //タスクを終了する(終了時間を記載)\r
+                if (accessor.endTask(newData.SortID, data.TimeComponent.justNow()))\r
+                {\r
+                    TaskData _oldData = accessor.getTask(newData.SortID);\r
+                    //実績時間\r
+                    int wkRealMinutes = endTime.getSubtractionMinute(newData.StartTime);\r
+                    //予測時間寄り実績時間が小さい場合で、中断の場合は\r
+                    if (_oldData.ForecastMin > wkRealMinutes)\r
+                    {\r
+                        //予測時間を実績時間分差し引く(そうしないと、予測時間が重複してしまう。既にオーバーしてたら知らん。)\r
+                        _oldData.ForecastMin = endTime.getSubtractionMinute(newData.StartTime);\r
+                        TaskDataAccessor.getObject.updateTask(_oldData);\r
+                    }\r
+\r
+                    //複製するときに、実績時間分を予測時間から差し引く\r
+                    //元の見積もり時間 - 実績時間(終了時間-開始時間)\r
+                    int nextMinute = newData.ForecastMin - endTime.getSubtractionMinute(newData.StartTime);\r
+                    if (nextMinute > 0)\r
+                    {\r
+                        newData.ForecastMin = nextMinute;\r
+                    }\r
+                    else\r
+                    {\r
+                        newData.ForecastMin = 0;\r
+                    }\r
+\r
+                    //タスクを複製する\r
+                    newData.TaskID = accessor.getMaxTaskID();\r
+                    newData.SortID = accessor.getMaxSortID();\r
+                    accessor.insertTask(newData);\r
+\r
+                    //リピート対象のタスクは複製後もリピート対象とする。(逆に、最初のタスク終了時にリピート処理をしない。)\r
+                    accessor.setRepeatTask(newData.SortID, newData.IsRepeat);\r
+\r
+                    message += "タスク " + _oldData.SortID + " を中断します。" + System.Environment.NewLine;\r
+                    \r
+                }\r
+            }\r
+\r
+            return true;\r
+        }\r
+\r
+\r
+        protected override string turnMessage()\r
+        {\r
+            return message;\r
+        }\r
+\r
+        protected override string turnErrorMessage()\r
+        {\r
+            return base.DefaultErrorMessage;\r
+        }\r
+\r
+        protected override string turnSplitErrorMessage()\r
+        {\r
+            return base.DefaultSplitErrorMessage;\r
+        }\r
+    }\r
+}\r