프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / KCOM_API_AutoStamping / AutoStamping.svc.cs @ 6d6f32bb

이력 | 보기 | 이력해설 | 다운로드 (32.4 KB)

1
using IFinalPDF;
2
using KCOMDataModel.Common;
3
using KCOMDataModel.DataModel;
4
using log4net;
5
using log4net.Config;
6
using MarkupToPDF.Controls.Etc;
7
using MarkupToPDF.Controls.Shape;
8
using MarkupToPDF.Controls.Text;
9
using System;
10
using System.Collections.Generic;
11
using System.Configuration;
12
using System.Linq;
13
using System.Runtime.Remoting.Channels.Tcp;
14
using System.Runtime.Serialization;
15
using System.ServiceModel;
16
using System.ServiceModel.Activation;
17
using System.ServiceModel.Web;
18
using System.Text;
19
using System.Threading;
20
using System.Windows;
21
using System.Windows.Controls;
22
using System.Windows.Threading;
23

    
24
namespace KCOM_API
25
{
26
    [ServiceContract(Namespace = "")]
27
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
28
    //[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerCall)]
29
    public class Common :  System.Web.Services.WebService
30
    {
31
        private static log4net.ILog logger;
32

    
33
        public Common()
34
        {
35
            XmlConfigurator.Configure();
36
            //Get logger
37
            logger = LogManager.GetLogger(typeof(Common));
38
            //Start logging
39
            logger.Info("KCOM_API Common Call");
40
        }
41

    
42

    
43
        [OperationContract]
44
        public string AutoStamping(string project_no, string slip_no, string user_id)
45
        {
46
            string result = string.Empty;
47
            try
48
            {
49
                var waiter = new ManualResetEvent(false);
50

    
51
                var staThread = new Thread(() =>
52
                {
53
                    result = StampSave(project_no, slip_no, user_id);
54

    
55
                    waiter.Set();
56
                });
57

    
58
                staThread.SetApartmentState(ApartmentState.STA);
59
                staThread.Start();
60

    
61
                var timeout = new TimeSpan(0,1,0);
62
                waiter.WaitOne(timeout);
63
            }
64
            catch (Exception exception)
65
            {
66
                logger.Error(exception);
67

    
68
                result = exception.ToString();
69
            }
70
            return result;
71
        }
72

    
73
        [OperationContract]
74
        public ProjectInfo[] GetProjectList()
75
        {
76
            ProjectInfo[] result = null;
77

    
78
            try
79
            {
80
                using (KCOMEntities _entity = new KCOMEntities(ConnectStringBuilder.KCOMConnectionString().ToString()))
81
                {
82
                    result = _entity.RUN_PROJECTS.Where(p=>p.PROJECT_NO != "000000").ToList().Select(x => new ProjectInfo { No = x.PROJECT_NO, Name = $"{x.PROJECT_NO} - {x.PROJECT_NAME}"}).ToArray();
83
                }
84

    
85
            }
86
            catch (Exception)
87
            {
88
            }
89

    
90
            return result;
91
        }
92

    
93
        /// <summary>
94
        /// 심볼로 변경
95
        /// </summary>
96
        /// <param name="project_no"></param>
97
        /// <param name="slip_no"></param>
98
        /// <param name="user_id"></param>
99
        private string StampSave(string project_no, string slip_no, string user_id)
100
        {
101
            string result = string.Empty;
102
            try
103
            {
104
                logger.Info($"Stamp  ProjecNO : {project_no}  SlipNO : {slip_no}  UserID : {user_id}");
105

    
106
                string _stampData = null;
107

    
108
                using (KCOMEntities _entity = new KCOMEntities(ConnectStringBuilder.KCOMConnectionString().ToString()))
109
                {
110
                    var stamp = _entity.PROPERTIES.Where(x=> x.TYPE == "STAMP");
111
                    
112
                    if(stamp.Count() > 0)
113
                    {
114
                        _stampData = stamp.First().VALUE;
115
                    }
116
                    else
117
                    {
118
                        result = "STAMP IS NULL.";
119
                    }
120
                };
121

    
122
                if (_stampData != null)
123
                {
124
                    using (CIEntities cIEntity = new CIEntities(ConnectStringBuilder.ProjectCIConnectString(project_no).ToString()))
125
                    {
126
                        logger.Info($"Connection CI DataBase :{cIEntity.Connection.Database} DataSource :{cIEntity.Connection.DataSource}");
127

    
128
                        var list = (from doc in cIEntity.DOCUMENT_ITEM
129
                                    where doc.GROUP_NO == slip_no && doc.PROJECT_NO == project_no
130
                                    select doc).ToList();
131

    
132
                        string userName = null;
133

    
134
                        var user = GetSelectMember(cIEntity, project_no, slip_no, user_id);
135

    
136

    
137
                        if (user.SLIP_COUNT == 0)
138
                        {
139
                            result = "Slip No does not exist.";
140
                        }
141
                        else
142
                        {
143
                            if (user.IS_ORIGINATOR == 0)
144
                            {
145
                                result = "User ID is not the Originator for that Slip No.";
146
                            }
147
                            else
148
                            {
149
                                if (user.USER_NAME == null)
150
                                {
151
                                    result = "user name IS NULL.";
152
                                }
153
                                else
154
                                {
155
                                    userName = user.USER_NAME;
156

    
157
                                    foreach (DOCUMENT_ITEM dOCUMENTITEM in list)
158
                                    {
159
                                        DOCINFO dOCINFO = (
160
                                            from x in cIEntity.DOCINFO
161
                                            where x.PROJECT_NO == project_no && x.DOCUMENT_ID == dOCUMENTITEM.DOCUMENT_ID
162
                                            select x).FirstOrDefault<DOCINFO>();
163

    
164
                                        MARKUP_INFO mARKUPINFO = (
165
                                            from x in cIEntity.MARKUP_INFO
166
                                            where x.DOCINFO_ID == dOCINFO.ID && x.AVOID_CONSOLIDATE == 0 && x.CONSOLIDATE == 1
167
                                            select x).FirstOrDefault<MARKUP_INFO>();
168

    
169
                                        if (mARKUPINFO == null)
170
                                        {
171
                                            var pageInfo = dOCINFO.DOCPAGE.First();
172

    
173
                                            mARKUPINFO = new MARKUP_INFO()
174
                                            {
175
                                                ID = shortGuid(),
176
                                                DOCINFO_ID = dOCINFO.ID,
177
                                                USER_ID = user_id,
178
                                                CREATE_TIME = DateTime.Now,
179
                                                CONSOLIDATE = 1,
180
                                                AVOID_CONSOLIDATE = 0,
181
                                                PART_CONSOLIDATE = 0,
182
                                                DESCRIPTION = "",
183
                                                UPDATE_TIME = new DateTime?(DateTime.Now),
184
                                            };
185

    
186
                                            cIEntity.MARKUP_INFO.AddObject(mARKUPINFO);
187

    
188
                                            MARKUP_INFO_VERSION mARKUPINFOVERSION = new MARKUP_INFO_VERSION()
189
                                            {
190
                                                ID = shortGuid(),
191
                                                MARKUPINFO_ID = mARKUPINFO.ID,
192
                                                CREATE_DATE = DateTime.Now
193
                                            };
194

    
195
                                            cIEntity.MARKUP_INFO_VERSION.AddObject(mARKUPINFOVERSION);
196

    
197
                                            Point startPoint = new Point(15, 15);
198

    
199
                                            var symCtrl = GetSymNControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID, startPoint, _stampData);
200

    
201
                                            var bottom = Rect.Offset(symCtrl.ItemRect, new Vector(0, symCtrl.ItemRect.Height));
202

    
203
                                            var txtOriginator = GetTextControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID
204
                                                           , userName, 20, System.Windows.Media.Color.FromArgb(255, 0, 0, 255), FontWeights.Bold, TextAlignment.Center, bottom, bottom.Top + 3);
205

    
206
                                            var dtfi = new System.Globalization.DateTimeFormatInfo { DateSeparator = "-", ShortDatePattern = @"yyyy/MM/dd" };
207

    
208
                                            var txtDate = GetTextControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID
209
                                                           , DateTime.Now.ToString("d", dtfi), 20, System.Windows.Media.Color.FromArgb(255, 255, 0, 0), FontWeights.Bold, TextAlignment.Center, bottom, txtOriginator.StartPoint.Y + txtOriginator.BoxHeight + 2);
210

    
211
                                            var symData = symCtrl.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID);
212
                                            cIEntity.MARKUP_DATA.AddObject(symData);
213
                                            cIEntity.MARKUP_DATA.AddObject(txtOriginator.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID));
214
                                            cIEntity.MARKUP_DATA.AddObject(txtDate.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID));
215
                                        }
216
                                        cIEntity.SaveChanges();
217

    
218

    
219
                                        this.SetFinalPDF(project_no, dOCINFO.ID, mARKUPINFO.ID, user_id);
220
                                    }
221
                                }
222
                            }
223
                        }
