实习以来 唯一一次 没有因需求变更 代码被改面目全非的一次(期待各位对代码细节提提建议)

  according the source and template to genetate bulk file.(there is four type diff source and template now.)

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using Ric.Core;
  6 using System.ComponentModel;
  7 using System.Windows;
  8 using System.IO;
  9 using Ric.Util;
 10 using Microsoft.Office.Interop.Excel;
 11
 12 namespace Ric.Tasks.HongKong
 13 {
 14     [ConfigStoredInDB]
 15     class HKFutureDatingConfig
 16     {
 17         [StoreInDB]
 18         [Category("IA Template")]
 19         [DisplayName("IA Template File Path.")]
 20         [Description("F:\\work\\xxx.csv")]
 21         public string IATemplatePath { get; set; }
 22
 23         [StoreInDB]
 24         [Category("BulkFile")]
 25         [DisplayName("Bulk File Output Folder")]
 26         [Description("F:\\work\\xxx")]
 27         public string OutputFolder { get; set; }
 28
 29         [StoreInDB]
 30         [Category("HShareIPO")]
 31         [DisplayName("SourcePath")]
 32         [Description("F:\\work\\xxx.xls")]
 33         public string SourcePathHShareIPO { get; set; }
 34         [StoreInDB]
 35         [Category("HShareIPO")]
 36         [DisplayName("TemplatePath")]
 37         [Description("F:\\work\\xxx.csv")]
 38         public string TemplatePathHShareIPO { get; set; }
 39
 40         [StoreInDB]
 41         [Category("IPO")]
 42         [DisplayName("SourcePath")]
 43         [Description("F:\\work\\xxx.xls")]
 44         public string SourcePathIPO { get; set; }
 45         [StoreInDB]
 46         [Category("IPO")]
 47         [DisplayName("TemplatePath")]
 48         [Description("F:\\work\\xxx.csv")]
 49         public string TemplatePathIPO { get; set; }
 50
 51         [StoreInDB]
 52         [Category("Parellel trading")]
 53         [DisplayName("SourcePath")]
 54         [Description("F:\\work\\xxx.xls")]
 55         public string SourcePathParellel { get; set; }
 56         [StoreInDB]
 57         [Category("Parellel trading")]
 58         [DisplayName("TemplatePath")]
 59         [Description("F:\\work\\xxx.csv")]
 60         public string TemplatePathParellel { get; set; }
 61
 62         [StoreInDB]
 63         [Category("RIGHTS")]
 64         [DisplayName("SourcePath")]
 65         [Description("F:\\work\\xxx.xls")]
 66         public string SourcePathRIGHTS { get; set; }
 67         [StoreInDB]
 68         [Category("RIGHTS")]
 69         [DisplayName("TemplatePath")]
 70         [Description("F:\\work\\xxx.csv")]
 71         public string TemplatePathRIGHTS { get; set; }
 72
 73         [Category("FileCategory")]
 74         [DisplayName("FileType")]
 75         [Description("select file type to run.")]
 76         public FileCategory FileType { get; set; }
 77     }
 78
 79     enum FileCategory : int { AllType, HShareIPO, IPO, ParellelTrading, RIGHTS }
 80
 81     class HKFutureDating : GeneratorBase
 82     {
 83         private static HKFutureDatingConfig configObj;
 84         private List<List<string>> iaTemplate = null;
 85         protected override void Initialize()
 86         {
 87             configObj = Config as HKFutureDatingConfig;
 88         }
 89
 90         protected override void Start()
 91         {
 92             if (!CheckConfig())
 93                 return;
 94
 95             #region [HShareIPO]
 96             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.HShareIPO))
 97             {
 98                 LogMessage(string.Format("start to generate {0} bulk file.", FileCategory.HShareIPO.ToString()));
 99                 string folder = Path.Combine(configObj.OutputFolder, Path.Combine("HShareIPO", DateTime.Now.ToString("MM-dd-yyyy")));
100                 List<List<string>> source = ReadExcel(configObj.SourcePathHShareIPO, 1);
101                 List<List<string>> qaTemplate = ReadExcel(configObj.TemplatePathHShareIPO, 1);
102                 SourceTemplate sourceTemplate = FormatSource(source);
103                 FillQATemplate(qaTemplate, sourceTemplate, FileCategory.HShareIPO);
104                 FillIATemplate(iaTemplate, sourceTemplate, FileCategory.HShareIPO);
105
106                 string pathQA = Path.Combine(folder, string.Format("Quote_Future_Add_{0}(HShareIPO).csv", sourceTemplate.OfficialCode));
107                 GenerateFile(pathQA, qaTemplate);
108                 AddResult("Quote_Future_Add_HShareIPO.csv", pathQA, "qa bulk file");
109
110                 string pathIA = Path.Combine(folder, string.Format("Issue_Future_Add_{0}(HShareIPO).csv", sourceTemplate.OfficialCode));
111                 GenerateFile(pathIA, iaTemplate);
112                 AddResult("Issue_Future_Add_HShareIPO.csv", pathIA, "ia bulk file");
113             }
114             #endregion
115
116             #region [IPO]
117             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.IPO))
118             {
119                 LogMessage(string.Format("start to generate {0} bulk file.", FileCategory.IPO.ToString()));
120                 string folder = Path.Combine(configObj.OutputFolder, Path.Combine("IPO", DateTime.Now.ToString("MM-dd-yyyy")));
121                 List<List<string>> source = ReadExcel(configObj.SourcePathIPO, 1);
122                 List<List<string>> qaTemplate = ReadExcel(configObj.TemplatePathIPO, 1);
123                 SourceTemplate sourceTemplate = FormatSource(source);
124                 FillQATemplate(qaTemplate, sourceTemplate, FileCategory.IPO);
125                 FillIATemplate(iaTemplate, sourceTemplate, FileCategory.IPO);
126
127                 string pathQA = Path.Combine(folder, string.Format("Quote_Future_Add_{0}(IPO).csv", sourceTemplate.OfficialCode));
128                 GenerateFile(pathQA, qaTemplate);
129                 AddResult("Quote_Future_Add_IPO.csv", pathQA, "qa bulk file");
130
131                 string pathIA = Path.Combine(folder, string.Format("Issue_Future_Add_{0}(IPO).csv", sourceTemplate.OfficialCode));
132                 GenerateFile(pathIA, iaTemplate);
133                 AddResult("Issue_Future_Add_IPO.csv", pathIA, "ia bulk file");
134             }
135             #endregion
136
137             #region [ParaellelTrading]
138             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.ParellelTrading))
139             {
140                 LogMessage(string.Format("start to generate {0} bulk file.", FileCategory.ParellelTrading.ToString()));
141                 string folder = Path.Combine(configObj.OutputFolder, Path.Combine("ParellelTrading", DateTime.Now.ToString("MM-dd-yyyy")));
142                 List<List<string>> source = ReadExcel(configObj.SourcePathParellel, 1);
143                 List<List<string>> qaTemplate = ReadExcel(configObj.TemplatePathParellel, 1);
144                 SourceTemplate sourceTemplate = FormatSource(source);
145                 FillQATemplate(qaTemplate, sourceTemplate, FileCategory.ParellelTrading);
146                 FillIATemplate(iaTemplate, sourceTemplate, FileCategory.ParellelTrading);
147
148                 string pathQA = Path.Combine(folder, string.Format("Quote_Future_Add_{0}(Parellel trading).csv", sourceTemplate.OfficialCodeNew));
149                 GenerateFile(pathQA, qaTemplate);
150                 AddResult("Quote_Future_Add_Parellel trading.csv", pathQA, "qa bulk file");
151
152                 string pathIA = Path.Combine(folder, string.Format("Issue_Future_Add_{0}(Parellel trading)(Parellel trading).csv", sourceTemplate.OfficialCodeNew));
153                 GenerateFile(pathIA, iaTemplate);
154                 AddResult("Issue_Future_Add_Parellel trading.csv", pathIA, "ia bulk file");
155             }
156             #endregion
157
158             #region [RIGHTS]
159             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.RIGHTS))
160             {
161                 LogMessage(string.Format("start to generate {0} bulk file.", FileCategory.RIGHTS.ToString()));
162                 string folder = Path.Combine(configObj.OutputFolder, Path.Combine("RIGHTS", DateTime.Now.ToString("MM-dd-yyyy")));
163                 List<List<string>> source = ReadExcel(configObj.SourcePathRIGHTS, 1);
164                 List<List<string>> qaTemplate = ReadExcel(configObj.TemplatePathRIGHTS, 1);
165                 SourceTemplate sourceTemplate = FormatSource(source);
166                 FillQATemplate(qaTemplate, sourceTemplate, FileCategory.RIGHTS);
167                 FillIATemplate(iaTemplate, sourceTemplate, FileCategory.RIGHTS);
168
169                 string pathQA = Path.Combine(folder, string.Format("Quote_Future_Add_{0}(RIGHTS).csv", sourceTemplate.OfficialCode));
170                 GenerateFile(pathQA, qaTemplate);
171                 AddResult("Quote_Future_Add_RIGHTS.csv", pathQA, "qa bulk file");
172
173                 string pathIA = Path.Combine(folder, string.Format("Issue_Future_Add_{0}(RIGHTS).csv", sourceTemplate.OfficialCode));
174                 GenerateFile(pathIA, iaTemplate);
175                 AddResult("Issue_Future_Add_RIGHTS.csv", pathIA, "ia bulk file");
176             }
177             #endregion
178         }
179
180         private void FillIATemplate(List<List<string>> iaTemplate, SourceTemplate sourceTemplate, FileCategory category)
181         {
182             try
183             {
184                 if (sourceTemplate == null)
185                 {
186                     LogMessage("there is no data in the ParellelTrading source file.");
187                     return;
188                 }
189
190                 List<List<string>> propertyName = GetPropertyName(iaTemplate);
191                 if (propertyName == null || propertyName.Count == 0)
192                 {
193                     LogMessage("ParellelTrading QATemplate is emptyt.");
194                     return;
195                 }
196
197                 for (int i = 0; i < propertyName[0].Count; i++)
198                 {
199                     iaTemplate[i + 1][3] = GetIAEffectiveDate(sourceTemplate, category);
200                     iaTemplate[i + 1][2] = GetIAPropertyValue(sourceTemplate, propertyName[0][i], iaTemplate[i + 1][2], category);
201                     iaTemplate[i + 1][5] = GetIAChangeOffset(sourceTemplate, propertyName[0][i], category);
202                     iaTemplate[i + 1][6] = GetIAChangeTrigger(sourceTemplate, propertyName[0][i], category);
203                 }
204
205             }
206             catch (Exception ex)
207             {
208                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
209                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
210                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
211                                             ex.Message);
212                 Logger.Log(msg, Logger.LogType.Error);
213             }
214         }
215
216         private void FillQATemplate(List<List<string>> qaTemplate, SourceTemplate sourceTemplate, FileCategory category)
217         {
218             try
219             {
220                 if (sourceTemplate == null)
221                 {
222                     LogMessage("there is no data in the ParellelTrading source file.");
223                     return;
224                 }
225
226                 List<List<string>> propertyName = GetPropertyName(qaTemplate);
227                 if (propertyName == null || propertyName.Count == 0)
228                 {
229                     LogMessage("ParellelTrading is emptyt.");
230                     return;
231                 }
232
233                 Dictionary<int, string> endString = new Dictionary<int, string>();
234                 endString.Add(0, ".HK");
235                 endString.Add(1, "stat.HK");
236                 endString.Add(2, "ta.HK");
237
238                 int index;
239                 for (int i = 0; i < propertyName.Count; i++)
240                 {
241                     for (int j = 0; j < propertyName[i].Count; j++)
242                     {
243                         index = GetIndex(i, j, propertyName);
244                         qaTemplate[index][0] = string.Format("{0}{1}", GetQAUnderlying(sourceTemplate, category), endString[i]);
245                         qaTemplate[index][2] = GetQAPropertyValue(sourceTemplate, propertyName[i][j], endString[i], category);
246                         qaTemplate[index][3] = GetQAEffectiveDate(sourceTemplate, category);
247                         qaTemplate[index][5] = GetQAChangeOffset(sourceTemplate, propertyName[i][j], category);
248                         qaTemplate[index][6] = GetQAChangeTrigger(sourceTemplate, propertyName[i][j], category);
249                     }
250                 }
251             }
252             catch (Exception ex)
253             {
254                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
255                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
256                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
257                                             ex.Message);
258                 Logger.Log(msg, Logger.LogType.Error);
259             }
260         }
261
262         private string GetIAPropertyValue(SourceTemplate sourceTemplate, string propertyName, string propertyValueInTemplate, FileCategory category)
263         {
264             try
265             {
266                 if ((propertyName + "").Trim().Length == 0)
267                     return GetIAEmptyPropertyName(sourceTemplate, category);
268
269                 if (propertyName.Contains("HONG KONG CODE"))
270                     return GetIAOfficialCode(sourceTemplate, category);
271
272                 if (propertyName.Contains("ASSET COMMON NAME"))
273                     return GetIADisplayname(sourceTemplate, category);
274
275                 if (propertyName.Contains("RCS ASSET CLASS"))
276                     return propertyValueInTemplate;
277             }
278             catch (Exception ex)
279             {
280                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
281                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
282                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
283                                             ex.Message);
284                 Logger.Log(msg, Logger.LogType.Error);
285             }
286
287             return string.Empty;
288         }
289
290         private string GetQAPropertyValue(SourceTemplate sourceTemplate, string propertyName, string endString, FileCategory category)
291         {
292             try
293             {
294                 if ((propertyName + "").Trim().Length == 0)
295                     return string.Empty;
296
297                 if (propertyName.Contains("RIC"))
298                     return string.Format("{0}{1}", GetQAUnderlying(sourceTemplate, category), endString);
299
300                 if (propertyName.Contains("ASSET COMMON NAME"))
301                     return GetQADisplayname(sourceTemplate, category);
302
303                 if (propertyName.Contains("ROUND LOT SIZE"))
304                     return GetQALotSize(sourceTemplate, category);
305
306                 if (propertyName.Contains("TICKER SYMBOL"))
307                     return GetQAOfficialCode(sourceTemplate, category);
308             }
309             catch (Exception ex)
310             {
311                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
312                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
313                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
314                                             ex.Message);
315                 Logger.Log(msg, Logger.LogType.Error);
316             }
317
318             return string.Empty;
319         }
320
321         #region [QA]
322         private string GetQAChangeTrigger(SourceTemplate sourceTemplate, string propertyName, FileCategory category)
323         {
324             if (category.Equals(FileCategory.HShareIPO) || category.Equals(FileCategory.IPO) || category.Equals(FileCategory.RIGHTS))
325             {
326                 if ((propertyName + "").Trim().Length == 0)
327                     return string.Empty;
328                 else
329                     return "PEO";
330             }
331
332             return string.Empty;
333         }
334
335         private string GetQAChangeOffset(SourceTemplate sourceTemplate, string propertyName, FileCategory category)
336         {
337             if (category.Equals(FileCategory.RIGHTS))
338             {
339                 if ((propertyName + "").Contains("RIC"))
340                     return "23";
341                 else
342                     return string.Empty;
343             }
344
345             return string.Empty;
346         }
347
348         private string GetQAEmptyPropertyName(SourceTemplate sourceTemplate, FileCategory category)
349         {
350             return string.Empty;
351         }
352
353         private string GetQAUnderlying(SourceTemplate sourceTemplate, FileCategory category)
354         {
355             if (category.Equals(FileCategory.ParellelTrading))
356                 return sourceTemplate.UnderlyingRICNew;
357             else
358                 return sourceTemplate.UnderlyingRIC;
359         }
360
361         private string GetQAOfficialCode(SourceTemplate sourceTemplate, FileCategory category)
362         {
363             if (category.Equals(FileCategory.ParellelTrading))
364                 return sourceTemplate.OfficialCodeNew;
365             else
366                 return sourceTemplate.OfficialCode;
367         }
368
369         private string GetQALotSize(SourceTemplate sourceTemplate, FileCategory category)
370         {
371             if (category.Equals(FileCategory.ParellelTrading))
372                 return sourceTemplate.LotSizeNew;
373             else
374                 return sourceTemplate.LotSize;
375         }
376
377         private string GetQADisplayname(SourceTemplate sourceTemplate, FileCategory category)
378         {
379             if (category.Equals(FileCategory.HShareIPO))
380                 return string.Format("{0} ORD H", sourceTemplate.Displayname.Replace("<--NOT YET CFM", "").Trim());
381
382             if (category.Equals(FileCategory.IPO))
383                 return string.Format("{0} ORD", sourceTemplate.Displayname.Replace("<--NOT YET CFM", "").Trim());
384
385             if (category.Equals(FileCategory.ParellelTrading))
386                 return string.Format("{0} ORD(TEMP)", sourceTemplate.Displayname.Replace("<--NOT YET CFM", "").Trim());
387
388             if (category.Equals(FileCategory.RIGHTS))
389                 return sourceTemplate.Displayname.Replace("<--NOT YET CFM", "").Trim();
390
391             return string.Empty;
392         }
393
394         private string GetQAEffectiveDate(SourceTemplate sourceTemplate, FileCategory category)
395         {
396             return sourceTemplate.EffectiveDate;
397         }
398         #endregion
399
400         #region [IA]
401         private string GetIAChangeTrigger(SourceTemplate sourceTemplate, string propertyName, FileCategory category)
402         {
403             if (category.Equals(FileCategory.HShareIPO) || category.Equals(FileCategory.IPO) || category.Equals(FileCategory.RIGHTS))
404             {
405                 if ((propertyName + "").Trim().Length == 0)
406                     return string.Empty;
407                 else
408                     return "PEO";
409             }
410
411             return string.Empty;
412         }
413
414         private string GetIAChangeOffset(SourceTemplate sourceTemplate, string propertyName, FileCategory category)
415         {
416             if (category.Equals(FileCategory.RIGHTS))
417             {
418                 if ((propertyName + "").Trim().Length == 0)
419                     return string.Empty;
420                 else
421                     return "23";
422             }
423
424             return string.Empty;
425         }
426
427         private string GetIAEmptyPropertyName(SourceTemplate sourceTemplate, FileCategory category)
428         {
429             return string.Empty;
430         }
431
432         private string GetIAUnderlying(SourceTemplate sourceTemplate, FileCategory category)
433         {
434             if (category.Equals(FileCategory.ParellelTrading))
435                 return sourceTemplate.UnderlyingRICNew;
436             else
437                 return sourceTemplate.UnderlyingRIC;
438         }
439
440         private string GetIAOfficialCode(SourceTemplate sourceTemplate, FileCategory category)
441         {
442             if (category.Equals(FileCategory.ParellelTrading))
443                 return sourceTemplate.OfficialCodeNew;
444             else
445                 return sourceTemplate.OfficialCode;
446         }
447
448         private string GetIALotSize(SourceTemplate sourceTemplate, FileCategory category)
449         {
450             if (category.Equals(FileCategory.ParellelTrading))
451                 return sourceTemplate.LotSizeNew;
452             else
453                 return sourceTemplate.LotSize;
454         }
455
456         private string GetIADisplayname(SourceTemplate sourceTemplate, FileCategory category)
457         {
458             if (category.Equals(FileCategory.HShareIPO))
459                 return string.Format("{0} Ord Shs H", sourceTemplate.LegalRegisteredName.Replace("Company", "").Replace("Limited", "").Trim());
460
461             if (category.Equals(FileCategory.IPO))
462                 return string.Format("{0} Ord Shs", sourceTemplate.LegalRegisteredName.Replace("Company", "").Replace("Limited", "").Trim());
463
464             if (category.Equals(FileCategory.ParellelTrading))
465                 return string.Format("{0} Ord Shs(Temp)", sourceTemplate.LegalRegisteredName.Replace("Company", "").Replace("Limited", "").Trim());
466
467             if (category.Equals(FileCategory.RIGHTS))
468                 return string.Format("{0} Rights", sourceTemplate.LegalRegisteredName.Replace("Company", "").Replace("Limited", "").Trim());
469
470             return string.Empty;
471         }
472
473         private string GetIAEffectiveDate(SourceTemplate sourceTemplate, FileCategory category)
474         {
475             return sourceTemplate.EffectiveDate;
476         }
477         #endregion
478
479         private int GetIndex(int lineCount, int valueCount, List<List<string>> propertyName)
480         {
481             int result = valueCount + 1;
482
483             try
484             {
485                 for (int i = 0; i < lineCount; i++)
486                     result += propertyName[i].Count;
487
488                 return result;
489             }
490             catch (Exception ex)
491             {
492                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
493                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
494                             System.Reflection.MethodBase.GetCurrentMethod().Name,
495                             ex.Message);
496                 Logger.Log(msg, Logger.LogType.Error);
497
498                 return 0;
499             }
500         }
501
502         private void GenerateFile(string path, List<List<string>> template)
503         {
504             try
505             {
506                 if (!Directory.Exists(Path.GetDirectoryName(path)))
507                     Directory.CreateDirectory(Path.GetDirectoryName(path));
508
509                 if (File.Exists(path))
510                     File.Delete(path);
511
512                 XlsOrCsvUtil.GenerateStringCsv(path, template);
513             }
514             catch (Exception ex)
515             {
516                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
517                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
518                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
519                                             ex.Message);
520                 Logger.Log(msg, Logger.LogType.Error);
521             }
522         }
523
524         private List<List<string>> GetPropertyName(List<List<string>> qaTemplate)
525         {
526             List<List<string>> result = new List<List<string>>();
527             List<string> line = null;
528
529             try
530             {
531                 for (int i = 1; i < qaTemplate.Count; i++)
532                 {
533                     if (i == 1)
534                         line = new List<string>();
535
536                     if (line.Contains(qaTemplate[i][1]))
537                     {
538                         result.Add(line);
539                         line = new List<string>();
540                     }
541
542                     line.Add(qaTemplate[i][1]);
543                 }
544
545                 result.Add(line);
546                 return result;
547             }
548             catch (Exception ex)
549             {
550                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
551                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
552                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
553                                             ex.Message);
554                 Logger.Log(msg, Logger.LogType.Error);
555
556                 return null;
557             }
558         }
559
560         private SourceTemplate FormatSource(List<List<string>> listSource)
561         {
562             SourceTemplate sourceTemplate = new SourceTemplate();
563
564             try
565             {
566                 foreach (var line in listSource)
567                 {
568                     if (line == null || line.Count < 2)
569                         continue;
570
571                     if ((line[0] + "").Trim().Length == 0)
572                         continue;
573
574                     string name = line[0].Trim();
575                     string value = (line[1] + "").Replace("<-- NOT YET CFM", "").Trim();
576                     if (name.Contains("Effective Date:") && value.Length != 0)
577                         sourceTemplate.EffectiveDate = ConvertDateNumber(value);
578
579                     if (name.Contains("Effective Date (NEW):") && value.Length != 0)
580                         sourceTemplate.EffectiveDateNew = ConvertDateNumber(value);
581
582                     if (name.Contains("Underlying RIC:") && value.Length != 0)
583                         sourceTemplate.UnderlyingRIC = value.Substring(0, value.Length - 3);
584
585                     if (name.Contains("Underlying RIC (NEW):") && value.Length != 0)
586                         sourceTemplate.UnderlyingRICNew = value.Substring(0, value.Length - 3);
587
588                     if (name.Contains("Displayname:") && value.Length != 0)
589                         sourceTemplate.Displayname = value;
590
591                     if (name.Contains("Displayname (NEW):") && value.Length != 0)
592                         sourceTemplate.DisplaynameNew = value;
593
594                     if (name.Contains("Official Code:") && value.Length != 0)
595                         sourceTemplate.OfficialCode = value;
596
597                     if (name.Contains("Official Code (NEW):") && value.Length != 0)
598                         sourceTemplate.OfficialCodeNew = value;
599
600                     if (name.Contains("Lot Size:") && value.Length != 0)
601                         sourceTemplate.LotSize = value;
602
603                     if (name.Contains("Lot Size (NEW):") && value.Length != 0)
604                         sourceTemplate.LotSizeNew = value;
605
606                     if (name.Contains("Legal Registered Name:") && value.Length != 0)
607                         sourceTemplate.LegalRegisteredName = value;
608
609                     if (name.Contains("Legal Registered Name (NEW):") && value.Length != 0)
610                         sourceTemplate.LegalRegisteredNameNew = value;
611                 }
612
613                 return sourceTemplate;
614             }
615             catch (Exception ex)
616             {
617                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
618                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
619                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
620                                             ex.Message);
621                 Logger.Log(msg, Logger.LogType.Error);
622
623                 return null;
624             }
625         }
626
627         private string ConvertDateNumber(string value)
628         {
629             try
630             {
631                 return Convert.ToDateTime("1900-01-01").AddDays(Convert.ToInt32(value.Trim()) - 2).ToString("dd-MMM-yy");
632             }
633             catch (Exception ex)
634             {
635                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
636                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
637                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
638                                             ex.Message);
639                 Logger.Log(msg, Logger.LogType.Error);
640
641                 return string.Empty;
642             }
643         }
644
645         private bool CheckConfig()
646         {
647             if ((configObj.IATemplatePath + "").Trim().Length == 0 || !File.Exists(configObj.IATemplatePath))
648             {
649                 LogMessage("IATemplate path invalid .");
650                 return false;
651             }
652
653             if ((configObj.OutputFolder + "").Trim().Length == 0)
654             {
655                 LogMessage("Output folder invalid .");
656                 return false;
657             }
658
659             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.IPO))
660             {
661                 if (!CheckPath(configObj.SourcePathIPO, configObj.TemplatePathIPO))
662                 {
663                     LogMessage("IPO config setting invalid .");
664                     return false;
665                 }
666
667             }
668
669             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.ParellelTrading))
670             {
671                 if (!CheckPath(configObj.SourcePathParellel, configObj.TemplatePathParellel))
672                 {
673                     LogMessage("ParellelTading config setting invalid .");
674                     return false;
675                 }
676             }
677
678             if (configObj.FileType.Equals(FileCategory.AllType) || configObj.FileType.Equals(FileCategory.RIGHTS))
679             {
680                 if (!CheckPath(configObj.SourcePathRIGHTS, configObj.TemplatePathRIGHTS))
681                 {
682                     LogMessage("RIGHTS config setting invalid .");
683                     return false;
684                 }
685             }
686
687             try
688             {
689                 if (!Directory.Exists(configObj.OutputFolder))
690                     Directory.CreateDirectory(configObj.OutputFolder);
691
692                 iaTemplate = ReadExcel(configObj.IATemplatePath, 1);
693             }
694             catch (Exception ex)
695             {
696                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
697                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
698                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
699                                             ex.Message);
700                 Logger.Log(msg, Logger.LogType.Error);
701                 return false;
702             }
703
704             return true;
705         }
706
707         private List<List<string>> ReadExcel(string path, int position)
708         {
709             try
710             {
711                 using (ExcelApp excelApp = new ExcelApp(false, false))
712                 {
713                     return ExcelUtil.CreateOrOpenExcelFile(excelApp, path).ToList(position);
714                 }
715
716             }
717             catch (Exception ex)
718             {
719                 string msg = string.Format("\r\n         ClassName:  {0}\r\n         MethodName: {1}\r\n         Message:    {2}",
720                                             System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(),
721                                             System.Reflection.MethodBase.GetCurrentMethod().Name,
722                                             ex.Message);
723                 Logger.Log(msg, Logger.LogType.Error);
724             }
725
726             return null;
727         }
728
729         private bool CheckPath(string source, string template)
730         {
731             if ((source + "").Trim().Length == 0 || !File.Exists(source))
732                 return false;
733
734             if ((template + "").Trim().Length == 0 || !File.Exists(source))
735                 return false;
736
737             return true;
738         }
739     }
740
741     class SourceTemplate
742     {
743         public string EffectiveDate { get; set; }
744         public string UnderlyingRIC { get; set; }
745         public string Displayname { get; set; }
746         public string OfficialCode { get; set; }
747         public string LotSize { get; set; }
748         public string LegalRegisteredName { get; set; }
749
750         public string EffectiveDateNew { get; set; }
751         public string UnderlyingRICNew { get; set; }
752         public string DisplaynameNew { get; set; }
753         public string OfficialCodeNew { get; set; }
754         public string LotSizeNew { get; set; }
755         public string LegalRegisteredNameNew { get; set; }
756     }
757 }

