2 using System.Collections.Generic;
\r
3 using System.Data.SQLite;
\r
4 using com.andoutomo.kybernetes.data.connection;
\r
5 using com.andoutomo.kybernetes.data.DAO;
\r
8 namespace com.andoutomo.kybernetes.data.accessor
\r
10 class TaskDataAccessor
\r
12 private static TaskDataAccessor accessor;
\r
13 private TaskDataAccessor()
\r
19 internal static TaskDataAccessor getObject
\r
23 if (accessor == null)
\r
25 accessor = new TaskDataAccessor();
\r
31 /// 今日のタスクリストを取得します。「今日」はシステムテーブルから取得します。
\r
33 /// <returns></returns>
\r
34 internal List<TaskData> getToDayTaskList()
\r
36 return getTaskList(SqlDictionary.getTodayList,new List<object>());
\r
40 /// 日付ごとのタスクリストを取得します。
\r
42 /// <param name="date"></param>
\r
43 /// <returns></returns>
\r
44 internal List<TaskData> getDailyTaskList(DateComponent date)
\r
46 List<object> arg = new List<object>();
\r
47 arg.Add(date.getDateString("yyyy-MM-dd"));
\r
49 return getTaskList(SqlDictionary.getDailyList, arg);
\r
52 /// 現在実施中のタスクリストを抽出します。日付はシステムテーブルから、実施中の判断は
\r
53 /// StartしていてEndしていないもの、とします。
\r
55 /// <returns></returns>
\r
56 internal List<TaskData> getPwdTaskList()
\r
58 return getTaskList(SqlDictionary.getPwdList, new List<object>());
\r
63 /// IDを元に単体タスクを抽出します。
\r
65 /// <param name="sortId"></param>
\r
66 /// <returns></returns>
\r
67 internal TaskData getTask(int sortId)
\r
69 List<object> args = new List<object>();
\r
71 TaskData data = null;
\r
72 TaskDBConnection.Connection.selectData(SqlDictionary.getOneTask, args,
\r
73 (SQLiteDataReader reader) =>
\r
77 data = new TaskData();
\r
79 data.TaskID = Convert.ToInt32(reader["TASKID"].ToString());
\r
80 data.SortID = Convert.ToInt32(reader["SORTID"].ToString());
\r
81 data.DoDate = new DateComponent(reader["DODATE"].ToString(), '/');
\r
82 data.TimeArea = reader["TIMEAREA"].ToString();
\r
83 data.CategID = Convert.ToInt32(reader["CATEGID"].ToString());
\r
84 data.Category = reader["CATEGORY"].ToString();
\r
85 data.Contents = reader["CONTENTS"].ToString();
\r
86 data.ForecastMin = Convert.ToInt32(reader["FORCASTMIN"].ToString());
\r
87 data.StartTime = new TimeComponent(reader["STARTTIME"].ToString());
\r
88 data.EndTime = new TimeComponent(reader["ENDTIME"].ToString());
\r
89 data.IsRepeat = Convert.ToInt32(reader["REPEATFLG"].ToString());
\r
97 /// 内部メソッド。タスクリストを取得します。
\r
99 /// <param name="sql"></param>
\r
100 /// <param name="args"></param>
\r
101 /// <returns></returns>
\r
102 private List<TaskData> getTaskList(string sql,List<object> args)
\r
104 List<TaskData> resultList = new List<TaskData>();
\r
105 TaskDBConnection.Connection.selectData(sql, args,
\r
106 (SQLiteDataReader reader) =>
\r
108 while (reader.Read())
\r
110 TaskData data = new TaskData();
\r
111 data.TaskID = Convert.ToInt32(reader["TASKID"].ToString());
\r
112 data.SortID = Convert.ToInt32(reader["SORTID"].ToString());
\r
113 data.DoDate = new DateComponent(reader["DODATE"].ToString(),'/');
\r
114 data.TimeArea = reader["TIMEAREA"].ToString();
\r
115 data.Category = reader["CATEGORY"].ToString();
\r
116 data.Contents = reader["CONTENTS"].ToString();
\r
117 data.ForecastMin = Convert.ToInt32(reader["FORCASTMIN"].ToString());
\r
118 data.StartTime = new TimeComponent(reader["STARTTIME"].ToString());
\r
119 data.EndTime = new TimeComponent(reader["ENDTIME"].ToString());
\r
120 data.IsRepeat = Convert.ToInt32(reader["REPEATFLG"].ToString());
\r
121 data.HasComment = Convert.ToInt32(reader["HASCOMMENT"].ToString());
\r
122 if (data.Category != string.Empty)
\r
124 data.BgColor = Convert.ToInt32(reader["BGCOLOR"].ToString());
\r
125 data.FrColor = Convert.ToInt32(reader["FRCOLOR"].ToString());
\r
127 resultList.Add(data);
\r
133 /// タスクの最大採番を行います。<br/>
\r
134 /// その時点での最大の採番は、(タスクIDの最大値+1)×10とします。
\r
135 /// (1の位に1~9が入っているとしても、次のタスクに採番されるのは10多いから重ならない)
\r
137 /// <returns></returns>
\r
138 internal int getMaxTaskID()
\r
141 TaskDBConnection.Connection.selectData(SqlDictionary.getMaxIDofTask,
\r
142 (SQLiteDataReader reader) =>
\r
145 if (reader.HasRows)
\r
148 string nextID = reader["NEXTID"].ToString();
\r
149 if (string.IsNullOrEmpty(nextID))
\r
155 maxID = Convert.ToInt32(nextID);
\r
162 /// ソート番号の最大を算出します。
\r
163 /// このメソッドは、renum実行時に過去分のタスクはマイナスになっていることを前提とします。
\r
165 /// <returns></returns>
\r
166 internal int getMaxSortID()
\r
169 TaskDBConnection.Connection.selectData(SqlDictionary.getMaxSortID,
\r
170 (SQLiteDataReader reader) =>
\r
172 if (reader.HasRows)
\r
175 string nextSortID = reader["NEXTSORTID"].ToString();
\r
176 if (string.IsNullOrEmpty(nextSortID))
\r
182 maxSortID = Convert.ToInt32(nextSortID);
\r
192 /// 次タスクのスタートを決めるため、当日の最大End時間を求めます。
\r
193 /// 当日にEnd時間がなければNullを返却します。
\r
195 /// <param name="date"></param>
\r
196 /// <returns></returns>
\r
197 internal TimeComponent getNextStartTime(DateComponent date)
\r
203 List<object> arg = new List<object>();
\r
204 arg.Add(date.getDateString("yyyy-MM-dd"));
\r
205 TimeComponent endDate = null;
\r
207 TaskDBConnection.Connection.selectData(SqlDictionary.getNextStartTime, arg,
\r
208 (SQLiteDataReader reader) => {
\r
209 if (reader.HasRows)
\r
212 endDate = new TimeComponent(reader["MAXENDTIME"].ToString());
\r
221 /// <param name="data"></param>
\r
222 /// <returns></returns>
\r
223 internal bool insertTask(TaskData data)
\r
225 List<object> parameters = new List<object>();
\r
227 parameters.Add(data.TaskID);
\r
228 parameters.Add(data.SortID);
\r
229 parameters.Add(data.DoDate.getDateString("yyyy-MM-dd"));
\r
230 parameters.Add(data.TimeArea.ToUpper());
\r
231 parameters.Add(data.CategID);
\r
232 parameters.Add(data.Contents);
\r
233 parameters.Add(data.ForecastMin);
\r
235 return TaskDBConnection.Connection.updateData(SqlDictionary.insertTask, parameters);
\r
241 /// <param name="data"></param>
\r
242 /// <returns></returns>
\r
243 internal bool updateTask(TaskData data)
\r
246 List<object> parameters = new List<object>();
\r
247 parameters.Add(data.DoDate.getDateString("yyyy-MM-dd"));
\r
248 parameters.Add(data.TimeArea.ToUpper());
\r
249 parameters.Add(data.CategID);
\r
250 parameters.Add(data.Contents);
\r
251 parameters.Add(data.ForecastMin);
\r
252 parameters.Add(data.SortID);
\r
254 return TaskDBConnection.Connection.updateData(SqlDictionary.updateTask, parameters);
\r
260 /// <param name="id">ソートID</param>
\r
261 /// <param name="startTime"></param>
\r
262 /// <returns></returns>
\r
263 internal bool startTask(int id ,TimeComponent startTime)
\r
265 List<object> parameters = new List<object>();
\r
266 parameters.Add(startTime.ToString());
\r
267 parameters.Add(id);
\r
269 return TaskDBConnection.Connection.updateData(SqlDictionary.startTask, parameters);
\r
275 /// <param name="id">ソートID</param>
\r
276 /// <param name="endTime"></param>
\r
277 /// <returns></returns>
\r
278 internal bool endTask(int id, TimeComponent endTime)
\r
280 List<object> parameters = new List<object>();
\r
281 parameters.Add(endTime.ToString());
\r
282 parameters.Add(id);
\r
284 return TaskDBConnection.Connection.updateData(SqlDictionary.endTask, parameters);
\r
288 /// タスクがリピート対象であるかどうかを照合します。
\r
290 /// <param name="id"></param>
\r
291 /// <returns></returns>
\r
292 internal bool isRepeatTask(int id)
\r
295 List<object> parameters = new List<object>();
\r
296 parameters.Add(id);
\r
297 TaskDBConnection.Connection.selectData(SqlDictionary.isRepeatTask, parameters,
\r
298 (SQLiteDataReader reader) =>
\r
300 if (reader.HasRows)
\r
303 int dbVal = Convert.ToInt32(reader["REPEATFLG"].ToString());
\r
320 /// <param name="id"></param>
\r
321 /// <param name="isRepeat"></param>
\r
322 /// <returns></returns>
\r
323 internal bool setRepeatTask(int id, bool isRepeat)
\r
325 List<object> parameters = new List<object>();
\r
327 int settingData = (isRepeat ? 1 : 0);
\r
329 parameters.Add(settingData);
\r
330 parameters.Add(id);
\r
332 return TaskDBConnection.Connection.updateData(SqlDictionary.setRepeatTask, parameters);
\r
340 /// <param name="id"></param>
\r
341 /// <returns></returns>
\r
342 internal bool deleteTask(int from,int to)
\r
344 List<object> parameters = new List<object>();
\r
345 parameters.Add(from);
\r
346 parameters.Add(to);
\r
348 return TaskDBConnection.Connection.updateData(SqlDictionary.deleteTasks, parameters);
\r
352 /// 削除する前に何件あるか確認します。
\r
354 /// <param name="from"></param>
\r
355 /// <param name="to"></param>
\r
356 /// <returns></returns>
\r
357 internal int countDeleteTargetTask(int from, int to)
\r
359 List<object> parameters = new List<object>();
\r
360 parameters.Add(from);
\r
361 parameters.Add(to);
\r
365 TaskDBConnection.Connection.selectData(SqlDictionary.countBeforeDelete, parameters,
\r
366 (SQLiteDataReader reader) =>
\r
368 if (reader.HasRows)
\r
371 retVal = Convert.ToInt32(reader["COUNT"].ToString());
\r
380 /// <returns></returns>
\r
381 internal List<TaskData> getAllTaskList()
\r
383 return getTaskList(SqlDictionary.getAllList, new List<object>());
\r
387 /// 終了していないタスクをすべて表示します。
\r
389 /// <returns></returns>
\r
390 internal List<TaskData> getRemainTaskList()
\r
392 return getTaskList(SqlDictionary.getRemainList, new List<object>());
\r
397 /// <param name="searchWord"></param>
\r
398 /// <returns></returns>
\r
399 internal List<TaskData> findTask(string searchWord)
\r
401 string wkSearchWord = "%" + searchWord + "%";
\r
403 List<object> args = new List<object> { wkSearchWord ,wkSearchWord};
\r
404 return getTaskList(SqlDictionary.searchTasks, args);
\r
409 /// ソート番号の再設定を行います。
\r
411 /// <param name="data"></param>
\r
412 /// <returns></returns>
\r
413 internal bool renumAllTasks(List<TaskData> data)
\r
415 List<MultiSQLRunnningBean> sqlList = new List<MultiSQLRunnningBean>();
\r
417 for (int i = 0; i < data.Count; i++)
\r
419 int newNumber = (i + 1) * 10;
\r
420 string sql = SqlDictionary.changeTaskNo;
\r
421 List<object> paramList = new List<object>();
\r
422 paramList.Add(newNumber);
\r
423 paramList.Add(data[i].TaskID);
\r
426 MultiSQLRunnningBean bean = new MultiSQLRunnningBean(sql, paramList);
\r
430 //最後に、過去分タスクをマイナスに変換する(これをやらないと次に振り出されるIDがどんどん増えていく)
\r
431 MultiSQLRunnningBean lastBean = new MultiSQLRunnningBean(SqlDictionary.suppressCompleteTask,new List<object>());
\r
432 sqlList.Add(lastBean);
\r
433 return TaskDBConnection.Connection.updateData(sqlList);
\r
437 /// タスクを延期します。日をまたぎます。
\r
439 /// <param name="id"></param>
\r
440 /// <param name="nextDay"></param>
\r
441 /// <returns></returns>
\r
442 internal bool delayTask(int id, DateComponent nextDay)
\r
444 List<object> paramList = new List<object>();
\r
445 paramList.Add(nextDay.getDateString("yyyy-MM-dd"));
\r
448 return TaskDBConnection.Connection.updateData(SqlDictionary.delayTask, paramList);
\r
454 /// <param name="targetTaskID"></param>
\r
455 /// <param name="after"></param>
\r
456 /// <returns></returns>
\r
457 internal bool changeNumber(int targetTaskID, int after)
\r
459 List<object> paramList = new List<object>();
\r
460 paramList.Add(after);
\r
461 paramList.Add(targetTaskID);
\r
463 return TaskDBConnection.Connection.updateData(SqlDictionary.changeTaskNo, paramList);
\r
468 /// <param name="targetSortID"></param>
\r
469 /// <param name="nextArea"></param>
\r
470 /// <returns></returns>
\r
471 internal bool changeArea(int targetSortID, string nextArea)
\r
473 List<object> paramList = new List<object>();
\r
474 paramList.Add(nextArea);
\r
475 paramList.Add(targetSortID);
\r
477 return TaskDBConnection.Connection.updateData(SqlDictionary.changeAreaOfTask, paramList);
\r
480 /// 時間をクリアし、タスクを初期状態に戻します。
\r
482 /// <param name="targetSortID"></param>
\r
483 /// <returns></returns>
\r
484 internal bool clearStartEnd(int targetSortID)
\r
486 List<object> paramList = new List<object>();
\r
487 paramList.Add(targetSortID);
\r
489 return TaskDBConnection.Connection.updateData(SqlDictionary.clearTime, paramList);
\r