224
                    }
225
                }
226

    
227
            }
228
            catch (Exception ex)
229
            {
230
                logger.Error($"StampSave ProjectNO : {project_no} slipNo : {slip_no} userID : {user_id}" + ex);
231
                result = "Stamp Save Error";
232
            }
233

    
234
            return result;
235
        }
236

    
237
        private List<MEMBER> GetMemberQuery(System.Data.Objects.ObjectContext context, string UserID)
238
        {
239
            List<MEMBER> result = new List<MEMBER>();
240

    
241
            try
242
            {
243
                string query = "SELECT members.ID,members.NAME,members.DEPARTMENT FROM CIEntities.MEMBER as members where members.ID = @userId";
244

    
245
                var param = new[] { new System.Data.Objects.ObjectParameter("userId", UserID) };
246

    
247
                System.Data.Objects.ObjectQuery<System.Data.Common.DbDataRecord> memberQuery
248
                              = context.CreateQuery<System.Data.Common.DbDataRecord>(query, param);
249
             
250
                if (memberQuery.Count() > 0)
251
                {
252
                    foreach (var dataRecord in memberQuery)
253
                    {
254
                        MEMBER member = new MEMBER();
255

    
256
                        string userName = dataRecord["NAME"]?.ToString().Trim();
257
                        string ID = dataRecord["ID"]?.ToString().Trim();
258
                        string depatment = dataRecord["DEPARTMENT"]?.ToString().Trim();
259

    
260
                        member.NAME = userName;
261
                        member.ID = ID;
262
                        member.DEPARTMENT = depatment;
263

    
264
                        result.Add(member);
265
                    }
266
                }
267
            }
268
            catch (Exception ex)
269
            {
270
                throw new Exception("GetMember(System.Data.Objects.ObjectContext context, string UserID) ", ex);
271
            }
272

    
273
            return result;
274
        }
