markus / ConvertService / ServiceBase / Markus.Service.StationController / ViewModel / DataBaseItemsModel.cs @ 2decfbdf
이력 | 보기 | 이력해설 | 다운로드 (55.7 KB)
1 |
using GemBox.Spreadsheet; |
---|---|
2 |
using Markus.Message; |
3 |
using Markus.Service.DataBase; |
4 |
using Markus.Service.Extensions; |
5 |
//using Markus.Service.Interface; |
6 |
using Markus.Service.StationController; |
7 |
using Markus.Service.StationController.Behaviors; |
8 |
using Markus.Service.StationController.Extensions; |
9 |
using Microsoft.Win32; |
10 |
using System; |
11 |
using System.Collections.Generic; |
12 |
using System.Collections.ObjectModel; |
13 |
using System.ComponentModel; |
14 |
using System.Diagnostics; |
15 |
using System.Linq; |
16 |
using System.Threading.Tasks; |
17 |
using System.Web; |
18 |
using System.Windows; |
19 |
using Telerik.Windows.Controls; |
20 |
using Telerik.Windows.Data; |
21 |
using ConvertItem = Markus.Service.Interface.ConvertItem; |
22 |
//using AliveConvertItem = Markus.Service.WcfClient.StationServiceTask.ConvertItem; |
23 |
using Markus.Service.WcfClient.StationServiceTask; |
24 |
using System.Text; |
25 |
using Markus.Service.Helper; |
26 |
|
27 |
namespace Markus.Service.StationController.ViewModel |
28 |
{ |
29 |
//세미 |
30 |
public class DataBaseItemsModel : Mvvm.ToolKit.ViewModelBase, INotifyPropertyChanged |
31 |
{ |
32 |
//alive |
33 |
private BackgroundWorker AlivebackgroundWorker; |
34 |
|
35 |
private bool isLoading; |
36 |
private System.Windows.Documents.FlowDocument connectionLog; |
37 |
|
38 |
private System.Collections.ObjectModel.ObservableCollection<ConvertItem> _AliveItems; |
39 |
|
40 |
public System.Collections.ObjectModel.ObservableCollection<ConvertItem> AliveItems |
41 |
{ |
42 |
get => _AliveItems; set |
43 |
{ |
44 |
_AliveItems = value; |
45 |
OnPropertyChanged(() => AliveItems); |
46 |
} |
47 |
} |
48 |
|
49 |
public bool AliveIsLoading |
50 |
{ |
51 |
get => isLoading; set |
52 |
{ |
53 |
if (isLoading != value) |
54 |
{ |
55 |
isLoading = value; |
56 |
OnPropertyChanged(() => AliveIsLoading); |
57 |
} |
58 |
} |
59 |
} |
60 |
|
61 |
|
62 |
public System.Windows.Documents.FlowDocument ConnectionLog |
63 |
{ |
64 |
get => connectionLog; |
65 |
set |
66 |
{ |
67 |
if (connectionLog != value) |
68 |
{ |
69 |
connectionLog = value; |
70 |
OnPropertyChanged(() => ConnectionLog); |
71 |
} |
72 |
} |
73 |
} |
74 |
|
75 |
//public AliveViewModel() |
76 |
//{ |
77 |
//} |
78 |
|
79 |
//// 진행률에 변화가 있을때 이벤트가 발생 |
80 |
//private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) |
81 |
//{ |
82 |
//} |
83 |
|
84 |
//// 일이 모두 마쳤을때 수행되어야할 코드 |
85 |
//private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) |
86 |
//{ |
87 |
//} |
88 |
|
89 |
// BackgroundWorker에서 수행할 일을 정의. |
90 |
private void AlivebackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) |
91 |
{ |
92 |
} |
93 |
private void AlivebackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) |
94 |
{ |
95 |
} |
96 |
private async void AlivebackgroundWorker_DoWork(object sender, DoWorkEventArgs e) |
97 |
{ |
98 |
while (IsAcitve) |
99 |
{ |
100 |
//System.Threading.Thread.Sleep(new TimeSpan(0, 0, 3)); |
101 |
|
102 |
if (!IsLoading) |
103 |
{ |
104 |
IsLoading = true; |
105 |
|
106 |
try |
107 |
{ |
108 |
|
109 |
List<ConvertItem> newitems = new List<ConvertItem>(); |
110 |
|
111 |
foreach (var client in App.StationClientList) |
112 |
{ |
113 |
if (await SimplePingAsync(client.Endpoint.Address.ToString())) |
114 |
{ |
115 |
try |
116 |
{ |
117 |
List<ConvertItem> itemsToList = new List<ConvertItem>(); |
118 |
var items = await client.AliveConvertListAsync(); |
119 |
//int i = 0; |
120 |
foreach (var item in items) |
121 |
{ |
122 |
ConvertItem itemsToEach = new ConvertItem(); |
123 |
itemsToEach.ServiceID = item.ServiceID; |
124 |
itemsToEach.ConvertID = item.ConvertID; |
125 |
itemsToEach.ProjectNumber = item.ProjectNumber; |
126 |
//itemsToEach.ConvertState = (StatusCodeType.)item.ConvertState;// (StatusCodeType) item.ConvertState; |
127 |
itemsToEach.ConvertState = (StatusCodeType)Enum.Parse(typeof(StatusCodeType), item.ConvertState); |
128 |
itemsToEach.CurrentPageNo = item.CurrentPageNo; |
129 |
itemsToEach.TotalPage = item.TotalPage; |
130 |
itemsToEach.OriginfilePath = item.OriginfilePath; |
131 |
itemsToEach.ConvertPath = item.ConvertPath; |
132 |
|
133 |
itemsToList.Add(itemsToEach); |
134 |
//i++; |
135 |
} |
136 |
newitems.AddRange(itemsToList); |
137 |
//System.Diagnostics.Trace.WriteLine($"{client.Endpoint.Address} ping"); |
138 |
|
139 |
if (items.Count() == 0) |
140 |
{ |
141 |
//System.Diagnostics.Trace.WriteLine($"{client.Endpoint.Address} Alive Items is zero."); |
142 |
} |
143 |
} |
144 |
catch (Exception ex) |
145 |
{ |
146 |
//System.Diagnostics.Trace.Fail($"{client.Endpoint.Address} {ex.Message}"); |
147 |
} |
148 |
} |
149 |
else |
150 |
{ |
151 |
//System.Diagnostics.Trace.Fail($"{client.Endpoint.Address} ping Error"); |
152 |
} |
153 |
} |
154 |
|
155 |
// ItemsUpdate(newitems); |
156 |
await System.Windows.Application.Current.Dispatcher.InvokeAsync(() => ItemsUpdate(newitems)); |
157 |
} |
158 |
catch (Exception ex) |
159 |
{ |
160 |
System.Diagnostics.Debug.WriteLine(ex.ToString()); |
161 |
} |
162 |
|
163 |
IsLoading = false; |
164 |
} |
165 |
|
166 |
} |
167 |
} |
168 |
|
169 |
|
170 |
private async void AliveDataSelect() |
171 |
{ |
172 |
try |
173 |
{ |
174 |
List<ConvertItem> newitems = new List<ConvertItem>(); |
175 |
|
176 |
foreach (var client in App.StationClientList) |
177 |
{ |
178 |
if (await SimplePingAsync(client.Endpoint.Address.ToString())) |
179 |
{ |
180 |
try |
181 |
{ |
182 |
List<ConvertItem> itemsToList = new List<ConvertItem>(); |
183 |
var items = await client.AliveConvertListAsync(); |
184 |
//int i = 0; |
185 |
foreach (var item in items) |
186 |
{ |
187 |
ConvertItem itemsToEach = new ConvertItem(); |
188 |
itemsToEach.ServiceID = item.ServiceID; |
189 |
itemsToEach.ConvertID = item.ConvertID; |
190 |
itemsToEach.ProjectNumber = item.ProjectNumber; |
191 |
//itemsToEach.ConvertState = (StatusCodeType.)item.ConvertState;// (StatusCodeType) item.ConvertState; |
192 |
try |
193 |
{ |
194 |
itemsToEach.ConvertState = (StatusCodeType)Enum.Parse(typeof(StatusCodeType), item.ConvertState); |
195 |
} |
196 |
catch (Exception ex) |
197 |
{ |
198 |
|
199 |
throw ex; |
200 |
} |
201 |
|
202 |
itemsToEach.CurrentPageNo = item.CurrentPageNo; |
203 |
itemsToEach.TotalPage = item.TotalPage; |
204 |
itemsToEach.OriginfilePath = item.OriginfilePath; |
205 |
itemsToEach.ConvertPath = item.ConvertPath; |
206 |
|
207 |
itemsToList.Add(itemsToEach); |
208 |
//i++; |
209 |
} |
210 |
newitems.AddRange(itemsToList); |
211 |
System.Diagnostics.Trace.WriteLine($"{client.Endpoint.Address} ping"); |
212 |
|
213 |
if (items.Count() == 0) |
214 |
{ |
215 |
System.Diagnostics.Trace.WriteLine($"{client.Endpoint.Address} Alive Items is zero."); |
216 |
} |
217 |
} |
218 |
catch (Exception ex) |
219 |
{ |
220 |
System.Diagnostics.Trace.Fail($"{client.Endpoint.Address} {ex.Message}"); |
221 |
} |
222 |
} |
223 |
else |
224 |
{ |
225 |
System.Diagnostics.Trace.Fail($"{client.Endpoint.Address} ping Error"); |
226 |
} |
227 |
} |
228 |
|
229 |
ItemsUpdate(newitems); |
230 |
await System.Windows.Application.Current.Dispatcher.InvokeAsync(() => ItemsUpdate(newitems)); |
231 |
} |
232 |
catch (Exception ex) |
233 |
{ |
234 |
System.Diagnostics.Debug.WriteLine(ex.ToString()); |
235 |
} |
236 |
} |
237 |
|
238 |
|
239 |
private void ItemsUpdate(List<ConvertItem> newitems) |
240 |
{ |
241 |
|
242 |
foreach (var item in newitems) |
243 |
{ |
244 |
item.OriginfilePath = HttpUtility.UrlDecode(item.OriginfilePath); |
245 |
} |
246 |
|
247 |
if (AliveItems == null) |
248 |
{ |
249 |
AliveItems = new System.Collections.ObjectModel.ObservableCollection<ConvertItem>(); |
250 |
|
251 |
foreach (var item in newitems) |
252 |
{ |
253 |
AliveItems.Add(item); |
254 |
} |
255 |
} |
256 |
else |
257 |
{ |
258 |
/// 데이터 업데이트 |
259 |
newitems.ForEach(newitem => |
260 |
{ |
261 |
AliveItems.UpdateWhere(changeitem => ConvertItemEx.ChangeValues(changeitem, newitem), x => x.ProjectNumber == newitem.ProjectNumber && x.ConvertID == newitem.ConvertID); |
262 |
}); |
263 |
|
264 |
// 추가 |
265 |
foreach (var item in newitems) |
266 |
{ |
267 |
if (AliveItems.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0) |
268 |
{ |
269 |
AliveItems.Add(item); |
270 |
} |
271 |
} |
272 |
|
273 |
/// 삭제 |
274 |
|
275 |
for (int i = AliveItems.Count() - 1; i > -1; --i) |
276 |
{ |
277 |
var item = AliveItems[i]; |
278 |
|
279 |
if (newitems.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0) |
280 |
{ |
281 |
try |
282 |
{ |
283 |
AliveItems.RemoveAt(i); |
284 |
} |
285 |
catch (Exception ex) |
286 |
{ |
287 |
System.Diagnostics.Debug.WriteLine(ex.ToString()); |
288 |
} |
289 |
} |
290 |
} |
291 |
} |
292 |
} |
293 |
|
294 |
private void LogWrite(string log, bool IsError) |
295 |
{ |
296 |
if (IsError) |
297 |
{ |
298 |
System.Diagnostics.Trace.Fail(log); |
299 |
} |
300 |
else |
301 |
{ |
302 |
System.Diagnostics.Trace.TraceInformation(log); |
303 |
} |
304 |
} |
305 |
|
306 |
|
307 |
public static async Task<bool> SimplePingAsync(string uri) |
308 |
{ |
309 |
bool result = false; |
310 |
|
311 |
try |
312 |
{ |
313 |
using (System.Net.Http.HttpClient Client = new System.Net.Http.HttpClient()) |
314 |
{ |
315 |
Client.Timeout = new TimeSpan(0, 0, 60); |
316 |
|
317 |
var message = await Client.GetAsync(uri); |
318 |
|
319 |
System.Net.HttpStatusCode StatusCode = message.StatusCode; |
320 |
|
321 |
switch (StatusCode) |
322 |
{ |
323 |
|
324 |
case System.Net.HttpStatusCode.Accepted: |
325 |
case System.Net.HttpStatusCode.OK: |
326 |
result = true; |
327 |
break; |
328 |
} |
329 |
} |
330 |
} |
331 |
catch (Exception ex) |
332 |
{ |
333 |
result = false; |
334 |
System.Diagnostics.Debug.WriteLine(ex.ToString()); |
335 |
} |
336 |
|
337 |
return result; |
338 |
} |
339 |
|
340 |
//public override void Loaded() |
341 |
//{ |
342 |
// base.Loaded(); |
343 |
|
344 |
// if (!App.IsDesignMode) |
345 |
// { |
346 |
// backgroundWorker = new BackgroundWorker(); |
347 |
// backgroundWorker.DoWork += backgroundWorker_DoWork; |
348 |
// backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted; |
349 |
// backgroundWorker.WorkerReportsProgress = false; |
350 |
// backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); |
351 |
|
352 |
// backgroundWorker.RunWorkerAsync(); |
353 |
// } |
354 |
//} |
355 |
|
356 |
//public override void AliveClosed() |
357 |
//{ |
358 |
// if (backgroundWorker != null) |
359 |
// { |
360 |
// backgroundWorker.DoWork -= backgroundWorker_DoWork; |
361 |
// backgroundWorker.RunWorkerCompleted -= backgroundWorker_RunWorkerCompleted; |
362 |
// backgroundWorker.WorkerReportsProgress = false; |
363 |
// backgroundWorker.ProgressChanged -= new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); |
364 |
|
365 |
// backgroundWorker.Dispose(); |
366 |
// } |
367 |
|
368 |
// base.Closed(); |
369 |
//} |
370 |
//alive |
371 |
|
372 |
public event PropertyChangedEventHandler PropertyChanged; |
373 |
|
374 |
private void NotifyPropertyChanged(String info) |
375 |
{ |
376 |
if (PropertyChanged != null) |
377 |
{ |
378 |
PropertyChanged(this, new PropertyChangedEventArgs(info)); |
379 |
} |
380 |
} |
381 |
|
382 |
BackgroundWorker backgroundWorker; |
383 |
|
384 |
Random rnd = new Random(); |
385 |
|
386 |
private System.Collections.ObjectModel.ObservableCollection<ConvertItem> _FilterConvertSource; |
387 |
private ConvertItem _SelectRealConvert; |
388 |
private ConvertItem _SelectFilterConvert; |
389 |
|
390 |
private StatusTypeList _StatusType; |
391 |
private bool _IsLoading; |
392 |
|
393 |
private Telerik.Windows.Data.EnumMemberViewModel _SelectedStatus; |
394 |
|
395 |
public Telerik.Windows.Data.EnumMemberViewModel SelectedStatus |
396 |
{ |
397 |
get => _SelectedStatus; |
398 |
set |
399 |
{ |
400 |
_SelectedStatus = value; |
401 |
NotifyPropertyChanged("SelectedStatus"); |
402 |
} |
403 |
} |
404 |
|
405 |
|
406 |
private SelectedCountItem _SelectedCount; |
407 |
|
408 |
public SelectedCountItem SelectedCount |
409 |
{ |
410 |
get => _SelectedCount; |
411 |
set |
412 |
{ |
413 |
_SelectedCount = value; |
414 |
NotifyPropertyChanged("SelectedCount"); |
415 |
} |
416 |
} |
417 |
|
418 |
|
419 |
public DelegateCommand ConvertCommand { get; private set; } |
420 |
public DelegateCommand DeleteCommand { get; private set; } |
421 |
public DelegateCommand ValidateCommand { get; private set; } |
422 |
|
423 |
|
424 |
private void DataConvert(object obj) |
425 |
{ |
426 |
if (SelectFilterConvert == null && SelectRealConvert == null) |
427 |
{ |
428 |
MessageBox.Show("왼쪽 버튼 클릭 후 Converter 해주세요!"); |
429 |
} |
430 |
else |
431 |
{ |
432 |
ConvertDatabase _DataConvert = new ConvertDatabase(App.MarkusDataBaseConnecitonString); |
433 |
var resultRealConvert = 0; |
434 |
var resultFiltertConvert = 0; |
435 |
|
436 |
if (SelectRealConvert != null) |
437 |
{ |
438 |
/*resultRealConvert = _DataConvert.SetCleanUpItem(SelectRealConvert.ConvertID, SelectRealConvert.ReConverter);*/ |
439 |
resultRealConvert = _DataConvert.SetCleanUpItem(SelectRealConvert); |
440 |
} |
441 |
else if (SelectFilterConvert != null) |
442 |
{ |
443 |
//resultFiltertConvert = _DataConvert.SetCleanUpItem(SelectFilterConvert.ConvertID, SelectFilterConvert.ReConverter); |
444 |
resultFiltertConvert = _DataConvert.SetCleanUpItem(SelectFilterConvert); |
445 |
} |
446 |
System.Diagnostics.Debug.WriteLine(resultRealConvert + " " + resultFiltertConvert); |
447 |
|
448 |
using (Markus.Service.DataBase.ConvertDatabase database = new Markus.Service.DataBase.ConvertDatabase(App.MarkusDataBaseConnecitonString)) |
449 |
{ |
450 |
var items = database.GetConvertProjects(SelectFilterConvert); |
451 |
|
452 |
foreach (var item in items) |
453 |
{ |
454 |
RealConvertSource.Add(item); |
455 |
} |
456 |
|
457 |
} |
458 |
} |
459 |
} |
460 |
|
461 |
private void DataDelete(object obj) |
462 |
{ |
463 |
RadWindow.Alert("정말로 삭제 하시겠습니까?", this.OnClosed); |
464 |
} |
465 |
|
466 |
private void OnClosed(object sender, WindowClosedEventArgs e) |
467 |
{ |
468 |
var result = e.DialogResult; |
469 |
if (result == true) |
470 |
{ |
471 |
ConvertDatabase _DataConvert = new ConvertDatabase(App.MarkusDataBaseConnecitonString); |
472 |
var resultRealConvert = _DataConvert.RemoveItem(SelectRealConvert.ConvertID); |
473 |
var resultFiltertConvert = _DataConvert.RemoveItem(SelectFilterConvert.ConvertID); |
474 |
System.Diagnostics.Debug.WriteLine(resultRealConvert + " " + resultFiltertConvert); |
475 |
} |
476 |
} |
477 |
private void DataValidate(object obj) |
478 |
{ |
479 |
MessageBox.Show("파일 체크 할껀데 정상인지 아닌지 "); |
480 |
|
481 |
} |
482 |
|
483 |
|
484 |
public System.Collections.ObjectModel.ObservableCollection<ConvertItem> FilterConvertSource |
485 |
{ |
486 |
get => _FilterConvertSource; |
487 |
set |
488 |
{ |
489 |
_FilterConvertSource = value; |
490 |
NotifyPropertyChanged("FilterConvertSource"); |
491 |
} |
492 |
} |
493 |
|
494 |
|
495 |
private System.Collections.ObjectModel.ObservableCollection<ConvertItem> _RealConvertSource; |
496 |
public System.Collections.ObjectModel.ObservableCollection<ConvertItem> RealConvertSource |
497 |
{ |
498 |
get => _RealConvertSource; |
499 |
set |
500 |
{ |
501 |
_RealConvertSource = value; |
502 |
NotifyPropertyChanged("RealConvertSource"); |
503 |
} |
504 |
} |
505 |
|
506 |
|
507 |
|
508 |
public ConvertItem SelectFilterConvert |
509 |
{ |
510 |
get => _SelectFilterConvert; |
511 |
set |
512 |
{ |
513 |
_SelectFilterConvert = value; |
514 |
NotifyPropertyChanged("SelectFilterConvert"); |
515 |
} |
516 |
} |
517 |
public ConvertItem SelectRealConvert |
518 |
{ |
519 |
get => _SelectRealConvert; |
520 |
set |
521 |
{ |
522 |
_SelectRealConvert = value; |
523 |
NotifyPropertyChanged("SelectRealConvert"); |
524 |
} |
525 |
} |
526 |
|
527 |
public StatusTypeList StatusType |
528 |
{ |
529 |
get => _StatusType; |
530 |
set |
531 |
{ |
532 |
_StatusType = value; |
533 |
NotifyPropertyChanged("StatusType"); |
534 |
} |
535 |
} |
536 |
|
537 |
public bool IsLoading |
538 |
{ |
539 |
get => _IsLoading; |
540 |
set |
541 |
{ |
542 |
if (_IsLoading != value) |
543 |
{ |
544 |
_IsLoading = value; |
545 |
NotifyPropertyChanged("IsLoading"); |
546 |
} |
547 |
} |
548 |
} |
549 |
|
550 |
List<SelectedCountItem> _SelectedCountList; |
551 |
|
552 |
public List<SelectedCountItem> SelectedCountList |
553 |
{ |
554 |
get |
555 |
{ |
556 |
if (_SelectedCountList == null) |
557 |
{ |
558 |
_SelectedCountList = new List<SelectedCountItem> |
559 |
{ |
560 |
new SelectedCountItem{DisplayMember = "50",ValueMember = 50}, |
561 |
new SelectedCountItem{DisplayMember = "100",ValueMember = 100}, |
562 |
new SelectedCountItem{DisplayMember = "150",ValueMember = 150}, |
563 |
new SelectedCountItem{DisplayMember = "200",ValueMember = 200} |
564 |
}; |
565 |
} |
566 |
|
567 |
return _SelectedCountList; |
568 |
} |
569 |
} |
570 |
|
571 |
public DataBaseItemsModel() |
572 |
{ |
573 |
|
574 |
DataSaveFileGemBoxCommand = new DelegateCommand(DataExport); |
575 |
ConvertCommand = new DelegateCommand(DataConvert); |
576 |
DeleteCommand = new DelegateCommand(DataDelete); |
577 |
ValidateCommand = new DelegateCommand(DataValidate); |
578 |
//Loaded(); |
579 |
} |
580 |
|
581 |
// 진행률에 변화가 있을때 이벤트가 발생 |
582 |
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) |
583 |
{ |
584 |
MessageBox.Show("진행률에 변화"); |
585 |
} |
586 |
|
587 |
// 일이 모두 마쳤을때 수행되어야할 코드 |
588 |
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) |
589 |
{ |
590 |
MessageBox.Show("임무마침"); |
591 |
} |
592 |
|
593 |
IEnumerable<Telerik.Windows.Data.EnumMemberViewModel> _StatusCodeList; |
594 |
|
595 |
public IEnumerable<Telerik.Windows.Data.EnumMemberViewModel> StatusCodeList |
596 |
{ |
597 |
get |
598 |
{ |
599 |
if (_StatusCodeList == null) |
600 |
{ |
601 |
_StatusCodeList = Telerik.Windows.Data.EnumDataSource.FromType<StatusCodeType>(); |
602 |
} |
603 |
|
604 |
return _StatusCodeList; |
605 |
} |
606 |
} |
607 |
// BackgroundWorker에서 수행할 일을 정의. |
608 |
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) |
609 |
{ |
610 |
|
611 |
while (IsAcitve) |
612 |
{ |
613 |
|
614 |
if (FilterConvertSource == null) |
615 |
{ |
616 |
FilterConvertSource = new System.Collections.ObjectModel.ObservableCollection<ConvertItem>(); |
617 |
} |
618 |
|
619 |
if (RealConvertSource == null) |
620 |
{ |
621 |
RealConvertSource = new System.Collections.ObjectModel.ObservableCollection<ConvertItem>(); |
622 |
} |
623 |
|
624 |
/// combobox 에서 선택된 items |
625 |
if (SelectedStatus != null) |
626 |
{ |
627 |
DataSelect(new[] { (StatusCodeType)(SelectedStatus.Value) }, FilterConvertSource); |
628 |
} |
629 |
|
630 |
/// 컨버터중인 items |
631 |
RealDataSelect(new[] { StatusCodeType.None, StatusCodeType.Wait, StatusCodeType.PageLoading, StatusCodeType.Saving }, RealConvertSource); |
632 |
} |
633 |
} |
634 |
|
635 |
System.Windows.Threading.DispatcherTimer DispatcherTimer = new System.Windows.Threading.DispatcherTimer(); |
636 |
|
637 |
|
638 |
private void RealDataSelect(IEnumerable<StatusCodeType> statusCodeTypeList, System.Collections.ObjectModel.ObservableCollection<ConvertItem> collection) |
639 |
{ |
640 |
|
641 |
try |
642 |
{ |
643 |
using (Markus.Service.DataBase.ConvertDatabase database = new Markus.Service.DataBase.ConvertDatabase(App.MarkusDataBaseConnecitonString)) |
644 |
{ |
645 |
|
646 |
|
647 |
|
648 |
//var items = database.GetConvertProjects(x => statusCodeTypeList.Count(y => (int)y == x.STATUS) > 0)//x:database객체 y:statusCodeTypeList의값 Count()안에 predicator 조건 만족하면 count개수안에 넣음 |
649 |
// .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList(); |
650 |
|
651 |
//var items = database.GetConvertProjects(x => statusCodeTypeList.Count(y => ((int)y).ToString() == x.ConvertState) > 0)//x:database객체 y:statusCodeTypeList의값 Count()안에 predicator 조건 만족하면 count개수안에 넣음 |
652 |
// .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList(); |
653 |
//int _status = 0; |
654 |
//if (SelectedStatus != null) |
655 |
//{ |
656 |
// _status = (int)SelectedStatus.Value; |
657 |
//} |
658 |
|
659 |
var items = database.GetConvertProjects(collection)//x:database객체 y:statusCodeTypeList의값 Count()안에 predicator 조건 만족하면 count개수안에 넣음 |
660 |
.Take(SelectedCount.ValueMember).ToList();// |
661 |
|
662 |
//if (statusCodeTypeList.Count() == 4) |
663 |
//{ |
664 |
// items.Clear(); |
665 |
|
666 |
// //items = database.GetConvertProjects(x => statusCodeTypeList.Count(y => (int)y == x.STATUS) > 0)//연습용 |
667 |
// // .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList();//실행시킨 날 보다 createtime이 최신 일때 |
668 |
|
669 |
// //items = database.GetConvertProjects(x => DateTime.Compare(x.CREATE_DATETIME, now) > 0 && statusCodeTypeList.Count(y => (int)y == x.STATUS) > 0) |
670 |
// // .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList();//실행시킨 날 보다 createtime이 최신 일때 |
671 |
|
672 |
// items = database.GetConvertProjects(x => DateTime.Compare(x.CreateTime, now) > 0 , _status)//statusCodeTypeList.Count(y => ((int)y).ToString() == x.ConvertState) > 0 |
673 |
// .Take(SelectedCount.ValueMember).ToList(); //아래그리드는 양이 적어서 원래 대로 해도 됨 |
674 |
//} |
675 |
//if (collection.Count() == 0) |
676 |
//{ |
677 |
// if (statusCodeTypeList.Count() == 1) |
678 |
// { |
679 |
// items.ForEach(x => collection.Add(x)); |
680 |
// } |
681 |
//} |
682 |
|
683 |
//else |
684 |
//{ |
685 |
////세미 업데이트 |
686 |
items.ForEach(newitem => |
687 |
{ |
688 |
collection.UpdateWhere(changeitem => |
689 |
ConvertItemEx.ChangeValues(changeitem, newitem), x => x.ConvertID == newitem.ConvertID && x.ProjectNumber == newitem.ProjectNumber); |
690 |
}); |
691 |
|
692 |
|
693 |
//if (statusCodeTypeList.Count() == 1) |
694 |
//{ |
695 |
// //추가 convert 후 추가됨 |
696 |
// foreach (var item in items) |
697 |
// { |
698 |
// if (collection.Count(x => x.DocumentID == item.DocumentID && x.ProjectNumber == item.ProjectNumber) == 0)//그리드와 디비 변동 없으면 안들어감 |
699 |
// { |
700 |
// for (int i = 0; i < collection.Count() - 1; i++)//위 그리드에서 카운드 개수 변함 없고 컨버터 끝난 후 추가할때 createtime 비교 하며 order by 순으로 추가 |
701 |
// { |
702 |
// if (DateTime.Compare(collection[i].CreateTime, item.CreateTime) < 0) |
703 |
// { |
704 |
// collection.Insert(i, item); |
705 |
// } |
706 |
// } |
707 |
// } |
708 |
|
709 |
// } |
710 |
//} |
711 |
|
712 |
//if (statusCodeTypeList.Count() == 1) |
713 |
//{ |
714 |
// //추가 convert 후 추가됨 |
715 |
// foreach (var item in items) |
716 |
// { |
717 |
// if (collection.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0)//그리드와 디비 변동 없으면 안들어감 |
718 |
// { |
719 |
// for (int i = 0; i < collection.Count() - 1; i++)//위 그리드에서 카운드 개수 변함 없고 컨버터 끝난 후 추가할때 createtime 비교 하며 order by 순으로 추가 |
720 |
// { |
721 |
// if (DateTime.Compare(collection[i].CreateTime, item.CreateTime) < 0) |
722 |
// { |
723 |
// collection.Insert(i, item); |
724 |
// } |
725 |
// } |
726 |
// } |
727 |
|
728 |
// } |
729 |
//} |
730 |
|
731 |
//} |
732 |
} |
733 |
|
734 |
} |
735 |
catch (Exception ex) |
736 |
{ |
737 |
MessageBox.Show(ex.ToString()); |
738 |
} |
739 |
|
740 |
|
741 |
} |
742 |
|
743 |
//<>쓸때는 IEnumerable |
744 |
|
745 |
private void DataSelect(IEnumerable<StatusCodeType> statusCodeTypeList, System.Collections.ObjectModel.ObservableCollection<ConvertItem> collection) |
746 |
{ |
747 |
|
748 |
try |
749 |
{ |
750 |
using (Markus.Service.DataBase.ConvertDatabase database = new Markus.Service.DataBase.ConvertDatabase(App.MarkusDataBaseConnecitonString)) |
751 |
{ |
752 |
|
753 |
|
754 |
|
755 |
//var items = database.GetConvertProjects(x => statusCodeTypeList.Count(y => (int)y == x.STATUS) > 0)//x:database객체 y:statusCodeTypeList의값 Count()안에 predicator 조건 만족하면 count개수안에 넣음 |
756 |
// .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList(); |
757 |
|
758 |
//var items = database.GetConvertProjects(x => statusCodeTypeList.Count(y => ((int)y).ToString() == x.ConvertState) > 0)//x:database객체 y:statusCodeTypeList의값 Count()안에 predicator 조건 만족하면 count개수안에 넣음 |
759 |
// .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList(); |
760 |
int _status = 0; |
761 |
if (SelectedStatus != null) |
762 |
{ |
763 |
_status = (int)SelectedStatus.Value; |
764 |
} |
765 |
|
766 |
var items = database.GetConvertProjects(_status)//x:database객체 y:statusCodeTypeList의값 Count()안에 predicator 조건 만족하면 count개수안에 넣음 |
767 |
.Take(SelectedCount.ValueMember).ToList();// |
768 |
|
769 |
//if (statusCodeTypeList.Count() == 4) |
770 |
//{ |
771 |
// items.Clear(); |
772 |
|
773 |
// //items = database.GetConvertProjects(x => statusCodeTypeList.Count(y => (int)y == x.STATUS) > 0)//연습용 |
774 |
// // .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList();//실행시킨 날 보다 createtime이 최신 일때 |
775 |
|
776 |
// //items = database.GetConvertProjects(x => DateTime.Compare(x.CREATE_DATETIME, now) > 0 && statusCodeTypeList.Count(y => (int)y == x.STATUS) > 0) |
777 |
// // .OrderByDescending(x => x.CreateTime).Take(SelectedCount.ValueMember).ToList();//실행시킨 날 보다 createtime이 최신 일때 |
778 |
|
779 |
// items = database.GetConvertProjects(x => DateTime.Compare(x.CreateTime, now) > 0 , _status)//statusCodeTypeList.Count(y => ((int)y).ToString() == x.ConvertState) > 0 |
780 |
// .Take(SelectedCount.ValueMember).ToList(); //아래그리드는 양이 적어서 원래 대로 해도 됨 |
781 |
//} |
782 |
if (collection.Count() == 0) |
783 |
{ |
784 |
if (statusCodeTypeList.Count() == 1) |
785 |
{ |
786 |
items.ForEach(x => collection.Add(x)); |
787 |
} |
788 |
} |
789 |
|
790 |
else |
791 |
{ |
792 |
////세미 업데이트 |
793 |
//items.ForEach(newitem => |
794 |
//{ |
795 |
// collection.UpdateWhere(changeitem => |
796 |
// ConvertItemEx.ChangeValues(changeitem, newitem), x => x.DocumentID == newitem.DocumentID && x.ProjectNumber == newitem.ProjectNumber); |
797 |
//}); |
798 |
|
799 |
////세미 업데이트 |
800 |
items.ForEach(newitem => |
801 |
{ |
802 |
collection.UpdateWhere(changeitem => |
803 |
ConvertItemEx.ChangeValues(changeitem, newitem), x => x.ProjectNumber == newitem.ProjectNumber && x.ConvertID == newitem.ConvertID); |
804 |
}); |
805 |
|
806 |
//if (statusCodeTypeList.Count() == 1) |
807 |
//{ |
808 |
// //삭제 |
809 |
// for (int i = collection.Count() - 1; i >= 0; --i) |
810 |
// { |
811 |
// var item = collection[i]; |
812 |
|
813 |
// if (items.Count(x => x.DocumentID == item.DocumentID && x.ProjectNumber == item.ProjectNumber) == 0)//디비에서 가져온 값과 마지막값부터 차례대로 비교 |
814 |
// {//참=> 0제외한 모든 수 |
815 |
// collection.RemoveAt(i); |
816 |
// } |
817 |
// } |
818 |
//} |
819 |
|
820 |
//if (statusCodeTypeList.Count() == 1) |
821 |
//{ |
822 |
// //추가 convert 후 추가됨 |
823 |
// foreach (var item in items) |
824 |
// { |
825 |
// if (collection.Count(x => x.DocumentID == item.DocumentID && x.ProjectNumber == item.ProjectNumber) == 0)//그리드와 디비 변동 없으면 안들어감 |
826 |
// { |
827 |
// for (int i = 0; i < collection.Count() - 1; i++)//위 그리드에서 카운드 개수 변함 없고 컨버터 끝난 후 추가할때 createtime 비교 하며 order by 순으로 추가 |
828 |
// { |
829 |
// if (DateTime.Compare(collection[i].CreateTime, item.CreateTime) < 0) |
830 |
// { |
831 |
// collection.Insert(i, item); |
832 |
// } |
833 |
// } |
834 |
// } |
835 |
|
836 |
// } |
837 |
//} |
838 |
|
839 |
if (statusCodeTypeList.Count() == 1) |
840 |
{ |
841 |
//삭제 |
842 |
for (int i = collection.Count() - 1; i >= 0; --i) |
843 |
{ |
844 |
var item = collection[i]; |
845 |
|
846 |
if (items.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0)//디비에서 가져온 값과 마지막값부터 차례대로 비교 |
847 |
{//참=> 0제외한 모든 수 |
848 |
collection.RemoveAt(i); |
849 |
} |
850 |
} |
851 |
} |
852 |
|
853 |
if (statusCodeTypeList.Count() == 1) |
854 |
{ |
855 |
//추가 convert 후 추가됨 |
856 |
foreach (var item in items) |
857 |
{ |
858 |
if (collection.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0)//그리드와 디비 변동 없으면 안들어감 |
859 |
{ |
860 |
/*for (int i = 0; i < collection.Count()+1; i++)//위 그리드에서 카운드 개수 변함 없고 컨버터 끝난 후 추가할때 createtime 비교 하며 order by 순으로 추가*/ |
861 |
for (int i = 0; i < 200; i++) |
862 |
{ |
863 |
if (i < collection.Count() - 1) |
864 |
{ |
865 |
if (DateTime.Compare(collection[i].CreateTime, item.CreateTime) < 0) |
866 |
{ |
867 |
collection.Insert(i, item); |
868 |
break; |
869 |
} |
870 |
} |
871 |
else |
872 |
{ |
873 |
collection.Add(item); |
874 |
break; |
875 |
} |
876 |
} |
877 |
|
878 |
} |
879 |
|
880 |
} |
881 |
} |
882 |
|
883 |
} |
884 |
} |
885 |
|
886 |
} |
887 |
catch (Exception ex) |
888 |
{ |
889 |
MessageBox.Show(ex.ToString()); |
890 |
//System.Diagnostics.Debug.WriteLine(ex.ToString()); |
891 |
} |
892 |
|
893 |
|
894 |
} |
895 |
|
896 |
|
897 |
public override void Loaded() |
898 |
{ |
899 |
base.Loaded(); |
900 |
|
901 |
if (!App.IsDesignMode) |
902 |
{ |
903 |
backgroundWorker = new BackgroundWorker(); |
904 |
backgroundWorker.DoWork += backgroundWorker_DoWork; |
905 |
backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted; |
906 |
backgroundWorker.WorkerReportsProgress = false; |
907 |
backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); |
908 |
|
909 |
backgroundWorker.RunWorkerAsync(); |
910 |
|
911 |
AlivebackgroundWorker = new BackgroundWorker(); |
912 |
AlivebackgroundWorker.DoWork += AlivebackgroundWorker_DoWork; |
913 |
AlivebackgroundWorker.RunWorkerCompleted += AlivebackgroundWorker_RunWorkerCompleted; |
914 |
AlivebackgroundWorker.WorkerReportsProgress = false; |
915 |
AlivebackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(AlivebackgroundWorker_ProgressChanged); |
916 |
|
917 |
AlivebackgroundWorker.RunWorkerAsync(); |
918 |
} |
919 |
} |
920 |
|
921 |
public override void Closed() |
922 |
{ |
923 |
|
924 |
if (backgroundWorker != null) |
925 |
{ |
926 |
backgroundWorker.DoWork -= backgroundWorker_DoWork; |
927 |
backgroundWorker.RunWorkerCompleted -= backgroundWorker_RunWorkerCompleted; |
928 |
backgroundWorker.WorkerReportsProgress = false; |
929 |
backgroundWorker.ProgressChanged -= new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); |
930 |
|
931 |
AlivebackgroundWorker.DoWork -= AlivebackgroundWorker_DoWork; |
932 |
AlivebackgroundWorker.RunWorkerCompleted -= AlivebackgroundWorker_RunWorkerCompleted; |
933 |
AlivebackgroundWorker.WorkerReportsProgress = false; |
934 |
AlivebackgroundWorker.ProgressChanged -= new ProgressChangedEventHandler(AlivebackgroundWorker_ProgressChanged); |
935 |
|
936 |
AlivebackgroundWorker.Dispose(); |
937 |
|
938 |
} |
939 |
base.Closed(); |
940 |
} |
941 |
|
942 |
|
943 |
public DelegateCommand DataSaveFileGemBoxCommand { get; private set; } |
944 |
|
945 |
public class HeaderMember |
946 |
{ |
947 |
public string HeaderName { get; set; } |
948 |
public string Property { get; set; } |
949 |
} |
950 |
//public void DataExport<T>(IEnumerable<T> AliveItems) |
951 |
public void DataExport(object obj) |
952 |
{ |
953 |
SaveFileDialog saveFileDialog = new SaveFileDialog(); |
954 |
|
955 |
saveFileDialog.FileName = "Document"; // Default file name |
956 |
saveFileDialog.DefaultExt = ".txt"; // Default file extension |
957 |
saveFileDialog.Filter = "Csv documents (.Csv)|*.csv|Excel(2017~2019)Worksheets|*.xlsx"; // Filter files by extension |
958 |
|
959 |
|
960 |
if (saveFileDialog.ShowDialog() == true) |
961 |
{ |
962 |
|
963 |
|
964 |
if (!string.IsNullOrWhiteSpace(saveFileDialog.FileName)) |
965 |
{ |
966 |
|
967 |
var extension = new System.IO.FileInfo(saveFileDialog.FileName).Extension; |
968 |
|
969 |
if (extension == ".xlsx" || extension == ".csv") |
970 |
{ |
971 |
|
972 |
var headers = new List<HeaderMember> |
973 |
{ |
974 |
new HeaderMember{HeaderName = "ServiceID", Property = "ServiceID" }, |
975 |
new HeaderMember{HeaderName = "ConvertID", Property = "ConvertID" }, |
976 |
new HeaderMember{HeaderName = "ProjectNumber", Property = "ProjectNumber" }, |
977 |
new HeaderMember{HeaderName = "ConvertState", Property = "ConvertState" }, |
978 |
new HeaderMember{HeaderName = "CurrentPageNo", Property = "CurrentPageNo" }, |
979 |
new HeaderMember{HeaderName = "TotalPage", Property = "TotalPage" }, |
980 |
new HeaderMember{HeaderName = "OriginfilePath", Property = "OriginfilePath" }, |
981 |
new HeaderMember{HeaderName = "ConvertPath", Property = "ConvertPath" }, |
982 |
new HeaderMember{HeaderName = "CreateTime", Property = "CreateTime" }, |
983 |
new HeaderMember{HeaderName = "Exception", Property = "Exception" }, |
984 |
new HeaderMember{HeaderName = "ProcessorAffinity", Property = "ProcessorAffinity" }, |
985 |
new HeaderMember{HeaderName = "ReConverter", Property = "ReConverter" }, |
986 |
new HeaderMember{HeaderName = "UniqueKey", Property = "UniqueKey" } |
987 |
}; |
988 |
|
989 |
|
990 |
|
991 |
DataExportExcel(saveFileDialog.FileName, "Hello world", FilterConvertSource, headers); |
992 |
//_dataExport.DataExportExcel(saveFileDialog.FileName, saveFileDialog.FileName.ToString(), Projectsource, headers); |
993 |
//GemBoxFileSave(obj); |
994 |
} |
995 |
} |
996 |
} |
997 |
} |
998 |
|
999 |
|
1000 |
public void DataExportExcel<T>(string SaveFile, string SheetName, IEnumerable<T> collections, List<HeaderMember> headerMembers) |
1001 |
{ |
1002 |
|
1003 |
try |
1004 |
{ |
1005 |
SpreadsheetInfo.SetLicense("EXK0-W4HZ-N518-IMEW"); |
1006 |
// SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");//프리버전은 15줄까지만 가능 |
1007 |
|
1008 |
var workbook = new ExcelFile(); |
1009 |
var worksheet = workbook.Worksheets.Add(SheetName); |
1010 |
|
1011 |
// IEnumerable<T> collections를 for문 |
1012 |
for (int rowNumber = 0; rowNumber < collections.Count(); rowNumber++)//1857 양이 너무 많아서 빨리 엑셀출력 누르면 숫자가 감소됨 차분히 기다리면 숫자 늘어남 |
1013 |
{ |
1014 |
// index에 해당하는 row를 가져온다. |
1015 |
object row = collections.ElementAt(rowNumber);//우왕좌왕하게 모든 프로퍼티 있음 생성자 프로퍼티도 있음 |
1016 |
|
1017 |
//row의 properties를 가져옴. |
1018 |
var rowPropInfos = row.GetType().GetProperties();//행렬로 보기좋게 프로퍼티 나옴 |
1019 |
|
1020 |
/// 지정된 header에 대해서 프로퍼티에 해당하는 값을 가져와서 cell에 출력 |
1021 |
for (int i = 0; i < headerMembers.Count(); i++)//13 |
1022 |
{ |
1023 |
var prop = rowPropInfos.Where(x => x.Name == headerMembers[i].Property);//prop 0으로 나옴 |
1024 |
if (headerMembers[i].Property == "CreateTime") |
1025 |
{ |
1026 |
worksheet.Cells[rowNumber + 1, i].Value = prop.First().GetValue(row).ToString(); |
1027 |
} |
1028 |
else if (prop.Count() > 0) |
1029 |
{ |
1030 |
worksheet.Cells[rowNumber + 1, i].Value = prop.First().GetValue(row); |
1031 |
} |
1032 |
} |
1033 |
} |
1034 |
|
1035 |
int k = 0; |
1036 |
foreach (var HeadInfo in headerMembers) |
1037 |
{ |
1038 |
worksheet.Cells[0, k].Value = HeadInfo.HeaderName; |
1039 |
k++; |
1040 |
} |
1041 |
|
1042 |
int columnCount = worksheet.CalculateMaxUsedColumns(); |
1043 |
for (int i = 0; i < columnCount; i++) |
1044 |
{ |
1045 |
worksheet.Columns[i].AutoFit(); |
1046 |
} |
1047 |
|
1048 |
|
1049 |
|
1050 |
var header = new CellStyle();//헤더 |
1051 |
|
1052 |
header.FillPattern.SetSolid(SpreadsheetColor.FromArgb(0, 100, 220)); |
1053 |
header.Font.Weight = ExcelFont.BoldWeight; |
1054 |
header.HorizontalAlignment = HorizontalAlignmentStyle.Center; |
1055 |
header.VerticalAlignment = VerticalAlignmentStyle.Center; |
1056 |
//worksheet.Cells.GetSubrange("A1:M1").Style = header; |
1057 |
worksheet.Cells.GetSubrangeAbsolute(0, 0, collections.Count(), headerMembers.Count() - 1).Style = header; |
1058 |
|
1059 |
|
1060 |
|
1061 |
var style = new CellStyle(); |
1062 |
//style.Borders.SetBorders(MultipleBorders.Right | MultipleBorders.Top | MultipleBorders.Left | MultipleBorders.Bottom, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thick);//바깥쪽 border 두껍게 성공 |
1063 |
style.Borders.SetBorders(MultipleBorders.Outside, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thick);//바깥쪽 border 두껍게 성공 |
1064 |
|
1065 |
|
1066 |
|
1067 |
style.HorizontalAlignment = HorizontalAlignmentStyle.Center; |
1068 |
style.VerticalAlignment = VerticalAlignmentStyle.Center; |
1069 |
style.Font.Color = SpreadsheetColor.FromArgb(75, 60, 50);//글자 색갈 |
1070 |
style.FillPattern.SetSolid(SpreadsheetColor.FromArgb(126, 239, 239));//cell 색갈 |
1071 |
style.Font.Name = "맑은 고딕"; |
1072 |
style.Font.Size = 9 * 20; |
1073 |
worksheet.Cells.GetSubrangeAbsolute(0, 0, collections.Count(), headerMembers.Count() - 1).Style = style; |
1074 |
//worksheet.Cells.GetSubrange("A1:M1858").Style = style; |
1075 |
|
1076 |
for (int line = 0; line < collections.Count() - 1; line++) //바깥border과 안쪽 얇은 border 같이 쓰면 안됨 |
1077 |
{ |
1078 |
//for (int j = 0; j < 14 - 1 - 1; j++) |
1079 |
for (int j = 0; j < headerMembers.Count() - 1 - 1; j++) |
1080 |
{ |
1081 |
worksheet.Cells[line + 1, j + 1].Style.Borders.SetBorders(MultipleBorders.Outside, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thin);//안쪽 (1,1) ~ (마지막-1,마지막-1) 가운데 성공 |
1082 |
} |
1083 |
} |
1084 |
|
1085 |
|
1086 |
for (int line = 0; line < collections.Count(); line++) //바깥border과 안쪽 얇은 border 같이 쓰면 안됨 |
1087 |
{//Projectsource.Count() = 761개 ( 0 ~ 760 ) |
1088 |
for (int j = 0; j < headerMembers.Count() - 1; j++) |
1089 |
{ |
1090 |
worksheet.Cells[0, j].Style.Borders.SetBorders(MultipleBorders.Right, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thin);//(0,0) ~ (0,마지막-1) 위 성공 |
1091 |
|
1092 |
worksheet.Cells[collections.Count(), j].Style.Borders.SetBorders(MultipleBorders.Right, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thin);//(마지막,0) ~ (마지막,마지막-1) 아래 성공 |
1093 |
} |
1094 |
|
1095 |
worksheet.Cells[line, 0].Style.Borders.SetBorders(MultipleBorders.Bottom, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thin);//(0,0) ~ (마지막-1,0) 왼쪽 성공 |
1096 |
|
1097 |
worksheet.Cells[line, headerMembers.Count() - 1].Style.Borders.SetBorders(MultipleBorders.Bottom, SpreadsheetColor.FromArgb(140, 120, 50), LineStyle.Thin);//(0,마지막) ~ (마지막-1,마지막) 오른쪽 성공 |
1098 |
|
1099 |
} |
1100 |
|
1101 |
workbook.Save(SaveFile);//파일 열었던 파일로 저장 성공 |
1102 |
MessageBox.Show("성공"); |
1103 |
} |
1104 |
|
1105 |
catch (Exception ex) |
1106 |
{ |
1107 |
Console.WriteLine("예외 발생!! 메세지: {0}", ex.Message); |
1108 |
} |
1109 |
} |
1110 |
|
1111 |
} |
1112 |
|
1113 |
|
1114 |
public class SelectedCountItem : INotifyPropertyChanged |
1115 |
{ |
1116 |
public event PropertyChangedEventHandler PropertyChanged; |
1117 |
|
1118 |
private void NotifyPropertyChanged(String info) |
1119 |
{ |
1120 |
if (PropertyChanged != null) |
1121 |
{ |
1122 |
PropertyChanged(this, new PropertyChangedEventArgs(info)); |
1123 |
} |
1124 |
} |
1125 |
|
1126 |
//public string DisplayMember { get; set; } |
1127 |
public string _DisplayMember; |
1128 |
|
1129 |
public string DisplayMember |
1130 |
{ |
1131 |
get => _DisplayMember; |
1132 |
set |
1133 |
{ |
1134 |
_DisplayMember = value; |
1135 |
NotifyPropertyChanged("DisplayMember"); |
1136 |
} |
1137 |
} |
1138 |
//public int ValueMember { get; set; } |
1139 |
public int _ValueMember; |
1140 |
public int ValueMember |
1141 |
{ |
1142 |
get => _ValueMember; |
1143 |
set |
1144 |
{ |
1145 |
_ValueMember = value; |
1146 |
NotifyPropertyChanged("ValueMember"); |
1147 |
} |
1148 |
} |
1149 |
} |
1150 |
|
1151 |
} |
1152 |
|
1153 |
//public class AliveViewModel : Markus.Mvvm.ToolKit.ViewModelBase |
1154 |
//{ |
1155 |
// BackgroundWorker backgroundWorker; |
1156 |
|
1157 |
// private System.Collections.ObjectModel.ObservableCollection<Markus.Service.WcfClient.StationServiceTask.ConvertItem> aliveItems; |
1158 |
// private bool isLoading; |
1159 |
// private System.Windows.Documents.FlowDocument connectionLog; |
1160 |
|
1161 |
// public System.Collections.ObjectModel.ObservableCollection<Markus.Service.WcfClient.StationServiceTask.ConvertItem> AliveItems |
1162 |
// { |
1163 |
// get => aliveItems; set |
1164 |
// { |
1165 |
// aliveItems = value; |
1166 |
// OnPropertyChanged(() => AliveItems); |
1167 |
// } |
1168 |
// } |
1169 |
|
1170 |
// public bool IsLoading |
1171 |
// { |
1172 |
// get => isLoading; set |
1173 |
// { |
1174 |
// if (isLoading != value) |
1175 |
// { |
1176 |
// isLoading = value; |
1177 |
// OnPropertyChanged(() => IsLoading); |
1178 |
// } |
1179 |
// } |
1180 |
// } |
1181 |
|
1182 |
|
1183 |
// public System.Windows.Documents.FlowDocument ConnectionLog |
1184 |
// { |
1185 |
// get => connectionLog; |
1186 |
// set |
1187 |
// { |
1188 |
// if (connectionLog != value) |
1189 |
// { |
1190 |
// connectionLog = value; |
1191 |
// OnPropertyChanged(() => ConnectionLog); |
1192 |
// } |
1193 |
// } |
1194 |
// } |
1195 |
|
1196 |
// public AliveViewModel() |
1197 |
// { |
1198 |
// } |
1199 |
|
1200 |
// // 진행률에 변화가 있을때 이벤트가 발생 |
1201 |
// private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) |
1202 |
// { |
1203 |
// } |
1204 |
|
1205 |
// // 일이 모두 마쳤을때 수행되어야할 코드 |
1206 |
// private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) |
1207 |
// { |
1208 |
// } |
1209 |
|
1210 |
// // BackgroundWorker에서 수행할 일을 정의. |
1211 |
// private async void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) |
1212 |
// { |
1213 |
// while (IsAcitve) |
1214 |
// { |
1215 |
// System.Threading.Thread.Sleep(new TimeSpan(0, 0, 3)); |
1216 |
|
1217 |
// if (!IsLoading) |
1218 |
// { |
1219 |
// IsLoading = true; |
1220 |
|
1221 |
// try |
1222 |
// { |
1223 |
|
1224 |
// List<Markus.Service.WcfClient.StationServiceTask.ConvertItem> newitems = new List<Markus.Service.WcfClient.StationServiceTask.ConvertItem>(); |
1225 |
|
1226 |
// foreach (var client in App.StationClientList) |
1227 |
// { |
1228 |
// if (await SimplePingAsync(client.Endpoint.Address.ToString())) |
1229 |
// { |
1230 |
// try |
1231 |
// { |
1232 |
// Markus.Service.WcfClient.StationServiceTask.ConvertItem[] items = await client.AliveConvertListAsync(); |
1233 |
// newitems.AddRange(items); |
1234 |
// //System.Diagnostics.Trace.WriteLine($"{client.Endpoint.Address} ping"); |
1235 |
|
1236 |
// if (items.Count() == 0) |
1237 |
// { |
1238 |
// //System.Diagnostics.Trace.WriteLine($"{client.Endpoint.Address} Alive Items is zero."); |
1239 |
// } |
1240 |
// } |
1241 |
// catch (Exception ex) |
1242 |
// { |
1243 |
// //System.Diagnostics.Trace.Fail($"{client.Endpoint.Address} {ex.Message}"); |
1244 |
// } |
1245 |
// } |
1246 |
// else |
1247 |
// { |
1248 |
// //System.Diagnostics.Trace.Fail($"{client.Endpoint.Address} ping Error"); |
1249 |
// } |
1250 |
// } |
1251 |
|
1252 |
// await System.Windows.Application.Current.Dispatcher.InvokeAsync(() => ItemsUpdate(newitems)); |
1253 |
// } |
1254 |
// catch (Exception ex) |
1255 |
// { |
1256 |
// System.Diagnostics.Debug.WriteLine(ex.ToString()); |
1257 |
// } |
1258 |
|
1259 |
// IsLoading = false; |
1260 |
// } |
1261 |
|
1262 |
// } |
1263 |
// } |
1264 |
|
1265 |
|
1266 |
|
1267 |
// private void ItemsUpdate(List<Markus.Service.WcfClient.StationServiceTask.ConvertItem> newitems) |
1268 |
// { |
1269 |
|
1270 |
// foreach (var item in newitems) |
1271 |
// { |
1272 |
// item.OriginfilePath = HttpUtility.UrlDecode(item.OriginfilePath); |
1273 |
// } |
1274 |
|
1275 |
// if (AliveItems == null) |
1276 |
// { |
1277 |
// AliveItems = new System.Collections.ObjectModel.ObservableCollection<Markus.Service.WcfClient.StationServiceTask.ConvertItem>(); |
1278 |
|
1279 |
// foreach (var item in newitems) |
1280 |
// { |
1281 |
// AliveItems.Add(item); |
1282 |
// } |
1283 |
// } |
1284 |
// else |
1285 |
// { |
1286 |
// /// 데이터 업데이트 |
1287 |
// newitems.ForEach(newitem => |
1288 |
// { |
1289 |
// AliveItems.UpdateWhere(changeitem => ConvertItemEx.ChangeValues(changeitem, newitem), x => x.ProjectNumber == newitem.ProjectNumber && x.ConvertID == newitem.ConvertID); |
1290 |
// }); |
1291 |
|
1292 |
// // 추가 |
1293 |
// foreach (var item in newitems) |
1294 |
// { |
1295 |
// if (AliveItems.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0) |
1296 |
// { |
1297 |
// AliveItems.Add(item); |
1298 |
// } |
1299 |
// } |
1300 |
|
1301 |
// /// 삭제 |
1302 |
|
1303 |
// for (int i = AliveItems.Count() - 1; i > -1; --i) |
1304 |
// { |
1305 |
// var item = AliveItems[i]; |
1306 |
|
1307 |
// if (newitems.Count(x => x.ConvertID == item.ConvertID && x.ProjectNumber == item.ProjectNumber) == 0) |
1308 |
// { |
1309 |
// try |
1310 |
// { |
1311 |
// AliveItems.RemoveAt(i); |
1312 |
// } |
1313 |
// catch (Exception ex) |
1314 |
// { |
1315 |
// System.Diagnostics.Debug.WriteLine(ex.ToString()); |
1316 |
// } |
1317 |
// } |
1318 |
// } |
1319 |
// } |
1320 |
// } |
1321 |
|
1322 |
// private void LogWrite(string log, bool IsError) |
1323 |
// { |
1324 |
// if (IsError) |
1325 |
// { |
1326 |
// //System.Diagnostics.Trace.Fail(log); |
1327 |
// } |
1328 |
// else |
1329 |
// { |
1330 |
// //System.Diagnostics.Trace.TraceInformation(log); |
1331 |
// } |
1332 |
// } |
1333 |
|
1334 |
|
1335 |
// public static async Task<bool> SimplePingAsync(string uri) |
1336 |
// { |
1337 |
// bool result = false; |
1338 |
|
1339 |
// try |
1340 |
// { |
1341 |
// using (System.Net.Http.HttpClient Client = new System.Net.Http.HttpClient()) |
1342 |
// { |
1343 |
// Client.Timeout = new TimeSpan(0, 0, 60); |
1344 |
|
1345 |
// var message = await Client.GetAsync(uri); |
1346 |
|
1347 |
// System.Net.HttpStatusCode StatusCode = message.StatusCode; |
1348 |
|
1349 |
// switch (StatusCode) |
1350 |
// { |
1351 |
|
1352 |
// case System.Net.HttpStatusCode.Accepted: |
1353 |
// case System.Net.HttpStatusCode.OK: |
1354 |
// result = true; |
1355 |
// break; |
1356 |
// } |
1357 |
// } |
1358 |
// } |
1359 |
// catch (Exception ex) |
1360 |
// { |
1361 |
// result = false; |
1362 |
// System.Diagnostics.Debug.WriteLine(ex.ToString()); |
1363 |
// } |
1364 |
|
1365 |
// return result; |
1366 |
// } |
1367 |
|
1368 |
// public override void Loaded() |
1369 |
// { |
1370 |
// base.Loaded(); |
1371 |
|
1372 |
// if (!App.IsDesignMode) |
1373 |
// { |
1374 |
// backgroundWorker = new BackgroundWorker(); |
1375 |
// backgroundWorker.DoWork += backgroundWorker_DoWork; |
1376 |
// backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted; |
1377 |
// backgroundWorker.WorkerReportsProgress = false; |
1378 |
// backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); |
1379 |
|
1380 |
// backgroundWorker.RunWorkerAsync(); |
1381 |
// } |
1382 |
// } |
1383 |
|
1384 |
// public override void Closed() |
1385 |
// { |
1386 |
// if (backgroundWorker != null) |
1387 |
// { |
1388 |
// backgroundWorker.DoWork -= backgroundWorker_DoWork; |
1389 |
// backgroundWorker.RunWorkerCompleted -= backgroundWorker_RunWorkerCompleted; |
1390 |
// backgroundWorker.WorkerReportsProgress = false; |
1391 |
// backgroundWorker.ProgressChanged -= new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); |
1392 |
|
1393 |
// backgroundWorker.Dispose(); |
1394 |
// } |
1395 |
|
1396 |
// base.Closed(); |
1397 |
// } |
1398 |
//} |