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
9 namespace com.andoutomo.kybernetes.data.accessor
\r
11 public class TaskDataAccessor
\r
13 private static TaskDataAccessor accessor;
\r
14 private TaskDataAccessor()
\r
20 public static TaskDataAccessor getObject
\r
24 if (accessor == null)
\r
26 accessor = new TaskDataAccessor();
\r
32 /// 今日のタスクリストを取得します。「今日」はシステムテーブルから取得します。
\r
34 /// <returns></returns>
\r
35 public List<TaskData> getToDayTaskList()
\r
37 return getTaskList(SqlDictionary.getTodayList,new List<object>());
\r
41 /// 日付ごとのタスクリストを取得します。
\r
43 /// <param name="date"></param>
\r
44 /// <returns></returns>
\r
45 public List<TaskData> getDailyTaskList(DateComponent date)
\r
47 List<object> arg = new List<object>();
\r
48 arg.Add(date.getDateString("yyyy-MM-dd"));
\r
50 return getTaskList(SqlDictionary.getDailyList, arg);
\r
53 /// 現在実施中のタスクリストを抽出します。日付はシステムテーブルから、実施中の判断は
\r
54 /// StartしていてEndしていないもの、とします。
\r
56 /// <returns></returns>
\r
57 public List<TaskData> getPwdTaskList()
\r
59 return getTaskList(SqlDictionary.getPwdList, new List<object>());
\r
64 /// IDを元に単体タスクを抽出します。
\r
66 /// <param name="sortId"></param>
\r
67 /// <returns></returns>
\r
68 public TaskData getTask(int sortId)
\r
70 List<object> args = new List<object>();
\r
72 TaskData data = null;
\r
73 TaskDBConnection.Connection.selectData(SqlDictionary.getOneTask, args,
\r
74 (SQLiteDataReader reader) =>
\r
78 data = new TaskData();
\r
80 data.TaskID = Convert.ToInt32(reader["TASKID"].ToString());
\r
81 data.SortID = Convert.ToInt32(reader["SORTID"].ToString());
\r
82 data.DoDate = new DateComponent(reader["DODATE"].ToString(), '/');
\r
83 data.TimeArea = reader["TIMEAREA"].ToString();
\r
84 data.CategID = Convert.ToInt32(reader["CATEGID"].ToString());
\r
85 data.Category = reader["CATEGORY"].ToString();
\r
86 data.Contents = reader["CONTENTS"].ToString();
\r
87 data.ForecastMin = Convert.ToInt32(reader["FORCASTMIN"].ToString());
\r
88 data.StartTime = new TimeComponent(reader["STARTTIME"].ToString());
\r
89 data.EndTime = new TimeComponent(reader["ENDTIME"].ToString());
\r
90 data.IsRepeat = Convert.ToInt32(reader["REPEATFLG"].ToString());
\r
91 data.Project = reader["PROJECT"].ToString();
\r
92 data.Tags = reader["TAGS"].ToString();
\r
99 /// 内部メソッド。タスクリストを取得します。
\r
101 /// <param name="sql"></param>
\r
102 /// <param name="args"></param>
\r
103 /// <returns></returns>
\r
104 private List<TaskData> getTaskList(string sql,List<object> args)
\r
106 List<TaskData> resultList = new List<TaskData>();
\r
107 TaskDBConnection.Connection.selectData(sql, args,
\r
108 (SQLiteDataReader reader) =>
\r
110 while (reader.Read())
\r
112 TaskData data = new TaskData();
\r
113 data.TaskID = Convert.ToInt32(reader["TASKID"].ToString());
\r
114 data.SortID = Convert.ToInt32(reader["SORTID"].ToString());
\r
115 data.DoDate = new DateComponent(reader["DODATE"].ToString(),'/');
\r
116 data.TimeArea = reader["TIMEAREA"].ToString();
\r
117 data.Category = reader["CATEGORY"].ToString();
\r
118 data.Contents = reader["CONTENTS"].ToString();
\r
119 data.ForecastMin = Convert.ToInt32(reader["FORCASTMIN"].ToString());
\r
120 data.StartTime = new TimeComponent(reader["STARTTIME"].ToString());
\r
121 data.EndTime = new TimeComponent(reader["ENDTIME"].ToString());
\r
122 data.IsRepeat = Convert.ToInt32(reader["REPEATFLG"].ToString());
\r
123 data.Project = reader["PROJECT"].ToString();
\r
124 data.Tags = reader["TAGS"].ToString();
\r
125 data.Comment = reader["COMMENT"].ToString();
\r
126 if (data.Category != string.Empty)
\r
128 //data.BgColor = Convert.ToInt32(reader["BGCOLOR"].ToString());
\r
129 data.FrColor = Convert.ToInt32(reader["FRCOLOR"].ToString());
\r
131 resultList.Add(data);
\r
137 /// タスクの最大採番を行います。<br/>
\r
138 /// その時点での最大の採番は、(タスクIDの最大値+1)×10とします。
\r
139 /// (1の位に1~9が入っているとしても、次のタスクに採番されるのは10多いから重ならない)
\r
141 /// <returns></returns>
\r
142 public int getMaxTaskID()
\r
145 TaskDBConnection.Connection.selectData(SqlDictionary.getMaxIDofTask,
\r
146 (SQLiteDataReader reader) =>
\r
149 if (reader.HasRows)
\r
152 string nextID = reader["NEXTID"].ToString();
\r
153 if (string.IsNullOrEmpty(nextID))
\r
159 maxID = Convert.ToInt32(nextID);
\r
166 /// ソート番号の最大を算出します。
\r
167 /// このメソッドは、renum実行時に過去分のタスクはマイナスになっていることを前提とします。
\r
169 /// <returns></returns>
\r
170 public int getMaxSortID()
\r
173 TaskDBConnection.Connection.selectData(SqlDictionary.getMaxSortID,
\r
174 (SQLiteDataReader reader) =>
\r
176 if (reader.HasRows)
\r
179 string nextSortID = reader["NEXTSORTID"].ToString();
\r
180 if (string.IsNullOrEmpty(nextSortID))
\r
186 maxSortID = Convert.ToInt32(nextSortID);
\r
196 /// 次タスクのスタートを決めるため、当日の最大End時間を求めます。
\r
197 /// 当日にEnd時間がなければNullを返却します。
\r
199 /// <param name="date"></param>
\r
200 /// <returns></returns>
\r
201 public TimeComponent getNextStartTime(DateComponent date)
\r
207 List<object> arg = new List<object>();
\r
208 arg.Add(date.getDateString("yyyy-MM-dd"));
\r
209 TimeComponent endDate = null;
\r
211 TaskDBConnection.Connection.selectData(SqlDictionary.getNextStartTime, arg,
\r
212 (SQLiteDataReader reader) => {
\r
213 if (reader.HasRows)
\r
216 endDate = new TimeComponent(reader["MAXENDTIME"].ToString());
\r
225 /// <param name="data"></param>
\r
226 /// <returns></returns>
\r
227 public bool insertTask(TaskData data)
\r
229 List<object> parameters = new List<object>();
\r
231 parameters.Add(data.TaskID);
\r
232 parameters.Add(data.SortID);
\r
233 parameters.Add(data.DoDate.getDateString("yyyy-MM-dd"));
\r
234 parameters.Add(data.TimeArea.ToUpper());
\r
235 parameters.Add(data.CategID);
\r
236 parameters.Add(data.Contents);
\r
237 parameters.Add(data.ForecastMin);
\r
238 parameters.Add(data.Project);
\r
239 parameters.Add(data.Tags);
\r
241 return TaskDBConnection.Connection.updateData(SqlDictionary.insertTask, parameters);
\r
247 /// <param name="data"></param>
\r
248 /// <returns></returns>
\r
249 public bool updateTask(TaskData data)
\r
251 List<object> parameters = new List<object>();
\r
252 parameters.Add(data.DoDate.getDateString("yyyy-MM-dd"));
\r
253 parameters.Add(data.TimeArea.ToUpper());
\r
254 parameters.Add(data.CategID);
\r
255 parameters.Add(data.Contents);
\r
256 parameters.Add(data.ForecastMin);
\r
257 parameters.Add(data.Project);
\r
258 parameters.Add(data.Tags);
\r
259 parameters.Add(data.SortID);
\r
261 return TaskDBConnection.Connection.updateData(SqlDictionary.updateTask, parameters);
\r
267 /// <param name="id">ソートID</param>
\r
268 /// <param name="startTime"></param>
\r
269 /// <returns></returns>
\r
270 public bool startTask(int id ,TimeComponent startTime)
\r
272 List<object> parameters = new List<object>();
\r
273 parameters.Add(startTime.ToString());
\r
274 parameters.Add(id);
\r
276 return TaskDBConnection.Connection.updateData(SqlDictionary.startTask, parameters);
\r
282 /// <param name="id">ソートID</param>
\r
283 /// <param name="endTime"></param>
\r
284 /// <returns></returns>
\r
285 public bool endTask(int id, TimeComponent endTime)
\r
287 List<object> parameters = new List<object>();
\r
288 parameters.Add(endTime.ToString());
\r
289 parameters.Add(id);
\r
291 return TaskDBConnection.Connection.updateData(SqlDictionary.endTask, parameters);
\r
295 /// タスクがリピート対象であるかどうかを照合します。
\r
297 /// <param name="id"></param>
\r
298 /// <returns></returns>
\r
299 public bool isRepeatTask(int id)
\r
302 List<object> parameters = new List<object>();
\r
303 parameters.Add(id);
\r
304 TaskDBConnection.Connection.selectData(SqlDictionary.isRepeatTask, parameters,
\r
305 (SQLiteDataReader reader) =>
\r
307 if (reader.HasRows)
\r
310 int dbVal = Convert.ToInt32(reader["REPEATFLG"].ToString());
\r
327 /// <param name="id"></param>
\r
328 /// <param name="isRepeat"></param>
\r
329 /// <returns></returns>
\r
330 private bool setRepeatTask(int id, bool isRepeat)
\r
332 List<object> parameters = new List<object>();
\r
334 int settingData = (isRepeat ? 1 : 0);
\r
336 parameters.Add(settingData);
\r
337 parameters.Add(id);
\r
339 return TaskDBConnection.Connection.updateData(SqlDictionary.setRepeatTask, parameters);
\r
344 /// 繰り返しの設定を行います(日付入り)
\r
346 /// <param name="id"></param>
\r
347 /// <param name="dayAfter"></param>
\r
348 /// <returns></returns>
\r
349 public bool setRepeatTask(int id, int dayAfter)
\r
351 List<object> parameters = new List<object>();
\r
353 int settingData = dayAfter;
\r
355 parameters.Add(settingData);
\r
356 parameters.Add(id);
\r
358 return TaskDBConnection.Connection.updateData(SqlDictionary.setRepeatTask, parameters);
\r
365 /// <param name="id"></param>
\r
366 /// <returns></returns>
\r
367 public bool deleteTask(int from,int to)
\r
369 List<object> parameters = new List<object>();
\r
370 parameters.Add(from);
\r
371 parameters.Add(to);
\r
373 return TaskDBConnection.Connection.updateData(SqlDictionary.deleteTasks, parameters);
\r
377 /// 削除する前に何件あるか確認します。
\r
379 /// <param name="from"></param>
\r
380 /// <param name="to"></param>
\r
381 /// <returns></returns>
\r
382 public int countDeleteTargetTask(int from, int to)
\r
384 List<object> parameters = new List<object>();
\r
385 parameters.Add(from);
\r
386 parameters.Add(to);
\r
390 TaskDBConnection.Connection.selectData(SqlDictionary.countBeforeDelete, parameters,
\r
391 (SQLiteDataReader reader) =>
\r
393 if (reader.HasRows)
\r
396 retVal = Convert.ToInt32(reader["COUNT"].ToString());
\r
405 /// <returns></returns>
\r
406 public List<TaskData> getAllTaskList()
\r
408 return getTaskList(SqlDictionary.getAllList, new List<object>());
\r
412 /// 終了していないタスクをすべて表示します。
\r
414 /// <returns></returns>
\r
415 public List<TaskData> getRemainTaskList()
\r
417 return getTaskList(SqlDictionary.getRemainList, new List<object>());
\r
421 /// 今後のタスクをすべて表示します。
\r
423 /// <returns></returns>
\r
424 public List<TaskData> getGoingTaskList()
\r
426 return getTaskList(SqlDictionary.getGoingList, new List<object>());
\r
432 /// <param name="searchWord"></param>
\r
433 /// <returns></returns>
\r
434 public List<TaskData> findTask(string searchWord)
\r
436 string wkSearchWord = "%" + searchWord + "%";
\r
438 List<object> args = new List<object> { wkSearchWord ,wkSearchWord,wkSearchWord,wkSearchWord};
\r
439 return getTaskList(SqlDictionary.searchTasks, args);
\r
444 /// ソート番号の再設定を行います。
\r
446 /// <param name="data"></param>
\r
447 /// <returns></returns>
\r
448 public bool renumAllTasks(List<TaskData> data)
\r
450 List<MultiSQLRunnningBean> sqlList = new List<MultiSQLRunnningBean>();
\r
452 for (int i = 0; i < data.Count; i++)
\r
454 int newNumber = (i + 1) * 10;
\r
455 string sql = SqlDictionary.changeTaskNo;
\r
456 List<object> paramList = new List<object>();
\r
457 paramList.Add(newNumber);
\r
458 paramList.Add(data[i].TaskID);
\r
461 MultiSQLRunnningBean bean = new MultiSQLRunnningBean(sql, paramList);
\r
465 //最後に、過去分タスクをマイナスに変換する(これをやらないと次に振り出されるIDがどんどん増えていく)
\r
466 MultiSQLRunnningBean lastBean = new MultiSQLRunnningBean(SqlDictionary.suppressCompleteTask,new List<object>());
\r
467 sqlList.Add(lastBean);
\r
468 return TaskDBConnection.Connection.updateData(sqlList);
\r
472 /// タスクを延期します。日をまたぎます。
\r
474 /// <param name="id"></param>
\r
475 /// <param name="nextDay"></param>
\r
476 /// <returns></returns>
\r
477 public bool delayTask(int id, DateComponent nextDay)
\r
479 List<object> paramList = new List<object>();
\r
480 paramList.Add(nextDay.getDateString("yyyy-MM-dd"));
\r
483 return TaskDBConnection.Connection.updateData(SqlDictionary.delayTask, paramList);
\r
489 /// <param name="targetTaskID"></param>
\r
490 /// <param name="after"></param>
\r
491 /// <returns></returns>
\r
492 public bool changeNumber(int targetTaskID, int after)
\r
494 List<object> paramList = new List<object>();
\r
495 paramList.Add(after);
\r
496 paramList.Add(targetTaskID);
\r
498 return TaskDBConnection.Connection.updateData(SqlDictionary.changeTaskNo, paramList);
\r
503 /// <param name="targetSortID"></param>
\r
504 /// <param name="nextArea"></param>
\r
505 /// <returns></returns>
\r
506 public bool changeArea(int targetSortID, string nextArea)
\r
508 List<object> paramList = new List<object>();
\r
509 paramList.Add(nextArea);
\r
510 paramList.Add(targetSortID);
\r
512 return TaskDBConnection.Connection.updateData(SqlDictionary.changeAreaOfTask, paramList);
\r
515 /// 時間をクリアし、タスクを初期状態に戻します。
\r
517 /// <param name="targetSortID"></param>
\r
518 /// <returns></returns>
\r
519 public bool clearStartEnd(int targetSortID)
\r
521 List<object> paramList = new List<object>();
\r
522 paramList.Add(targetSortID);
\r
524 return TaskDBConnection.Connection.updateData(SqlDictionary.clearTime, paramList);
\r
528 /// タスクIDからソート番号を逆引きします。主にコメント用です。
\r
530 /// <param name="taskID"></param>
\r
531 /// <returns></returns>
\r
532 public int getSortIDFromTaskID(int taskID)
\r
534 List<object> paramList = new List<object>(){taskID};
\r
536 TaskDBConnection.Connection.selectData(SqlDictionary.getSortIDFromTaskID, paramList,
\r
537 (SQLiteDataReader reader) =>
\r
539 if (reader.HasRows)
\r
542 retVal = Convert.ToInt32(reader["SORTID"].ToString());
\r
548 /// 対象タスクのプロジェクトを更新します。
\r
550 /// <param name="targetSortID"></param>
\r
551 /// <param name="projectName"></param>
\r
552 /// <returns></returns>
\r
553 public bool updateProjectofTask(int targetSortID, string projectName)
\r
555 List<object> paramList = new List<object>() { projectName, targetSortID };
\r
556 return TaskDBConnection.Connection.updateData(SqlDictionary.updateProject, paramList);
\r
559 /// 現在登録されているプロジェクトを重複なしで取得します。
\r
561 /// <returns></returns>
\r
562 public List<SimpleDataBean> getProjectList()
\r
564 List<SimpleDataBean> retList = new List<SimpleDataBean>();
\r
565 TaskDBConnection.Connection.selectData(SqlDictionary.findProject,
\r
566 (SQLiteDataReader reader) =>
\r
568 while (reader.Read())
\r
570 string prjName = reader["PROJECT"].ToString();
\r
571 if (!string.IsNullOrEmpty(prjName))
\r
573 SimpleDataBean bean = new SimpleDataBean(prjName, prjName);
\r
583 /// <param name="targetSortID"></param>
\r
584 /// <param name="tag"></param>
\r
585 /// <returns></returns>
\r
586 public bool updateTagofTask(int targetSortID, string tag)
\r
588 string tagLikeStr = '%' + tag + '%';
\r
589 List<object> paramList = new List<object>() { tag, tagLikeStr, tag, targetSortID };
\r
590 return TaskDBConnection.Connection.updateData(SqlDictionary.addTag, paramList);
\r
593 /// タグ一覧を取得します。取得時点でC#側でカンマ区切りを配慮して分解します。
\r
595 /// <returns></returns>
\r
596 public List<SimpleDataBean> getTagList()
\r
598 List<string> wkList = new List<string>();
\r
599 TaskDBConnection.Connection.selectData(SqlDictionary.findTags,
\r
600 (SQLiteDataReader reader) =>
\r
602 while (reader.Read())
\r
604 string tagName = reader["TAGS"].ToString();
\r
605 foreach (string eachTag in tagName.Split(','))
\r
607 wkList.Add(eachTag);
\r
613 string[] wkArray = wkList.Distinct().ToArray();
\r
615 List<SimpleDataBean> retList = new List<SimpleDataBean>();
\r
616 foreach (string tag in wkArray)
\r
618 retList.Add(new SimpleDataBean(tag, tag));
\r
627 /// <param name="targetSortID"></param>
\r
628 /// <returns></returns>
\r
629 public bool clearTagOfTask(int targetSortID)
\r
631 List<object> paramList = new List<object>() { targetSortID };
\r
632 return TaskDBConnection.Connection.updateData(SqlDictionary.clearTags, paramList);
\r
635 /// SQLiteの最適化コマンドを実行します。
\r
637 /// <returns></returns>
\r
638 public bool rebuildDB()
\r
640 return TaskDBConnection.Connection.maintainanceData();
\r