프로젝트

일반

사용자정보

개정판 9a56c18a

ID9a56c18a956c2dfd3d3721db84c66a6881c89295
상위 7ee13e43
하위 ea78f5e7

백흠경이(가) 10달 전에 추가함

Fix: RemFinalPDFStation에서 MarkupToPDF 관련 코드 삭제(DL 버전)

Change-Id: I5d914d361bfedd45237100eaa9ee624bfd1851d3

차이점 보기:

FinalService/KCOM_FinalService_DL/KCOM_FinalService/KCOM_FinalService.csproj
111 111
      <Project>{784438be-2074-41ae-a692-24e1a4a67fe3}</Project>
112 112
      <Name>IFinalPDF</Name>
113 113
    </ProjectReference>
114
    <ProjectReference Include="..\MarkupToPDF\MarkupToPDF.csproj">
115
      <Project>{a714bd67-8aac-4ed8-8ecf-7853c3549a68}</Project>
116
      <Name>MarkupToPDF</Name>
117
    </ProjectReference>
118 114
  </ItemGroup>
119 115
  <ItemGroup>
120 116
    <None Include="app.config" />
FinalService/KCOM_FinalService_DL/KCOM_FinalService/Remoting/RemFinalPDFStation.cs
2 2
using KCOM_FinalService.Common;
3 3
using KCOMDataModel.Common;
4 4
using KCOMDataModel.DataModel;
5
using MarkupToPDF;
6 5
using System;
7 6
using System.Collections.Concurrent;
8 7
using System.Collections.Generic;
......
32 31
        string _MyIP = null;
33 32
        int _TypeName = 1;
34 33
        readonly Properties.Settings _SettingPlace = null;
35

  
36
        ConcurrentQueue<FINAL_PDF> WaitingQueue = new ConcurrentQueue<FINAL_PDF>();
37
        List<FINAL_PDF> WorkingList = new List<FINAL_PDF>();
38 34
        #endregion
39 35

  
40 36
        public RemFinalPDFStation(Logger eventLog,int MultipleFinalCount)