自己封装一些集合产生文件类库。希望各位大神多提提代码细节方面意见。

实习以来 唯一一次 没有因需求变更 代码被改面目全非的一次(期待各位对代码细节提提建议)

时间: 2024-10-06 16:28:39

实习以来 唯一一次 没有因需求变更 代码被改面目全非的一次(期待各位对代码细节提提建议)的相关文章

作为产品人,如何更好的应对需求变更?

如何制定一份缜密的项目计划对于产品经理来说可能并不是项目中最难的事情,要应对计划之外的情况,才是最令大家头痛的地方.在项目实际推进过程中,不加控制的需求变更往往给项目带来沉重的负担和无法预料的风险.因此,设计一套合适的需求变更管理流程和规范,对项目和项目经理而言都是不可或缺的. 问题分析 首先对笔者所在项目做一个简单介绍:产品层面,我们是一个C端产品,需求主要来源于运营和策划,就产品阶段而言正处于转型期,现阶段主要以新功能探索为主:项目层面,由于功能较为复杂庞大,可切割空间不大,因此每个版本周期

需求变更,产品经理的良心也会痛!

引言:在项目执行过程中,产品经理与后续的合作团队,包括设计.开发.测试等相关人员最尖锐突出的矛盾,就是需求变更,这是产品经理最经常被诟病的地方.频繁的需求变更,对产品.项目进度和团队积极性都有非常大的危害.产品经理一定要不遗余力避免需求变更的情况.本文选自<爆款是怎样炼成的:产品经理晋级宝典>. 作为产品经理,我们一定要理解开发团队及其他团队成员为什么视需求变更为大敌.事实上,需求变更对整个项目都非常有害. 需求有变更,就意味着设计.开发团队的工作有浪费.这首先是资源和时间的浪费. 这会导致团

