comparison src/db.cpp @ 2:c066fde99517

Added Batch Print Mode.
author pyon@macmini
date Fri, 23 Aug 2013 18:32:09 +0900
parents 7b6dab24f4b8
children fdba695b99f1
comparison
equal deleted inserted replaced
1:7b6dab24f4b8 2:c066fde99517
1 // Filename : db.cpp 1 // Filename : db.cpp
2 // Last Change: 02-Aug-2013. 2 // Last Change: 23-Aug-2013.
3 // 3 //
4 4
5 #include "db.h" 5 #include "db.h"
6 #include "wx/wxsqlite3.h" 6 #include "wx/wxsqlite3.h"
7 7
8 /* $BHoJ]HV$GHoJ]81<T>pJs$r<hF@(B */ 8 //********** HHS-DB **********//
9 /* 被保番で被保険者情報を取得 */
9 wxString GetHhsInfoByHhsNo( wxString hhsno ) 10 wxString GetHhsInfoByHhsNo( wxString hhsno )
10 { 11 {
11 wxString name, addr; 12 wxString name, addr;
12 13
13 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db"); 14 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db");
14 wxSQLite3Database hhsdb; 15 wxSQLite3Database hhsdb;
15 hhsdb.Open( gszFile ); 16 hhsdb.Open( gszFile );
16 17
17 wxSQLite3Statement stmt = hhsdb.PrepareStatement("SELECT name, addr FROM hhs_master WHERE hhsno = ?"); 18 wxSQLite3Statement stmt = hhsdb.PrepareStatement( "SELECT name, addr FROM hhs_master WHERE hhsno = ?" );
18 stmt.Bind( 1, hhsno ); 19 stmt.Bind( 1, hhsno );
19 wxSQLite3ResultSet q = stmt.ExecuteQuery(); 20 wxSQLite3ResultSet q = stmt.ExecuteQuery();
20 if ( !q.IsNull(0) ) { 21 if ( !q.IsNull(0) ) {
21 while ( q.NextRow() ) { 22 while ( q.NextRow() ) {
22 name = q.GetString(0); 23 name = q.GetString(0);
32 else { 33 else {
33 return name + wxT("_") + addr; 34 return name + wxT("_") + addr;
34 } 35 }
35 } 36 }
36 37
37 // $B;aL>%+%J$GHoJ]81<T>pJs$r8!:w(B 38 // 氏名カナで被保険者情報を検索
38 wxArrayString GetHhsInfoByKana( wxString kana, bool fuzzy ) 39 wxArrayString GetHhsInfoByKana( wxString kana, bool fuzzy )
39 { 40 {
40 wxArrayString data; 41 wxArrayString data;
41 42
42 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db"); 43 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db");
64 hhsdb.Close(); 65 hhsdb.Close();
65 66
66 return data; 67 return data;
67 } 68 }
68 69
69 /* $BHoJ]81<THV9f$+$i%U%!%$%k%Q%9$r<hF@(B */ 70 //********** CCN-DB **********//
71 /* 被保険者番号からファイルパスを取得 */
70 wxArrayString GetPathByHhsNo( wxString hhsno ) 72 wxArrayString GetPathByHhsNo( wxString hhsno )
71 { 73 {
72 wxArrayString date_path; 74 wxArrayString path;
73 75
74 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db"); 76 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
75 wxSQLite3Database ccndb; 77 wxSQLite3Database ccndb;
76 ccndb.Open( gszFile ); 78 ccndb.Open( gszFile );
77 79
78 wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT date, path FROM ccn WHERE hhsno = ? ORDER BY date DESC"); 80 wxString sql = wxT( "SELECT path FROM path WHERE hhsno = ? ORDER BY path DESC;" );
81 wxSQLite3Statement stmt = ccndb.PrepareStatement( sql );
79 stmt.Bind( 1, hhsno ); 82 stmt.Bind( 1, hhsno );
80 wxSQLite3ResultSet q = stmt.ExecuteQuery(); 83 wxSQLite3ResultSet q = stmt.ExecuteQuery();
81 84
82 if ( !q.IsNull(0) ) { 85 if ( !q.IsNull(0) ) {
83 wxString str; 86 while ( q.NextRow() ) {
84 while ( q.NextRow() ) { 87 path.Add( q.GetString(0) );
85 str = q.GetString(0) + "_" + q.GetString(1); 88 }
86 date_path.Add( str ); 89 }
87 } 90 stmt.Finalize();
88 } 91 ccndb.Close();
89 stmt.Finalize(); 92
90 ccndb.Close(); 93 return path;
91 94 }
92 return date_path; 95
93 } 96 /* 被保険者が審査会にかかったかどうか */
94 97 bool IsHhsJudged( wxString hhsno )
95 /* $B9g5DBN3+:EF|$r<hF@(B */ 98 {
99 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
100 wxSQLite3Database ccndb;
101 ccndb.Open( gszFile );
102
103 wxString sql = wxT( "SELECT path FROM path WHERE hhsno = ?;" );
104 wxSQLite3Statement stmt = ccndb.PrepareStatement( sql );
105 stmt.Bind( 1, hhsno );
106 wxSQLite3ResultSet q = stmt.ExecuteQuery();
107
108 bool ret = true;
109 if ( q.IsNull(0) ) ret = false;
110
111 stmt.Finalize();
112 ccndb.Close();
113
114 return ret;
115 }
116
117 /* 合議体開催日を取得 */
96 wxArrayString GetCcnDate( void ) 118 wxArrayString GetCcnDate( void )
97 { 119 {
98 wxArrayString date_cnt; 120 wxArrayString date_cnt;
99 121
100 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db"); 122 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
101 wxSQLite3Database ccndb; 123 wxSQLite3Database ccndb;
102 ccndb.Open( gszFile ); 124 ccndb.Open( gszFile );
103 125
104 wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT date, count(*) FROM ccn GROUP BY date ORDER BY date desc"); 126 wxSQLite3Statement stmt = ccndb.PrepareStatement( "SELECT date, count(*) FROM ccn GROUP BY date ORDER BY date desc" );
105 wxSQLite3ResultSet q = stmt.ExecuteQuery(); 127 wxSQLite3ResultSet q = stmt.ExecuteQuery();
106 128
107 wxString str; 129 wxString str;
108 if ( !q.IsNull(0) ) { 130 if ( !q.IsNull(0) ) {
109 while ( q.NextRow() ) { 131 while ( q.NextRow() ) {
115 ccndb.Close(); 137 ccndb.Close();
116 138
117 return date_cnt; 139 return date_cnt;
118 } 140 }
119 141
120 /* $BF|IU$+$i?3::2q$r<hF@(B */ 142 /* 日付から審査会を取得 */
121 wxArrayString GetCcnByDate( wxString date ) 143 wxArrayString GetCcnByDate( wxString date )
122 { 144 {
123 wxArrayString ccn_cnt; 145 wxArrayString data;
124 146
125 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db"); 147 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
126 wxSQLite3Database ccndb; 148 wxSQLite3Database ccndb;
127 ccndb.Open( gszFile ); 149 ccndb.Open( gszFile );
128 150
129 wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT ccn, count(*) FROM ccn WHERE date = ? GROUP BY ccn"); 151 wxSQLite3Statement stmt = ccndb.PrepareStatement( "SELECT hhsno, path, date FROM path WHERE date = ? ORDER BY path" );
130 stmt.Bind( 1, date ); 152 stmt.Bind( 1, date );
131 wxSQLite3ResultSet q = stmt.ExecuteQuery(); 153 wxSQLite3ResultSet q = stmt.ExecuteQuery();
132 154
133 wxString str; 155 wxString str;
134 if ( !q.IsNull(0) ) { 156 if ( !q.IsNull(0) ) {
135 while ( q.NextRow() ) { 157 while ( q.NextRow() ) {
136 str = q.GetString(0) + "_" + q.GetString(1); 158 str = q.GetString(0) + "_" + q.GetString(1) + "_" + q.GetString(2);
137 ccn_cnt.Add( str ); 159 data.Add( str );
138 } 160 }
139 } 161 }
140 stmt.Finalize(); 162 stmt.Finalize();
141 ccndb.Close(); 163 ccndb.Close();
142 164
143 return ccn_cnt; 165 return data;
144 } 166 }
145 167
146 /* $B9g5DBN$+$iHoJ]81<THV9f$r<hF@(B */ 168 /* 合議体から被保険者番号を取得 */
147 wxArrayString GetHhsNoByCcn( wxString ccn, wxString date ) 169 wxArrayString GetHhsNoByCcn( wxString ccn, wxString date )
148 { 170 {
149 wxArrayString hhsno; 171 wxArrayString hhsno;
150 172
151 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db"); 173 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
152 wxSQLite3Database ccndb; 174 wxSQLite3Database ccndb;
153 ccndb.Open( gszFile ); 175 ccndb.Open( gszFile );
154 176
155 wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT hhsno FROM ccn WHERE ccn = ? AND date = ? ORDER BY hhsno"); 177 wxSQLite3Statement stmt = ccndb.PrepareStatement( "SELECT hhsno FROM ccn WHERE ccn = ? AND date = ? ORDER BY hhsno" );
156 stmt.Bind( 1, ccn ); 178 stmt.Bind( 1, ccn );
157 stmt.Bind( 2, date ); 179 stmt.Bind( 2, date );
158 wxSQLite3ResultSet q = stmt.ExecuteQuery(); 180 wxSQLite3ResultSet q = stmt.ExecuteQuery();
159 181
160 if ( !q.IsNull(0) ) { 182 if ( !q.IsNull(0) ) {
166 ccndb.Close(); 188 ccndb.Close();
167 189
168 return hhsno; 190 return hhsno;
169 } 191 }
170 192
171 /* $B%$%s%G%C%/%9$r99?7(B */ 193 /* インデックスを更新 */
172 void UpdateIndex( wxArrayString paths ) 194 void UpdateIndex( wxString datedir, wxString date )
173 { 195 {
174 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db"); 196 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
175 wxSQLite3Database ccndb; 197 wxSQLite3Database ccndb;
176 ccndb.Open( gszFile ); 198 ccndb.Open( gszFile );
177 199
178 wxRegEx regex( wxT("^.+(20[0-9]{2})([01][0-9])([0-3][0-9]).(.+).(0[1238]{8})$") ); 200 wxSQLite3Statement stmt = ccndb.PrepareStatement( "DELETE FROM path WHERE date = ?;" );
179 wxSQLite3Statement stmt = ccndb.PrepareStatement("INSERT OR REPLACE INTO ccn VALUES( ?, ?, ?, ? )"); 201 stmt.Bind( 1, date );
180 wxString date, ccn, hhsno; 202 stmt.ExecuteQuery();
181 203 stmt.Finalize();
182 for ( int i=0; i<paths.GetCount(); i++ ) { 204
183 date = paths[i]; 205 wxString ccndir;
184 ccn = paths[i]; 206 wxDir dated( datedir );
185 hhsno = paths[i]; 207 if ( !dated.IsOpened() ) {
186 regex.ReplaceAll( &date, wxT("\\1-\\2-\\3") ); 208 return;
187 regex.ReplaceAll( &date, wxT("\\4") ); 209 }
188 regex.ReplaceAll( &date, wxT("\\5") ); 210
189 stmt.Bind( 1, date ); 211 wxRegEx reSinsei( wxT("^00000") );
190 stmt.Bind( 2, ccn ); 212 bool cont = dated.GetFirst( &ccndir, wxEmptyString, wxDIR_DIRS );
191 stmt.Bind( 3, hhsno ); 213
192 stmt.Bind( 4, paths[i] ); 214 wxProgressDialog pd( wxT("進行状況"), wxT("処理開始..."), 240, NULL, wxPD_APP_MODAL|wxPD_REMAINING_TIME|wxPD_AUTO_HIDE );
193 stmt.ExecuteQuery(); 215 pd.SetSize( wxSize( 320, 140 ) );
194 stmt.Finalize(); 216 int count = 0;
195 } 217
196 218 while ( cont ) {
197 ccndb.Close(); 219
198 } 220 wxDir ccnd( datedir + wxFILE_SEP_PATH + ccndir );
199 221 if ( !ccnd.IsOpened() ) return;
222 wxString hhsdir;
223 bool c = ccnd.GetFirst( &hhsdir, wxEmptyString, wxDIR_DIRS );
224
225 while ( c ) {
226 if ( ! reSinsei.Matches( hhsdir ) ) {
227
228 wxString path = datedir + wxFILE_SEP_PATH + ccndir + wxFILE_SEP_PATH + hhsdir;
229
230 stmt = ccndb.PrepareStatement( "INSERT INTO path VALUES( ?, ?, ?, datetime( 'now', 'localtime' ) );" );
231 stmt.Bind( 1, hhsdir );
232 stmt.Bind( 2, path );
233 stmt.Bind( 3, date );
234 stmt.ExecuteQuery();
235 stmt.Finalize();
236 pd.Update( count++, hhsdir + wxT("@") + ccndir + wxT("を処理しました.") );
237 }
238 c = ccnd.GetNext( &hhsdir );
239 }
240
241 cont = dated.GetNext( &ccndir );
242 }
243 ccndb.Close();
244 }
245
246 /* DB整合性チェック */
247 wxArrayString CheckDBs( void )
248 {
249 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("ccn.db");
250 wxSQLite3Database ccndb;
251 ccndb.Open( gszFile );
252
253 wxString sql = wxT("ATTACH 'db/hhs.db' AS hhs");
254 wxSQLite3Statement stmt = ccndb.PrepareStatement( sql );
255 wxSQLite3ResultSet q = stmt.ExecuteQuery();
256
257 sql = wxT("SELECT hhsno FROM path EXCEPT SELECT hhsno FROM hhs.hhs_master");
258 stmt = ccndb.PrepareStatement( sql );
259 q = stmt.ExecuteQuery();
260
261 wxArrayString result;
262 while ( q.NextRow() ) {
263 result.Add( q.GetString(0) );
264 }
265
266 stmt.Finalize();
267 ccndb.Close();
268
269 return result;
270 }
271