275

    
276
        private SelectMember GetSelectMember(System.Data.Objects.ObjectContext context,string ProjectNo,string SlipNo, string UserID)
277
        {
278
            SelectMember result = new SelectMember();
279

    
280
            try
281
            {
282
                string query = "SELECT_SLIP_ORIGINATOR @P_PROJECT_NO = @ProjectNo , @P_SLIP_NO = @SlipNo  ,@P_USER_ID = @UserID";
283

    
284
                var param = new[]{
285
                    new System.Data.SqlClient.SqlParameter("ProjectNo", ProjectNo),
286
                    new System.Data.SqlClient.SqlParameter("SlipNo", SlipNo),
287
                    new System.Data.SqlClient.SqlParameter("UserID", UserID)
288

    
289
                };
290

    
291
                //var memberQuery = context.ExecuteStoreQuery<System.Data.Common.DbDataRecord>(query, param).ToList();
292

    
293
                //if (memberQuery.Count() > 0)
294
                //{
295
                //    result.USER_NAME = memberQuery.First()["USER_NAME"]?.ToString();
296
                //    result.IS_ORIGINATOR = Convert.ToInt32(memberQuery.First()["IS_ORIGINATOR"]);
297
                //}
298

    
299
                var memberQuery = context.ExecuteStoreQuery<SelectMember>(query, param).ToList();
300
            
301
                if (memberQuery.Count() > 0)
302
                {
303
                    result = memberQuery.First();
304
                }
305
            }
306
            catch (Exception ex)
307
            {
308
                throw new Exception("GetMember(System.Data.Objects.ObjectContext context, string UserID) ", ex);
309
            }
310

    
311
            return result;
312
        }