......
83 79
        {
84 80
            try
85 81
            {
86
                using (KCOMDataModel.DataModel.KCOMEntities _systemEntity = new KCOMDataModel.DataModel.KCOMEntities(KCOMDataModel.Common.ConnectStringBuilder.KCOMConnectionString().ToString()))
87
                {
88
#if DEBUG
89
                    _TypeName = 1; //FINAL은 현재 타입이 1임
90
#else
91
                    _TypeName = 1;
92
                    ///TODO: check below code
93
                    ///_TypeName = _systemEntity.SERVICE_PROPERTIES.Where(data => data.SERVICE_ADDRESS == _MyIP).FirstOrDefault().SERVICET_TYPE;
94
#endif
95
                }
96

  
97 82
                string endpoint = "remFinalPDF";
98 83

  
99 84
                string port = CommonLib.Common.GetConfigString("Remoting", "Port", "");
......
130 115

  
131 116
        private string RemoteAddress = null;
132 117
        
133
        private void TryTestFinal()
134
        {
135
            using (KCOMDataModel.DataModel.KCOMEntities _systemEntity = new KCOMDataModel.DataModel.KCOMEntities(KCOMDataModel.Common.ConnectStringBuilder.KCOMConnectionString().ToString()))
136
            {
137
                var items = _systemEntity.FINAL_PDF.Where(x => x.STATUS == 77);
138

  
139
                foreach (var item in items)
140
                {
141
                    Notify(item.PROJECT_NO, item.ID);
142
                }
143
            }
144
        }
145

  
146

  
147
        /// <summary>
148
        /// DATABASE에서 상태를 변경한다.
149
        /// </summary>
150
        /// <param name="finalID"></param>
151
        /// <param name="status"></param>
152
        /// <param name="log"></param>
153
        private void SetFinalState(string finalID, FinalStatus status,string log = null)
154
        {
155
            using (KCOMDataModel.DataModel.KCOMEntities _entity = new KCOMDataModel.DataModel.KCOMEntities(KCOMDataModel.Common.ConnectStringBuilder.KCOMConnectionString().ToString()))
156
            {
157
                var finalList = _entity.FINAL_PDF.Where(final => final.ID == finalID);
158

  
159
                if (finalList.Count() > 0)
160
                {
161
                    if (status == FinalStatus.Create)
162
                    {
163
                        var sb = new System.Text.StringBuilder();
164
                        sb.AppendLine("V3");
165
                        sb.AppendLine(finalList.First().EXCEPTION);
166

  
167
                        finalList.First().EXCEPTION = sb.ToString();
168
                        finalList.First().START_DATETIME = DateTime.Now;
169
                    }
170
                    if (status == FinalStatus.Success)
171
                    {
172
                        finalList.First().END_DATETIME = DateTime.Now;
173
                    }
174
                    if(status == FinalStatus.PdfStamp && !string.IsNullOrWhiteSpace(log))
175
                    {
176
                        var sb = new System.Text.StringBuilder();
177
                        sb.AppendLine(log);
178
                        sb.AppendLine(finalList.First().EXCEPTION);
179

  
180
                        finalList.First().EXCEPTION = log;
181
                    }
182

  
183
                    finalList.First().STATUS = (int)status;
184
                    _entity.SaveChanges();
185
                }
186
            }
187
        }
188

  
189 118
        public void Dispose()
190 119
        {
191 120
            if (_Channel != null)
......
195 124
        }
196 125

  
197 126
        /// <summary>
198
        /// 큐에 finalpdf를 넣고 작업 실행한다
199
        /// </summary>
200
        /// <param name="pdf"></param>
201
        private void MakeMergedPDF(object _pdf)
202
        {
203
            ///TODO: 프로세스를 생성하여 실행하는 방향 고려
204
            /// 동시 수행 작업 갯수가 정해진 값보다 작을 경우 쓰레드를 생성하여 작업을 수행한다
205
            if (WorkingList.Count < Properties.Settings.Default.MultipleFinalCount && _pdf is FINAL_PDF pdf)
206
            {
207
                /// 작업중인 동일한 merged pdf가 없을 경우 작업 수행
208
                IEnumerable<FINAL_PDF> matched = WorkingList.Where(item => item.DOCUMENT_ID == (pdf).DOCUMENT_ID);
209
                if (matched.Count() == 0)
210
                {
211
                    lock(WorkingList)
212
                    {
213
                        WorkingList.Add(pdf);
214
                        Thread.Sleep(1000);
215
                    };
216

  
217
                    Thread thread = new Thread(new ParameterizedThreadStart(FinalPDFDequeueandProcessing));
218
                    thread.SetApartmentState(ApartmentState.STA);
219
                    thread.Start(pdf);
220
                }
221
                else
222
                {
223
                    WaitingQueue.Enqueue(pdf);
224
                }
225
            }
226
            else
227
            {
228
                WaitingQueue.Enqueue(_pdf as FINAL_PDF);
229
            }
230
        }
231

  
232
        /// <summary>
233
        /// 실제 Merged PDF를 생성한다
234
        /// </summary>
235
        private void FinalPDFDequeueandProcessing(object pdf)
236
        {
237
            Task tDeq = Task.Factory.StartNew(() =>
238
            {
239
                try
240
                {
241
                    if (pdf != null)
242
                    {
243
                        var finalpdf = (FINAL_PDF)pdf;
244

  
245
                        _Logger.Write($"ID:{finalpdf.ID} / ProjectNo:{finalpdf.PROJECT_NO} / DocumentId:{finalpdf.DOCUMENT_ID} / MarkupInfoId:{finalpdf.MARKUPINFO_ID} / CreateUser:{finalpdf.CREATE_USER_ID}", LogLevel.Info);
246
                    }
247

  
248
                    if (((FINAL_PDF)pdf).STATUS == (int)FinalStatus.Insert)
249
                    {
250
                        /// 작업중이라고 데이타베이스에 저장한다
251
                        ((FINAL_PDF)pdf).STATUS = (int)(FinalStatus.Wait);
252
                        using (KCOMDataModel.DataModel.KCOMEntities _entity = new KCOMDataModel.DataModel.KCOMEntities(KCOMDataModel.Common.ConnectStringBuilder.KCOMConnectionString().ToString()))
253
                        {
254
                            var selectItem = _entity.FINAL_PDF.Where(data => data.ID == ((FINAL_PDF)pdf).ID).FirstOrDefault();
255
                            selectItem.STATUS = (int)(FinalStatus.Wait);
256
                            _entity.SaveChanges();
257
                        }
258
                    }
259

  
260
                    /// 작업 수행
261
                    MarkupToPDF.MarkupToPDF _markuptoPDF = new MarkupToPDF.MarkupToPDF();
262
                    _markuptoPDF.FinalMakeError += new EventHandler<MarkupToPDF.MakeFinalErrorArgs>(_markuptoPDF_FinalMakeError);
263
                    _markuptoPDF.StatusChanged += new EventHandler<MarkupToPDF.StatusChangedEventArgs>(_markuptoPDF_StatusChange);
264
                    _markuptoPDF.EndFinal += new EventHandler<MarkupToPDF.EndFinalEventArgs>(_markuptoPDF_EndFinal);
265
                    Thread _stathread = new Thread(new ParameterizedThreadStart(_markuptoPDF.MakeFinalPDF))
266
                    {
267
                        Name = ((FINAL_PDF)pdf).ID.ToString()
268
                    };
269
                    SetFinalState(((FINAL_PDF)pdf).ID, IFinalPDF.FinalStatus.Create);
270
                    _stathread.SetApartmentState(ApartmentState.STA);
271
                    _stathread.Start(pdf);
272
                }
273
                catch (Exception ex)
274
                {
275
                    _Logger.Write(ex);
276
                }
277
            });
278
        }
279

  
280
        /// <summary>
281 127
        /// callback for WebService
282 128
        /// </summary>
283 129
        /// <param name="ProjectNo"></param>
......
298 144
            return new FinalPDFResult();
299 145
        }
300 146

  
301
        private void _markuptoPDF_StatusChange(object sender, StatusChangedEventArgs e)
302
        {
303
            var _T = WorkingList.Where(t => t == (sender as MarkupToPDF.MarkupToPDF).FinalItem);
304
            if (_T.Any())
305
            {
306
                FINAL_PDF _item = _T.First();
307

  
308
                string msg = null;
309

  
310
                if(e.Message.Length > 10000)
311
                {
312
                    msg = e.Message.Substring(0, 10000);
313
                }
314
                else
315
                {
316
                    msg = e.Message;
317
                }
318

  
319
                SetFinalState(_item.ID, FinalStatus.PdfStamp, msg);
320
                _Logger.Write($"PdfStamp Final ID : {_item.ID} message : {msg} ",LogLevel.Info);
321
            }
322
        }
323

  
324
        /// <summary>
325
        /// final pdf 종료, Queue에 merged pdf할 내용이 남아 있으면 merged pdf를 수행한다.
326
        /// </summary>
327
        /// <param name="sender"></param>
328
        /// <param name="e"></param>
329
        void _markuptoPDF_EndFinal(object sender, MarkupToPDF.EndFinalEventArgs e)
330
        {
331
            _Logger.Write($"End Final FinalID:{e.FinalPDF.ID} / Output:{e.FinalPDFPath} / Message :{e.Message}", LogLevel.Info);
332

  
333
            var _T = WorkingList.Where(t => t == (sender as MarkupToPDF.MarkupToPDF).FinalItem);
334
            if (_T.Any())
335
            {
336
                FINAL_PDF _item = _T.First();
337
                SetFinalState(_item.ID, FinalStatus.PdfStamp);
338

  
339
                try
340
                {
341
                    string soapurl = CommonLib.Common.GetConfigString("UpLoadServiceUrl", "URL", "");
342

  
343
                    string finalpdfroot = CommonLib.Common.GetConfigString("FinalPDFRootUrl", "URL", "");
344

  
345
                    string pdfpath = e.FinalPDFRemotePath;
346

  
347
                    if (!string.IsNullOrEmpty(finalpdfroot))
348
                    {
349
                        string filename = Path.GetFileName(e.FinalPDFPath);
350
                        pdfpath = !string.IsNullOrEmpty(finalpdfroot) ? finalpdfroot + filename : filename;
351
                    }
352

  
353
                    /*if (!string.IsNullOrEmpty(soapurl) && (Program.UploadFinalPDFInst != null) && (Program.UploadFinalPDFMethod != null))
354
                    {
355
                        object[] parameters = new object[] { pdfpath, e.OriginPDFName, e.FinalPDF, soapurl };
356

  
357
                        _Logger.Write("UploadPDF.dll Path :" + Program.UploadFinalAssmPath,LogLevel.Info);
358

  
359
                        _Logger.Write("Call Upload Final .." + pdfpath + " finalPDFPath : " + e.FinalPDFPath + " FinalPDFRemotePath : " + e.FinalPDFRemotePath + ",CreateUser:" + e.FinalPDF.CREATE_USER_ID + ",CreateUser:" + e.FinalPDF.DOCUMENT_ID + ",pdfname:" + e.OriginPDFName + ",finalPDF ID : " + e.FinalPDF.ID + ",soapUri:" + soapurl,LogLevel.Info);
360
                        
361
                     KeyValuePair<bool, string> result = (KeyValuePair<bool, string>)(Program.UploadFinalPDFMethod.Invoke(Program.UploadFinalPDFInst, parameters));
362

  
363
                        if (result.Key)
364
                        {
365
                            SetFinalState(_item.ID, FinalStatus.Success);
366
                        }
367
                        else
368
                        {
369
                            SetFinalState(_item.ID, FinalStatus.Error);
370
                            _Logger.Write("Upload error  .." + pdfpath  + ",pdfname:" + e.OriginPDFName + " Msg : " + result.Value, LogLevel.Error);
371
                        }
372
                    }
373
                    else*/
374
                    {
375
                        ///TODO: 저장할 폴더 위치를 configuration으로 빼주세요
376

  
377
                        string savepath = CommonLib.Common.GetConfigString("DebugSavePath", "URL", "");
378

  
379
                        string sFolder = _item.DOCUMENT_ID.All(char.IsDigit) ? (Convert.ToInt64(_item.DOCUMENT_ID) / 100).ToString() : _item.DOCUMENT_ID.Substring(0, 5);
380
                        string saveFolder = String.Format(savepath, _item.PROJECT_NO, sFolder, _item.DOCUMENT_ID);
381
                        if (!System.IO.Directory.Exists(saveFolder))
382
                        {
383
                            System.IO.Directory.CreateDirectory(saveFolder);
384
                        }
385

  
386
                        _Logger.Write(String.Format("saveFolder : {0}", saveFolder), LogLevel.Info);
387

  
388
                        try
389
                        {
390
                            System.IO.File.Copy(e.FinalPDFPath, saveFolder + e.OriginPDFName, true);
391

  
392
                            _Logger.Write($"End Final SaveFile :{saveFolder + e.OriginPDFName}", LogLevel.Info);
393
                        }
394
                        catch (Exception ex)
395
                        {
396
                            _Logger.Write(ex);
397
                        }
398

  
399
                        using (CIEntities _entity = new CIEntities(ConnectStringBuilder.ProjectCIConnectString(_item.PROJECT_NO).ToString()))
400
                        {
401
                            var item = _entity.DOCUMENT_ITEM.Where(d => d.DOCUMENT_ID == _item.DOCUMENT_ID).FirstOrDefault();
402
                            ///TODO: RESULT FILE 경로 위치를 configuration으로 빼주세요
403
                            string resultpath = CommonLib.Common.GetConfigString("DebugResultUrlPath", "URL", "");
404

  
405
                            try
406
                            {
407
                                item.RESULT_FILE = String.Format(resultpath, _item.PROJECT_NO, sFolder, _item.DOCUMENT_ID, e.OriginPDFName);
408
                            }
409
                            catch (Exception ex)
410
                            {
411
                                _Logger.Write(new Exception($"DebugResultUrlPath의 Index를 확인 하세요.{resultpath}",ex));
412
                            }
413

  
414
                            _Logger.Write($"End FinalId:{item.ID} RESULT_FILE_PATH:{item.RESULT_FILE}",LogLevel.Info);
415
                            _entity.SaveChanges();
416
                            SetFinalState(_item.ID, FinalStatus.Success);
417
                        }
418

  
419
#if DEBUG
420
                        //this.WaitingQueue.Enqueue(_item);
421
#endif
422
                    }
423

  
424
                    (sender as MarkupToPDF.MarkupToPDF).FinalMakeError -= new EventHandler<MarkupToPDF.MakeFinalErrorArgs>(_markuptoPDF_FinalMakeError);
425
                    (sender as MarkupToPDF.MarkupToPDF).StatusChanged -= new EventHandler<MarkupToPDF.StatusChangedEventArgs>(_markuptoPDF_StatusChange);
426
                    (sender as MarkupToPDF.MarkupToPDF).EndFinal -= new EventHandler<MarkupToPDF.EndFinalEventArgs>(_markuptoPDF_EndFinal);
427
                    (sender as MarkupToPDF.MarkupToPDF).Dispose();
428
                }
429
                catch (Exception ex)
430
                {
431
                    SetFinalState(_item.ID, FinalStatus.Error);
432
                    _Logger.Write(ex);
433
                }
434
                finally
435
                {
436
                    WorkingList.Remove(_T.First());
437
                }
438

  
439
                /// 대기중인 merged pdf가 있을 경우 merged pdf를 생성한다
440
                if (this.WaitingQueue.Count > 0)
441
                {
442
                    FINAL_PDF pdf;
443
                    if(this.WaitingQueue.TryDequeue(out pdf))
444
                    {
445
                        ThreadPool.QueueUserWorkItem(this.MakeMergedPDF, pdf);
446
                    }
447
                }
448
            }
449
        }
450

  
451
        public static void sendReqLog(string name, string text)
452
        {
453
#if DEBUG
454
            try
455
            {
456
                string Msg = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "\t" + name + "\t" + text + "\r\n";
457
                string Dir = Path.Combine(@"D:\finalpdf\error");
458

  
459
                if (!Directory.Exists(Dir))
460
                {
461
                    Directory.CreateDirectory(Dir);
462
                }
463

  
464
                int min = DateTime.Now.Minute / 1;
465

  
466
                string path = Dir + "/" + "Log_" + DateTime.Now.ToString("yyyy-MM-dd HH-") + min + ".txt";
467
                File.AppendAllText(path, Msg);
468
            }
469
            catch (Exception e)
470
            {
471
                //  Debug.WriteLine(e);
472
            }
473
#endif
474
        }
475

  
476

  
477
        private void SetError(string FinalID, string Msg)
478
        {
479
            FINAL_PDF instanceFinal = null;
480

  
481
            try
482
            {
483
                using (KCOMDataModel.DataModel.KCOMEntities _entity = new KCOMDataModel.DataModel.KCOMEntities(KCOMDataModel.Common.ConnectStringBuilder.KCOMConnectionString().ToString()))
484
                {
485
                    instanceFinal = _entity.FINAL_PDF.Where(data => data.ID == FinalID).FirstOrDefault();
486

  
487
                    if (instanceFinal != null)
488
                    {
489
                        instanceFinal.STATUS = (int)FinalStatus.Error;
490
                        instanceFinal.EXCEPTION = DateTime.Now.ToShortDateString() + " " + Msg;
491
                        _entity.SaveChanges();
492
                    }
493
                }
494
            }
495
            catch (Exception ex)
496
            {
497
                _Logger.Write(ex);
498
            }
499
        }
500

  
501
        void _markuptoPDF_FinalMakeError(object sender, MarkupToPDF.MakeFinalErrorArgs e)
502
        {
503
            _Logger.Write($"FinalID:{e.FinalID} / Message :{e.Message}",LogLevel.Info);
504

  
505
            SetError(e.FinalID, e.Message);
506

  
507
            var _T = WorkingList.Where(t => t == (sender as MarkupToPDF.MarkupToPDF).FinalItem);
508
            if (_T.Any())
509
            {
510
                FINAL_PDF _Item = _T.First();
511
                (sender as MarkupToPDF.MarkupToPDF).FinalMakeError -= new EventHandler<MarkupToPDF.MakeFinalErrorArgs>(_markuptoPDF_FinalMakeError);
512
                (sender as MarkupToPDF.MarkupToPDF).StatusChanged -= new EventHandler<MarkupToPDF.StatusChangedEventArgs>(_markuptoPDF_StatusChange);
513
                (sender as MarkupToPDF.MarkupToPDF).EndFinal -= new EventHandler<MarkupToPDF.EndFinalEventArgs>(_markuptoPDF_EndFinal);
514
                (sender as MarkupToPDF.MarkupToPDF).Dispose();
515
                WorkingList.Remove(_Item);
516
            }
517

  
518
            /// 대기중인 merged pdf가 있을 경우 merged pdf를 생성한다
519
            if (this.WaitingQueue.Count > 0)
520
            {
521
                FINAL_PDF pdf;
522
                if (this.WaitingQueue.TryDequeue(out pdf))
523
                {
524
                    ThreadPool.QueueUserWorkItem(this.MakeMergedPDF, pdf);
525
                }
526
            }
527
        }
528

  
529 147
        public void Finish(string ProjectNo, string FinalID,string OriginFileName,string FinalPDFPath, string remodeFilePath)
530 148
        {
531
            _Logger.Write($"End Final FinalID:{FinalID} / Output:{FinalPDFPath}", LogLevel.Info);
532

  
533
            var _T = WorkingList.Where(t => t.ID == FinalID);
534

  
535
            if (_T.Any())
536
            {
537
                FINAL_PDF _item = _T.First();
538
                SetFinalState(_item.ID, FinalStatus.PdfStamp);
539

  
540
                try
541
                {
542
                    string soapurl = CommonLib.Common.GetConfigString("UpLoadServiceUrl", "URL", "");
543

  
544
                    string finalpdfroot = CommonLib.Common.GetConfigString("FinalPDFRootUrl", "URL", "");
545

  
546
                    string pdfpath = remodeFilePath;
547

  
548
                    if (!string.IsNullOrEmpty(finalpdfroot))
549
                    {
550
                        string filename = Path.GetFileName(FinalPDFPath);
551
                        pdfpath = !string.IsNullOrEmpty(finalpdfroot) ? finalpdfroot + filename : filename;
552
                    }
553

  
554
                    /*if (!string.IsNullOrEmpty(soapurl) && (Program.UploadFinalPDFInst != null) && (Program.UploadFinalPDFMethod != null))
555
                    {
556
                        object[] parameters = new object[] { FinalPDFPath, OriginFileName, _item, soapurl };
557

  
558
                        _Logger.Write("UploadPDF.dll Path :" + Program.UploadFinalAssmPath, LogLevel.Info);
559

  
560
                        _Logger.Write("Call Upload Final .." + pdfpath + " finalPDFPath : " + FinalPDFPath + " FinalPDFRemotePath : " + remodeFilePath + ",CreateUser:" + _item.CREATE_USER_ID + ",CreateUser:" + _item.DOCUMENT_ID + ",pdfname:" + OriginFileName + ",finalPDF ID : " + _item.ID + ",soapUri:" + soapurl, LogLevel.Info);
561

  
562
                        KeyValuePair<bool, string> result = (KeyValuePair<bool, string>)(Program.UploadFinalPDFMethod.Invoke(Program.UploadFinalPDFInst, parameters));
563

  
564
                        if (result.Key)
565
                        {
566
                            SetFinalState(_item.ID, FinalStatus.Success);
567
                        }
568
                        else
569
                        {
570
                            SetFinalState(_item.ID, FinalStatus.Error);
571
                            _Logger.Write("Upload error  .." + pdfpath + ",pdfname:" + FinalPDFPath + " Msg : " + result.Value, LogLevel.Error);
572
                        }
573
                    }
574
                    else*/
575
                    {
576
                        ///TODO: 저장할 폴더 위치를 configuration으로 빼주세요
577

  
578
                        string savepath = CommonLib.Common.GetConfigString("DebugSavePath", "URL", "");
579

  
580
                        string sFolder = _item.DOCUMENT_ID.All(char.IsDigit) ? (Convert.ToInt32(_item.DOCUMENT_ID) / 100).ToString() : _item.DOCUMENT_ID.Substring(0, 5);
581
                        string saveFolder = String.Format(savepath, _item.PROJECT_NO, sFolder, _item.DOCUMENT_ID);
582
                        if (!System.IO.Directory.Exists(saveFolder))
583
                        {
584
                            System.IO.Directory.CreateDirectory(saveFolder);
585
                        }
586

  
587
                        _Logger.Write(String.Format("saveFolder : {0}", saveFolder), LogLevel.Info);
588

  
589
                        try
590
                        {
591
                            System.IO.File.Copy(pdfpath, saveFolder + OriginFileName, true);
592

  
593
                            _Logger.Write($"End Final SaveFile :{saveFolder + OriginFileName}", LogLevel.Info);
594
                        }
595
                        catch (Exception ex)
596
                        {
597
                            _Logger.Write(ex);
598
                        }
599

  
600
                        using (CIEntities _entity = new CIEntities(ConnectStringBuilder.ProjectCIConnectString(_item.PROJECT_NO).ToString()))
601
                        {
602
                            var item = _entity.DOCUMENT_ITEM.Where(d => d.DOCUMENT_ID == _item.DOCUMENT_ID).FirstOrDefault();
603
                            ///TODO: RESULT FILE 경로 위치를 configuration으로 빼주세요
604
                            string resultpath = CommonLib.Common.GetConfigString("DebugResultUrlPath", "URL", "");
605

  
606
                            try
607
                            {
608
                                item.RESULT_FILE = String.Format(resultpath, _item.PROJECT_NO, sFolder, _item.DOCUMENT_ID, OriginFileName);
609
                            }
610
                            catch (Exception ex)
611
                            {
612
                                _Logger.Write(new Exception($"DebugResultUrlPath의 Index를 확인 하세요.{resultpath}", ex));
613
                            }
614

  
615
                            _Logger.Write($"End FinalId:{item.ID} RESULT_FILE_PATH:{item.RESULT_FILE}", LogLevel.Info);
616
                            _entity.SaveChanges();
617
                            SetFinalState(_item.ID, FinalStatus.Success);
618
                        }
619
                    }
620
                }
621
                catch (Exception ex)
622
                {
623
                    SetFinalState(_item.ID, FinalStatus.Error);
624
                    _Logger.Write(ex);
625
                }
626
                finally
627
                {
628
                    WorkingList.Remove(_T.First());
629

  
630
                }
631

  
632
                /// 대기중인 merged pdf가 있을 경우 merged pdf를 생성한다
633
                if (this.WaitingQueue.Count > 0)
634
                {
635
                    FINAL_PDF pdf;
636
                    if (this.WaitingQueue.TryDequeue(out pdf))
637
                    {
638
                        ThreadPool.QueueUserWorkItem(this.MakeMergedPDF, pdf);
639
                    }
640
                }
641
            }
642 149
        }
643 150

  
644 151
        public void Error(string ProjectNo, string FinalID, string Error)
645 152
        {
646
            _Logger.Write($"FinalID:{FinalID} / Message :{Error}", LogLevel.Info);
647

  
648
            using (KCOMDataModel.DataModel.KCOMEntities _entity = new KCOMDataModel.DataModel.KCOMEntities(KCOMDataModel.Common.ConnectStringBuilder.KCOMConnectionString().ToString()))
649
            {
650
                var items = _entity.FINAL_PDF.Where(x => x.ID == FinalID);
651

  
652
                if (items.Count() > 0)
653
                {
654
                   var  finalPdf = items.First();
655

  
656
                    SetError(FinalID, Error);
657

  
658
                    var _T = WorkingList.Where(t => t.ID == finalPdf.ID);
659

  
660
                    if (_T.Any())
661
                    {
662
                        FINAL_PDF _Item = _T.First();
663
                        WorkingList.Remove(_Item);
664
                    }
665

  
666
                    /// 대기중인 merged pdf가 있을 경우 merged pdf를 생성한다
667
                    if (this.WaitingQueue.Count > 0)
668
                    {
669
                        FINAL_PDF pdf;
670
                        if (this.WaitingQueue.TryDequeue(out pdf))
671
                        {
672
                            ThreadPool.QueueUserWorkItem(this.MakeMergedPDF, pdf);
673
                        }
674
                    }
675
                }
676
            }
677 153
        }
678 154
    }
679 155
}

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)