XXXWCommon.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Uninpho.DBOperation.Model;
  7. using Uninpho.DBOperation.Operation;
  8. using System.IO;
  9. using System.Windows.Forms;
  10. using DevExpress.XtraEditors;
  11. using DevExpress.XtraGrid.Views.Grid;
  12. using DevExpress.XtraGrid;
  13. using Uninpho.Tools.components.MTLFF;
  14. using ClosedXML.Excel;
  15. using System.Text.RegularExpressions;
  16. using System.Reflection;
  17. namespace Uninpho.Tools.components.XXXW
  18. {
  19. class XXXWCommon
  20. {
  21. public static string UUID = String.Empty;
  22. /// <summary>
  23. /// 初始化原始空格分隔的CSV
  24. /// </summary>
  25. public static string NewPageSave2PG(int rowcount)
  26. {
  27. List<T_xxxw_csvdata> xxcsvdata = new List<T_xxxw_csvdata>();
  28. //存list表数据
  29. UUID = DataAnalysisToPG.Insertdata_CsvList(new T_xxxw_csvlist()
  30. {
  31. Xianluming = ExcelTools.xianluming,
  32. Zhanming = ExcelTools.chezhan,
  33. Daochahao = ExcelTools.daocha,
  34. Jianchariqi = ExcelTools.jianceshijian,
  35. Zch = ExcelTools.zhecha,
  36. Sjth = ExcelTools.shejituhao,
  37. Jiancharen = DateTime.Now.ToString()//临时的,保不齐哪天又想在录入的时候添加更新人之类的
  38. //Gengxinriqi = DateTime.Now.ToString(),
  39. //Gengxinren = UserInform.userinf.Username
  40. });
  41. readExcel(ExcelTools.filenameall, 44, rowcount, ref xxcsvdata);
  42. //存data表数据
  43. DataAnalysisToPG.Insertdata_CsvData(xxcsvdata);
  44. return UUID;
  45. }
  46. static string uuid_ = string.Empty;//预防报错
  47. public static string saveData2PG(string url)
  48. {
  49. string uuid = uuid_;
  50. List<T_xxxw_csvdata> xxcsvdata = new List<T_xxxw_csvdata>();
  51. string[] filename = Path.GetFileNameWithoutExtension(url).Split('_');
  52. try
  53. {
  54. readSCV(url, ref xxcsvdata);
  55. uuid = DataAnalysisToPG.Insertdata_CsvList(new T_xxxw_csvlist()
  56. {
  57. Xianluming = filename[0],
  58. Zhanming = filename[1],
  59. Daochahao = filename[2],
  60. Jianchariqi = getYMD(filename[3]),
  61. Jiancharen = DateTime.Now.ToString()//临时的,保不齐哪天又想在录入的时候添加更新人之类的
  62. //Gengxinriqi = DateTime.Now.ToString(),
  63. //Gengxinren = UserInform.userinf.Username
  64. });
  65. foreach (var item in xxcsvdata)
  66. {
  67. item.Listid = uuid;
  68. }
  69. DataAnalysisToPG.Insertdata_CsvData(xxcsvdata);
  70. XtraMessageBox.Show("导入成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  71. }
  72. catch (Exception)
  73. {
  74. XtraMessageBox.Show("无法从文件名提取有效信息,请规范文件命名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  75. }
  76. return uuid;
  77. }
  78. /// <summary>
  79. /// 解析时间
  80. /// </summary>
  81. private static string getYMD(string ymd)
  82. {
  83. //如果这里以后修改,轮轨力输入检测日期那块也要改!!!
  84. Char[] ymdcha = ymd.ToCharArray();//年月日
  85. string year = ymdcha[0].ToString() + ymdcha[1].ToString() + ymdcha[2].ToString() + ymdcha[3].ToString();
  86. string mouth = ymdcha[4].ToString() + ymdcha[5].ToString();
  87. string day = ymdcha[6].ToString() + ymdcha[7].ToString();
  88. return year + "/" + mouth + "/" + day;
  89. }
  90. /// <summary>
  91. /// 读scv
  92. /// </summary>
  93. /// <param name="url"></param>
  94. private static void readSCV(string url, ref List<T_xxxw_csvdata> xxcsvdata)
  95. {
  96. StreamReader sr = new StreamReader(url, GetEncoding(url));
  97. sr.ReadLine();
  98. sr.ReadLine();
  99. while (!sr.EndOfStream)
  100. {
  101. string origonss = sr.ReadLine();
  102. origonss = origonss.Replace(" ", " ");
  103. origonss = origonss.Replace("/t", ",");
  104. origonss = origonss.Replace(" ", ",");
  105. var arrayarr = origonss.ToCharArray();
  106. if (arrayarr[0] == ',' && arrayarr[1] == ',')
  107. {
  108. //简单判断这行是否是多余,例如“,,,,,,,,,,,,,,,,”这种行的录入
  109. continue;
  110. }
  111. T_xxxw_csvdata onescvdata = new T_xxxw_csvdata();
  112. List<string> loopstring = new List<string>();
  113. //使用正则去除属性字段中的逗号的影响
  114. Regex re = new Regex("(?<=,\").*?(?=\",)", RegexOptions.None);
  115. MatchCollection mc = re.Matches(origonss);
  116. //保存原始
  117. foreach (var item in mc)
  118. {
  119. //string ddd = item.ToString().Replace("\"\"", "\"");
  120. loopstring.Add(item.ToString());
  121. }
  122. //替换属性字段中的逗号为"$$$$$$$$$$$$$yxc$$$$$$$$$$$$$$$"
  123. origonss = Regex.Replace(origonss, "(?<=,\").*?(?=\",)", "$$$$$$$$$$$$$yxc$$$$$$$$$$$$$$$");
  124. string[] looparr = origonss.Split(',');
  125. //还原之前被替换的字段属性值
  126. int ii = 0;
  127. for (int i = 0; i < looparr.Length; i++)
  128. {
  129. if (looparr[i] == "\"$$$$$$$yxc$$$$$$$$\"")
  130. {
  131. looparr[i] = loopstring[ii++];
  132. }
  133. }
  134. ii = 0;
  135. //存入T_xxxw_csvdata
  136. //string[] propnames = new string[] { "Id", "Listid", "Cld", "Gzidh", "Nc", "Lc", "Gc", "Pmwz", "Spcg", "Gj", "Gddhdb", "Gddb", "Gddhcb", "Gdcb", "Gxdhdb", "Gxdb", "Gxdbcb", "Gxcb", "Dxg", "Zggc", "Yggc", "Zgpm", "Ygpm", "Sygc", "Sygddb", "Sygdcb", "Sypmwz", "Sygxdb", "Sygxcb", "Syspcg", "Sygj", "Fjzj", "Fjidh", "Fjsjcg", "Fjsccg", "Fjsjgj", "Fjscgj", "Fjsj5mgd", "Fjsc5mgd", "Fjsj150mgd", "Fjsc150mgd", "Fjsj5mgx", "Fjsc5mgx", "Fjsj150mgx", "Fjsc150mgx" };
  137. Type t = onescvdata.GetType();//获得该类的Type
  138. foreach (PropertyInfo pi in t.GetProperties())
  139. {
  140. if (pi.Name != "Id" && pi.Name != "Listid")
  141. {
  142. pi.SetValue(onescvdata, looparr[ii++]);
  143. }
  144. }
  145. xxcsvdata.Add(onescvdata);
  146. }
  147. sr.Close();
  148. }
  149. /// <summary>
  150. /// メソッド概要 取文件的编码格式
  151. /// </summary>
  152. /// <remarks>
  153. /// 機能仕様 取文件的编码格式
  154. /// </remarks>
  155. public static Encoding GetEncoding(string filePath)
  156. {
  157. using (var reader = new StreamReader(filePath, Encoding.Default, true))
  158. {
  159. if (reader.Peek() >= 0)
  160. {
  161. reader.Read();
  162. }
  163. Encoding encoding = reader.CurrentEncoding;
  164. reader.Close();
  165. return encoding;
  166. }
  167. }
  168. /// <summary>
  169. /// メソッド概要 文字编码转换处理
  170. /// </summary>
  171. /// <remarks>
  172. /// 機能仕様 文字编码转换处理
  173. /// </remarks>
  174. /// <param name="filePath">需要转换文字编码的文件名(包含绝对路径)</param>
  175. public static bool MojiCodeChange(string filePath)
  176. {
  177. try
  178. {
  179. // 读文件
  180. string str;
  181. var aa = GetEncoding(filePath);
  182. using (StreamReader sr = new StreamReader(filePath, aa))
  183. {
  184. str = sr.ReadToEnd();
  185. sr.Close();
  186. }
  187. // 重写文件(以gb2312带BOM格式)
  188. using (StreamWriter sw = new StreamWriter(filePath, false, new UTF8Encoding(true)))
  189. {
  190. sw.Write(str);
  191. sw.Close();
  192. }
  193. }
  194. catch (System.Exception)
  195. {
  196. return false;
  197. }
  198. return true;
  199. }
  200. public static void readExcel(string path, int cellcount , int rowcount , ref List<T_xxxw_csvdata> datares)
  201. {
  202. var workbook = new XLWorkbook(path);
  203. IXLWorksheet XLWorksheet = workbook.Worksheet(1);
  204. for (int i = 3; i <= rowcount; i++)
  205. {
  206. int ii = 1;
  207. T_xxxw_csvdata txd = new T_xxxw_csvdata();
  208. Type t = txd.GetType();//获得该类的Type
  209. foreach (PropertyInfo pi in t.GetProperties())
  210. {
  211. if (pi.Name == "Listid")
  212. {
  213. pi.SetValue(txd, UUID);
  214. }
  215. else
  216. {
  217. if (pi.Name != "Id")
  218. {
  219. pi.SetValue(txd, XLWorksheet.Row(i).Cell(ii++).Value.ToString());
  220. }
  221. }
  222. }
  223. datares.Add(txd);
  224. }
  225. }
  226. }
  227. }