313

    
314
        private void StampSave_NoneSymbol(string project_no, string slip_no, string user_id)
315
        {
316
            try
317
            {
318
                logger.Info($"Stamp  ProjecNO : {project_no}  SlipNO : {slip_no}  UserID : {user_id}");
319

    
320
                using (CIEntities cIEntity = new CIEntities(ConnectStringBuilder.ProjectCIConnectString(project_no).ToString()))
321
                {
322
                    logger.Info($"Connection CI DataBase :{cIEntity.Connection.Database} DataSource :{cIEntity.Connection.DataSource}");
323

    
324
                    var list = (from doc in cIEntity.DOCUMENT_ITEM
325
                                where doc.GROUP_NO == slip_no && doc.PROJECT_NO == project_no
326
                                select doc).ToList();
327

    
328
                    foreach (DOCUMENT_ITEM dOCUMENTITEM in list)
329
                    {
330
                        DOCINFO dOCINFO = (
331
                            from x in cIEntity.DOCINFO
332
                            where x.PROJECT_NO == project_no && x.DOCUMENT_ID == dOCUMENTITEM.DOCUMENT_ID
333
                            select x).FirstOrDefault<DOCINFO>();
334

    
335
                        MARKUP_INFO mARKUPINFO = (
336
                            from x in cIEntity.MARKUP_INFO
337
                            where x.DOCINFO_ID == dOCINFO.ID && x.AVOID_CONSOLIDATE == 0 && x.CONSOLIDATE == 1
338
                            select x).FirstOrDefault<MARKUP_INFO>();
339

    
340
                        if (mARKUPINFO == null)
341
                        {
342
                            var pageInfo = dOCINFO.DOCPAGE.First();
343

    
344
                            mARKUPINFO = new MARKUP_INFO()
345
                            {
346
                                ID = shortGuid(),
347
                                DOCINFO_ID = dOCINFO.ID,
348
                                USER_ID = user_id,
349
                                CREATE_TIME = DateTime.Now,
350
                                CONSOLIDATE = 1,
351
                                AVOID_CONSOLIDATE = 0,
352
                                PART_CONSOLIDATE = 0,
353
                                DESCRIPTION = "",
354
                                UPDATE_TIME = new DateTime?(DateTime.Now),
355
                            };
356

    
357
                            cIEntity.MARKUP_INFO.AddObject(mARKUPINFO);
358

    
359
                            MARKUP_INFO_VERSION mARKUPINFOVERSION = new MARKUP_INFO_VERSION()
360
                            {
361
                                ID = shortGuid(),
362
                                MARKUPINFO_ID = mARKUPINFO.ID,
363
                                CREATE_DATE = DateTime.Now
364
                            };
365

    
366
                            cIEntity.MARKUP_INFO_VERSION.AddObject(mARKUPINFOVERSION);
367

    
368
                            Point startPoint = new Point(15, 15);
369
                   
370
                            var rect = Common.GetRectControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT),
371
                                                    mARKUPINFO.USER_ID, mARKUPINFO.ID, startPoint);
372

    
373
                            var txtApproved = GetTextControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID,
374
                                                         "APPROVED", 30, System.Windows.Media.Color.FromArgb(255, 255, 0, 0), FontWeights.Bold, TextAlignment.Center, rect.ItemRect, 18);
375

    
376
                            var txtCreator = GetTextControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID
377
                                            , "By HYOSUNG", 18, System.Windows.Media.Color.FromArgb(255, 255, 0, 0), FontWeights.Bold, TextAlignment.Center, rect.ItemRect, txtApproved.StartPoint.Y + txtApproved.BoxHeight + 3);
378

    
379
                            var bottom = Rect.Offset(rect.ItemRect, new Vector(0, rect.ItemRect.Height));
380

    
381
                            var txtOriginator = GetTextControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID
382
                                           , mARKUPINFO.USER_ID, 18,System.Windows.Media.Color.FromArgb(255, 255, 0, 0), FontWeights.Bold, TextAlignment.Left, bottom, bottom.Top + 3);