我们小组项目需求变更管理的方法。。

在每个项目中,客户会在原来的需求基础上进行需求改变或者增加需求内容,所以,一个需求变更管理方法在设计项目中有着十分重要的作用,用户可能在初期阶段对自己的 需求不是清楚,只能根据客户在深入的了解后才知道自己还有哪些需求是需要的.在我们的项目中选择了一个分级需求管理模式,那就是将需求进行分级: 一级需求:是客户提出的需求中最为重要,最需要先实现的需求,在本项目中,我们的客户需要一个简易的通讯软件,所以最重要.最为基本的是实现双方的信息传递和信息输出. 二级需求:它不会影响一级需求的实现,但是没有实现

需求变更大讨论:需求变更的原因

 需求变更的原因 需求包括业务需求.用户需求和功能需求.业务需求(Business Requirement )反映了组织机构或客户对系统.产品高层次的目标要求,用户需求(User Requirement )描述了用户使用产品必须完成的任务,功能需求(Functional Requirement )定义了开发人员必须实现的软件功能. 会导致需求变更的原因会有很多,如老板临时改变想法.项目预算增加或减少.客户对功能的需求改变等.在IT项目中,变更可能来自方案服务商.客户或产品供应商等,也可能来源于项

项目需求变更有效管理

最近和朋友吃饭,讨论到软件测试方面的问题,这位仁兄也是经验不足,像我抱怨好不容易按照之前评审的需求写完Case,现在又变更这么多需求,又得重新梳理需求写Case.其实参与过项目研发的人员都非常清楚,项目一旦启动,需求变更也会随之而来,需求变更是无法避免的. 不瞒大家,像博纳移动这么强大的研发团队,在项目启动之后变更需求也是常事.就拿最近V-3.4万能考勤开发过程的事情来说吧.万能考勤有个导出排班表的功能,排班表是以EXCEL形式展示的,这里涉及到排班表成员排列顺序的问题,当初原型评审时候,评审会

