华恒Mes鼎捷代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

498 lines
20 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using DevExpress.XtraEditors;
  9. using DevExpress.XtraTreeList.Nodes;
  10. using System.Runtime.Serialization.Formatters.Binary;
  11. using System.IO;
  12. using System.Xml;
  13. using System.Threading;
  14. using ICSSoft.Base.Config.AppConfig;
  15. namespace ICSSoft.AutoUpdate.Upload
  16. {
  17. public partial class FormUpload : DevExpress.XtraEditors.XtraForm
  18. {
  19. private string rootPath = "";
  20. private string saveFileName = Application.StartupPath + "\\selectfiles.ini";
  21. private List<string> selectFilesList = new List<string>();
  22. Dictionary<string, string> idKeyDic = new Dictionary<string, string>();//ID键值对
  23. DataTable treeDataSource = null;
  24. public FormUpload()
  25. {
  26. InitializeComponent();
  27. if (!File.Exists(saveFileName))
  28. {
  29. using (File.Create(saveFileName))
  30. {
  31. }
  32. }
  33. using (StreamReader sr = new StreamReader(saveFileName))
  34. {
  35. while (sr.Peek() > -1)
  36. {
  37. string value = sr.ReadLine();
  38. if (!string.IsNullOrEmpty(value))
  39. {
  40. selectFilesList.Add(value);
  41. }
  42. }
  43. }
  44. rootPath = Application.StartupPath;
  45. treeDataSource = new DataTable();
  46. treeDataSource.Columns.Add("文件路径", typeof(string));
  47. treeDataSource.Columns.Add("文件名称", typeof(string));
  48. treeDataSource.Columns.Add("文件类型", typeof(string));
  49. treeDataSource.Columns.Add("文件大小", typeof(string));
  50. treeDataSource.Columns.Add("修改时间", typeof(string));
  51. treeDataSource.Columns.Add("ID", typeof(string));
  52. treeDataSource.Columns.Add("ParentID", typeof(string));
  53. treeDataSource.Columns.Add("选择", typeof(bool));
  54. BindFile(rootPath);//加载文件
  55. treeFile.DataSource = treeDataSource.DefaultView;
  56. }
  57. private void BindDefalutNodeState()
  58. {
  59. foreach(TreeListNode node in treeFile.Nodes)
  60. {
  61. if (selectFilesList.Contains(node.GetValue(colFilePath.ColumnHandle).ToString()) == true)
  62. {
  63. node.CheckState = CheckState.Checked;
  64. }
  65. BindDefalutNodeState(node);
  66. }
  67. }
  68. private void BindDefalutNodeState(TreeListNode tn)
  69. {
  70. foreach (TreeListNode node in tn.Nodes)
  71. {
  72. if (selectFilesList.Contains(node.GetValue(colFilePath.ColumnHandle).ToString()) == true)
  73. {
  74. node.CheckState = CheckState.Checked;
  75. }
  76. BindDefalutNodeState(node);
  77. }
  78. }
  79. private void BindFile(string path)
  80. {
  81. DirectoryInfo fatherFolder = new DirectoryInfo(path);
  82. //递归删除子文件夹内文件
  83. foreach (DirectoryInfo childFolder in fatherFolder.GetDirectories())
  84. {
  85. DataRow dr = treeDataSource.NewRow();
  86. dr["文件路径"] = childFolder.FullName;
  87. dr["文件名称"] = childFolder.Name;
  88. dr["文件类型"] = "文件夹";
  89. dr["文件大小"] = "";
  90. dr["修改时间"] = childFolder.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
  91. dr["ID"] = childFolder.FullName;
  92. dr["ParentID"] = path;
  93. dr["选择"] = selectFilesList.Contains(childFolder.FullName);
  94. treeDataSource.Rows.Add(dr);
  95. treeDataSource.AcceptChanges();
  96. BindFile(childFolder.FullName);
  97. }
  98. //删除当前文件夹内文件
  99. FileInfo[] files = fatherFolder.GetFiles();
  100. foreach (FileInfo file in files)
  101. {
  102. DataRow dr = treeDataSource.NewRow();
  103. dr["文件路径"] = file.FullName;
  104. dr["文件名称"] = Path.GetFileNameWithoutExtension(file.FullName);
  105. dr["文件类型"] = Path.GetExtension(file.FullName);
  106. dr["文件大小"] = file.Length;
  107. dr["修改时间"] = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
  108. dr["ID"] = file.FullName;
  109. dr["ParentID"] = path;
  110. dr["选择"] = selectFilesList.Contains(file.FullName);
  111. treeDataSource.Rows.Add(dr);
  112. treeDataSource.AcceptChanges();
  113. }
  114. }
  115. private void btnExit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  116. {
  117. this.Close();
  118. }
  119. private void btnSAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  120. {
  121. foreach (TreeListNode node in treeFile.Nodes)
  122. {
  123. node.CheckState = CheckState.Checked;
  124. SetCheckedChildNodes(node, node.CheckState);
  125. SetCheckedParentNodes(node, node.CheckState);
  126. }
  127. }
  128. private void btnCAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  129. {
  130. foreach (TreeListNode node in treeFile.Nodes)
  131. {
  132. node.CheckState = CheckState.Unchecked;
  133. SetCheckedChildNodes(node, node.CheckState);
  134. SetCheckedParentNodes(node, node.CheckState);
  135. }
  136. }
  137. private void SaveNodeState()
  138. {
  139. foreach (TreeListNode node in treeFile.Nodes)
  140. {
  141. if (node.CheckState == CheckState.Checked)
  142. {
  143. node.SetValue(colSelect.ColumnHandle, true);
  144. }
  145. else
  146. {
  147. node.SetValue(colSelect.ColumnHandle, false);
  148. }
  149. SaveNodeState(node);
  150. }
  151. }
  152. private void SaveNodeState(TreeListNode tn)
  153. {
  154. foreach (TreeListNode node in tn.Nodes)
  155. {
  156. if (node.CheckState == CheckState.Checked)
  157. {
  158. node.SetValue(colSelect.ColumnHandle, true);
  159. }
  160. else
  161. {
  162. node.SetValue(colSelect.ColumnHandle, false);
  163. }
  164. SaveNodeState(node);
  165. }
  166. }
  167. private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  168. {
  169. try
  170. {
  171. SaveNodeState();
  172. string mess = "";
  173. for (int i = 0; i < treeDataSource.Rows.Count; i++)
  174. {
  175. if (treeDataSource.Rows[i].RowState == DataRowState.Deleted)
  176. continue;
  177. if (treeDataSource.Rows[i]["文件类型"].ToString() == "文件夹")
  178. continue;
  179. if (Convert.ToBoolean(treeDataSource.Rows[i]["选择"]))
  180. {
  181. mess += treeDataSource.Rows[i]["文件路径"].ToString() + "\r\n";
  182. }
  183. }
  184. using (StreamWriter sw = new StreamWriter(saveFileName))
  185. {
  186. sw.Write(mess);
  187. }
  188. MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  189. }
  190. catch (Exception ex)
  191. {
  192. MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
  193. }
  194. }
  195. /// <summary>
  196. /// 获取文件
  197. /// </summary>
  198. /// <param name="s"></param>
  199. /// <returns></returns>
  200. public byte[] ConvertStreamToByteBuffer(Stream s)
  201. {
  202. MemoryStream ms = new MemoryStream();
  203. int b;
  204. while ((b = s.ReadByte()) != -1)
  205. {
  206. ms.WriteByte((byte)b);
  207. }
  208. return ms.ToArray();
  209. }
  210. private string GetXmlold()
  211. {
  212. string baseUpadtePath = "";
  213. object obj = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "GetBaseUploadUrl", new object[] { });
  214. baseUpadtePath = obj.ToString();
  215. string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
  216. <UpInfos>
  217. <FileInfo>";
  218. object flag = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "IsHadAutoXml", new object[] { });
  219. bool hadFlag = Convert.ToBoolean(flag);
  220. if (hadFlag)
  221. {
  222. string downFile = baseUpadtePath + "\\autoupdate.xml";
  223. object downObject = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "DownFile", new object[] { downFile});
  224. byte[] bs = (byte[])downObject;
  225. File.WriteAllBytes(Application.StartupPath + "\\sautoupdate.xml", bs);
  226. Thread.Sleep(3000);
  227. XmlDocument doc = new XmlDocument();
  228. doc.Load(Application.StartupPath + "\\sautoupdate.xml"); //加载Xml文件
  229. XmlNode rootElem = doc.SelectSingleNode("UpInfos"); //获取根节点
  230. XmlNodeList personNodes = rootElem.ChildNodes; //获取person子节点集合
  231. foreach (XmlNode node in personNodes)
  232. {
  233. if (node.Name != "FileInfo")
  234. continue;
  235. XmlNodeList fileList = node.ChildNodes;
  236. foreach (XmlNode file in fileList)
  237. {
  238. DataRow[] drs = treeDataSource.Select("文件路径='" + file.ChildNodes[1].InnerText.Replace(baseUpadtePath,Application.StartupPath)+ "'");
  239. if (drs.Length > 0)
  240. continue;
  241. xml += "<File>\n";
  242. xml += "<Name>" +file.ChildNodes[0].InnerText+ "</Name>\n";
  243. xml += "<Url>" + file.ChildNodes[1].InnerText + "</Url>\n";
  244. xml += "<DateTime>" + file.ChildNodes[2].InnerText + "</DateTime>\n";
  245. xml += "</File>\n";
  246. }
  247. }
  248. }
  249. for (int i = 0; i < treeDataSource.Rows.Count; i++)
  250. {
  251. if (treeDataSource.Rows[i].RowState == DataRowState.Deleted)
  252. continue;
  253. if (treeDataSource.Rows[i]["文件类型"].ToString() == "文件夹")
  254. continue;
  255. if (Convert.ToBoolean(treeDataSource.Rows[i]["选择"]) == false)
  256. continue;
  257. xml += "<File>\n";
  258. xml += "<Name>" +Path.GetFileName( treeDataSource.Rows[i]["文件路径"].ToString()) + "</Name>\n";
  259. xml += "<Url>" + baseUpadtePath+ treeDataSource.Rows[i]["文件路径"].ToString().Replace(Application.StartupPath,"") + "</Url>\n";
  260. xml += "<DateTime>" +Convert.ToDateTime(treeDataSource.Rows[i]["修改时间"].ToString()).ToString("yyyyMMddHHmmss") + "</DateTime>\n";
  261. xml += "</File>\n";
  262. }
  263. string endStr = @"
  264. </FileInfo>
  265. </UpInfos>";
  266. return xml + endStr;
  267. }
  268. private string GetXml()
  269. {
  270. string baseUpadtePath = "";
  271. object obj = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "GetBaseUploadUrl", new object[] { });
  272. baseUpadtePath = obj.ToString();
  273. Dictionary<string, string[]> nodelist = new Dictionary<string, string[]>();
  274. for (int i = 0; i < treeDataSource.Rows.Count; i++)
  275. {
  276. if (treeDataSource.Rows[i].RowState == DataRowState.Deleted)
  277. continue;
  278. if (treeDataSource.Rows[i]["文件类型"].ToString() == "文件夹")
  279. continue;
  280. if (Convert.ToBoolean(treeDataSource.Rows[i]["选择"]) == false)
  281. continue;
  282. string[] xmlinfo = new string[3];
  283. xmlinfo[0] = Path.GetFileName(treeDataSource.Rows[i]["文件路径"].ToString());
  284. xmlinfo[1] = baseUpadtePath + treeDataSource.Rows[i]["文件路径"].ToString().Replace(Application.StartupPath, "");
  285. xmlinfo[2] = Convert.ToDateTime(treeDataSource.Rows[i]["修改时间"].ToString()).ToString("yyyyMMddHHmmss");
  286. if (!nodelist.ContainsKey(xmlinfo[1]))
  287. {
  288. nodelist.Add(xmlinfo[1], xmlinfo);
  289. }
  290. else
  291. {
  292. nodelist[xmlinfo[1]] = xmlinfo;
  293. }
  294. }
  295. string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
  296. <UpInfos>
  297. <FileInfo>";
  298. object flag = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "IsHadAutoXml", new object[] { });
  299. bool hadFlag = Convert.ToBoolean(flag);
  300. if (hadFlag)
  301. {
  302. string downFile = baseUpadtePath + "\\autoupdate.xml";
  303. object downObject = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "DownFile", new object[] { downFile });
  304. byte[] bs = (byte[])downObject;
  305. File.WriteAllBytes(Application.StartupPath + "\\sautoupdate.xml", bs);
  306. Thread.Sleep(3000);
  307. XmlDocument doc = new XmlDocument();
  308. doc.Load(Application.StartupPath + "\\sautoupdate.xml"); //加载Xml文件
  309. XmlNode rootElem = doc.SelectSingleNode("UpInfos"); //获取根节点
  310. XmlNodeList personNodes = rootElem.ChildNodes; //获取person子节点集合
  311. foreach (XmlNode node in personNodes)
  312. {
  313. XmlNodeList fileList = node.ChildNodes;
  314. foreach (XmlNode file in fileList)
  315. {
  316. DataRow[] drs = treeDataSource.Select("文件路径='" + file.ChildNodes[1].InnerText.Replace(baseUpadtePath, Application.StartupPath) + "'");
  317. if (drs.Length != 1)
  318. continue;
  319. string[] xmlinfo = new string[3];
  320. xmlinfo[0] = file.ChildNodes[0].InnerText;
  321. xmlinfo[1] = file.ChildNodes[1].InnerText;
  322. xmlinfo[2] = file.ChildNodes[2].InnerText;
  323. if (!nodelist.ContainsKey(xmlinfo[1]))
  324. {
  325. nodelist.Add(xmlinfo[1], xmlinfo);
  326. }
  327. }
  328. }
  329. }
  330. foreach (string key in nodelist.Keys)
  331. {
  332. xml += "<File>\n";
  333. xml += "<Name>" + nodelist[key][0] + "</Name>\n";
  334. xml += "<Url>" + nodelist[key][1] + "</Url>\n";
  335. xml += "<DateTime>" + nodelist[key][2] + "</DateTime>\n";
  336. xml += "</File>\n";
  337. }
  338. string endStr = @"
  339. </FileInfo>
  340. </UpInfos>";
  341. return xml + endStr;
  342. }
  343. private void btnUpLoad_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  344. {
  345. string xmlName = Application.StartupPath + "\\autoupdate.xml";
  346. try
  347. {
  348. btnSAll.Enabled = false;
  349. btnCAll.Enabled = false;
  350. btnSave.Enabled = false;
  351. btnUpLoad.Enabled = false;
  352. btnExit.Enabled = false;
  353. SaveNodeState();
  354. for (int i = 0; i < treeDataSource.Rows.Count; i++)
  355. {
  356. if (treeDataSource.Rows[i].RowState == DataRowState.Deleted)
  357. continue;
  358. if (treeDataSource.Rows[i]["文件类型"].ToString() == "文件夹")
  359. continue;
  360. if (treeDataSource.Rows[i]["文件路径"].ToString() == xmlName)
  361. continue;
  362. if (Convert.ToBoolean(treeDataSource.Rows[i]["选择"]))
  363. {
  364. string fileName = treeDataSource.Rows[i]["文件路径"].ToString();
  365. using (Stream stream = (Stream)File.OpenRead(fileName))
  366. {
  367. FileInfo f = new FileInfo(fileName);
  368. byte[] btyes = ConvertStreamToByteBuffer(stream);
  369. string _FileName = fileName.Replace(Application.StartupPath, "");
  370. long FileSize = f.Length;
  371. lblState.Caption = "正在上传:" + _FileName;
  372. Application.DoEvents();
  373. object obj = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "UploadFile", new object[] { btyes, fileName.Replace(Application.StartupPath, "") });
  374. }
  375. }
  376. }
  377. string xml = GetXml();
  378. XmlDocument xdoc = new XmlDocument();
  379. xdoc.LoadXml(xml);
  380. xdoc.Save(xmlName);
  381. lblState.Caption = "就绪";
  382. Application.DoEvents();
  383. using (Stream stream = (Stream)File.OpenRead(xmlName))
  384. {
  385. byte[] bs = ConvertStreamToByteBuffer(stream);
  386. AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "UploadFile", new object[] { bs, xmlName.Replace(Application.StartupPath, "") });
  387. }
  388. btnSAll.Enabled = true;
  389. btnCAll.Enabled = true;
  390. btnSave.Enabled = true;
  391. btnUpLoad.Enabled = true;
  392. btnExit.Enabled = true;
  393. MessageBox.Show("上传成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  394. }
  395. catch (Exception ex)
  396. {
  397. btnSAll.Enabled = true;
  398. btnCAll.Enabled = true;
  399. btnSave.Enabled = true;
  400. btnUpLoad.Enabled = true;
  401. btnExit.Enabled = true;
  402. MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
  403. }
  404. }
  405. private void treeFile_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
  406. {
  407. SetCheckedChildNodes(e.Node, e.Node.CheckState);
  408. SetCheckedParentNodes(e.Node, e.Node.CheckState);
  409. }
  410. private void treeFile_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
  411. {
  412. e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
  413. }
  414. /// <summary>
  415. /// 设置子节点的状态
  416. /// </summary>
  417. /// <param name="node"></param>
  418. /// <param name="check"></param>
  419. private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
  420. {
  421. for (int i = 0; i < node.Nodes.Count; i++)
  422. {
  423. node.Nodes[i].CheckState = check;
  424. SetCheckedChildNodes(node.Nodes[i], check);
  425. }
  426. }
  427. /// <summary>
  428. /// 设置父节点的状态
  429. /// </summary>
  430. /// <param name="node"></param>
  431. /// <param name="check"></param>
  432. private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
  433. {
  434. if (node.ParentNode != null)
  435. {
  436. bool b = false;
  437. CheckState state;
  438. for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
  439. {
  440. state = (CheckState)node.ParentNode.Nodes[i].CheckState;
  441. if (!check.Equals(state))
  442. {
  443. b = !b;
  444. break;
  445. }
  446. }
  447. node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;
  448. SetCheckedParentNodes(node.ParentNode, check);
  449. }
  450. }
  451. private void FormUpload_Load(object sender, EventArgs e)
  452. {
  453. BindDefalutNodeState();
  454. }
  455. ////
  456. }
  457. }