383

    
384
                            var dtfi = new System.Globalization.DateTimeFormatInfo { DateSeparator = "-", ShortDatePattern = @"yyyy/MM/dd" };
385

    
386
                            var txtDate = GetTextControl(Convert.ToDouble(pageInfo.PAGE_WIDTH), Convert.ToDouble(pageInfo.PAGE_HEIGHT), mARKUPINFO.USER_ID, mARKUPINFO.ID
387
                                           , DateTime.Now.ToString("d", dtfi), 18, System.Windows.Media.Color.FromArgb(255, 255, 0, 0), FontWeights.Bold, TextAlignment.Left, bottom, txtOriginator.StartPoint.Y + txtOriginator.BoxHeight + 2);
388

    
389
                            var rectData = rect.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID);
390
                            cIEntity.MARKUP_DATA.AddObject(rectData);
391

    
392
                            cIEntity.MARKUP_DATA.AddObject(txtApproved.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID));
393
                            cIEntity.MARKUP_DATA.AddObject(txtCreator.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID));
394
                            cIEntity.MARKUP_DATA.AddObject(txtOriginator.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID));
395
                            cIEntity.MARKUP_DATA.AddObject(txtDate.GetMarkupData(mARKUPINFO.USER_ID, 1, mARKUPINFOVERSION.ID));
396
                        }
397
                        cIEntity.SaveChanges();
398

    
399

    
400
                        this.SetFinalPDF(project_no, dOCINFO.ID, mARKUPINFO.ID, user_id);
401
                    }
402
                }
403

    
404
            }
405
            catch (Exception ex)
406
            {
407
                logger.Error($"StampSave ProjectNO : {project_no} slipNo : {slip_no} userID : {user_id}" + ex);
408
            }
409
        }
410

    
411
        private static string shortGuid()
412
        {
413
            byte[] bytes = new byte[16];
414
            using (var provider = System.Security.Cryptography.RandomNumberGenerator.Create())
415
            {
416
                provider.GetBytes(bytes);
417
            }
418

    
419
            var guid = new Guid(bytes);
420

    
421
            return Convert.ToBase64String(guid.ToByteArray())
422
                .Substring(0, 10)
423
                .Replace("/", "")
424
                .Replace("+", "") + DateTime.UtcNow.Ticks.ToString("x");
425
        }
426

    
427
        private SymControlN GetSymNControl(double PageWidth, double PageHeight, string userId, string markupInfoId, Point startPosition,string StampData)
428
        {
429
            SymControlN result = null;
430

    
431
            try
432
            {
433
                double height = 80;
434
                double itemWidth = 180;
435

    
436
                System.Windows.Point startPoint = new System.Windows.Point(startPosition.X, startPosition.Y);
437
                System.Windows.Point endPoint = new System.Windows.Point(startPosition.X + itemWidth, startPosition.Y + height);
438
                System.Windows.Point leftBottomPoint = new System.Windows.Point(startPosition.X, startPosition.Y + height);
439
                System.Windows.Point topRightPoint = new System.Windows.Point(startPosition.X + itemWidth, startPosition.Y);
440

    
441
                result = new SymControlN
442
                {
443
                    CommentID = shortGuid(),
444
                    MarkupInfoID = markupInfoId,
445
                    UserID = userId,
446
                    PointSet = new List<Point> { startPoint, leftBottomPoint, endPoint, topRightPoint },
447
                    StartPoint = startPoint,
448
                    EndPoint = endPoint,
449
                    CommentAngle = 0,
450
                    LeftBottomPoint = leftBottomPoint,
451
                    TopRightPoint = topRightPoint,
452
                    Opacity = 1,
453
                    PathXathData = StampData,
454
                    Memo = null
455
                };
456

    
457
            }
458
            catch (Exception ex)
459
            {
460
                System.Diagnostics.Debug.WriteLine(ex.ToString());
461
            }
462

    
463
            return result;
464
        }
