Query_ExeProgress.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using UAS_MES.DataOperate;
  11. using UAS_MES.PublicMethod;
  12. namespace UAS_MES.Query
  13. {
  14. public partial class Query_ExeProgress : Form
  15. {
  16. DataHelper dh;
  17. LogStringBuilder sql = new LogStringBuilder();
  18. //经过的步骤
  19. string PastStep = "";
  20. //拆分后的经过的步骤
  21. Dictionary<int, string> Step;
  22. //屏幕高度
  23. int ScreenWidth;
  24. //屏幕宽度
  25. int ScreenHeight;
  26. DataTable dt;
  27. public Query_ExeProgress()
  28. {
  29. InitializeComponent();
  30. }
  31. private void 工单执行进度_Load(object sender, EventArgs e)
  32. {
  33. dh = new DataHelper();
  34. ScreenWidth = this.Width;
  35. ScreenHeight = this.Height;
  36. }
  37. private void ma_code_KeyDown(object sender, KeyEventArgs e)
  38. {
  39. if (e.KeyCode == Keys.Enter)
  40. {
  41. sql.Clear();
  42. sql.Append("select ms_makecode,ms_sncode,ms_prodcode,ma_linecode from make left ");
  43. sql.Append("join makeserial on ma_code=ms_makecode where ma_code='" + ma_code.Text + "'");
  44. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  45. BaseUtil.FillDgvWithDataTable(CraftInfDgv, dt);
  46. }
  47. }
  48. private void 工单执行进度_SizeChanged(object sender, EventArgs e)
  49. {
  50. }
  51. private void sn_code_KeyDown(object sender, KeyEventArgs e)
  52. {
  53. if (e.KeyCode == Keys.Enter)
  54. {
  55. if (Step != null && Step.Count > 0)
  56. {
  57. for (int i = 0; i < Step.Count; i++)
  58. {
  59. Controls.Remove(Controls[i + Step[i] + "_label"]);
  60. }
  61. }
  62. //查询执行过的步骤
  63. sql.Clear();
  64. sql.Append("select CD_DETNO, CD_STEPCODE from craft left join craftdetail on cd_crid = cr_id where ");
  65. sql.Append("cr_code=(select ms_craftcode from makeserial where ms_sncode='" + sn_code.Text + "') order by cd_detno");
  66. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  67. Step = new Dictionary<int, string>();
  68. PastStep = dh.getFieldDataByCondition("makeserial", "ms_paststep", "ms_sncode='" + sn_code.Text + "'").ToString();
  69. for (int i = 0; i < dt.Rows.Count + 2; i++)
  70. {
  71. if (i == 0)
  72. {
  73. Step.Add(i, "开始");
  74. }
  75. else if (i == dt.Rows.Count + 1)
  76. {
  77. Step.Add(i, "结束");
  78. }
  79. else
  80. {
  81. Step.Add(i, dt.Rows[i - 1]["CD_STEPCODE"].ToString());
  82. }
  83. }
  84. Refresh();
  85. }
  86. }
  87. private void SerialPanel_Paint(object sender, PaintEventArgs e)
  88. {
  89. if (Step != null)
  90. {
  91. //设置一行五个展示数量
  92. int RectangleCountEachRow = 5;
  93. int x = 40;
  94. int y = SerialPanel.Height / 10;
  95. int CurrentIndex = 0;
  96. //根据记录的数量判断行数
  97. int RowCount = (Step.Count % RectangleCountEachRow) == 0 ? (Step.Count / RectangleCountEachRow) : (Step.Count / RectangleCountEachRow) + 1;
  98. //每行的循环
  99. for (int i = 1; i <= RowCount; i++)
  100. {
  101. for (int j = CurrentIndex; j < RectangleCountEachRow * i; j++)
  102. {
  103. //创建画板
  104. Graphics g = e.Graphics;
  105. //途程节点的矩形
  106. Rectangle r;
  107. if (Step[j].Contains("开始") || Step[j].Contains("结束"))
  108. r = new Rectangle(0, 0, 40, 40);
  109. else
  110. r = new Rectangle();
  111. r.Width = SerialPanel.Width / 10;
  112. r.Height = SerialPanel.Height / 8;
  113. //画箭头的Pen
  114. Pen p = new Pen(Color.CadetBlue, 15);
  115. p.StartCap = LineCap.Round;
  116. p.EndCap = LineCap.ArrowAnchor;
  117. //方块内的信息
  118. Label Param = new Label();
  119. Param.Text = j + " " + Step[j];
  120. Param.Name = j + Step[j] + "_label";
  121. Param.AutoSize = true;
  122. Param.Anchor = AnchorStyles.Left;
  123. Param.Anchor = AnchorStyles.Top;
  124. Param.Location = new Point(x + r.Width / 14 * RectangleCountEachRow, y + r.Height / 10 * 4);
  125. //如果在奇数行
  126. if (i % 2 != 0)
  127. {
  128. r.Location = new Point(x, y);
  129. if (PastStep.Contains(Step[j]))
  130. {
  131. g.FillRectangle(Brushes.Green, r);
  132. }
  133. else
  134. {
  135. if (Step[j].Contains("开始") || Step[j].Contains("结束"))
  136. g.FillEllipse(Brushes.Green, r);
  137. else
  138. g.FillRectangle(Brushes.White, r);
  139. }
  140. //填充方块内的信息
  141. if (Controls[Param.Name] == null)
  142. SerialPanel.Controls.Add(Param);
  143. if (j + 1 == Step.Count)
  144. break;
  145. //画箭头
  146. //如果是一行中的箭头
  147. if (j + 1 < RectangleCountEachRow * i)
  148. {
  149. g.DrawLine(p, x + r.Width + 10, y + r.Height / 2, x + ScreenWidth / (RectangleCountEachRow), y + r.Height / 2);
  150. x += ScreenWidth / RectangleCountEachRow;
  151. }
  152. //如果是行的最后一个的箭头
  153. else if (j + 1 == RectangleCountEachRow * i)
  154. {
  155. g.DrawLine(p, x + r.Width / 2, y + r.Height + 10, x + r.Width / 2, y + r.Height + r.Height);
  156. y = y + r.Height + r.Height;
  157. }
  158. }
  159. //如果在偶数行
  160. else
  161. {
  162. r.Location = new Point(x, y);
  163. if (PastStep.Contains(Step[j]))
  164. {
  165. g.FillRectangle(Brushes.Green, r);
  166. }
  167. else
  168. {
  169. if (Step[j].Contains("开始") || Step[j].Contains("结束"))
  170. {
  171. g.FillEllipse(Brushes.Green, r);
  172. }
  173. else
  174. {
  175. g.FillRectangle(Brushes.White, r);
  176. }
  177. }
  178. //填充文字信息
  179. //存在这个名称的则不进行添加
  180. if (Controls[Param.Name] == null)
  181. {
  182. SerialPanel.Controls.Add(Param);
  183. }
  184. //如果最后一个的画则直接Break,不用画箭头了
  185. if (j + 1 == Step.Count)
  186. {
  187. break;
  188. }
  189. //如果不是本行的最后一个画横向的箭头
  190. if (j + 1 < RectangleCountEachRow * i)
  191. {
  192. g.DrawLine(p, (x - 10), (y + r.Height / 2), (x - ScreenWidth / RectangleCountEachRow + r.Width), (y + r.Height / 2));
  193. x -= ScreenWidth / RectangleCountEachRow;
  194. }
  195. //如果是最后一个画纵向的箭头
  196. else if (j + 1 == RectangleCountEachRow * i)
  197. {
  198. g.DrawLine(p, (x + r.Width / 2), (y + r.Height + 10), (x + r.Width / 2), (y + r.Height + r.Height));
  199. y = y + r.Height + r.Height;
  200. }
  201. }
  202. CurrentIndex = CurrentIndex + 1;
  203. }
  204. }
  205. }
  206. }
  207. }
  208. }