如何控制项目需求变更管理

Trufun UML2建模工具.Trufun Bacon  需求管理工具. Trufun ALM全生命周期产品.Trufun 研发云管理工具等 按照现代项目管理的概念,一个项目的生命周期分为启动.实施.收尾三个过程.需求变更的控制不应该只是项目实施过程考虑的事情,而是要分布在整个项目生命周期的全过程.为了将项目变更的影响降低到最小,就需要采用综合变更控制方法.综合变更控制主要内容有找出影响项目变更的因素.判断项目变更范围是否已经发生等. 进行综合变更控制的主要依据是项目计划.变更请求和提供了项目

《小团队项目管理》第三问 --- 如何看待客户的需求变更?

作为一名码农,在项目开发过程中经常会涉及到项目的需求变更,变更的理由也是多种多样,总结而来分为外部和内部,从外部讲,例如:为了顺应某行业新的工作操作规范,甲方要求现有项目在工作流程环节上进行局部功能的变更:从内部讲,通过对市场环境的不间断调研和数据分析,公司产品在同类产品竞争中处于不利地位,市场份额日渐缩小,那么我们的产品设计人员会积极行动起来对产品的整个定位和新业务展开新的思考以寻求更加稳健的创新突破口,这就会对项目产生一定的需求变更. 此图是从CSDN社区截取下的,我相信很多看到这个问题的筒