465

    
466

    
467
        private static RectangleControl GetRectControl(double PageWidth, double PageHeight, string USER_ID, string markupInfoId, Point startPosition)
468
        {
469
            RectangleControl result = null;
470

    
471
            try
472
            {
473
                double height = 80;
474
                double itemWidth = 180;
475

    
476
                System.Windows.Point startPoint = new System.Windows.Point(startPosition.X, startPosition.Y);
477
                System.Windows.Point endPoint = new System.Windows.Point(startPosition.X + itemWidth, startPosition.Y + height);
478
                System.Windows.Point leftBottomPoint = new System.Windows.Point(startPosition.X, startPosition.Y + height);
479
                System.Windows.Point topRightPoint = new System.Windows.Point(startPosition.X + itemWidth, startPosition.Y);
480

    
481
                result = new RectangleControl
482
                {
483
                    CommentID = shortGuid(),
484
                    MarkupInfoID = markupInfoId,
485
                    LineSize = 5,
486
                    Paint = MarkupToPDF.Controls.Common.PaintSet.None,
487
                    StartPoint = startPoint,
488
                    EndPoint = endPoint,
489
                    CommentAngle = 0,
490
                    StrokeColor = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 255, 0x0, 0x0)),
491
                    //StrokeColor = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 64, 224, 208)),
492
                    FillColor = null,
493
                    DashSize = new System.Windows.Media.DoubleCollection(new[] { 999999.0 }),
494
                    Opacity = 1,
495
                    LeftBottomPoint = leftBottomPoint,
496
                    TopRightPoint = topRightPoint,
497
                    PointSet = new List<Point> { startPoint, leftBottomPoint, endPoint, topRightPoint },
498
                    UserID = USER_ID,
499
                    Memo = null,
500
                    SymbolID = null
501
                    
502
                };
503
            }
504
            catch (Exception ex)
505
            {
506
                System.Diagnostics.Debug.WriteLine(ex.ToString());
507
            }
508

    
509
            return result;
510
        }
511

    
512
        [STAThread]
513
        private static TextControl GetTextControl(double PageWidth, double PageHeight, string USER_ID, string markupInfoId, 
514
            string Text, double fontSize, System.Windows.Media.Color Foreground, FontWeight fontWeight, TextAlignment textAlignment, Rect parentRect, double positionY)
