--- /dev/null
+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