如何用通俗易懂的语言解释需求变更带来的项目影响

如何用通俗易懂的语言解释需求变更带来的项目影响 你去饭店,坐下来.“服务员,给我来份宫保鸡丁!”“好嘞!”——————这叫原始需求 大厨做到一半.“服务员,菜里不要放肉.”“不放肉怎么做啊?”“不放肉就行了,其它按正常程序做,不就行了,难吗?”“好的您稍等”——————中途需求变更 厨房:大厨:“你大爷,我肉都回锅了”服务员:“顾客非要要求的嘛,你把肉挑出来不就行了吗”大厨:“行你大爷”然而还是一点点挑出来了——————改动太大,部分重构 餐厅:“服务员,菜里能给我加点腐竹吗?”“行,这个应该简

摆平客户的需求变更之表单扩展属性

客户永远是对的!客户的需求永远是多变的! 需求说明文档写得再详细,说改还得改,程序猿永远这么苦逼. 为了应对客户多变的需求,今天先说说表单的扩展属性.目的是在不修改代码,不重新发布程序的情况下完成表单的扩展. 先下下图: 从这个界面上可以定义如何对表单上进行扩展,在表单上增加一个什么控件,大小.内容.验证都可以的. DEMO地址:http://121.40.148.178:8080/ . 用户名:guest,密码:123456 是的,如果是下拉框的话还能绑定数据源,选择就可以完成,绑定了数据字典