515
        {
516
            TextControl result = null;
517

    
518
            try
519
            {
520

    
521
                var txtSize = ShapeMeasure(new TextBlock
522
                {
523
                    Text = Text,
524
                    FontSize = fontSize,
525
                    FontWeight = fontWeight,
526
                    FontFamily = new System.Windows.Media.FontFamily("Arial")
527
                });
528

    
529
                double startPositionX = parentRect.X;
530

    
531
                switch (textAlignment)
532
                {
533
                    case TextAlignment.Right:
534
                        startPositionX = parentRect.X + parentRect.Width - txtSize.Width;
535
                        break;
536
                    case TextAlignment.Center:
537
                        startPositionX = parentRect.X + parentRect.Width / 2 - txtSize.Width / 2;
538
                        break;
539
                }
540

    
541
                Point startPosition = new Point
542
                {
543
                    X = startPositionX,
544
                    Y = positionY
545
                };
546

    
547
                System.Windows.Point startPoint = new System.Windows.Point(startPosition.X, startPosition.Y);
548
                System.Windows.Point endPoint = new System.Windows.Point(startPosition.X + txtSize.Width, startPosition.Y + txtSize.Height);
549
                System.Windows.Point leftBottomPoint = new System.Windows.Point(startPosition.X, startPosition.Y + txtSize.Height);
550
                System.Windows.Point topRightPoint = new System.Windows.Point(startPosition.X + txtSize.Width, startPosition.Y);
551

    
552
                result = new TextControl
553
                {
554
                    CommentID = shortGuid(),
555
                    MarkupInfoID = markupInfoId,
556
                    Text = Text,
557
                    StartPoint = startPoint,
558
                    EndPoint = endPoint,
559
                    CanvasX = startPosition.X,
560
                    CanvasY = startPosition.Y,
561
                    BoxWidth = txtSize.Width,
562
                    BoxHeight = txtSize.Height,
563
                    ControlType_No = 0,
564
                    LineSize = new Thickness(5),
565
                    TextSize = fontSize,
566
                    Foreground = new System.Windows.Media.SolidColorBrush(Foreground),
567
                    FontSize = 10,
568
                    UserID = USER_ID,
569
                    IsHighLight = false,
570
                    CommentAngle = 0,
571
                    PointSet = new List<Point>(),
572
                    Opacity = 1,
573
                    IsSelected = false,
574
                    TextFamily = new System.Windows.Media.FontFamily("Arial"),
575
                    TextStyle = FontStyles.Normal,
576
                    TextWeight = FontWeights.Bold
577
                };
578

    
579
            }
580
            catch (Exception ex)
581
            {
582
                throw new Exception("Text Control error");
583
            }
584

    
585
            return result;
586
        }
587
        public static Size ShapeMeasure(UIElement e)
588
        {
589
            // Measured Size is bounded to be less than maxSize
590
            Size maxSize = new Size(
591
                 double.PositiveInfinity,
592
                 double.PositiveInfinity);
593
            e.Measure(maxSize);
594
            return e.DesiredSize;
595
        }
596
        private void SetTextControl(TextControl textControl)
597
        {
598
            textControl.Base_TextBlock.Margin = new Thickness(0, 0, 10, 0);
599
            textControl.Base_TextBox.Visibility = Visibility.Collapsed;
600
            textControl.Base_TextBlock.Visibility = Visibility.Visible;
601

    
602
        }
603

    
604
        #region Final PDF
605
        private string _ChanID = null;
606
        TcpChannel chan = null;
607

    
608
        [OperationContract]
609
        public FinalPDFResult SetFinalPDF(string ProjectNo, string DocInfoID, string MarkupInfoID, string CreateUSER_ID)
