Form_Order.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. using MainForm.DbHelper;
  10. using MainForm.FaForm;
  11. using MainForm.Models;
  12. using Newtonsoft.Json;
  13. using SqlSugar;
  14. using SqlSugar.Extensions;
  15. using StandardLibrary;
  16. namespace MainForm
  17. {
  18. public delegate void OrderMessageHandler(LogType logType, string message);
  19. public partial class Form_Order : Form
  20. {
  21. #region 变量
  22. // 记录日志的委托方法
  23. public event OrderMessageHandler MessageEvent;
  24. /// <summary>
  25. /// 当前查询类型
  26. /// </summary>
  27. string orderStatus = "所有订单";
  28. // 页面dv控件样式
  29. bool isViewFirstColumn = true; // 不展示首列
  30. int ColumnWidth0 = 120, ColumnWidth1 = 120, ColumnWidth2 = 120, // 列宽
  31. ColumnWidth3 = 120, ColumnWidth4 = 120, ColumnWidth5 = 120,
  32. ColumnWidth6 = 120, ColumnWidth7 = 120, ColumnWidth8 = 120,
  33. ColumnWidth9 = 120, ColumnWidth10 = 120, ColumnWidth11 = 120,
  34. ColumnWidth12 = 120, ColumnWidth13 = 120;
  35. /// <summary>
  36. /// 配置文件路径
  37. /// </summary>
  38. public string FilePath = AppDomain.CurrentDomain.BaseDirectory + "Config.ini";
  39. SqlHelper _sqlHelper = new SqlHelper();
  40. #endregion 变量
  41. public Form_Order()
  42. {
  43. InitializeComponent();
  44. }
  45. private void Form_Order_Load(object sender, EventArgs e)
  46. {
  47. try
  48. {
  49. OrderQuery("所有订单");
  50. Task.Run(() =>
  51. {
  52. Thread.Sleep(1000);
  53. // 行颜色
  54. if (dataGridView.Rows.Count > 0)
  55. {
  56. for (int i = 0; i < dataGridView.Rows.Count; i++)
  57. {
  58. var curStatus = dataGridView.Rows[i].Cells[1].Value.ToString();
  59. switch (curStatus)
  60. {
  61. case "未处理订单":
  62. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.FromArgb(255, 184, 0) };
  63. break;
  64. case "正在处理订单":
  65. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.Blue }; // Blue
  66. break;
  67. case "正在清料中":
  68. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.FromArgb(8, 139, 137) };
  69. break;
  70. case "已完成订单":
  71. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.LawnGreen }; // LawnGreen
  72. break;
  73. default:
  74. break;
  75. }
  76. }
  77. }
  78. });
  79. }
  80. catch (Exception ex)
  81. {
  82. string str = ex.StackTrace;
  83. AddMessage(LogType.Error, "订单页初始化出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  84. MessageBox.Show("订单页初始化出错!异常信息:" + ex.Message.ToString());
  85. }
  86. }
  87. #region 查询控件
  88. /// <summary>
  89. /// 所有订单
  90. /// </summary>
  91. private async void Lbl_AllOrder_Click(object sender, EventArgs e)
  92. {
  93. orderStatus = "所有订单";
  94. await OrderQuery(orderStatus);
  95. }
  96. /// <summary>
  97. /// 未处理订单
  98. /// </summary>
  99. private async void Lbl_UnProcessedOrders_Click(object sender, EventArgs e)
  100. {
  101. orderStatus = "未处理订单";
  102. await OrderQuery(orderStatus);
  103. }
  104. /// <summary>
  105. /// 正在处理订单
  106. /// </summary>
  107. private async void Lbl_ProcessingOrder_Click(object sender, EventArgs e)
  108. {
  109. orderStatus = "正在处理订单";
  110. await OrderQuery(orderStatus);
  111. }
  112. /// <summary>
  113. /// 正在清料中
  114. /// </summary>
  115. private async void Lbl_MaterialClearOrder_Click(object sender, EventArgs e)
  116. {
  117. orderStatus = "正在清料中";
  118. await OrderQuery(orderStatus);
  119. }
  120. /// <summary>
  121. /// 已完成订单
  122. /// </summary>
  123. private async void Lbl_CompletedOrder_Click(object sender, EventArgs e)
  124. {
  125. orderStatus = "已完成订单";
  126. await OrderQuery(orderStatus);
  127. }
  128. #endregion 查询控件
  129. #region 订单维护
  130. // 订单-新增
  131. private void Tlml_AddWorkOrder_Click(object sender, EventArgs e)
  132. {
  133. Form_OrderAdd form_OrderAdd = new Form_OrderAdd(this);
  134. form_OrderAdd.ShowDialog();
  135. OrderQuery(orderStatus);
  136. }
  137. // 订单-修改
  138. private void Tlml_UpdateWorkOrder_Click(object sender, EventArgs e)
  139. {
  140. try
  141. {
  142. if (dataGridView.SelectedRows.Count > 0)
  143. {
  144. string workOrderStatus = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
  145. switch (workOrderStatus)
  146. {
  147. case "未处理订单":
  148. case "正在处理订单":
  149. string workOrderNum = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
  150. Form_OrderUpd form_OrderUpd = new Form_OrderUpd(this, workOrderNum);
  151. form_OrderUpd.ShowDialog();
  152. OrderQuery(orderStatus);
  153. break;
  154. case "正在清料中":
  155. case "已完成订单":
  156. MessageBox.Show("不可修改‘正在清料中’或‘已完成订单’的订单!");
  157. break;
  158. default:
  159. break;
  160. }
  161. }
  162. else
  163. {
  164. MessageBox.Show("请选中订单后再修改!");
  165. }
  166. }
  167. catch (Exception ex)
  168. {
  169. string str = ex.StackTrace;
  170. AddMessage(LogType.Error, "订单修改失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  171. MessageBox.Show("订单修改失败!异常信息:" + ex.Message.ToString());
  172. }
  173. }
  174. // 订单-删除
  175. private void Tlml_DeleteWorkOrder_Click(object sender, EventArgs e)
  176. {
  177. try
  178. {
  179. if (dataGridView.SelectedRows.Count > 0)
  180. {
  181. string workOrderNum = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
  182. _sqlHelper.Deleteable<OrderTable>(a => a.WorkOrderNum == workOrderNum);
  183. List<string> productSetVlaue = new List<string>();
  184. productSetVlaue.Add("车间订单号:" + dataGridView.SelectedRows[0].Cells[0].Value.ToString());
  185. productSetVlaue.Add("订单状态:" + dataGridView.SelectedRows[0].Cells[1].Value.ToString());
  186. productSetVlaue.Add("批次号:" + dataGridView.SelectedRows[0].Cells[2].Value.ToString());
  187. productSetVlaue.Add("产品型号:" + dataGridView.SelectedRows[0].Cells[3].Value.ToString());
  188. productSetVlaue.Add("产品代号:" + dataGridView.SelectedRows[0].Cells[4].Value.ToString());
  189. productSetVlaue.Add("产品名称:" + dataGridView.SelectedRows[0].Cells[5].Value.ToString());
  190. productSetVlaue.Add("供应商代码:" + dataGridView.SelectedRows[0].Cells[6].Value.ToString());
  191. productSetVlaue.Add("计划数量:" + dataGridView.SelectedRows[0].Cells[7].Value.ToString());
  192. productSetVlaue.Add("完工下线数量:" + dataGridView.SelectedRows[0].Cells[8].Value.ToString());
  193. productSetVlaue.Add("计划标记:" + dataGridView.SelectedRows[0].Cells[9].Value.ToString());
  194. productSetVlaue.Add("需求日期:" + dataGridView.SelectedRows[0].Cells[10].Value.ToString());
  195. productSetVlaue.Add("所属流程:" + dataGridView.SelectedRows[0].Cells[11].Value.ToString());
  196. productSetVlaue.Add("开始生产时间:" + dataGridView.SelectedRows[0].Cells[12].Value.ToString());
  197. productSetVlaue.Add("订单创建时间:" + dataGridView.SelectedRows[0].Cells[13].Value.ToString());
  198. String.Join(";", productSetVlaue);
  199. AddMessage(LogType.Info, currentRole + "订单删除成功!订单信息为[" + String.Join(";", productSetVlaue) + "]");
  200. MessageBox.Show("订单删除成功!");
  201. OrderQuery(orderStatus);
  202. }
  203. else
  204. {
  205. MessageBox.Show("请选中订单后再操作!");
  206. }
  207. }
  208. catch (Exception ex)
  209. {
  210. string str = ex.StackTrace;
  211. AddMessage(LogType.Error, "订单删除失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  212. MessageBox.Show("订单删除失败!异常信息:" + ex.Message.ToString());
  213. }
  214. }
  215. // 订单-刷新
  216. private async void Tlml_RefreshWorkOrder_Click(object sender, EventArgs e)
  217. {
  218. await OrderQuery(orderStatus);
  219. }
  220. // 订单-开始(不停机下发工单)
  221. private void Tlml_StartWorkOrder_Click(object sender, EventArgs e)
  222. {
  223. try
  224. {
  225. if (dataGridView.SelectedRows.Count > 0)
  226. {
  227. string workOrderStatus = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
  228. switch (workOrderStatus)
  229. {
  230. case "未处理订单":
  231. int result = Form_Main.formHome.GetDeviceStatus(1);
  232. if (result != 4) // 5000是4为待机状态
  233. {
  234. MessageBox.Show($"下发失败!设备当前状态为‘{((0 <= result && result <= 5) ? ((DeviceStatus)result).ToString() : "未知状态")}’,请将设备状态切换到‘待机状态’后,再次下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  235. return;
  236. }
  237. IniFile.INIWriteValue(FilePath, "Product", "WorkOrderCode", (dataGridView.SelectedRows[0].Cells[0].Value.ToString()));
  238. IniFile.INIWriteValue(FilePath, "Product", "BatchNumber", (dataGridView.SelectedRows[0].Cells[2].Value.ToString()));
  239. IniFile.INIWriteValue(FilePath, "Product", "Mtltmrk", (dataGridView.SelectedRows[0].Cells[3].Value.ToString()));
  240. GlobalContext.UpdateData();
  241. // 修改状态
  242. string workOrderNum = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
  243. OrderTable orderTable = new OrderTable()
  244. {
  245. WorkOrderNum = workOrderNum,
  246. WorkOrderStatus = "正在处理订单"
  247. };
  248. _sqlHelper.Update<OrderTable>(orderTable, it => new { it.WorkOrderStatus });
  249. // 记录修改日志
  250. List<string> productSetVlaue = new List<string>();
  251. productSetVlaue.Add("车间订单号:" + dataGridView.SelectedRows[0].Cells[0].Value.ToString());
  252. productSetVlaue.Add("订单状态:" + dataGridView.SelectedRows[0].Cells[1].Value.ToString());
  253. productSetVlaue.Add("批次号:" + dataGridView.SelectedRows[0].Cells[2].Value.ToString());
  254. productSetVlaue.Add("产品型号:" + dataGridView.SelectedRows[0].Cells[3].Value.ToString());
  255. productSetVlaue.Add("产品代号:" + dataGridView.SelectedRows[0].Cells[4].Value.ToString());
  256. productSetVlaue.Add("产品名称:" + dataGridView.SelectedRows[0].Cells[5].Value.ToString());
  257. productSetVlaue.Add("供应商代码:" + dataGridView.SelectedRows[0].Cells[6].Value.ToString());
  258. productSetVlaue.Add("计划数量:" + dataGridView.SelectedRows[0].Cells[7].Value.ToString());
  259. productSetVlaue.Add("完工下线数量:" + dataGridView.SelectedRows[0].Cells[8].Value.ToString());
  260. productSetVlaue.Add("计划标记:" + dataGridView.SelectedRows[0].Cells[9].Value.ToString());
  261. productSetVlaue.Add("需求日期:" + dataGridView.SelectedRows[0].Cells[10].Value.ToString());
  262. productSetVlaue.Add("所属流程:" + dataGridView.SelectedRows[0].Cells[11].Value.ToString());
  263. productSetVlaue.Add("开始生产时间:" + dataGridView.SelectedRows[0].Cells[12].Value.ToString());
  264. productSetVlaue.Add("订单创建时间:" + dataGridView.SelectedRows[0].Cells[13].Value.ToString());
  265. String.Join(";", productSetVlaue);
  266. AddMessage(LogType.Info, currentRole + "订单开始成功!订单信息为[" + String.Join(";", productSetVlaue) + "]");
  267. MessageBox.Show("订单开始成功!");
  268. OrderQuery(orderStatus);
  269. break;
  270. case "正在处理订单":
  271. case "正在清料中":
  272. case "已完成订单":
  273. MessageBox.Show("订单正在[生产]或者[清料]中,不可以重复生产!");
  274. break;
  275. default:
  276. break;
  277. }
  278. }
  279. else
  280. {
  281. MessageBox.Show("请选中订单后再操作!");
  282. }
  283. }
  284. catch (Exception ex)
  285. {
  286. string str = ex.StackTrace;
  287. AddMessage(LogType.Error, "订单开始失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  288. MessageBox.Show("订单开始失败!异常信息:" + ex.Message.ToString());
  289. }
  290. }
  291. /// <summary>
  292. /// 重新下发工单
  293. /// </summary>
  294. private void Tlml_ReissueWorkOrder_Click(object sender, EventArgs e)
  295. {
  296. try
  297. {
  298. if (dataGridView.SelectedRows.Count > 0)
  299. {
  300. string workOrderStatus = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
  301. switch (workOrderStatus)
  302. {
  303. case "正在处理订单":
  304. IniFile.INIWriteValue(FilePath, "Product", "WorkOrderCode", (dataGridView.SelectedRows[0].Cells[0].Value.ToString()));
  305. IniFile.INIWriteValue(FilePath, "Product", "BatchNumber", (dataGridView.SelectedRows[0].Cells[2].Value.ToString()));
  306. IniFile.INIWriteValue(FilePath, "Product", "Mtltmrk", (dataGridView.SelectedRows[0].Cells[3].Value.ToString()));
  307. GlobalContext.UpdateData();
  308. // 记录修改日志
  309. List<string> productSetVlaue = new List<string>();
  310. productSetVlaue.Add("车间订单号:" + dataGridView.SelectedRows[0].Cells[0].Value.ToString());
  311. productSetVlaue.Add("订单状态:" + dataGridView.SelectedRows[0].Cells[1].Value.ToString());
  312. productSetVlaue.Add("批次号:" + dataGridView.SelectedRows[0].Cells[2].Value.ToString());
  313. productSetVlaue.Add("产品型号:" + dataGridView.SelectedRows[0].Cells[3].Value.ToString());
  314. productSetVlaue.Add("产品代号:" + dataGridView.SelectedRows[0].Cells[4].Value.ToString());
  315. productSetVlaue.Add("产品名称:" + dataGridView.SelectedRows[0].Cells[5].Value.ToString());
  316. productSetVlaue.Add("供应商代码:" + dataGridView.SelectedRows[0].Cells[6].Value.ToString());
  317. productSetVlaue.Add("计划数量:" + dataGridView.SelectedRows[0].Cells[7].Value.ToString());
  318. productSetVlaue.Add("完工下线数量:" + dataGridView.SelectedRows[0].Cells[8].Value.ToString());
  319. productSetVlaue.Add("计划标记:" + dataGridView.SelectedRows[0].Cells[9].Value.ToString());
  320. productSetVlaue.Add("需求日期:" + dataGridView.SelectedRows[0].Cells[10].Value.ToString());
  321. productSetVlaue.Add("所属流程:" + dataGridView.SelectedRows[0].Cells[11].Value.ToString());
  322. productSetVlaue.Add("开始生产时间:" + dataGridView.SelectedRows[0].Cells[12].Value.ToString());
  323. productSetVlaue.Add("订单创建时间:" + dataGridView.SelectedRows[0].Cells[13].Value.ToString());
  324. String.Join(";", productSetVlaue);
  325. AddMessage(LogType.Info, currentRole + "订单重复下发成功!订单信息为[" + String.Join(";", productSetVlaue) + "]");
  326. MessageBox.Show("订单重复下发成功!");
  327. break;
  328. case "未处理订单":
  329. case "正在清料中":
  330. case "已完成订单":
  331. MessageBox.Show("订单不在[生产]中,不可重复下发!");
  332. break;
  333. default:
  334. break;
  335. }
  336. }
  337. else
  338. {
  339. MessageBox.Show("请选中订单后再操作!");
  340. }
  341. }
  342. catch (Exception ex)
  343. {
  344. string str = ex.StackTrace;
  345. AddMessage(LogType.Error, "重新下发工单失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  346. MessageBox.Show("重新下发工单失败!异常信息:" + ex.Message.ToString());
  347. }
  348. }
  349. // 订单-清料
  350. private void Tlml_ClearLine_Click(object sender, EventArgs e)
  351. {
  352. try
  353. {
  354. if (dataGridView.SelectedRows.Count > 0)
  355. {
  356. string workOrderStatus = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
  357. switch (workOrderStatus)
  358. {
  359. case "正在处理订单":
  360. // 清料信号
  361. if (!Form_Main.formHome.ClearProducts(1))
  362. {
  363. MessageBox.Show("下发清料信号给PLC失败!请多试几次!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  364. return;
  365. }
  366. // 修改状态
  367. string workOrderNum = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
  368. OrderTable orderTable = new OrderTable()
  369. {
  370. WorkOrderNum = workOrderNum,
  371. WorkOrderStatus = "正在清料中"
  372. };
  373. _sqlHelper.Update<OrderTable>(orderTable, it => new { it.WorkOrderStatus });
  374. List<string> productSetVlaue = new List<string>();
  375. productSetVlaue.Add("车间订单号:" + dataGridView.SelectedRows[0].Cells[0].Value.ToString());
  376. productSetVlaue.Add("订单状态:" + dataGridView.SelectedRows[0].Cells[1].Value.ToString());
  377. productSetVlaue.Add("批次号:" + dataGridView.SelectedRows[0].Cells[2].Value.ToString());
  378. productSetVlaue.Add("产品型号:" + dataGridView.SelectedRows[0].Cells[3].Value.ToString());
  379. productSetVlaue.Add("产品代号:" + dataGridView.SelectedRows[0].Cells[4].Value.ToString());
  380. productSetVlaue.Add("产品名称:" + dataGridView.SelectedRows[0].Cells[5].Value.ToString());
  381. productSetVlaue.Add("供应商代码:" + dataGridView.SelectedRows[0].Cells[6].Value.ToString());
  382. productSetVlaue.Add("计划数量:" + dataGridView.SelectedRows[0].Cells[7].Value.ToString());
  383. productSetVlaue.Add("完工下线数量:" + dataGridView.SelectedRows[0].Cells[8].Value.ToString());
  384. productSetVlaue.Add("计划标记:" + dataGridView.SelectedRows[0].Cells[9].Value.ToString());
  385. productSetVlaue.Add("需求日期:" + dataGridView.SelectedRows[0].Cells[10].Value.ToString());
  386. productSetVlaue.Add("所属流程:" + dataGridView.SelectedRows[0].Cells[11].Value.ToString());
  387. productSetVlaue.Add("开始生产时间:" + dataGridView.SelectedRows[0].Cells[12].Value.ToString());
  388. productSetVlaue.Add("订单创建时间:" + dataGridView.SelectedRows[0].Cells[13].Value.ToString());
  389. String.Join(";", productSetVlaue);
  390. AddMessage(LogType.Info, currentRole + "订单开始清料!订单信息为[" + String.Join(";", productSetVlaue) + "]");
  391. MessageBox.Show("订单开始清料!");
  392. OrderQuery(orderStatus);
  393. break;
  394. case "未处理订单":
  395. case "正在清料中":
  396. case "已完成订单":
  397. MessageBox.Show("当前订单不在生产状态,不可清料!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  398. break;
  399. default:
  400. break;
  401. }
  402. }
  403. else
  404. {
  405. MessageBox.Show("请选中订单后再操作!");
  406. }
  407. }
  408. catch (Exception ex)
  409. {
  410. string str = ex.StackTrace;
  411. AddMessage(LogType.Error, "订单清料失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  412. MessageBox.Show("订单清料失败!异常信息:" + ex.Message.ToString());
  413. }
  414. }
  415. // 订单-完成
  416. private void Tlml_CompletedWorkOrder_Click(object sender, EventArgs e)
  417. {
  418. try
  419. {
  420. if (dataGridView.SelectedRows.Count > 0)
  421. {
  422. string workOrderStatus = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
  423. switch (workOrderStatus)
  424. {
  425. case "正在处理订单":
  426. case "正在清料中":
  427. #region 检测2h前是否有漏传的数据,有就报警
  428. // 检测2h前是否有漏传的数据,有就报警
  429. ProcessData processData0 = new ProcessData();
  430. string QuerySQL0 = processData0.ToStringQueryCount(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "未上传");
  431. DataSet ds1 = SQLHelper_New.Query(QuerySQL0, null);
  432. if (ds1 != null && ds1.Tables.Count > 0 && ds1.Tables[0].Rows.Count > 0)
  433. {
  434. int count = ds1.Tables[0].Rows[0][0].ObjToInt();
  435. if (count < 1)
  436. {
  437. Form_Main.IsNormal_MESServer = 1;
  438. }
  439. else
  440. {
  441. Form_Main.IsNormal_MESServer = 2;
  442. MessageBox.Show("存在未上传的加工数据,请检查并上传成功后再进行完工操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  443. return;
  444. }
  445. }
  446. #endregion 检测2h前是否有漏传的数据,有就报警
  447. // 修改状态
  448. string workOrderNum = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
  449. OrderTable orderTable = new OrderTable()
  450. {
  451. WorkOrderNum = workOrderNum,
  452. WorkOrderStatus = "已完成订单"
  453. };
  454. _sqlHelper.Update<OrderTable>(orderTable, it => new { it.WorkOrderStatus });
  455. List<string> productSetVlaue = new List<string>();
  456. productSetVlaue.Add("车间订单号:" + dataGridView.SelectedRows[0].Cells[0].Value.ToString());
  457. productSetVlaue.Add("订单状态:" + dataGridView.SelectedRows[0].Cells[1].Value.ToString());
  458. productSetVlaue.Add("批次号:" + dataGridView.SelectedRows[0].Cells[2].Value.ToString());
  459. productSetVlaue.Add("产品型号:" + dataGridView.SelectedRows[0].Cells[3].Value.ToString());
  460. productSetVlaue.Add("产品代号:" + dataGridView.SelectedRows[0].Cells[4].Value.ToString());
  461. productSetVlaue.Add("产品名称:" + dataGridView.SelectedRows[0].Cells[5].Value.ToString());
  462. productSetVlaue.Add("供应商代码:" + dataGridView.SelectedRows[0].Cells[6].Value.ToString());
  463. productSetVlaue.Add("计划数量:" + dataGridView.SelectedRows[0].Cells[7].Value.ToString());
  464. productSetVlaue.Add("完工下线数量:" + dataGridView.SelectedRows[0].Cells[8].Value.ToString());
  465. productSetVlaue.Add("计划标记:" + dataGridView.SelectedRows[0].Cells[9].Value.ToString());
  466. productSetVlaue.Add("需求日期:" + dataGridView.SelectedRows[0].Cells[10].Value.ToString());
  467. productSetVlaue.Add("所属流程:" + dataGridView.SelectedRows[0].Cells[11].Value.ToString());
  468. productSetVlaue.Add("开始生产时间:" + dataGridView.SelectedRows[0].Cells[12].Value.ToString());
  469. productSetVlaue.Add("订单创建时间:" + dataGridView.SelectedRows[0].Cells[13].Value.ToString());
  470. String.Join(";", productSetVlaue);
  471. AddMessage(LogType.Info, currentRole + "订单状态修改为‘已完成’成功!订单信息为[" + String.Join(";", productSetVlaue) + "]");
  472. MessageBox.Show("订单状态修改为‘已完成’成功!");
  473. OrderQuery(orderStatus);
  474. break;
  475. case "未处理订单":
  476. MessageBox.Show("当前订单[未启用],不可执行完工操作!");
  477. break;
  478. case "已完成订单":
  479. MessageBox.Show("当前订单[已完成],不可执行完工操作!");
  480. break;
  481. default:
  482. break;
  483. }
  484. }
  485. else
  486. {
  487. MessageBox.Show("请选中订单后再操作!");
  488. }
  489. }
  490. catch (Exception ex)
  491. {
  492. string str = ex.StackTrace;
  493. AddMessage(LogType.Error, "修改订单状态为'完成'失败!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  494. MessageBox.Show("修改订单状态为'完成'失败!异常信息:" + ex.Message.ToString());
  495. }
  496. }
  497. #endregion 订单维护
  498. #region 方法
  499. /// <summary>
  500. /// 查询订单的方法
  501. /// </summary>
  502. /// <param name="orderStates">订单状态</param>
  503. private Task OrderQuery(string orderStates)
  504. {
  505. // 查询订单个数
  506. int count_AllOrder = _sqlHelper.Db.Queryable<OrderTable>().Count(); // 查询订单数量-总订单数量
  507. int count_UnProcessedOrders = _sqlHelper.Db.Queryable<OrderTable>().Where(a => a.WorkOrderStatus == "未处理订单").Count(); // 查询订单数量-未处理订单
  508. int count_ProcessingOrder = _sqlHelper.Db.Queryable<OrderTable>().Where(a => a.WorkOrderStatus == "正在处理订单").Count(); // 查询订单数量-正在处理订单
  509. int count_MaterialClearOrder = _sqlHelper.Db.Queryable<OrderTable>().Where(a => a.WorkOrderStatus == "正在清料中").Count(); // 查询订单数量-正在清料中
  510. int count_CompletedOrder = _sqlHelper.Db.Queryable<OrderTable>().Where(a => a.WorkOrderStatus == "已完成订单").Count(); // 查询订单数量-已完成订单
  511. string sql = @"SELECT
  512. [WorkOrderNum] AS 车间订单号,[WorkOrderStatus] AS 订单状态,[BatchNumber] AS 批次号
  513. ,[ProductMtltmrk] AS 产品型号,[ProductNo] AS 产品代号,[ProductName] AS 产品名称
  514. ,[SupplierCode] AS 供应商代码,[PlannedQuantity] AS 计划数量,[CompletedQuantity] AS 完工下线数量
  515. ,[Plnsign] AS 计划标记,[Soreqdat] AS 需求日期,[Process] AS 所属流程
  516. ,[CreatedTime] AS 订单创建时间
  517. FROM [OrderTable]";
  518. if (!string.IsNullOrEmpty(orderStates) && orderStates != "所有订单")
  519. {
  520. sql += " Where WorkOrderStatus = '{0}'";
  521. }
  522. sql += " ORDER BY [CreatedTime] desc";
  523. sql = string.Format(sql, orderStates);
  524. DataTable dt_data = _sqlHelper.Db.SqlQueryable<OrderTable>(sql).ToDataTable(); // 查询订单数据
  525. // 展示
  526. Lbl_AllOrderNum.Text = count_AllOrder.ToString();
  527. Lbl_UnProcessedOrdersNum.Text = count_UnProcessedOrders.ToString();
  528. Lbl_ProcessingOrderNum.Text = count_ProcessingOrder.ToString();
  529. Lbl_MaterialClearOrderNum.Text = count_MaterialClearOrder.ToString();
  530. Lbl_CompletedOrderNum.Text = count_CompletedOrder.ToString();
  531. // 表格展示
  532. if (dt_data != null)
  533. {
  534. dataGridView.DataSource = dt_data.DefaultView;
  535. //dataGridView.Invalidate();
  536. // 列宽
  537. if (dataGridView.Columns.Count >= 14)
  538. {
  539. dataGridView.Columns[0].Visible = isViewFirstColumn;
  540. dataGridView.Columns[0].Width = ColumnWidth0;
  541. dataGridView.Columns[1].Width = ColumnWidth1;
  542. dataGridView.Columns[2].Width = ColumnWidth2;
  543. dataGridView.Columns[3].Width = ColumnWidth3;
  544. dataGridView.Columns[4].Width = ColumnWidth4;
  545. dataGridView.Columns[5].Width = ColumnWidth5;
  546. dataGridView.Columns[6].Width = ColumnWidth6;
  547. dataGridView.Columns[7].Width = ColumnWidth7;
  548. dataGridView.Columns[8].Width = ColumnWidth8;
  549. dataGridView.Columns[9].Width = ColumnWidth9;
  550. dataGridView.Columns[10].Width = ColumnWidth10;
  551. dataGridView.Columns[11].MinimumWidth = ColumnWidth11;
  552. dataGridView.Columns[11].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; // 所属流程 列宽为all
  553. dataGridView.Columns[12].Width = ColumnWidth12;
  554. dataGridView.Columns[13].Width = ColumnWidth13;
  555. }
  556. // 行颜色
  557. if (dt_data.Rows.Count > 0)
  558. {
  559. for (int i = 0; i < dataGridView.Rows.Count; i++)
  560. {
  561. var curStatus = dataGridView.Rows[i].Cells[1].Value.ToString();
  562. switch (curStatus)
  563. {
  564. case "未处理订单":
  565. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.FromArgb(255, 184, 0) };
  566. break;
  567. case "正在处理订单":
  568. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.Blue }; // Blue
  569. break;
  570. case "正在清料中":
  571. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.FromArgb(8, 139, 137) };
  572. break;
  573. case "已完成订单":
  574. dataGridView.Rows[i].DefaultCellStyle = new DataGridViewCellStyle() { BackColor = System.Drawing.Color.LawnGreen }; // LawnGreen
  575. break;
  576. default:
  577. break;
  578. }
  579. }
  580. }
  581. }
  582. return Task.CompletedTask;
  583. }
  584. #endregion 方法
  585. #region 其他
  586. /// <summary>
  587. /// 查看列内的详细信息
  588. /// </summary>
  589. private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
  590. {
  591. if (e.RowIndex >= 0)
  592. {
  593. textBox1.Text = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
  594. }
  595. }
  596. /// <summary>
  597. /// 记录日志
  598. /// </summary>
  599. /// <param name="logType">日志类型</param>
  600. /// <param name="msg">日志内容</param>
  601. public void AddMessage(LogType logType, string msg)
  602. {
  603. MessageEvent?.Invoke(logType, msg);
  604. }
  605. /// <summary>
  606. /// 当前用户的角色
  607. /// </summary>
  608. public string currentRole = "";
  609. /// <summary>
  610. /// 改变用户时更新页面
  611. /// </summary>
  612. /// <param name="user">用户信息</param>
  613. public void ForUserChangeToUpdate(User user)
  614. {
  615. currentRole = user.ToString();
  616. }
  617. #endregion 其他
  618. }
  619. /// <summary>
  620. /// 设备状态
  621. /// </summary>
  622. public enum DeviceStatus
  623. {
  624. 未连接到PLC, // 0
  625. 运行状态, // 1
  626. 故障状态, // 2
  627. 缺料状态, // 3
  628. 待机状态, // 4
  629. 维修状态 // 5
  630. }
  631. }