OSDN Git Service

V.1.01
[kybernetes/Kybernetes.git] / KyberNetes / data / accessor / TaskDataAccessor.cs
1 using System;\r
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
6 \r
7 \r
8 namespace com.andoutomo.kybernetes.data.accessor\r
9 {\r
10     class TaskDataAccessor\r
11     {\r
12         private static TaskDataAccessor accessor;\r
13         private TaskDataAccessor()\r
14         {\r
15         }\r
16         /// <summary>\r
17         /// アクセッサを取得します。\r
18         /// </summary>\r
19         internal static TaskDataAccessor getObject\r
20         {\r
21             get\r
22             {\r
23                 if (accessor == null)\r
24                 {\r
25                     accessor = new TaskDataAccessor();\r
26                 }\r
27                 return accessor;\r
28             }\r
29         }\r
30         /// <summary>\r
31         /// 今日のタスクリストを取得します。「今日」はシステムテーブルから取得します。\r
32         /// </summary>\r
33         /// <returns></returns>\r
34         internal List<TaskData> getToDayTaskList()\r
35         {\r
36             return getTaskList(SqlDictionary.getTodayList,new List<object>());\r
37         }\r
38 \r
39         /// <summary>\r
40         /// 日付ごとのタスクリストを取得します。\r
41         /// </summary>\r
42         /// <param name="date"></param>\r
43         /// <returns></returns>\r
44         internal List<TaskData> getDailyTaskList(DateComponent date)\r
45         {\r
46             List<object> arg = new List<object>();\r
47             arg.Add(date.getDateString("yyyy-MM-dd"));\r
48 \r
49             return getTaskList(SqlDictionary.getDailyList, arg);\r
50         }\r
51         /// <summary>\r
52         /// 現在実施中のタスクリストを抽出します。日付はシステムテーブルから、実施中の判断は\r
53         /// StartしていてEndしていないもの、とします。\r
54         /// </summary>\r
55         /// <returns></returns>\r
56         internal List<TaskData> getPwdTaskList()\r
57         {\r
58             return getTaskList(SqlDictionary.getPwdList, new List<object>());\r
59         }\r
60 \r
61 \r
62         /// <summary>\r
63         /// IDを元に単体タスクを抽出します。\r
64         /// </summary>\r
65         /// <param name="sortId"></param>\r
66         /// <returns></returns>\r
67         internal TaskData getTask(int sortId)\r
68         {\r
69             List<object> args = new List<object>();\r
70             args.Add(sortId);\r
71             TaskData data = null;\r
72             TaskDBConnection.Connection.selectData(SqlDictionary.getOneTask, args,\r
73                 (SQLiteDataReader reader) =>\r
74                 {\r
75                     if (reader.HasRows)\r
76                     {\r
77                         data = new TaskData();\r
78                         reader.Read();\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
90                         \r
91                     }\r
92                 });\r
93             return data;\r
94         }\r
95 \r
96         /// <summary>\r
97         /// 内部メソッド。タスクリストを取得します。\r
98         /// </summary>\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
103         {\r
104             List<TaskData> resultList = new List<TaskData>();\r
105             TaskDBConnection.Connection.selectData(sql, args,\r
106             (SQLiteDataReader reader) =>\r
107             {\r
108                 while (reader.Read())\r
109                 {\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
123                     {\r
124                         data.BgColor = Convert.ToInt32(reader["BGCOLOR"].ToString());\r
125                         data.FrColor = Convert.ToInt32(reader["FRCOLOR"].ToString());\r
126                     }\r
127                     resultList.Add(data);\r
128                 }\r
129             });\r
130             return resultList;\r
131         }\r
132         /// <summary>\r
133         /// タスクの最大採番を行います。<br/>\r
134         /// その時点での最大の採番は、(タスクIDの最大値+1)×10とします。\r
135         /// (1の位に1~9が入っているとしても、次のタスクに採番されるのは10多いから重ならない)\r
136         /// </summary>\r
137         /// <returns></returns>\r
138         internal int getMaxTaskID()\r
139         {\r
140             int maxID =0;\r
141             TaskDBConnection.Connection.selectData(SqlDictionary.getMaxIDofTask, \r
142                 (SQLiteDataReader reader) =>\r
143                 {\r
144 \r
145                     if (reader.HasRows)\r
146                     {\r
147                         reader.Read();\r
148                         string nextID = reader["NEXTID"].ToString();\r
149                         if (string.IsNullOrEmpty(nextID))\r
150                         {\r
151                             maxID = 1;\r
152                         }\r
153                         else\r
154                         {\r
155                             maxID = Convert.ToInt32(nextID);\r
156                         }\r
157                     }\r
158                 });\r
159             return maxID;\r
160         }\r
161         /// <summary>\r
162         /// ソート番号の最大を算出します。\r
163         /// このメソッドは、renum実行時に過去分のタスクはマイナスになっていることを前提とします。\r
164         /// </summary>\r
165         /// <returns></returns>\r
166         internal int getMaxSortID()\r
167         {\r
168             int maxSortID = 0;\r
169             TaskDBConnection.Connection.selectData(SqlDictionary.getMaxSortID, \r
170                 (SQLiteDataReader reader) => \r
171                 {\r
172                     if (reader.HasRows)\r
173                     {\r
174                         reader.Read();\r
175                         string nextSortID = reader["NEXTSORTID"].ToString();\r
176                         if (string.IsNullOrEmpty(nextSortID))\r
177                         {\r
178                             maxSortID = 10;\r
179                         }\r
180                         else\r
181                         {\r
182                             maxSortID = Convert.ToInt32(nextSortID);\r
183                         }\r
184                     }\r
185  \r
186                 });\r
187             return maxSortID;\r
188 \r
189         }\r
190 \r
191         /// <summary>\r
192         /// 次タスクのスタートを決めるため、当日の最大End時間を求めます。\r
193         /// 当日にEnd時間がなければNullを返却します。\r
194         /// </summary>\r
195         /// <param name="date"></param>\r
196         /// <returns></returns>\r
197         internal TimeComponent getNextStartTime(DateComponent date)\r
198         {\r
199             if (date == null)\r
200             {\r
201                 return null;\r
202             }\r
203             List<object> arg = new List<object>();\r
204             arg.Add(date.getDateString("yyyy-MM-dd"));\r
205             TimeComponent endDate = null;\r
206 \r
207             TaskDBConnection.Connection.selectData(SqlDictionary.getNextStartTime, arg, \r
208                 (SQLiteDataReader reader) => {\r
209                     if (reader.HasRows)\r
210                     {\r
211                         reader.Read();\r
212                         endDate = new TimeComponent(reader["MAXENDTIME"].ToString());\r
213                     }\r
214                 });\r
215             return endDate;\r
216         }\r
217 \r
218         /// <summary>\r
219         /// タスクを追加します。\r
220         /// </summary>\r
221         /// <param name="data"></param>\r
222         /// <returns></returns>\r
223         internal bool insertTask(TaskData data)\r
224         {\r
225             List<object> parameters = new List<object>();\r
226 \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
234 \r
235             return TaskDBConnection.Connection.updateData(SqlDictionary.insertTask, parameters);\r
236 \r
237         }\r
238         /// <summary>\r
239         /// タスクを更新します。\r
240         /// </summary>\r
241         /// <param name="data"></param>\r
242         /// <returns></returns>\r
243         internal bool updateTask(TaskData data)\r
244         {\r
245 \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
253 \r
254             return TaskDBConnection.Connection.updateData(SqlDictionary.updateTask, parameters);\r
255         }\r
256 \r
257         /// <summary>\r
258         /// タスクを開始します。\r
259         /// </summary>\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
264         {\r
265             List<object> parameters = new List<object>();\r
266             parameters.Add(startTime.ToString());\r
267             parameters.Add(id);\r
268 \r
269             return TaskDBConnection.Connection.updateData(SqlDictionary.startTask, parameters);\r
270         }\r
271 \r
272         /// <summary>\r
273         /// タスクを終了します。\r
274         /// </summary>\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
279         {\r
280             List<object> parameters = new List<object>();\r
281             parameters.Add(endTime.ToString());\r
282             parameters.Add(id);\r
283 \r
284             return TaskDBConnection.Connection.updateData(SqlDictionary.endTask, parameters);\r
285         }\r
286 \r
287         /// <summary>\r
288         /// タスクがリピート対象であるかどうかを照合します。\r
289         /// </summary>\r
290         /// <param name="id"></param>\r
291         /// <returns></returns>\r
292         internal bool isRepeatTask(int id)\r
293         {\r
294             bool retval=false;\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
299                 {\r
300                     if (reader.HasRows)\r
301                     {\r
302                         reader.Read();\r
303                         int dbVal = Convert.ToInt32(reader["REPEATFLG"].ToString());\r
304                         if (dbVal == 1)\r
305                         {\r
306                             retval = true;\r
307 \r
308                         }\r
309                         else\r
310                         {\r
311                             retval = false;\r
312                         }\r
313                     }\r
314                 });\r
315             return retval;\r
316         }\r
317         /// <summary>\r
318         /// 繰り返しの設定を行います。\r
319         /// </summary>\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
324         {\r
325             List<object> parameters = new List<object>();\r
326 \r
327             int settingData = (isRepeat ? 1 : 0);\r
328 \r
329             parameters.Add(settingData);\r
330             parameters.Add(id);\r
331 \r
332             return TaskDBConnection.Connection.updateData(SqlDictionary.setRepeatTask, parameters);\r
333 \r
334         }\r
335 \r
336 \r
337         /// <summary>\r
338         /// タスクを削除します。\r
339         /// </summary>\r
340         /// <param name="id"></param>\r
341         /// <returns></returns>\r
342         internal bool deleteTask(int from,int to)\r
343         {\r
344             List<object> parameters = new List<object>();\r
345             parameters.Add(from);\r
346             parameters.Add(to);\r
347 \r
348             return TaskDBConnection.Connection.updateData(SqlDictionary.deleteTasks, parameters);\r
349         }\r
350 \r
351         /// <summary>\r
352         /// 削除する前に何件あるか確認します。\r
353         /// </summary>\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
358         {\r
359             List<object> parameters = new List<object>();\r
360             parameters.Add(from);\r
361             parameters.Add(to);\r
362 \r
363             int retVal = 0;\r
364 \r
365             TaskDBConnection.Connection.selectData(SqlDictionary.countBeforeDelete, parameters,\r
366                 (SQLiteDataReader reader) =>\r
367                 {\r
368                     if (reader.HasRows)\r
369                     {\r
370                         reader.Read();\r
371                         retVal = Convert.ToInt32(reader["COUNT"].ToString());\r
372                     }\r
373                 });\r
374             return retVal;\r
375         }\r
376 \r
377         /// <summary>\r
378         /// 全タスクを表示します。\r
379         /// </summary>\r
380         /// <returns></returns>\r
381         internal List<TaskData> getAllTaskList()\r
382         {\r
383             return getTaskList(SqlDictionary.getAllList, new List<object>());\r
384         }\r
385 \r
386         /// <summary>\r
387         /// 終了していないタスクをすべて表示します。\r
388         /// </summary>\r
389         /// <returns></returns>\r
390         internal List<TaskData> getRemainTaskList()\r
391         {\r
392             return getTaskList(SqlDictionary.getRemainList, new List<object>());\r
393         }\r
394         /// <summary>\r
395         /// タスクの検索を行います。\r
396         /// </summary>\r
397         /// <param name="searchWord"></param>\r
398         /// <returns></returns>\r
399         internal List<TaskData> findTask(string searchWord)\r
400         {\r
401             string wkSearchWord = "%" + searchWord + "%";\r
402 \r
403             List<object> args = new List<object> { wkSearchWord ,wkSearchWord};\r
404             return getTaskList(SqlDictionary.searchTasks, args);\r
405         }\r
406 \r
407 \r
408         /// <summary>\r
409         /// ソート番号の再設定を行います。\r
410         /// </summary>\r
411         /// <param name="data"></param>\r
412         /// <returns></returns>\r
413         internal bool renumAllTasks(List<TaskData> data)\r
414         {\r
415             List<MultiSQLRunnningBean> sqlList = new List<MultiSQLRunnningBean>();\r
416 \r
417             for (int i = 0; i < data.Count; i++)\r
418             {\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
424 \r
425                 //連続実行するSQLを設定\r
426                 MultiSQLRunnningBean bean = new MultiSQLRunnningBean(sql, paramList);\r
427                 sqlList.Add(bean);\r
428 \r
429             }\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
434         }\r
435 \r
436         /// <summary>\r
437         /// タスクを延期します。日をまたぎます。\r
438         /// </summary>\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
443         {\r
444             List<object> paramList = new List<object>();\r
445             paramList.Add(nextDay.getDateString("yyyy-MM-dd"));\r
446             paramList.Add(id);\r
447 \r
448             return TaskDBConnection.Connection.updateData(SqlDictionary.delayTask, paramList);\r
449         }\r
450 \r
451         /// <summary>\r
452         /// ソート番号を変更します。\r
453         /// </summary>\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
458         {\r
459             List<object> paramList = new List<object>();\r
460             paramList.Add(after);\r
461             paramList.Add(targetTaskID);\r
462 \r
463             return TaskDBConnection.Connection.updateData(SqlDictionary.changeTaskNo, paramList);\r
464         }\r
465         /// <summary>\r
466         /// タイムエリアを変更します。\r
467         /// </summary>\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
472         {\r
473             List<object> paramList = new List<object>();\r
474             paramList.Add(nextArea);\r
475             paramList.Add(targetSortID);\r
476 \r
477             return TaskDBConnection.Connection.updateData(SqlDictionary.changeAreaOfTask, paramList);\r
478         }\r
479         /// <summary>\r
480         /// 時間をクリアし、タスクを初期状態に戻します。\r
481         /// </summary>\r
482         /// <param name="targetSortID"></param>\r
483         /// <returns></returns>\r
484         internal bool clearStartEnd(int targetSortID)\r
485         {\r
486             List<object> paramList = new List<object>();\r
487             paramList.Add(targetSortID);\r
488 \r
489             return TaskDBConnection.Connection.updateData(SqlDictionary.clearTime, paramList);\r
490         }\r
491     }\r
492 }\r