610
        {
611
            #region 임시보관
612
            #endregion
613
            FinalPDFResult _result = new FinalPDFResult();
614
            RemFinalPDFObject remObj = null;
615
            try
616
            {
617
                string _finalID = shortGuid();
618
                int _DocTotalPages = -1;
619
                string docItemId;
620

    
621
                logger.Info($"SetFinalPDF ProjectNo :{ProjectNo} DocInfoID :{DocInfoID}  MarkupInfoID:{MarkupInfoID}  CreateUSER_ID:{CreateUSER_ID}");
622

    
623
                //string sCIConnString = ConfigurationManager.ConnectionStrings["CIConnectionString"].ConnectionString;
624
                using (CIEntities _ci = new CIEntities(ConnectStringBuilder.ProjectCIConnectString(ProjectNo).ToString()))
625
                {
626
                    logger.Info($"Connection CI DataBase :{_ci.Connection.Database} DataSource :{_ci.Connection.DataSource}");
627
                    var _doc = _ci.DOCINFO.Where(info => info.ID == DocInfoID);
628

    
629
                    if (_doc.Count() > 0)
630
                    {
631
                        _DocTotalPages = _doc.First().PAGE_COUNT;
632
                        docItemId = _doc.First().DOCUMENT_ID;
633
                    }
634
                    else
635
                    {
636
                        _result.Status = FinalStatus.Error;
637
                        _result.Exception = "페이지 정보를 가져올 수 없습니다.";
638
                        return _result;
639
                    }
640
                }
641
                if (_DocTotalPages > 0)
642
                {
643
                    FINAL_PDF fm = new FINAL_PDF()
644
                    {
645
                        ID = _finalID,
646
                        PROJECT_NO = ProjectNo,
647
                        DOCINFO_ID = DocInfoID,
648
                        DOCUMENT_ID = docItemId,
649
                        MARKUPINFO_ID = MarkupInfoID,
650
                        CREATE_USER_ID = CreateUSER_ID,
651
                        TOTAL_PAGE = _DocTotalPages,
652
                        CREATE_DATETIME = DateTime.Now,
653
                        STATUS = (int)IFinalPDF.FinalStatus.Insert
654
                    };
655

    
656
                    //string sConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
657
                    using (KCOMEntities _entity = new KCOMEntities(ConnectStringBuilder.KCOMConnectionString().ToString()))
658
                    {
659
                        logger.Info($"Connection KCOM DataBase :{_entity.Connection.Database} DataSource :{_entity.Connection.DataSource}");
660

    
661
                        _entity.AddToFINAL_PDF(fm);
662
                        _entity.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
663
                    };
664

    
665
                    System.Runtime.Remoting.Channels.IChannel _ch = System.Runtime.Remoting.Channels.ChannelServices.GetChannel("tcp");
666
                    if (_ch == null)
667
                    {
668
                        chan = new TcpChannel();
669
                        _ChanID = chan.ChannelName;
670
                        System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(chan, false);
671
                        // Create an instance of the remote object
672

    
673
                        using (KCOMEntities ec = new KCOMEntities(ConnectStringBuilder.KCOMConnectionString().ToString()))
674
                        {
675

    
676
                            //remObj = (RemFinalPDFObject)Activator.GetObject(typeof(RemFinalPDFObject),
677
                            //                          "tcp://localhost:9092/remFinalPDF");
678
                            remObj = (RemFinalPDFObject)Activator.GetObject(typeof(RemFinalPDFObject),
679
                                                      //"tcp://192.168.0.67:9092/remFinalPDF");
680
                                                      "tcp://localhost:9092/remFinalPDF");
681
                        }
682

    
683
                        //"tcp://localhost:8080/remFinalPDF");
684

    
685
                        _result = remObj.SetFinalPDF(ProjectNo, _finalID);
686
                        _result.FinalID = _finalID;
687
                        _result.Status = FinalStatus.Success;
688

    
689
                        //MarkupToPDF.MarkupToPDF fa = new MarkupToPDF.MarkupToPDF();
690
                        //fa.MakeFinalPDF(fm);
691
                    }
692
                    else
693
                    {
694
                        _ChanID = _ch.ChannelName;
695
                    }
696
                }
697
            }
698
            catch (Exception ex)
699
            {
700
                logger.Error($"SetFinalPDF - " + ex);
701

    
702
                _result.Status = FinalStatus.Error;
703

    
704
                if (ex.GetType() == typeof(System.Net.Sockets.SocketException))
705
                    _result.Exception = "Final Server Not Connection";
706
                else _result.Exception = ex.ToString();
707
            }
708
            finally
709
            {
710
                remObj = null;
711
                if (System.Runtime.Remoting.Channels.ChannelServices.GetChannel("tcp") != null)
712
                    System.Runtime.Remoting.Channels.ChannelServices.UnregisterChannel(chan);
713

    
714
                GC.Collect(2);
715
            }
716
            return _result;
717
        }
718
        #endregion
719

    
720
    }
721

    
722
    public class SelectMember
723
    {
724
        public string USER_NAME { get; set; }
725

    
726
        /// <summary>
727
        /// 0보다 크면 originator
728
        /// </summary>
729
        public int IS_ORIGINATOR { get; set; }
730

    
731
        /// <summary>
732
        /// 해당 SLIP NO가 있는지
733
        /// </summary>
734
        public int SLIP_COUNT { get; set; }
735
    }
736

    
737

    
738
    [DataContract]
739
    public class ProjectInfo
740
    {
741
        [DataMember]
742
        public string No { get; set; }
743

    
744
        [DataMember]
745
        public string Name { get; set; }
746
    }
747
}
클립보드 이미지 추가 (최대 크기: 500 MB)